]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: swift object versioning data structure changes
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 18 Feb 2016 04:46:42 +0000 (20:46 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Sat, 12 Mar 2016 00:20:44 +0000 (16:20 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_common.h
src/rgw/rgw_json_enc.cc
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h
src/rgw/rgw_rest_swift.cc

index 949fc52a2b70bef7f85eac4f85cf8c7966cdb847..785909090d189790b34914c77bc8cc49e3c03957 100644 (file)
@@ -892,8 +892,12 @@ struct RGWBucketInfo
 
   RGWBucketIndexType index_type;
 
+  bool swift_versioning;
+  string swift_ver_location;
+
+
   void encode(bufferlist& bl) const {
-     ENCODE_START(15, 4, bl);
+     ENCODE_START(16, 4, bl);
      ::encode(bucket, bl);
      ::encode(owner.id, bl);
      ::encode(flags, bl);
@@ -912,10 +916,14 @@ struct RGWBucketInfo
        ::encode(website_conf, bl);
      }
      ::encode((uint32_t)index_type, bl);
+     ::encode(swift_versioning, bl);
+     if (swift_versioning) {
+       ::encode(swift_ver_location, bl);
+     }
      ENCODE_FINISH(bl);
   }
   void decode(bufferlist::iterator& bl) {
-    DECODE_START_LEGACY_COMPAT_LEN_32(14, 4, 4, bl);
+    DECODE_START_LEGACY_COMPAT_LEN_32(16, 4, 4, bl);
      ::decode(bucket, bl);
      if (struct_v >= 2) {
        string s;
@@ -960,6 +968,14 @@ struct RGWBucketInfo
      } else {
        index_type = RGWBIType_Normal;
      }
+     swift_versioning = false;
+     swift_ver_location.clear();
+     if (struct_v >= 16) {
+       ::decode(swift_versioning, bl);
+       if (swift_versioning) {
+         ::decode(swift_ver_location, bl);
+       }
+     }
      DECODE_FINISH(bl);
   }
   void dump(Formatter *f) const;
@@ -971,8 +987,10 @@ struct RGWBucketInfo
   int versioning_status() { return flags & (BUCKET_VERSIONED | BUCKET_VERSIONS_SUSPENDED); }
   bool versioning_enabled() { return versioning_status() == BUCKET_VERSIONED; }
 
+  bool has_swift_versioning() { return swift_versioning; }
+
   RGWBucketInfo() : flags(0), creation_time(0), has_instance_obj(false), num_shards(0), bucket_index_shard_hash_type(MOD), requester_pays(false),
-                    has_website(false) {}
+                    has_website(false), swift_versioning(false) {}
 };
 WRITE_CLASS_ENCODER(RGWBucketInfo)
 
index 54b1e8f945db025f884db7a85bb52d5543903d5b..3d0051a41512159cdda2300b1c98481a0f5053e7 100644 (file)
@@ -637,6 +637,8 @@ void RGWBucketInfo::dump(Formatter *f) const
   if (has_website) {
     encode_json("website_conf", website_conf, f);
   }
