]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_rgw: refactor read_bucket_dir in terms of tmap.
authorGreg Farnum <gregory.farnum@dreamhost.com>
Tue, 11 Oct 2011 22:50:33 +0000 (15:50 -0700)
committerGreg Farnum <gregory.farnum@dreamhost.com>
Thu, 13 Oct 2011 16:33:11 +0000 (09:33 -0700)
This function won't be called often once refactoring is done, but
its functionality will be needed for listing, if nothing else.

Signed-off-by: Greg Farnum <gregory.farnum@dreamhost.com>
src/cls_rgw.cc

index 5a299ef8ad5589dfac2a898f0e1e4fb6a98a645d..72c875ab9662279adc0d1022a71a2e83e8e4d05e 100644 (file)
@@ -38,13 +38,27 @@ static int read_bucket_dir(cls_method_context_t hctx, struct rgw_bucket_dir& dir
   if (rc < 0)
     return rc;
 
-  rc = cls_cxx_read(hctx, 0, size, &bl);
+  rc = cls_cxx_map_read_full(hctx, &bl);
   if (rc < 0)
     return rc;
 
   try {
     bufferlist::iterator iter = bl.begin();
-    ::decode(dir, iter);
+    bufferlist header_bl;
+    ::decode(header_bl, iter);
+    bufferlist::iterator header_iter = header_bl.begin();
+    ::decode(dir.header, header_iter);
+    __u32 nkeys = 0;
+    ::decode(nkeys, iter);
+    while (nkeys) {
+      string key;
+      bufferlist value;
+      ::decode(key, iter);
+      ::decode(value, iter);
+      bufferlist::iterator val_iter = value.begin();
+      ::decode(dir.m[key], val_iter);
+      --nkeys;
+    }
   } catch (buffer::error& err) {
     CLS_LOG("ERROR: read_bucket_dir(): failed to decode buffer\n");
     return -EIO;