Skip to content

Commit d725a9f

Browse files
committed
test/crimson/seastore: check_omap replace omap_get_values by omap_iterate
Signed-off-by: chunmei liu <[email protected]>
1 parent 3ccc8ec commit d725a9f

File tree

1 file changed

+87
-48
lines changed

1 file changed

+87
-48
lines changed

src/test/crimson/seastore/test_seastore.cc

Lines changed: 87 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,41 @@ struct seastore_test_t :
107107
std::map<string, bufferlist> omap;
108108
bufferlist contents;
109109

110+
ObjectStore::omap_iter_ret_t check_iterate(
111+
std::string_view key,
112+
std::string_view value,
113+
std::map<string, bufferlist>::iterator &refiter)
114+
{
115+
if (refiter != omap.end()) {
116+
EXPECT_EQ(refiter->first, key);
117+
}
118+
if (refiter != omap.end() && refiter->first < key) {
119+
auto ite = omap.find(std::string(key));
120+
auto dist = std::distance(refiter, ite);
121+
for (int i = 0; i < dist; i++) {
122+
logger().debug(
123+
"check_omap: missing omap key {}",
124+
refiter->first);
125+
EXPECT_TRUE(false) << "missing omap key " << refiter->first;
126+
return ObjectStore::omap_iter_ret_t::STOP;
127+
}
128+
++refiter;
129+
EXPECT_EQ(refiter->first, key);
130+
} else if (refiter == omap.end() || refiter->first > key) {
131+
logger().debug(
132+
"check_omap: extra omap key {}",
133+
key);
134+
EXPECT_TRUE(false) << "extra omap key " << key;
135+
return ObjectStore::omap_iter_ret_t::STOP;
136+
} else {
137+
ceph::bufferlist bl;
138+
bl.append(value);
139+
EXPECT_EQ(bl, refiter->second);
140+
++refiter;
141+
}
142+
return ObjectStore::omap_iter_ret_t::NEXT;
143+
}
144+
110145
std::map<snapid_t, bufferlist> clone_contents;
111146

112147
void touch(
@@ -429,41 +464,26 @@ struct seastore_test_t :
429464
}
430465
}
431466

432-
void check_omap(SeaStoreShard &sharded_seastore) {
433-
auto refiter = omap.begin();
434-
std::optional<std::string> start;
435-
while(true) {
436-
auto [done, kvs] = sharded_seastore.omap_get_values(
437-
coll,
438-
oid,
439-
start).unsafe_get();
440-
auto iter = kvs.begin();
441-
while (true) {
442-
if ((done && iter == kvs.end()) && refiter == omap.end()) {
443-
return; // finished
444-
} else if (!done && iter == kvs.end()) {
445-
break; // reload kvs
446-
}
447-
if (iter == kvs.end() || refiter->first < iter->first) {
448-
logger().debug(
449-
"check_omap: missing omap key {}",
450-
refiter->first);
451-
GTEST_FAIL() << "missing omap key " << refiter->first;
452-
++refiter;
453-
} else if (refiter == omap.end() || refiter->first > iter->first) {
454-
logger().debug(
455-
"check_omap: extra omap key {}",
456-
iter->first);
457-
GTEST_FAIL() << "extra omap key " << iter->first;
458-
++iter;
459-
} else {
460-
EXPECT_EQ(iter->second, refiter->second);
461-
++iter;
462-
++refiter;
463-
}
464-
}
465-
if (!done) {
466-
start = kvs.rbegin()->first;
467+
void check_omap(SeaStoreShard &sharded_seastore,
468+
std::map<string, bufferlist>::iterator &refiter,
469+
std::function<ObjectStore::omap_iter_ret_t(std::string_view, std::string_view)> callback)
470+
{
471+
ObjectStore::omap_iter_seek_t start_from = ObjectStore::omap_iter_seek_t::min_lower_bound();
472+
refiter = omap.begin();
473+
sharded_seastore.omap_iterate(
474+
coll,
475+
oid,
476+
start_from,
477+
callback).unsafe_get();
478+
479+
if (refiter == omap.end()) {
480+
return;
481+
} else {
482+
for (; refiter != omap.end(); refiter++) {
483+
logger().debug(
484+
"check_omap: missing omap key {}",
485+
refiter->first);
486+
GTEST_FAIL() << "missing omap key " << refiter->first;
467487
}
468488
}
469489
}
@@ -814,9 +834,16 @@ TEST_P(seastore_test_t, rename)
814834
test_obj.cid,
815835
test_obj.coll,
816836
ghobject_t(hobject_t(sobject_t(std::string("object_1"), CEPH_NOSNAP)))};
837+
838+
std::map<string, bufferlist>::iterator refiter;
839+
std::function<ObjectStore::omap_iter_ret_t(std::string_view, std::string_view)> callback =
840+
[&test_other, &refiter](std::string_view key, std::string_view val)
841+
{
842+
return test_other.check_iterate(key, val, refiter);
843+
};
817844
test_obj.rename(*sharded_seastore, test_other);
818845
test_other.read(*sharded_seastore, 0, 4096);
819-
test_other.check_omap(*sharded_seastore);
846+
test_other.check_omap(*sharded_seastore, refiter, callback);
820847
});
821848
}
822849

@@ -1071,11 +1098,17 @@ TEST_P(seastore_test_t, omap_test_iterator)
10711098
test_obj.touch(*sharded_seastore);
10721099
for (unsigned i = 0; i < 20; ++i) {
10731100
test_obj.set_omap(
1074-
*sharded_seastore,
1075-
make_key(i),
1076-
make_bufferlist(128));
1101+
*sharded_seastore,
1102+
make_key(i),
1103+
make_bufferlist(128));
10771104
}
1078-
test_obj.check_omap(*sharded_seastore);
1105+
std::map<string, bufferlist>::iterator refiter;
1106+
std::function<ObjectStore::omap_iter_ret_t(std::string_view, std::string_view)> callback =
1107+
[&test_obj, &refiter](std::string_view key, std::string_view val)
1108+
{
1109+
return test_obj.check_iterate(key, val, refiter);
1110+
};
1111+
test_obj.check_omap(*sharded_seastore, refiter, callback);
10791112
});
10801113
}
10811114

@@ -1091,18 +1124,24 @@ TEST_P(seastore_test_t, object_data_omap_remove)
10911124
test_obj.touch(*sharded_seastore);
10921125
for (unsigned i = 0; i < 1024; ++i) {
10931126
test_obj.set_omap(
1094-
*sharded_seastore,
1095-
make_key(i),
1096-
make_bufferlist(128));
1127+
*sharded_seastore,
1128+
make_key(i),
1129+
make_bufferlist(128));
10971130
}
1098-
test_obj.check_omap(*sharded_seastore);
1131+
std::map<string, bufferlist>::iterator refiter;
1132+
std::function<ObjectStore::omap_iter_ret_t(std::string_view, std::string_view)> callback =
1133+
[&test_obj, &refiter](std::string_view key, std::string_view val)
1134+
{
1135+
return test_obj.check_iterate(key, val, refiter);
1136+
};
1137+
test_obj.check_omap(*sharded_seastore, refiter, callback);
10991138

11001139
for (uint64_t i = 0; i < 16; i++) {
11011140
test_obj.write(
1102-
*sharded_seastore,
1103-
4096 * i,
1104-
4096,
1105-
'a');
1141+
*sharded_seastore,
1142+
4096 * i,
1143+
4096,
1144+
'a');
11061145
}
11071146
test_obj.remove(*sharded_seastore);
11081147
});

0 commit comments

Comments
 (0)