+  encode_json("swift_versioning", swift_versioning, f);
+  encode_json("swift_ver_location", swift_ver_location, f);
 }
 
 void RGWBucketInfo::decode_json(JSONObj *obj) {
@@ -661,6 +663,8 @@ void RGWBucketInfo::decode_json(JSONObj *obj) {
   if (has_website) {
     JSONDecoder::decode_json("website_conf", website_conf, obj);
   }
+  JSONDecoder::decode_json("swift_versioning", swift_versioning, obj);
+  JSONDecoder::decode_json("swift_ver_location", swift_ver_location, obj);
 }
 
 void rgw_obj_key::dump(Formatter *f) const
index c7dbcd2243953dced2ad138bd654767f13819dbd..259eca302c4c81470707f3859104ff3e2127a525 100644 (file)
@@ -1921,6 +1921,7 @@ void RGWCreateBucket::execute()
   s->bucket.tenant = s->bucket_tenant; /* ignored if bucket exists */
   s->bucket.name = s->bucket_name;
   op_ret = store->create_bucket(*(s->user), s->bucket, zonegroup_id, placement_rule,
+                                swift_ver_location,
                                attrs, info, pobjv, &ep_objv, creation_time,
                                pmaster_bucket, true);
   /* continue if EEXIST and create_bucket will fail below.  this way we can
@@ -2808,6 +2809,9 @@ void RGWPutMetadataBucket::execute()
     attrs[RGW_ATTR_CORS] = bl;
   }
 
+  s->bucket_info.swift_ver_location = swift_ver_location;
+  s->bucket_info.swift_versioning = (!swift_ver_location.empty());
+
   op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
 }
 
index 997d5a9e6e62bccf4f665d5e818804e4eee32b2b..9849b431d3c75a2c7cd16d182a877fb01f854adf 100644 (file)
@@ -537,6 +537,7 @@ protected:
   obj_version ep_objv;
   bool has_cors;
   RGWCORSConfiguration cors_config;
+  string swift_ver_location;
 
   bufferlist in_data;
 
@@ -767,6 +768,7 @@ protected:
   RGWAccessControlPolicy policy;
   RGWCORSConfiguration cors_config;
   string placement_rule;
+  string swift_ver_location;
 
 public:
   RGWPutMetadataBucket()
index c6f437a2d26d6254534a042e7bac1408390181ce..0aaf4426bb5e5c9d36e8d589ad463ae640996598 100644 (file)
@@ -4944,6 +4944,7 @@ int RGWRados::init_bucket_index(rgw_bucket& bucket, int num_shards)
 int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
                             const string& zonegroup_id,
                             const string& placement_rule,
+                            const string& swift_ver_location,
                            map<std::string, bufferlist>& attrs,
                             RGWBucketInfo& info,
                             obj_version *pobjv,
@@ -5004,6 +5005,8 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
     info.zonegroup = zonegroup_id;
     info.placement_rule = selected_placement_rule_name;
     info.index_type = rule_info.index_type;
+    info.swift_ver_location = swift_ver_location;
+    info.swift_versioning = (!swift_ver_location.empty());
     info.num_shards = bucket_index_max_shards;
     info.bucket_index_shard_hash_type = RGWBucketInfo::MOD;
     info.requester_pays = false;
index f2be37d153539a94b6f87dbba0b1c788be878bba..bf36a1e9ee54d2ef619d4af8f524a5ebd298bb5c 100644 (file)
@@ -2032,6 +2032,7 @@ public:
   virtual int create_bucket(RGWUserInfo& owner, rgw_bucket& bucket,
                             const string& zonegroup_id,
                             const string& placement_rule,
+                            const string& swift_ver_location,
                             map<std::string,bufferlist>& attrs,
                             RGWBucketInfo& bucket_info,
                             obj_version *pobjv,
index 734f78bcd2b0887ba7d5c37102665e38f013c219..dcb546e2c3d1f7fda63259c6638280de8937529e 100644 (file)
@@ -475,6 +475,8 @@ int RGWCreateBucket_ObjStore_SWIFT::get_params()
   location_constraint = store->get_zonegroup().api_name;
   placement_rule = s->info.env->get("HTTP_X_STORAGE_POLICY", "");
 
+  swift_ver_location = s->info.env->get("HTTP_X_VERSIONS_LOCATION", "");
+
   return 0;
 }
 
@@ -724,6 +726,8 @@ int RGWPutMetadataBucket_ObjStore_SWIFT::get_params()
   get_rmattrs_from_headers(s, CONT_PUT_ATTR_PREFIX, CONT_REMOVE_ATTR_PREFIX,
                           rmattr_names);
   placement_rule = s->info.env->get("HTTP_X_STORAGE_POLICY", "");
+
+  swift_ver_location = s->info.env->get("HTTP_X_VERSIONS_LOCATION", "");
   return 0;
 }