]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: reduce rados bucket stats (and getxattrs)
authorYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 21 Oct 2011 20:23:40 +0000 (13:23 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Fri, 21 Oct 2011 20:23:40 +0000 (13:23 -0700)
we didn't pass the context, and some other issue with the context map

src/rgw/rgw_access.h
src/rgw/rgw_admin.cc
src/rgw/rgw_fs.cc
src/rgw/rgw_fs.h
src/rgw/rgw_main.cc
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h
src/rgw/rgw_tools.cc
src/rgw/rgw_tools.h
src/rgw/rgw_user.cc

index 2b6d08136dbfc6cb24eb55f5b39bb347e9b8480f..91ccf059e47db3316cc671191d3b435b04258327 100644 (file)
@@ -270,7 +270,7 @@ public:
 
   /* The bucket here can either be the bucket name identifier, or the ID
    * in period format: ".123" */
-  virtual int get_bucket_info(string& bucket, RGWBucketInfo& info) = 0;
+  virtual int get_bucket_info(void *ctx, string& bucket, RGWBucketInfo& info) = 0;
 
 
   virtual int remove_temp_objects(string date, string time) {
index 407faf1e3994e8f334a26dfea4f89257c1cbf1c5..e8ae9cc519fbe0b12b4d600187e37ac9524222ed 100644 (file)
@@ -351,7 +351,7 @@ static int create_bucket(string bucket_str, string& user_id, string& display_nam
   policy.create_default(user_id, display_name);
   policy.encode(aclbl);
 
-  ret = rgwstore->get_bucket_info(bucket_str, bucket_info);
+  ret = rgwstore->get_bucket_info(NULL, bucket_str, bucket_info);
   if (ret < 0)
     return ret;
 
@@ -423,7 +423,7 @@ static void remove_old_indexes(RGWUserInfo& old_info, RGWUserInfo new_info)
 int bucket_stats(rgw_bucket& bucket, Formatter *formatter)
 {
   RGWBucketInfo bucket_info;
-  int r = rgwstore->get_bucket_info(bucket.name, bucket_info);
+  int r = rgwstore->get_bucket_info(NULL, bucket.name, bucket_info);
   if (r < 0)
     return r;
 
@@ -746,7 +746,7 @@ int main(int argc, char **argv)
       snprintf(bucket_char, sizeof(bucket_char), ".%lld",
                (long long unsigned)bucket_id);
       string bucket_string(bucket_char);
-      int ret = rgwstore->get_bucket_info(bucket_string, bucket_info);
+      int ret = rgwstore->get_bucket_info(NULL, bucket_string, bucket_info);
 
       if (ret < 0) {
         cerr << "could not retrieve bucket info for bucket_id=" << bucket_id << std::endl;
@@ -760,7 +760,7 @@ int main(int argc, char **argv)
     } else {
       string bucket_name_str = bucket_name;
       RGWBucketInfo bucket_info;
-      int r = rgwstore->get_bucket_info(bucket_name_str, bucket_info);
+      int r = rgwstore->get_bucket_info(NULL, bucket_name_str, bucket_info);
       if (r < 0) {
         cerr << "could not get bucket info for bucket=" << bucket_name_str << std::endl;
         return r;
index 06e624dd580ff27d0354ac8744df16aa487cd4a9..aa582fb4cfd906b5f1a39046ef2b26fc8a706d47 100644 (file)
@@ -663,7 +663,7 @@ done:
   return r;
 }
 
-int RGWFS::get_bucket_info(string& bucket_name, RGWBucketInfo& info)
+int RGWFS::get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& info)
 {
   return -ENOTSUP;
 }
index 664951ca5415624669214d3c81e6d2f844144ee5..783d7beba2abdd8bd320f922c7a4eda25fb0fbdb 100644 (file)
@@ -62,7 +62,7 @@ public:
   int read(void *ctx, rgw_obj& obj, off_t ofs, size_t size, bufferlist& bl);
   int obj_stat(void *ctx, rgw_obj& obj, uint64_t *psize, time_t *pmtime);
 
-  virtual int get_bucket_info(string& bucket_name, RGWBucketInfo& info);
+  virtual int get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& info);
 };
 
 #endif
index 5648f0369d222c70596659483b70e06047e87d7c..e699b5269fb70daa263f74db3dd6169afd190043 100644 (file)
@@ -181,7 +181,6 @@ void RGWProcess::handle_request(FCGX_Request *fcgx)
     abort_early(s, init_error);
     goto done;
   }
-
   ret = handler->authorize();
   if (ret < 0) {
     dout(10) << "failed to authorize request" << dendl;
index 0164e3c62b24a5dfcd75d1112a45762e2078af24..2c75cc2f313c8ab131e674275290d1a2c7e02188 100644 (file)
@@ -228,7 +228,6 @@ int read_acls(struct req_state *s, bool only_bucket)
 {
   int ret = 0;
   string obj_str;
-
   if (!s->acl) {
      s->acl = new RGWAccessControlPolicy;
      if (!s->acl)
@@ -245,7 +244,7 @@ int read_acls(struct req_state *s, bool only_bucket)
 
   if (s->bucket_name_str.size()) {
     RGWBucketInfo bucket_info;
-    ret = rgwstore->get_bucket_info(s->bucket_name_str, bucket_info);
+    ret = rgwstore->get_bucket_info(s->obj_ctx, s->bucket_name_str, bucket_info);
     if (ret < 0) {
       dout(0) << "couldn't get bucket from bucket_name (name=" << s->bucket_name_str << ")" << dendl;
       return ret;
@@ -920,7 +919,7 @@ int RGWCopyObj::verify_permission()
 
   RGWBucketInfo bucket_info;
 
-  ret = rgwstore->get_bucket_info(src_bucket_name, bucket_info);
+  ret = rgwstore->get_bucket_info(s->obj_ctx, src_bucket_name, bucket_info);
   if (ret < 0)
     return ret;
 
index 3a894cd00c6a8b0bfd69654f63ffe869d6cd3f30..9e23e4d2e589364220cf434249d087bb66407fcf 100644 (file)
@@ -1061,6 +1061,7 @@ int RGWRados::delete_obj(void *ctx, std::string& id, rgw_obj& obj, bool sync)
 
 int RGWRados::get_obj_state(RGWRadosCtx *rctx, rgw_obj& obj, librados::IoCtx& io_ctx, string& actual_obj, RGWObjState **state)
 {
+  dout(20) << "get_obj_state: rctx=" << (void *)rctx << " obj=" << obj << dendl;
   RGWObjState *s = rctx->get_state(obj);
   *state = s;
   if (s->has_attrs)
@@ -1811,11 +1812,11 @@ int RGWRados::get_bucket_stats(rgw_bucket& bucket, map<RGWObjCategory, RGWBucket
   return 0;
 }
 
-int RGWRados::get_bucket_info(string& bucket_name, RGWBucketInfo& info)
+int RGWRados::get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& info)
 {
   bufferlist bl;
 
-  int ret = rgw_get_obj(pi_buckets_rados, bucket_name, bl);
+  int ret = rgw_get_obj(ctx, pi_buckets_rados, bucket_name, bl);
   if (ret < 0) {
     if (ret != -ENOENT)
       return ret;
index 331d0eb83ca39ef515ab8added4a596f4106b549..97c21a99c3f4e18874fcdf0504ebf283d5f5dde9 100644 (file)
@@ -48,10 +48,20 @@ struct RGWRadosCtx {
   int (*intent_cb)(void *user_ctx, rgw_obj& obj, RGWIntentEvent intent);
   void *user_ctx;
   RGWObjState *get_state(rgw_obj& obj) {
-    return &objs_state[obj];
+    if (obj.object.size()) {
+      return &objs_state[obj];
+    } else {
+      rgw_obj new_obj(rgw_root_bucket, obj.bucket.name);
+      return &objs_state[new_obj];
+    }
   }
   void set_atomic(rgw_obj& obj) {
-    objs_state[obj].is_atomic = true;
+    if (obj.object.size()) {
+      objs_state[obj].is_atomic = true;
+    } else {
+      rgw_obj new_obj(rgw_root_bucket, obj.bucket.name);
+      objs_state[new_obj].is_atomic = true;
+    }
   }
   void set_intent_cb(int (*cb)(void *user_ctx, rgw_obj& obj, RGWIntentEvent intent)) {
     intent_cb = cb;
@@ -298,7 +308,7 @@ public:
 
   int decode_policy(bufferlist& bl, ACLOwner *owner);
   int get_bucket_stats(rgw_bucket& bucket, map<RGWObjCategory, RGWBucketStats>& stats);
-  virtual int get_bucket_info(string& bucket_name, RGWBucketInfo& info);
+  virtual int get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& info);
 
   int cls_rgw_init_index(rgw_bucket& bucket, string& oid);
   int cls_obj_prepare_op(rgw_bucket& bucket, uint8_t op, string& tag, string& name);
index f6f660876c4567f7aeb379b321c43c7973ce19c3..d3627b3b9ecb0286d0939bbc4e593172fcb1ac97 100644 (file)
@@ -29,7 +29,7 @@ int rgw_put_obj(string& uid, rgw_bucket& bucket, string& oid, const char *data,
   return ret;
 }
 
-int rgw_get_obj(rgw_bucket& bucket, string& key, bufferlist& bl)
+int rgw_get_obj(void *ctx, rgw_bucket& bucket, string& key, bufferlist& bl)
 {
   int ret;
   char *data = NULL;
@@ -38,13 +38,13 @@ int rgw_get_obj(rgw_bucket& bucket, string& key, bufferlist& bl)
   bufferlist::iterator iter;
   int request_len = READ_CHUNK_LEN;
   rgw_obj obj(bucket, key);
-  ret = rgwstore->prepare_get_obj(NULL, obj, 0, NULL, NULL, NULL,
+  ret = rgwstore->prepare_get_obj(ctx, obj, 0, NULL, NULL, NULL,
                                   NULL, NULL, NULL, NULL, NULL, NULL, &handle, &err);
   if (ret < 0)
     return ret;
 
   do {
-    ret = rgwstore->get_obj(NULL, &handle, obj, &data, 0, request_len - 1);
+    ret = rgwstore->get_obj(ctx, &handle, obj, &data, 0, request_len - 1);
     if (ret < 0)
       goto done;
     if (ret < request_len)
index a3d0e428363535263c3d657b09c4cc1db7579a53..2788aeca306b0d806204f33e3b1ea39a91377436 100644 (file)
@@ -8,6 +8,6 @@
 
 
 int rgw_put_obj(string& uid, rgw_bucket& bucket, string& oid, const char *data, size_t size);
-int rgw_get_obj(rgw_bucket& bucket, string& key, bufferlist& bl);
+int rgw_get_obj(void *ctx, rgw_bucket& bucket, string& key, bufferlist& bl);
 
 #endif
index 6e056c87f6025092b4beb0c9d6f8b67425c3865a..a7ddf73499c6576dfe246119347c81fee0c04793 100644 (file)
@@ -116,7 +116,7 @@ int rgw_get_user_info_from_index(string& key, rgw_bucket& bucket, RGWUserInfo& i
   bufferlist bl;
   RGWUID uid;
 
-  int ret = rgw_get_obj(bucket, key, bl);
+  int ret = rgw_get_obj(NULL, bucket, key, bl);
   if (ret < 0)
     return ret;