From: Casey Bodley Date: Wed, 18 Jan 2017 18:48:29 +0000 (-0500) Subject: rgw: add objv_tracker arg to RGWRados::put_system_obj_data X-Git-Tag: v12.0.3~20^2~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2cee82f266335914103edf9673af494bfa39b7fe;p=ceph.git rgw: add objv_tracker arg to RGWRados::put_system_obj_data Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_cache.h b/src/rgw/rgw_cache.h index 32068d39073e..6bc9ef149032 100644 --- a/src/rgw/rgw_cache.h +++ b/src/rgw/rgw_cache.h @@ -231,7 +231,8 @@ public: bufferlist& data, RGWObjVersionTracker *objv_tracker, real_time set_mtime) override; - int put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, off_t ofs, bool exclusive) override; + int put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, off_t ofs, bool exclusive, + RGWObjVersionTracker *objv_tracker = nullptr) override; int get_system_obj(RGWObjectCtx& obj_ctx, RGWRados::SystemObject::Read::GetObjState& read_state, RGWObjVersionTracker *objv_tracker, rgw_raw_obj& obj, @@ -422,7 +423,8 @@ int RGWCache::put_system_obj_impl(rgw_raw_obj& obj, uint64_t size, real_time } template -int RGWCache::put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& data, off_t ofs, bool exclusive) +int RGWCache::put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& data, off_t ofs, bool exclusive, + RGWObjVersionTracker *objv_tracker) { rgw_pool pool; string oid; @@ -436,7 +438,11 @@ int RGWCache::put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& da info.status = 0; info.flags = CACHE_FLAG_DATA; } - int ret = T::put_system_obj_data(ctx, obj, data, ofs, exclusive); + if (objv_tracker) { + info.version = objv_tracker->write_version; + info.flags |= CACHE_FLAG_OBJV; + } + int ret = T::put_system_obj_data(ctx, obj, data, ofs, exclusive, objv_tracker); if (cacheable) { string name = normal_name(pool, oid); if (ret >= 0) { diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index a5af22cc3599..5667ebd9817d 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -6704,7 +6704,8 @@ int RGWRados::put_system_obj_impl(rgw_raw_obj& obj, uint64_t size, real_time *mt } int RGWRados::put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, - off_t ofs, bool exclusive) + off_t ofs, bool exclusive, + RGWObjVersionTracker *objv_tracker) { rgw_rados_ref ref; rgw_pool pool; @@ -6718,6 +6719,9 @@ int RGWRados::put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, if (exclusive) op.create(true); + if (objv_tracker) { + objv_tracker->prepare_op_for_write(&op); + } if (ofs == -1) { op.write_full(bl); } else { @@ -6727,6 +6731,9 @@ int RGWRados::put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, if (r < 0) return r; + if (objv_tracker) { + objv_tracker->apply_write(); + } return 0; } diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index c42256639d72..4dbf6e86210a 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -2923,7 +2923,8 @@ public: ceph::real_time set_mtime /* 0 for don't set */); virtual int put_system_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, - off_t ofs, bool exclusive); + off_t ofs, bool exclusive, + RGWObjVersionTracker *objv_tracker = nullptr); int aio_put_obj_data(void *ctx, rgw_raw_obj& obj, bufferlist& bl, off_t ofs, bool exclusive, void **handle);