summaryrefslogtreecommitdiff
path: root/src/cls_rgw.cc
diff options
context:
space:
mode:
authorGreg Farnum <gregory.farnum@dreamhost.com>2011-10-11 15:50:33 -0700
committerGreg Farnum <gregory.farnum@dreamhost.com>2011-10-13 09:33:11 -0700
commit15a3df84dd45f657adbdfc6f2c1eda7b75eca514 (patch)
tree3c7a5ceb45c8dd37287d96972cf52fbcf13935be /src/cls_rgw.cc
parent583e16d9591391c834cd17154571926bffc05abc (diff)
downloadceph-15a3df84dd45f657adbdfc6f2c1eda7b75eca514.tar.gz
cls_rgw: refactor read_bucket_dir in terms of tmap.
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>
Diffstat (limited to 'src/cls_rgw.cc')
-rw-r--r--src/cls_rgw.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/cls_rgw.cc b/src/cls_rgw.cc
index 5a299ef8ad5..72c875ab966 100644
--- a/src/cls_rgw.cc
+++ b/src/cls_rgw.cc
@@ -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;