From: Yehuda Sadeh Date: Fri, 22 Apr 2016 18:55:28 +0000 (-0700) Subject: rgw, cls/rgw: store removed object mtime in bi log X-Git-Tag: v10.2.1~44^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=308b9f54e9fa07d071335bb2d953a50a5095c464;p=ceph.git rgw, cls/rgw: store removed object mtime in bi log Store the mtime of the object that was removed in the bucket index log. This will be used in data sync. Signed-off-by: Yehuda Sadeh (cherry picked from commit 80d64049937e1930ea8273fdad76a51493a5e14a) --- diff --git a/src/cls/rgw/cls_rgw.cc b/src/cls/rgw/cls_rgw.cc index f3432da169d..a29ad7bf03a 100644 --- a/src/cls/rgw/cls_rgw.cc +++ b/src/cls/rgw/cls_rgw.cc @@ -870,6 +870,7 @@ int rgw_bucket_complete_op(cls_method_context_t hctx, bufferlist *in, bufferlist entry.ver = op.ver; switch ((int)op.op) { case CLS_RGW_OP_DEL: + entry.meta = op.meta; if (ondisk) { if (!entry.pending_map.size()) { int ret = cls_cxx_map_remove_key(hctx, idx); diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 47ba96261c1..478d12d4055 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -7525,7 +7525,7 @@ int RGWRados::Object::Delete::delete_obj() int64_t poolid = ref.ioctx.get_id(); if (r >= 0) { - r = index_op.complete_del(poolid, ref.ioctx.get_last_version(), params.remove_objs); + r = index_op.complete_del(poolid, ref.ioctx.get_last_version(), state->mtime, params.remove_objs); } else { int ret = index_op.cancel(); if (ret < 0) { @@ -7615,7 +7615,8 @@ int RGWRados::delete_obj_index(rgw_obj& obj) RGWRados::Bucket bop(this, bucket_info); RGWRados::Bucket::UpdateIndex index_op(&bop, obj, NULL); - int r = index_op.complete_del(-1 /* pool */, 0, NULL); + real_time removed_mtime; + int r = index_op.complete_del(-1 /* pool */, 0, removed_mtime, NULL); return r; } @@ -8555,6 +8556,7 @@ int RGWRados::Bucket::UpdateIndex::complete(int64_t poolid, uint64_t epoch, uint } int RGWRados::Bucket::UpdateIndex::complete_del(int64_t poolid, uint64_t epoch, + real_time& removed_mtime, list *remove_objs) { if (blind) { @@ -8568,7 +8570,7 @@ int RGWRados::Bucket::UpdateIndex::complete_del(int64_t poolid, uint64_t epoch, return ret; } - ret = store->cls_obj_complete_del(*bs, optag, poolid, epoch, obj, remove_objs, bilog_flags); + ret = store->cls_obj_complete_del(*bs, optag, poolid, epoch, obj, removed_mtime, remove_objs, bilog_flags); int r = store->data_log->add_entry(bs->bucket, bs->shard_id); if (r < 0) { @@ -11039,10 +11041,12 @@ int RGWRados::cls_obj_complete_add(BucketShard& bs, string& tag, int RGWRados::cls_obj_complete_del(BucketShard& bs, string& tag, int64_t pool, uint64_t epoch, rgw_obj& obj, + real_time& removed_mtime, list *remove_objs, uint16_t bilog_flags) { RGWObjEnt ent; + ent.mtime = removed_mtime; obj.get_index_key(&ent.key); return cls_obj_complete_op(bs, CLS_RGW_OP_DEL, tag, pool, epoch, ent, RGW_OBJ_CATEGORY_NONE, remove_objs, bilog_flags); } diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 612a523570e..e511ffa0dd0 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -2374,6 +2374,7 @@ public: bufferlist *acl_bl, RGWObjCategory category, list *remove_objs); int complete_del(int64_t poolid, uint64_t epoch, + ceph::real_time& removed_mtime, /* mtime of removed object */ list *remove_objs); int cancel(); }; @@ -2753,7 +2754,7 @@ public: int cls_obj_complete_add(BucketShard& bs, string& tag, int64_t pool, uint64_t epoch, RGWObjEnt& ent, RGWObjCategory category, list *remove_objs, uint16_t bilog_flags); int cls_obj_complete_del(BucketShard& bs, string& tag, int64_t pool, uint64_t epoch, rgw_obj& obj, - list *remove_objs, uint16_t bilog_flags); + ceph::real_time& removed_mtime, list *remove_objs, uint16_t bilog_flags); int cls_obj_complete_cancel(BucketShard& bs, string& tag, rgw_obj& obj, uint16_t bilog_flags); int cls_obj_set_bucket_tag_timeout(rgw_bucket& bucket, uint64_t timeout); int cls_bucket_list(rgw_bucket& bucket, int shard_id, rgw_obj_key& start, const string& prefix,