Project

General

Profile

Bug #63618 ยป a.patch

UT to reproduce issues - Igor Fedotov, 11/23/2023 08:02 PM

View differences:

src/googletest
Subproject commit 389cb68b87193358358ae87cc56d257fd0d80189
Subproject commit 389cb68b87193358358ae87cc56d257fd0d80189-dirty
src/os/bluestore/fastbmap_allocator_impl.h
std::lock_guard l(lock);
auto allocated = l1._mark_alloc_l1(o, len);
std::cout << std::hex
<< allocated << " " << available << " " << o << "~" << len
<< std::dec << std::endl;
ceph_assert(available >= allocated);
available -= allocated;
_mark_l2_on_l1(l2_pos, l2_pos_end);
src/test/objectstore/Allocator_test.cc
}
}
TEST_P(AllocTest, test_alloc_bad_unit)
{
uint64_t block = 0x10000;
uint64_t size = 0x100000000ul;
init_alloc(size, block);
alloc->init_add_free(0, size);
EXPECT_EQ(alloc->get_free(), size);
alloc->init_rm_free(0x1000, 0x1000);
std::cout << std::hex
<< "remove 0x1000~1000, "
<< "free = " << alloc->get_free() << std::dec << std::endl;
alloc->foreach([](uint64_t offset, uint64_t length) {
std::cout << std::hex << offset << "~" << length << std::dec << std::endl;
});
std::cout << "-----------------" << std::endl;
}
TEST_P(AllocTest, test_alloc_bad_unit2)
{
uint64_t block = 0x10000;
uint64_t size = 0x100000000ul;
init_alloc(size, block);
alloc->init_add_free(0, size);
EXPECT_EQ(alloc->get_free(), size);
PExtentVector extents;
auto need = 0x10000;
int64_t got;
got = alloc->allocate(need, 0x10000, 0, (int64_t)0, &extents);
EXPECT_EQ(got, 0x10000);
std::cout << std::hex
<< "allocate 0x10000, "
<< "free = " << alloc->get_free() << std::dec << std::endl;
std::for_each(extents.begin(), extents.end(), [](bluestore_pextent_t& pe) {
std::cout << std::hex << pe.offset << "~" << pe.length << std::dec << std::endl;
});
std::cout << "-----" << std::endl;
alloc->foreach([](uint64_t offset, uint64_t length) {
std::cout << std::hex << offset << "~" << length << std::dec << std::endl;
});
std::cout << "-----------------" << std::endl;
extents.clear();
need = 0x1000;
got = alloc->allocate(need, 0x1000, 0, (int64_t)0, &extents);
EXPECT_EQ(got, 0x1000);
std::cout << std::hex
<< "allocate 0x1000, "
<< "free = " << alloc->get_free() << std::dec << std::endl;
std::for_each(extents.begin(), extents.end(), [](bluestore_pextent_t& pe) {
std::cout << std::hex << pe.offset << "~" << pe.length << std::dec << std::endl;
});
std::cout << "-----" << std::endl;
alloc->foreach([](uint64_t offset, uint64_t length) {
std::cout << std::hex << offset << "~" << length << std::dec << std::endl;
});
std::cout << "-----------------" << std::endl;
alloc->release(extents);
std::cout << std::hex
<< "release 0x1000, "
<< "free = " << alloc->get_free() << std::dec << std::endl;
alloc->foreach([](uint64_t offset, uint64_t length) {
std::cout << std::hex << offset << "~" << length << std::dec << std::endl;
});
std::cout << "-----------------" << std::endl;
alloc->init_add_free(0x0, 0x10000);
std::cout << std::hex
<< "add free 0x0~10000, "
<< "free = " << alloc->get_free() << std::dec << std::endl;
alloc->foreach([](uint64_t offset, uint64_t length) {
std::cout << std::hex << offset << "~" << length << std::dec << std::endl;
});
std::cout << "-----------------" << std::endl;
ASSERT_EQ(alloc->get_free(), size);
}
INSTANTIATE_TEST_SUITE_P(
Allocator,
AllocTest,
    (1-1/1)