From 12a32373b78beea7654c4db888dfaf66d489f9b1 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 25 Jun 2015 13:01:00 -0700 Subject: [PATCH] rgw: don't do set_attr on meta objects 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 --- src/rgw/rgw_bucket.cc | 8 +++++--- src/rgw/rgw_bucket.h | 1 - src/rgw/rgw_metadata.cc | 20 -------------------- src/rgw/rgw_metadata.h | 6 ------ src/rgw/rgw_op.cc | 26 ++++++++++++-------------- src/rgw/rgw_rados.cc | 4 ++++ src/rgw/rgw_user.cc | 12 ------------ src/rgw/rgw_user.h | 10 ---------- 8 files changed, 21 insertions(+), 66 deletions(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 6601f9e9a2a72..5ac344804f358 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -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& attrs, - map* 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& objs_to_unlink, diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 61f5c6218b05b..a1800aa41b88d 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -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& attrs, - map* rmattrs, RGWObjVersionTracker *objv_tracker); extern void check_bad_user_bucket_mapping(RGWRados *store, const rgw_user& user_id, bool fix); diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index af1ffbe6c1ba8..621e55aad0750 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -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& attrs, - map* 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; -} diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h index 5dc20bd7a6a3f..8c950f2de3fbf 100644 --- a/src/rgw/rgw_metadata.h +++ b/src/rgw/rgw_metadata.h @@ -211,12 +211,6 @@ public: int put_entry(RGWMetadataHandler *handler, const string& key, bufferlist& bl, bool exclusive, RGWObjVersionTracker *objv_tracker, time_t mtime, map *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& attrs, - map* rmattrs, - RGWObjVersionTracker *objv_tracker); int get(string& metadata_key, Formatter *f); int put(string& metadata_key, bufferlist& bl, RGWMetadataHandler::sync_type_t sync_mode, diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 7a04c5f3aff4c..26560524c581e 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -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 attrs; + map 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); } } diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 852d4e92b398e..7153cee44cac3 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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) { diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index fb313d0071b48..876b36ab15f03 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -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& attrs, - map* 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; diff --git a/src/rgw/rgw_user.h b/src/rgw/rgw_user.h index bff4a52912e81..c431636193983 100644 --- a/src/rgw/rgw_user.h +++ b/src/rgw/rgw_user.h @@ -66,16 +66,6 @@ extern int rgw_store_user_info(RGWRados *store, time_t mtime, bool exclusive, map *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& attrs, - map* rmattrs, - RGWObjVersionTracker *objv_tracker); /** * Given an user_id, finds the user info associated with it. -- 2.39.5