mirror of
https://github.com/ceph/ceph
synced 2025-03-20 01:07:42 +00:00
Merge pull request #15705 from xiexingguo/wip-fix-blob-tracker-check
os/bluestore: pass strict flag to bluestore_blob_use_tracker_t::equal() Reviewed-by: Sage Weil <sage@redhat.com> Reviewed-by: Igor Fedotov <ifedotov@mirantis.com>
This commit is contained in:
commit
aa27ac7791
@ -488,7 +488,8 @@ void bluestore_blob_use_tracker_t::split(
|
||||
}
|
||||
|
||||
bool bluestore_blob_use_tracker_t::equal(
|
||||
const bluestore_blob_use_tracker_t& other) const
|
||||
const bluestore_blob_use_tracker_t& other,
|
||||
bool strict) const
|
||||
{
|
||||
if (!num_au && !other.num_au) {
|
||||
return total_bytes == other.total_bytes && au_size == other.au_size;
|
||||
@ -504,6 +505,10 @@ bool bluestore_blob_use_tracker_t::equal(
|
||||
return true;
|
||||
}
|
||||
|
||||
if (strict) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t n = num_au ? num_au : other.num_au;
|
||||
uint32_t referenced =
|
||||
num_au ? other.get_referenced_bytes() : get_referenced_bytes();
|
||||
|
@ -421,7 +421,8 @@ struct bluestore_blob_use_tracker_t {
|
||||
bluestore_blob_use_tracker_t* r);
|
||||
|
||||
bool equal(
|
||||
const bluestore_blob_use_tracker_t& other) const;
|
||||
const bluestore_blob_use_tracker_t& other,
|
||||
bool strict = true) const;
|
||||
|
||||
void bound_encode(size_t& p) const {
|
||||
denc_varint(au_size, p);
|
||||
|
@ -1441,7 +1441,43 @@ TEST(GarbageCollector, BasicTest)
|
||||
em.clear();
|
||||
old_extents.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST(bluestore_blob_use_tracker_t, equal)
|
||||
{
|
||||
bluestore_blob_use_tracker_t t1, t2, t3;
|
||||
|
||||
ASSERT_TRUE(t1.equal(t2));
|
||||
ASSERT_TRUE(t1.equal(t2, false));
|
||||
|
||||
t1.init(0x8000, 0x1000);
|
||||
t2.init(0x8000, 0x1000);
|
||||
ASSERT_TRUE(t1.equal(t2));
|
||||
ASSERT_TRUE(t1.equal(t2, false));
|
||||
|
||||
t1.get(0, 0x1000);
|
||||
ASSERT_TRUE(!t1.equal(t2));
|
||||
ASSERT_TRUE(!t1.equal(t2, false));
|
||||
t2.get(0, 0x1000);
|
||||
ASSERT_TRUE(t1.equal(t2));
|
||||
ASSERT_TRUE(t1.equal(t2, false));
|
||||
|
||||
t1.get(0x1000, 0x1000);
|
||||
t2.get(0x2000, 0x1000);
|
||||
ASSERT_TRUE(!t1.equal(t2));
|
||||
ASSERT_TRUE(!t1.equal(t2, false));
|
||||
|
||||
t3.init(0x8000, 0x8000);
|
||||
t3.get(0x4000, 0x2000);
|
||||
ASSERT_TRUE(!t3.equal(t1));
|
||||
ASSERT_TRUE(t3.equal(t1, false));
|
||||
ASSERT_TRUE(!t3.equal(t2));
|
||||
ASSERT_TRUE(t3.equal(t2, false));
|
||||
|
||||
t1.clear();
|
||||
t2.clear();
|
||||
t3.clear();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
vector<const char*> args;
|
||||
|
Loading…
Reference in New Issue
Block a user