]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: don't do set_attr on meta objects
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 25 Jun 2015 20:01:00 +0000 (13:01 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Tue, 9 Feb 2016 20:45:02 +0000 (12:45 -0800)
only complete object writes (and attributes) is now available. This helps
managing the meta heap and simplifies the states. Since we cannot use rm_attrs
anymore, need to reset meta object before writing it.

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

index 6601f9e9a2a728b48bc275c4da984ee8f04c48af..5ac344804f358ac5b583f56dd880ebc0f09946c7 100644 (file)
@@ -328,7 +328,6 @@ int rgw_bucket_parse_bucket_instance(const string& bucket_instance, string *targ
 
 int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info,
                          map<string, bufferlist>& attrs,
-                         map<string, bufferlist>* rmattrs,
                          RGWObjVersionTracker *objv_tracker)
 {
   rgw_bucket& bucket = bucket_info.bucket;
@@ -349,8 +348,11 @@ int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info,
   string key;
   store->get_bucket_instance_entry(bucket, key); /* we want the bucket instance name without
                                                    the oid prefix cruft */
-  return store->meta_mgr->set_attrs(bucket_instance_meta_handler, key,
-                                    obj, attrs, rmattrs, objv_tracker);
+  bufferlist bl;
+
+  ::encode(bucket_info, bl);
+
+  return rgw_bucket_instance_store_info(store, key, bl, false, &attrs, objv_tracker, 0);
 }
 
 static void dump_mulipart_index_results(list<rgw_obj_key>& objs_to_unlink,
index 61f5c6218b05bdd4ef0e1126a03e9b35fdf5253a..a1800aa41b88d113d279ffaf47727496427f5347 100644 (file)
@@ -134,7 +134,6 @@ extern int rgw_remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_ch
 
 extern int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info,
                                 map<string, bufferlist>& attrs,
-                                map<string, bufferlist>* rmattrs,
                                 RGWObjVersionTracker *objv_tracker);
 
 extern void check_bad_user_bucket_mapping(RGWRados *store, const rgw_user& user_id, bool fix);
index af1ffbe6c1ba8891c2e29b30eed774724e41d147..621e55aad07504038a50609b29587c88aeeb05b6 100644 (file)
@@ -678,23 +678,3 @@ int RGWMetadataManager::remove_entry(RGWMetadataHandler *handler, string& key, R
   return 0;
 }
 
-int RGWMetadataManager::set_attrs(RGWMetadataHandler *handler, string& key,
-                                  rgw_obj& obj, map<string, bufferlist>& attrs,
-                                  map<string, bufferlist>* rmattrs,
-                                  RGWObjVersionTracker *objv_tracker)
-{
-  string section;
-  RGWMetadataLogData log_data;
-  int ret = pre_modify(handler, section, key, log_data, objv_tracker, MDLOG_STATUS_SETATTRS);
-  if (ret < 0)
-    return ret;
-
-  ret = store->system_obj_set_attrs(NULL, obj, attrs, rmattrs, objv_tracker);
-  /* cascading ret into post_modify() */
-
-  ret = post_modify(handler, section, key, log_data, objv_tracker, ret);
-  if (ret < 0)
-    return ret;
-
-  return 0;
-}
index 5dc20bd7a6a3f8947ae4cfb3b8d68b695fd46c28..8c950f2de3fbfbb700663b4c01b6f4b82d22b7a3 100644 (file)
@@ -211,12 +211,6 @@ public:
   int put_entry(RGWMetadataHandler *handler, const string& key, bufferlist& bl, bool exclusive,
                 RGWObjVersionTracker *objv_tracker, time_t mtime, map<string, bufferlist> *pattrs = NULL);
   int remove_entry(RGWMetadataHandler *handler, string& key, RGWObjVersionTracker *objv_tracker);
-  int set_attr(RGWMetadataHandler *handler, string& key, rgw_obj& obj, string& attr, bufferlist& bl,
-               RGWObjVersionTracker *objv_tracker);
-  int set_attrs(RGWMetadataHandler *handler, string& key,
-                rgw_obj& obj, map<string, bufferlist>& attrs,
-                map<string, bufferlist>* rmattrs,
-                RGWObjVersionTracker *objv_tracker);
   int get(string& metadata_key, Formatter *f);
   int put(string& metadata_key, bufferlist& bl,
           RGWMetadataHandler::sync_type_t sync_mode,
index 7a04c5f3aff4c5db8bd893eb44b06183682f4bd2..26560524c581e0f142775fe2366c9626603c104f 100644 (file)
@@ -2655,8 +2655,8 @@ void RGWPutMetadataAccount::execute()
   }
 
   rgw_get_request_metadata(s->cct, s->info, attrs, false);
-  rgw_get_user_attrs_by_uid(store, s->user.user_id, orig_attrs, &acct_op_tracker);
-  prepare_add_del_attrs(orig_attrs, rmattr_names, attrs, rmattrs);
+  RGWUserInfo orig_uinfo;
+  rgw_get_user_info_by_uid(store, s->user.user_id, orig_uinfo, &acct_op_tracker);
   populate_with_generic_attrs(s, attrs);
 
   /* Handle the TempURL-related stuff. */
@@ -2670,8 +2670,8 @@ void RGWPutMetadataAccount::execute()
   }
 
   /* XXX tenant needed? */
