mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
Merge pull request #4124 from ceph/wip-omap-clear
osd: fix omap_clear handling Reviewed-by: Samuel Just <sjust@redhat.com>
This commit is contained in:
commit
0ff3d58757
@ -1243,6 +1243,7 @@ int MemStore::_omap_clear(coll_t cid, const ghobject_t &oid)
|
||||
if (!o)
|
||||
return -ENOENT;
|
||||
o->omap.clear();
|
||||
o->omap_header.clear();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -5034,8 +5034,6 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
|
||||
{
|
||||
if (maybe_create_new_object(ctx)) {
|
||||
t->touch(soid);
|
||||
} else {
|
||||
obs.oi.clear_omap_digest();
|
||||
}
|
||||
map<string, bufferlist> to_set;
|
||||
try {
|
||||
@ -5057,6 +5055,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
|
||||
ctx->delta_stats.num_wr++;
|
||||
}
|
||||
obs.oi.set_flag(object_info_t::FLAG_OMAP);
|
||||
obs.oi.clear_omap_digest();
|
||||
break;
|
||||
|
||||
case CEPH_OSD_OP_OMAPSETHEADER:
|
||||
@ -5077,6 +5076,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
|
||||
ctx->delta_stats.num_wr++;
|
||||
}
|
||||
obs.oi.set_flag(object_info_t::FLAG_OMAP);
|
||||
obs.oi.clear_omap_digest();
|
||||
break;
|
||||
|
||||
case CEPH_OSD_OP_OMAPCLEAR:
|
||||
|
@ -1491,6 +1491,53 @@ TEST(LibRadosAio, OmapPP) {
|
||||
ASSERT_EQ(set_got.size(), (unsigned)0);
|
||||
}
|
||||
|
||||
// omap_clear clears header *and* keys
|
||||
{
|
||||
boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
|
||||
ObjectWriteOperation op;
|
||||
bufferlist bl;
|
||||
bl.append("some data");
|
||||
map<string,bufferlist> to_set;
|
||||
to_set["foo"] = bl;
|
||||
to_set["foo2"] = bl;
|
||||
to_set["qfoo3"] = bl;
|
||||
op.omap_set(to_set);
|
||||
op.omap_set_header(bl);
|
||||
ioctx.aio_operate("foo3", my_completion.get(), &op);
|
||||
{
|
||||
TestAlarm alarm;
|
||||
ASSERT_EQ(0, my_completion->wait_for_complete());
|
||||
}
|
||||
EXPECT_EQ(0, my_completion->get_return_value());
|
||||
}
|
||||
{
|
||||
boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
|
||||
ObjectWriteOperation op;
|
||||
op.omap_clear();
|
||||
ioctx.aio_operate("foo3", my_completion.get(), &op);
|
||||
{
|
||||
TestAlarm alarm;
|
||||
ASSERT_EQ(0, my_completion->wait_for_complete());
|
||||
}
|
||||
EXPECT_EQ(0, my_completion->get_return_value());
|
||||
}
|
||||
{
|
||||
boost::scoped_ptr<AioCompletion> my_completion(cluster.aio_create_completion(0, 0, 0));
|
||||
ObjectReadOperation op;
|
||||
set<string> set_got;
|
||||
bufferlist hdr;
|
||||
op.omap_get_keys("", -1, &set_got, 0);
|
||||
op.omap_get_header(&hdr, NULL);
|
||||
ioctx.aio_operate("foo3", my_completion.get(), &op, 0);
|
||||
{
|
||||
TestAlarm alarm;
|
||||
ASSERT_EQ(0, my_completion->wait_for_complete());
|
||||
}
|
||||
EXPECT_EQ(0, my_completion->get_return_value());
|
||||
ASSERT_EQ(set_got.size(), (unsigned)0);
|
||||
ASSERT_EQ(hdr.length(), 0u);
|
||||
}
|
||||
|
||||
ioctx.remove("test_obj");
|
||||
destroy_one_pool_pp(pool_name, cluster);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user