]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: rados->set_attr() just calls rados->set_attrs()
authorYehuda Sadeh <yehuda@inktank.com>
Fri, 10 May 2013 22:55:01 +0000 (15:55 -0700)
committerYehuda Sadeh <yehuda@inktank.com>
Fri, 10 May 2013 22:55:01 +0000 (15:55 -0700)
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/rgw/rgw_rados.cc

index 058818bd0827892444ca104c585e2db5c18217e6..ce778d661e3b49211dac2f5f72a04b000e2634f5 100644 (file)
@@ -2631,46 +2631,9 @@ int RGWRados::prepare_atomic_for_write(RGWRadosCtx *rctx, rgw_obj& obj,
  */
 int RGWRados::set_attr(void *ctx, rgw_obj& obj, const char *name, bufferlist& bl, RGWObjVersionTracker *objv_tracker)
 {
-  rgw_bucket bucket;
-  std::string oid, key;
-  get_obj_bucket_and_oid_key(obj, bucket, oid, key);
-  librados::IoCtx io_ctx;
-  rgw_bucket actual_bucket = bucket;
-  string actual_obj = oid;
-  RGWRadosCtx *rctx = static_cast<RGWRadosCtx *>(ctx);
-
-  if (actual_obj.size() == 0) {
-    actual_obj = bucket.name;
-    actual_bucket = zone.domain_root;
-  }
-
-  int r = open_bucket_data_ctx(actual_bucket, io_ctx);
-  if (r < 0)
-    return r;
-
-  ObjectWriteOperation op;
-  RGWObjState *state = NULL;
-
-  r = append_atomic_test(rctx, obj, op, &state);
-  if (r < 0)
-    return r;
-
-  if (objv_tracker) {
-    objv_tracker->prepare_op_for_write(&op);
-  }
-
-  op.setxattr(name, bl);
-
-  io_ctx.locator_set_key(key);
-  r = io_ctx.operate(actual_obj, &op);
-
-  if (state && r >= 0)
-    state->attrset[name] = bl;
-
-  if (r < 0)
-    return r;
-
-  return 0;
+  map<string, bufferlist> attrs;
+  attrs[name] = bl;
+  return set_attrs(ctx, obj, attrs, NULL, objv_tracker);
 }
 
 int RGWRados::set_attrs(void *ctx, rgw_obj& obj,
@@ -2733,6 +2696,17 @@ int RGWRados::set_attrs(void *ctx, rgw_obj& obj,
   if (r < 0)
     return r;
 
+  if (state) {
+    if (rmattrs) {
+      for (iter = rmattrs->begin(); iter != rmattrs->end(); ++iter) {
+        state->attrset.erase(iter->first);
+      }
+    }
+    for (iter = attrs.begin(); iter != attrs.end(); ++iter) {
+      state->attrset[iter->first] = iter->second;
+    }
+  }
+
   return 0;
 }