]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: propagate version id when putting obj
authorYehuda Sadeh <yehuda@redhat.com>
Wed, 10 Dec 2014 18:22:39 +0000 (10:22 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Mon, 19 Jan 2015 23:57:55 +0000 (15:57 -0800)
A system user can set the rgwx-version-id http param, and it's now sent
to the objclass.

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index bc9a600ed2b1923d63d76d43fc82f5a17c3d8ae7..2e54987ec57ef1e98038bc30a73672eeda474b85 100644 (file)
@@ -1620,6 +1620,7 @@ RGWPutObjProcessor *RGWPutObj::select_processor(RGWObjectCtx& obj_ctx, bool *is_
   if (!multipart) {
     processor = new RGWPutObjProcessor_Atomic(obj_ctx, bucket_owner, s->bucket, s->object.name, part_size, s->req_id, s->bucket_info.versioning_enabled());
     ((RGWPutObjProcessor_Atomic *)processor)->set_olh_epoch(olh_epoch);
+    ((RGWPutObjProcessor_Atomic *)processor)->set_version_id(version_id);
   } else {
     processor = new RGWPutObjProcessor_Multipart(obj_ctx, bucket_owner, part_size, s);
   }
index 116147335f3d15fbbbf964e1c33ee6fe540a79f2..9591d2821dfad7b4abeef7a277f779912f4ade33 100644 (file)
@@ -1095,7 +1095,11 @@ int RGWPutObjProcessor_Atomic::prepare(RGWRados *store, string *oid_rand)
   head_obj.init(bucket, obj_str);
 
   if (versioned_object) {
-    store->gen_rand_obj_instance_name(&head_obj);
+    if (!version_id.empty()) {
+      head_obj.set_instance(version_id);
+    } else {
+      store->gen_rand_obj_instance_name(&head_obj);
+    }
   }
 
   manifest.set_trivial_rule(max_chunk_size, store->ctx()->_conf->rgw_obj_stripe_size);
@@ -1183,6 +1187,7 @@ int RGWPutObjProcessor_Atomic::do_complete(string& etag, time_t *mtime, time_t s
   obj_op.meta.set_mtime = set_mtime;
   obj_op.meta.owner = bucket_owner;
   obj_op.meta.flags = PUT_OBJ_CREATE;
+  obj_op.meta.olh_epoch = olh_epoch;
 
   bool is_olh = false;
   if (head_obj.get_instance().empty()) {
index ea94fa7522520c324fae384a7e8df25bc0e1dfc1..10c2c09710016a31e4191e6bedbe0a5cc43f87ac 100644 (file)
@@ -2099,6 +2099,7 @@ class RGWPutObjProcessor_Atomic : public RGWPutObjProcessor_Aio
 
   bool versioned_object;
   uint64_t olh_epoch;
+  string version_id;
 
 protected:
   rgw_bucket bucket;
@@ -2151,6 +2152,10 @@ public:
   void set_olh_epoch(uint64_t epoch) {
     olh_epoch = epoch;
   }
+
+  void set_version_id(const string& vid) {
+    version_id = vid;
+  }
 };
 
 #endif