-  op_ret = rgw_store_user_attrs(store, s->user.user_id.id, attrs, &rmattrs,
-                               &acct_op_tracker);
+  op_ret = rgw_store_user_info(store, s->user, &orig_uinfo,
+                               &acct_op_tracker, 0, false, &attrs);
   if (op_ret < 0) {
     return;
   }
@@ -2731,8 +2731,7 @@ void RGWPutMetadataBucket::execute()
     attrs[RGW_ATTR_CORS] = bl;
   }
 
-  op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &rmattrs,
-                               &s->bucket_info.objv_tracker);
+  op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
 }
 
 int RGWPutMetadataObject::verify_permission()
@@ -3278,14 +3277,13 @@ void RGWPutACLs::execute()
     op_ret = get_obj_attrs(store, s, obj, attrs);
     if (op_ret < 0)
       return;
-  }
   
-  attrs[RGW_ATTR_ACL] = bl;
-
-  if (!s->object.empty()) {
+    attrs[RGW_ATTR_ACL] = bl;
     op_ret = store->set_attrs(s->obj_ctx, obj, attrs, NULL);
   } else {
-    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, NULL, &s->bucket_info.objv_tracker);
+    attrs = s->bucket_attrs;
+    attrs[RGW_ATTR_ACL] = bl;
+    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
   }
 }
 
@@ -3332,9 +3330,9 @@ void RGWPutCORS::execute()
     store->set_atomic(s->obj_ctx, obj);
     op_ret = store->set_attr(s->obj_ctx, obj, RGW_ATTR_CORS, cors_bl);
   } else {
-    map<string, bufferlist> attrs;
+    map<string, bufferlist> attrs = s->bucket_attrs;
     attrs[RGW_ATTR_CORS] = cors_bl;
-    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, NULL, &s->bucket_info.objv_tracker);
+    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
   }
 }
 
@@ -3391,7 +3389,7 @@ void RGWDeleteCORS::execute()
   if (is_object_op) {
     op_ret = store->set_attrs(s->obj_ctx, obj, attrs, &rmattrs);
   } else {
-    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &rmattrs, &s->bucket_info.objv_tracker);
+    op_ret = rgw_bucket_set_attrs(store, s->bucket_info, attrs, &s->bucket_info.objv_tracker);
   }
 }
 
index 852d4e92b398e5e53dd1cf982a18613f17c25168..7153cee44cac32805790747febad6903314e9cf7 100644 (file)
@@ -3720,6 +3720,10 @@ int RGWRados::put_system_obj_impl(rgw_obj& obj, uint64_t size, time_t *mtime,
     if (!(flags & PUT_OBJ_CREATE))
        return -EINVAL;
     op.create(true); // exclusive create
+  } else {
+    op.remove();
+    op.set_op_flags2(LIBRADOS_OP_FLAG_FAILOK);
+    op.create(false);
   }
 
   if (objv_tracker) {
index fb313d0071b48885d18c6dbdcbecc021898de839..876b36ab15f030c972cb8f0d558298589632ce5d 100644 (file)
@@ -205,18 +205,6 @@ int rgw_store_user_info(RGWRados *store,
   return ret;
 }
 
-int rgw_store_user_attrs(RGWRados *const store,
-                         string& user_id,
-                         map<string, bufferlist>& attrs,
-                         map<string, bufferlist>* const rmattrs,
-                         RGWObjVersionTracker * const objv_tracker)
-{
-  rgw_obj obj(store->zone.user_uid_pool, user_id);
-
-  return store->meta_mgr->set_attrs(user_meta_handler, user_id, obj,
-                                    attrs, rmattrs, objv_tracker);
-}
-
 struct user_info_entry {
   RGWUserInfo info;
   RGWObjVersionTracker objv_tracker;
index bff4a52912e8172eefde432a5d056716bdf9c338..c431636193983a6e55b924c429bd5ac1f37e6611 100644 (file)
@@ -66,16 +66,6 @@ extern int rgw_store_user_info(RGWRados *store,
                                time_t mtime,
                                bool exclusive,
                                map<string, bufferlist> *pattrs = NULL);
-/**
- * Save the custom user metadata given in @attrs and delete those in @rmattrs
- * for user specified in @user_id.
- * Returns: 0 on success, -ERR# on failure.
- */
-extern int rgw_store_user_attrs(RGWRados *store,
-                                string& user_id,
-                                map<string, bufferlist>& attrs,
-                                map<string, bufferlist>* rmattrs,
-                                RGWObjVersionTracker *objv_tracker);
 
 /**
  * Given an user_id, finds the user info associated with it.