]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_rgw, rgw-admin: move bi_get() entry encoding to cls
authorYehuda Sadeh <yehuda@redhat.com>
Tue, 21 Oct 2014 19:42:54 +0000 (12:42 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Mon, 19 Jan 2015 23:57:46 +0000 (15:57 -0800)
Create a new structure to hold entry info, so that we can later creata a
bi_list() operation.

Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/cls/rgw/cls_rgw.cc
src/cls/rgw/cls_rgw_client.cc
src/cls/rgw/cls_rgw_client.h
src/cls/rgw/cls_rgw_ops.h
src/cls/rgw/cls_rgw_types.cc
src/cls/rgw/cls_rgw_types.h
src/rgw/rgw_admin.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 7c042f409fc185aef6a3bb7483f776ba005699d5..ce9729edebf71ac9ff2cd7e56fb8426fbcd4149f 100644 (file)
@@ -1709,10 +1709,12 @@ static int rgw_bi_get_op(cls_method_context_t hctx, bufferlist *in, bufferlist *
 
   rgw_cls_bi_get_ret op_ret;
 
-  op_ret.type = op.type;
-  op_ret.idx = idx;
+  rgw_cls_bi_entry& entry = op_ret.entry;
 
-  int r = cls_cxx_map_get_val(hctx, idx, &op_ret.data);
+  entry.type = op.type;
+  entry.idx = idx;
+
+  int r = cls_cxx_map_get_val(hctx, idx, &entry.data);
   if (r < 0) {
       CLS_LOG(10, "%s(): cls_cxx_map_get_val() returned %d", __func__, r);
       return r;
index d9eed8c19b60c2d68a8637edafa9481b88787ca8..4e1af1e1279085a8884990a7eb53643d66a2eb18 100644 (file)
@@ -105,8 +105,7 @@ void cls_rgw_remove_obj(librados::ObjectWriteOperation& o, list<string>& keep_at
 
 int cls_rgw_bi_get(librados::IoCtx& io_ctx, const string oid,
                    BIIndexType index_type, cls_rgw_obj_key& key,
-                   string *idx,
-                   bufferlist *data)
+                   rgw_cls_bi_entry *entry)
 {
   bufferlist in, out;
   struct rgw_cls_bi_get_op call;
@@ -125,8 +124,7 @@ int cls_rgw_bi_get(librados::IoCtx& io_ctx, const string oid,
     return -EIO;
   }
 
-  *idx = op_ret.idx;
-  data->swap(op_ret.data);
+  *entry = op_ret.entry;
 
   return 0;
 }
index 771e5e5d3f1943eddf993f2813626293051d633a..ed242baf338f6406c8e3eedf5af148a4b98f8aac 100644 (file)
@@ -35,7 +35,7 @@ void cls_rgw_remove_obj(librados::ObjectWriteOperation& o, list<string>& keep_at
 
 int cls_rgw_bi_get(librados::IoCtx& io_ctx, const string oid,
                    BIIndexType index_type, cls_rgw_obj_key& key,
-                   string *idx, bufferlist *data);
+                   rgw_cls_bi_entry *entry);
 
 int cls_rgw_bucket_link_olh(librados::IoCtx& io_ctx, const string& oid, const cls_rgw_obj_key& key,
                             bool delete_marker, const string& op_tag);
index 308ab6cc5fceb8ddf74b48e6a9cb12be4cd41543..2963ad2bfa1b2761cf71c4bbd194790aee7b9bc9 100644 (file)
@@ -414,33 +414,24 @@ struct rgw_cls_bi_get_op {
 WRITE_CLASS_ENCODER(rgw_cls_bi_get_op)
 
 struct rgw_cls_bi_get_ret {
-  BIIndexType type;
-  string idx;
-  bufferlist data;
+  rgw_cls_bi_entry entry;
 
-  rgw_cls_bi_get_ret() : type(PlainIdx) {}
+  rgw_cls_bi_get_ret() {}
 
   void encode(bufferlist& bl) const {
     ENCODE_START(1, 1, bl);
-    ::encode((uint8_t)type, bl);
-    ::encode(idx, bl);
-    ::encode(data, bl);
+    ::encode(entry, bl);
     ENCODE_FINISH(bl);
   }
 
   void decode(bufferlist::iterator& bl) {
     DECODE_START(1, bl);
-    uint8_t c;
-    ::decode(c, bl);
-    type = (BIIndexType)c;
-    ::decode(idx, bl);
-    ::decode(data, bl);
+    ::decode(entry, bl);
     DECODE_FINISH(bl);
   }
 };
 WRITE_CLASS_ENCODER(rgw_cls_bi_get_ret)
 
-
 struct rgw_cls_usage_log_read_op {
   uint64_t start_epoch;
   uint64_t end_epoch;
index 72189800217cd224c026351de56e5a558226f65f..15120d5cf8b74f23c946d37b149e51c310faf2e5 100644 (file)
@@ -110,6 +110,51 @@ void rgw_bucket_dir_entry::dump(Formatter *f) const
   f->close_section();
 }
 
+static void dump_bi_entry(bufferlist bl, BIIndexType index_type, Formatter *formatter)
+{
+  bufferlist::iterator iter = bl.begin();
+  switch (index_type) {
+    case PlainIdx:
+    case InstanceIdx:
+      {
+        rgw_bucket_dir_entry entry;
+        ::decode(entry, iter);
+        encode_json("entry", entry, formatter);
+      }
+      break;
+    case OLHIdx:
+      {
+        rgw_bucket_olh_entry entry;
+        ::decode(entry, iter);
+        encode_json("entry", entry, formatter);
+      }
+      break;
+    default:
+      break;
+  }
+}
+
+void rgw_cls_bi_entry::dump(Formatter *f) const
+{
+  string type_str;
+  switch (type) {
+    case PlainIdx:
+      type_str = "plain";
+      break;
+    case InstanceIdx:
+      type_str = "instance";
+      break;
+    case OLHIdx:
+      type_str = "olh";
+      break;
+    default:
+      type_str = "invalid";
+  }
+  encode_json("type", type_str, f);
+  encode_json("idx", idx, f);
+  dump_bi_entry(data, type, f);
+}
+
 void rgw_bucket_olh_entry::dump(Formatter *f) const
 {
   encode_json("key", key, f);
index 00676d894bfaf6cb5ee42c0a3df16e70ed4c3922..4721fdd0fe510123c3b47883acec1825e4b42b1e 100644 (file)
@@ -329,6 +329,35 @@ enum BIIndexType {
   OLHIdx        = 3,
 };
 
+struct rgw_cls_bi_entry {
+  BIIndexType type;
+  string idx;
+  bufferlist data;
+
+  rgw_cls_bi_entry() : type(InvalidIdx) {}
+
+  void encode(bufferlist& bl) const {
+    ENCODE_START(1, 1, bl);
+    ::encode((uint8_t)type, bl);
+    ::encode(idx, bl);
+    ::encode(data, bl);
+    ENCODE_FINISH(bl);
+  }
+
+  void decode(bufferlist::iterator& bl) {
+    DECODE_START(1, bl);
+    uint8_t c;
+    ::decode(c, bl);
+    type = (BIIndexType)c;
+    ::decode(idx, bl);
+    ::decode(data, bl);
+    DECODE_FINISH(bl);
+  }
+
+  void dump(Formatter *f) const;
+};
+WRITE_CLASS_ENCODER(rgw_cls_bi_entry)
+
 enum OLHLogOp {
   CLS_RGW_OLH_OP_LINK_OLH        = 1,
   CLS_RGW_OLH_OP_REMOVE_INSTANCE = 2,
index 0062ea232d4323ec7c48ad3d7e1b489b1e2ac47f..358c40bb43e893f8ee90595a8f8146aa6b26ca36 100644 (file)
@@ -1994,19 +1994,15 @@ next:
       obj.set_instance(object_version);
     }
 
-    string idx;
-    bufferlist bl;
+    rgw_cls_bi_entry entry;
 
-    ret = store->bi_get(bucket, obj, bi_index_type, &idx, &bl);
+    ret = store->bi_get(bucket, obj, bi_index_type, &entry);
     if (ret < 0) {
       cerr << "ERROR: bi_get(): " << cpp_strerror(-ret) << std::endl;
       return -ret;
     }
 
-    formatter->open_object_section("result");
-    encode_json("idx", idx, formatter);
-    dump_bi_entry(bl, bi_index_type, formatter);
-    formatter->close_section();
+    encode_json("entry", entry, formatter);
     formatter->flush(cout);
   }
 
index d223452f309bc773c2c6c953ef11cd1d95e341fa..b7aaf5171715a0a807ed4d93d652deeaa7b35c4a 100644 (file)
@@ -6573,7 +6573,7 @@ int RGWRados::trim_bi_log_entries(rgw_bucket& bucket, string& start_marker, stri
   return 0;
 }
 
-int RGWRados::bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, string *idx, bufferlist *data)
+int RGWRados::bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry)
 {
   librados::IoCtx index_ctx;
   string oid;
@@ -6583,7 +6583,7 @@ int RGWRados::bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, s
 
   cls_rgw_obj_key key(obj.get_index_key_name(), obj.get_instance());
   
-  int ret = cls_rgw_bi_get(index_ctx, oid, index_type, key, idx, data);
+  int ret = cls_rgw_bi_get(index_ctx, oid, index_type, key, entry);
   if (ret < 0)
     return ret;
 
index ab3d2478c16b3b3fd0d5def5be14b86f7467feb1..2079ca6d9e959c6cc488239d6c4a1b15b7754594 100644 (file)
@@ -1768,7 +1768,7 @@ public:
   int list_bi_log_entries(rgw_bucket& bucket, string& marker, uint32_t max, std::list<rgw_bi_log_entry>& result, bool *truncated);
   int trim_bi_log_entries(rgw_bucket& bucket, string& marker, string& end_marker);
 
-  int bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, string *idx, bufferlist *data);
+  int bi_get(rgw_bucket& bucket, rgw_obj& obj, BIIndexType index_type, rgw_cls_bi_entry *entry);
 
   int cls_obj_usage_log_add(const string& oid, rgw_usage_log_info& info);
   int cls_obj_usage_log_read(string& oid, string& user, uint64_t start_epoch, uint64_t end_epoch, uint32_t max_entries,