]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: zone info is configurable
authorYehuda Sadeh <yehuda@inktank.com>
Fri, 1 Feb 2013 01:13:06 +0000 (17:13 -0800)
committerYehuda Sadeh <yehuda@inktank.com>
Fri, 22 Mar 2013 21:30:02 +0000 (14:30 -0700)
Also rename RadosParams to ZoneParams

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_cache.h
src/rgw/rgw_log.cc
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h
src/rgw/rgw_user.cc

index d940dbc08d9b55cba411e596c86ec8be350ba27c..4bbbb8615226fa38b7445d53548426f193067f3f 100644 (file)
@@ -6,6 +6,8 @@
 
 using namespace std;
 
+#include "common/ceph_json.h"
+
 #include "common/config.h"
 #include "common/ceph_argparse.h"
 #include "common/Formatter.h"
@@ -163,6 +165,7 @@ enum {
   OPT_GC_LIST,
   OPT_GC_PROCESS,
   OPT_ZONE_INFO,
+  OPT_ZONE_SET,
   OPT_CAPS_ADD,
   OPT_CAPS_RM,
 };
@@ -291,6 +294,8 @@ static int get_cmd(const char *cmd, const char *prev_cmd, bool *need_more)
   } else if (strcmp(prev_cmd, "zone") == 0) {
     if (strcmp(cmd, "info") == 0)
       return OPT_ZONE_INFO;
+    if (strcmp(cmd, "set") == 0)
+      return OPT_ZONE_SET;
   } else if (strcmp(prev_cmd, "gc") == 0) {
     if (strcmp(cmd, "list") == 0)
       return OPT_GC_LIST;
@@ -640,7 +645,7 @@ static int remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_childr
   obj.bucket = bucket;
   int max = 1000;
 
-  ret = rgw_get_obj(store, NULL, store->params.domain_root, bucket.name, bl, NULL);
+  ret = rgw_get_obj(store, NULL, store->zone.domain_root, bucket.name, bl, NULL);
 
   bufferlist::iterator iter = bl.begin();
   try {
@@ -694,6 +699,65 @@ static bool bucket_object_check_filter(const string& name)
   return rgw_obj::translate_raw_obj_to_obj_in_ns(obj, ns);
 }
 
+static int read_input(const string& infile, bufferlist& bl)
+{
+  int fd = 0;
+  if (infile.size()) {
+    fd = open(infile.c_str(), O_RDONLY);
+    if (fd < 0) {
+      int err = -errno;
+      cerr << "error reading input file " << infile << std::endl;
+      return err;
+    }
+  }
+
+#define READ_CHUNK 8196
+  int r;
+
+  do {
+    char buf[READ_CHUNK];
+
+    r = read(fd, buf, READ_CHUNK);
+    if (r < 0) {
+      int err = -errno;
+      cerr << "error while reading input" << std::endl;
+      return err;
+    }
+    bl.append(buf, r);
+  } while (r > 0);
+
+  if (infile.size()) {
+    close(fd);
+  }
+
+  return 0;
+}
+
+template <class T>
+static int read_decode_json(const string& infile, T& t)
+{
+  bufferlist bl;
+  int ret = read_input(infile, bl);
+  if (ret < 0) {
+    cerr << "ERROR: failed to read input: " << cpp_strerror(-ret) << std::endl;
+    return ret;
+  }
+  JSONParser p;
+  ret = p.parse(bl.c_str(), bl.length());
+  if (ret < 0) {
+    cout << "failed to parse JSON" << std::endl;
+    return ret;
+  }
+
+  try {
+    t.decode_json(&p);
+  } catch (JSONDecoder::err& e) {
+    cout << "failed to decode JSON input: " << e.message << std::endl;
+    return -EINVAL;
+  }
+  return 0;
+}
+    
 class StoreDestructor {
   RGWRados *store;
 public:
@@ -747,6 +811,7 @@ int main(int argc, char **argv)
   map<string, bool> categories;
   string caps;
   int check_objects = false;
+  string infile;
 
   std::string val;
   std::ostringstream errs;
@@ -846,6 +911,8 @@ int main(int argc, char **argv)
       // do nothing
     } else if (ceph_argparse_witharg(args, i, &val, "--caps", (char*)NULL)) {
       caps = val;
+    } else if (ceph_argparse_witharg(args, i, &val, "-i", "--infile", (char*)NULL)) {
+      infile = val;
     } else {
       ++i;
     }
@@ -1801,7 +1868,25 @@ next:
   }
 
   if (opt_cmd == OPT_ZONE_INFO) {
-    store->params.dump(formatter);
+    store->zone.dump(formatter);
+    formatter->flush(cout);
+  }
+
+  if (opt_cmd == OPT_ZONE_SET) {
+    RGWZoneParams zone;
+    zone.init_default();
+    int ret = read_decode_json(infile, zone);
+    if (ret < 0) {
+      return 1;
+    }
+
+    ret = zone.store_info(g_ceph_context, store);
+    if (ret < 0) {
+      cerr << "ERROR: couldn't store zone info: " << cpp_strerror(-ret) << std::endl;
+      return 1;
+    }
+
+    zone.dump(formatter);
     formatter->flush(cout);
   }
 
index e4002f6af25da8bdfed90b7c4169deee27e204b6..4de16384f1a233085cc3508bc877536b4efd00d6 100644 (file)
@@ -211,7 +211,7 @@ void RGWCache<T>::normalize_bucket_and_obj(rgw_bucket& src_bucket, string& src_o
     dst_bucket = src_bucket;
     dst_obj = src_obj;
   } else {
-    dst_bucket = T::params.domain_root;
+    dst_bucket = T::zone.domain_root;
     dst_obj = src_bucket.name;
   }
 }
index b79cf30bbe317443b21341d4f336d4b666ceead3..09fdacf4f2f87b036b4d813b304bc1cc41c39cf9 100644 (file)
@@ -340,11 +340,11 @@ int rgw_log_op(RGWRados *store, struct req_state *s, const string& op_name, OpsL
     string oid = render_log_object_name(s->cct->_conf->rgw_log_object_name, &bdt,
                                        s->bucket.bucket_id, entry.bucket);
 
-    rgw_obj obj(store->params.log_pool, oid);
+    rgw_obj obj(store->zone.log_pool, oid);
 
     ret = store->append_async(obj, bl.length(), bl);
     if (ret == -ENOENT) {
-      ret = store->create_pool(store->params.log_pool);
+      ret = store->create_pool(store->zone.log_pool);
       if (ret < 0)
         goto done;
       // retry
@@ -364,7 +364,7 @@ done:
 
 int rgw_log_intent(RGWRados *store, rgw_obj& obj, RGWIntentEvent intent, const utime_t& timestamp, bool utc)
 {
-  rgw_bucket intent_log_bucket(store->params.intent_log_pool);
+  rgw_bucket intent_log_bucket(store->zone.intent_log_pool);
 
   rgw_intent_log_entry entry;
   entry.obj = obj;
index f118f04304c599983b72b9b1921a5f267c01b8c0..ecceb06c5fb4420f9b1e31cb03573e9234c89dba 100644 (file)
@@ -804,7 +804,7 @@ void RGWCreateBucket::execute()
   bufferlist aclbl;
   bool existed;
   int r;
-  rgw_obj obj(store->params.domain_root, s->bucket_name_str);
+  rgw_obj obj(store->zone.domain_root, s->bucket_name_str);
 
   ret = get_params();
   if (ret < 0)
index b79dd84873d38817d82a2cd4cb5e5f32d11679af..ea905f8c55bb28d42db6ac2b01cf5acc51c7431e 100644 (file)
@@ -2,6 +2,8 @@
 #include <stdlib.h>
 #include <sys/types.h>
 
+#include "common/ceph_json.h"
+
 #include "common/errno.h"
 #include "common/Formatter.h"
 #include "common/Throttle.h"
@@ -54,12 +56,12 @@ static RGWObjCategory main_category = RGW_OBJ_CATEGORY_MAIN;
 
 #define RGW_USAGE_OBJ_PREFIX "usage."
 
-#define RGW_DEFAULT_zone_ROOT_POOL ".rgw.root"
+#define RGW_DEFAULT_ZONE_ROOT_POOL ".rgw.root"
 
 
 #define dout_subsys ceph_subsys_rgw
 
-void RGWRadosParams::init_default()
+void RGWZoneParams::init_default()
 {
   domain_root = ".rgw";
   control_pool = ".rgw.control";
@@ -73,7 +75,7 @@ void RGWRadosParams::init_default()
   user_uid_pool = ".users.uid";
 }
 
-void RGWRadosParams::dump(Formatter *f) const
+void RGWZoneParams::dump(Formatter *f) const
 {
   f->open_object_section("zone");
   f->dump_string("domain_root", domain_root.pool);
@@ -89,11 +91,35 @@ void RGWRadosParams::dump(Formatter *f) const
   f->close_section();
 }
 
-int RGWRadosParams::init(CephContext *cct, RGWRados *store)
+static void decode_json(const char *field, rgw_bucket& bucket, JSONObj *obj)
+{
+  string pool;
+  JSONDecoder::decode_json(field, pool, obj);
+  if (pool[0] != '.') {
+    pool = string(".") + pool;
+  }
+  bucket = rgw_bucket(pool.c_str());
+}
+
+void RGWZoneParams::decode_json(JSONObj *obj)
+{
+  ::decode_json("domain_root", domain_root, obj);
+  ::decode_json("control_pool", control_pool, obj);
+  ::decode_json("gc_pool", gc_pool, obj);
+  ::decode_json("log_pool", log_pool, obj);
+  ::decode_json("intent_log_pool", intent_log_pool, obj);
+  ::decode_json("usage_log_pool", usage_log_pool, obj);
+  ::decode_json("user_keys_pool", user_keys_pool, obj);
+  ::decode_json("user_email_pool", user_email_pool, obj);
+  ::decode_json("user_swift_pool", user_swift_pool, obj);
+  ::decode_json("user_uid_pool ", user_uid_pool, obj);
+}
+
+int RGWZoneParams::init(CephContext *cct, RGWRados *store)
 {
   string pool_name = cct->_conf->rgw_zone_root_pool;
   if (pool_name.empty())
-    pool_name = RGW_DEFAULT_zone_ROOT_POOL;
+    pool_name = RGW_DEFAULT_ZONE_ROOT_POOL;
 
   rgw_bucket pool(pool_name.c_str());
   bufferlist bl;
@@ -117,6 +143,21 @@ int RGWRadosParams::init(CephContext *cct, RGWRados *store)
   return 0;
 }
 
+int RGWZoneParams::store_info(CephContext *cct, RGWRados *store)
+{
+  string pool_name = cct->_conf->rgw_zone_root_pool;
+  if (pool_name.empty())
+    pool_name = RGW_DEFAULT_ZONE_ROOT_POOL;
+
+  rgw_bucket pool(pool_name.c_str());
+
+  bufferlist bl;
+  ::encode(*this, bl);
+  int ret = rgw_put_system_obj(store, pool, zone_info_oid, bl.c_str(), bl.length(), false, NULL);
+
+  return ret;
+}
+
 void RGWObjManifest::append(RGWObjManifest& m)
 {
   map<uint64_t, RGWObjManifestPart>::iterator iter;
@@ -142,7 +183,7 @@ RGWObjState *RGWRadosCtx::get_state(rgw_obj& obj) {
   if (obj.object.size()) {
     return &objs_state[obj];
   } else {
-    rgw_obj new_obj(store->params.domain_root, obj.bucket.name);
+    rgw_obj new_obj(store->zone.domain_root, obj.bucket.name);
     return &objs_state[new_obj];
   }
 }
@@ -151,7 +192,7 @@ void RGWRadosCtx::set_atomic(rgw_obj& obj) {
   if (obj.object.size()) {
     objs_state[obj].is_atomic = true;
   } else {
-    rgw_obj new_obj(store->params.domain_root, obj.bucket.name);
+    rgw_obj new_obj(store->zone.domain_root, obj.bucket.name);
     objs_state[new_obj].is_atomic = true;
   }
 }
@@ -160,7 +201,7 @@ void RGWRadosCtx::set_prefetch_data(rgw_obj& obj) {
   if (obj.object.size()) {
     objs_state[obj].prefetch_data = true;
   } else {
-    rgw_obj new_obj(store->params.domain_root, obj.bucket.name);
+    rgw_obj new_obj(store->zone.domain_root, obj.bucket.name);
     objs_state[new_obj].prefetch_data = true;
   }
 }
@@ -194,7 +235,7 @@ int RGWRados::initialize()
   if (ret < 0)
    return ret;
 
-  params.init(cct, this);
+  zone.init(cct, this);
 
   ret = open_root_pool_ctx();
   if (ret < 0)
@@ -239,7 +280,7 @@ void RGWRados::finalize_watch()
  */
 int RGWRados::open_root_pool_ctx()
 {
-  const string& pool = params.domain_root.name;
+  const string& pool = zone.domain_root.name;
   const char *pool_str = pool.c_str();
   int r = rados->ioctx_create(pool_str, root_pool_ctx);
   if (r == -ENOENT) {
@@ -257,7 +298,7 @@ int RGWRados::open_root_pool_ctx()
 
 int RGWRados::open_gc_pool_ctx()
 {
-  const char *gc_pool = params.gc_pool.name.c_str();
+  const char *gc_pool = zone.gc_pool.name.c_str();
   int r = rados->ioctx_create(gc_pool, gc_pool_ctx);
   if (r == -ENOENT) {
     r = rados->pool_create(gc_pool);
@@ -274,7 +315,7 @@ int RGWRados::open_gc_pool_ctx()
 
 int RGWRados::init_watch()
 {
-  const char *control_pool = params.control_pool.name.c_str();
+  const char *control_pool = zone.control_pool.name.c_str();
   int r = rados->ioctx_create(control_pool, control_pool_ctx);
   if (r == -ENOENT) {
     r = rados->pool_create(control_pool);
@@ -406,7 +447,7 @@ struct log_list_state {
 int RGWRados::log_list_init(const string& prefix, RGWAccessHandle *handle)
 {
   log_list_state *state = new log_list_state;
-  const char *log_pool = params.log_pool.name.c_str();
+  const char *log_pool = zone.log_pool.name.c_str();
   int r = rados->ioctx_create(log_pool, state->io_ctx);
   if (r < 0) {
     delete state;
@@ -441,7 +482,7 @@ int RGWRados::log_list_next(RGWAccessHandle handle, string *name)
 int RGWRados::log_remove(const string& name)
 {
   librados::IoCtx io_ctx;
-  const char *log_pool = params.log_pool.name.c_str();
+  const char *log_pool = zone.log_pool.name.c_str();
   int r = rados->ioctx_create(log_pool, io_ctx);
   if (r < 0)
     return r;
@@ -461,7 +502,7 @@ struct log_show_state {
 int RGWRados::log_show_init(const string& name, RGWAccessHandle *handle)
 {
   log_show_state *state = new log_show_state;
-  const char *log_pool = params.log_pool.name.c_str();
+  const char *log_pool = zone.log_pool.name.c_str();
   int r = rados->ioctx_create(log_pool, state->io_ctx);
   if (r < 0) {
     delete state;
@@ -799,7 +840,7 @@ int RGWRados::create_bucket(string& owner, rgw_bucket& bucket,
   uint32_t nop = 0;
   ::encode(nop, bl);
 
-  const string& pool = params.domain_root.name;
+  const string& pool = zone.domain_root.name;
   const char *pool_str = pool.c_str();
   librados::IoCtx id_io_ctx;
   r = rados->ioctx_create(pool_str, id_io_ctx);
@@ -838,7 +879,7 @@ int RGWRados::store_bucket_info(RGWBucketInfo& info, map<string, bufferlist> *pa
   bufferlist bl;
   ::encode(info, bl);
 
-  int ret = rgw_put_system_obj(this, params.domain_root, info.bucket.name, bl.c_str(), bl.length(), exclusive, pattrs);
+  int ret = rgw_put_system_obj(this, zone.domain_root, info.bucket.name, bl.c_str(), bl.length(), exclusive, pattrs);
   if (ret < 0)
     return ret;
 
@@ -854,9 +895,9 @@ int RGWRados::select_bucket_placement(string& bucket_name, rgw_bucket& bucket)
   string pool_name;
   bool write_map = false;
 
-  rgw_obj obj(params.domain_root, avail_pools);
+  rgw_obj obj(zone.domain_root, avail_pools);
 
-  int ret = rgw_get_obj(this, NULL, params.domain_root, avail_pools, map_bl);
+  int ret = rgw_get_obj(this, NULL, zone.domain_root, avail_pools, map_bl);
   if (ret < 0) {
     goto read_omap;
   }
@@ -928,7 +969,7 @@ int RGWRados::update_placement_map()
 {
   bufferlist header;
   map<string, bufferlist> m;
-  rgw_obj obj(params.domain_root, avail_pools);
+  rgw_obj obj(zone.domain_root, avail_pools);
   int ret = omap_get_all(obj, header, m);
   if (ret < 0)
     return ret;
@@ -949,7 +990,7 @@ int RGWRados::add_bucket_placement(std::string& new_pool)
   if (ret < 0) // DNE, or something
     return ret;
 
-  rgw_obj obj(params.domain_root, avail_pools);
+  rgw_obj obj(zone.domain_root, avail_pools);
   bufferlist empty_bl;
   ret = omap_set(obj, new_pool, empty_bl);
 
@@ -961,7 +1002,7 @@ int RGWRados::add_bucket_placement(std::string& new_pool)
 
 int RGWRados::remove_bucket_placement(std::string& old_pool)
 {
-  rgw_obj obj(params.domain_root, avail_pools);
+  rgw_obj obj(zone.domain_root, avail_pools);
   int ret = omap_del(obj, old_pool);
 
   // don't care about return value
@@ -975,7 +1016,7 @@ int RGWRados::list_placement_set(set<string>& names)
   bufferlist header;
   map<string, bufferlist> m;
 
-  rgw_obj obj(params.domain_root, avail_pools);
+  rgw_obj obj(zone.domain_root, avail_pools);
   int ret = omap_get_all(obj, header, m);
   if (ret < 0)
     return ret;
@@ -1514,7 +1555,7 @@ int RGWRados::delete_bucket(rgw_bucket& bucket)
     }
   } while (is_truncated);
 
-  rgw_obj obj(params.domain_root, bucket.name);
+  rgw_obj obj(zone.domain_root, bucket.name);
   r = delete_obj(NULL, obj);
   if (r < 0)
     return r;
@@ -1908,7 +1949,7 @@ int RGWRados::get_attr(void *ctx, rgw_obj& obj, const char *name, bufferlist& de
 
   if (actual_obj.size() == 0) {
     actual_obj = bucket.name;
-    actual_bucket = params.domain_root;
+    actual_bucket = zone.domain_root;
   }
 
   int r = open_bucket_ctx(actual_bucket, io_ctx);
@@ -2094,7 +2135,7 @@ int RGWRados::set_attr(void *ctx, rgw_obj& obj, const char *name, bufferlist& bl
 
   if (actual_obj.size() == 0) {
     actual_obj = bucket.name;
-    actual_bucket = params.domain_root;
+    actual_bucket = zone.domain_root;
   }
 
   int r = open_bucket_ctx(actual_bucket, io_ctx);
@@ -2144,7 +2185,7 @@ int RGWRados::set_attrs(void *ctx, rgw_obj& obj,
 
   if (actual_obj.size() == 0) {
     actual_obj = bucket.name;
-    actual_bucket = params.domain_root;
+    actual_bucket = zone.domain_root;
   }
 
   int r = open_bucket_ctx(actual_bucket, io_ctx);
@@ -3202,7 +3243,7 @@ int RGWRados::get_bucket_info(void *ctx, string& bucket_name, RGWBucketInfo& inf
 {
   bufferlist bl;
 
-  int ret = rgw_get_obj(this, ctx, params.domain_root, bucket_name, bl, pattrs);
+  int ret = rgw_get_obj(this, ctx, zone.domain_root, bucket_name, bl, pattrs);
   if (ret < 0) {
     if (ret != -ENOENT)
       return ret;
@@ -3231,7 +3272,7 @@ int RGWRados::put_bucket_info(string& bucket_name, RGWBucketInfo& info, bool exc
 
   ::encode(info, bl);
 
-  int ret = rgw_put_system_obj(this, params.domain_root, bucket_name, bl.c_str(), bl.length(), exclusive, pattrs);
+  int ret = rgw_put_system_obj(this, zone.domain_root, bucket_name, bl.c_str(), bl.length(), exclusive, pattrs);
 
   return ret;
 }
@@ -3612,7 +3653,7 @@ int RGWRados::cls_obj_usage_log_add(const string& oid, rgw_usage_log_info& info)
 {
   librados::IoCtx io_ctx;
 
-  const char *usage_log_pool = params.usage_log_pool.name.c_str();
+  const char *usage_log_pool = zone.usage_log_pool.name.c_str();
   int r = rados->ioctx_create(usage_log_pool, io_ctx);
   if (r == -ENOENT) {
     rgw_bucket pool(usage_log_pool);
@@ -3640,7 +3681,7 @@ int RGWRados::cls_obj_usage_log_read(string& oid, string& user, uint64_t start_e
 
   *is_truncated = false;
 
-  const char *usage_log_pool = params.usage_log_pool.name.c_str();
+  const char *usage_log_pool = zone.usage_log_pool.name.c_str();
   int r = rados->ioctx_create(usage_log_pool, io_ctx);
   if (r < 0)
     return r;
@@ -3655,7 +3696,7 @@ int RGWRados::cls_obj_usage_log_trim(string& oid, string& user, uint64_t start_e
 {
   librados::IoCtx io_ctx;
 
-  const char *usage_log_pool = params.usage_log_pool.name.c_str();
+  const char *usage_log_pool = zone.usage_log_pool.name.c_str();
   int r = rados->ioctx_create(usage_log_pool, io_ctx);
   if (r < 0)
     return r;
@@ -3872,7 +3913,7 @@ int RGWRados::remove_temp_objects(string date, string time)
   bool is_truncated;
   IntentLogNameFilter filter(date.c_str(), &tm);
   RGWPoolIterCtx iter_ctx;
-  int r = pool_iterate_begin(params.intent_log_pool, iter_ctx);
+  int r = pool_iterate_begin(zone.intent_log_pool, iter_ctx);
   if (r < 0) {
     cerr << "failed to list objects" << std::endl;
     return r;
@@ -3887,7 +3928,7 @@ int RGWRados::remove_temp_objects(string date, string time)
     }
     vector<RGWObjEnt>::iterator iter;
     for (iter = objs.begin(); iter != objs.end(); ++iter) {
-      process_intent_log(params.intent_log_pool, (*iter).name, epoch, I_DEL_OBJ | I_DEL_DIR, true);
+      process_intent_log(zone.intent_log_pool, (*iter).name, epoch, I_DEL_OBJ | I_DEL_DIR, true);
     }
   } while (is_truncated);
 
index ed6f35eca72c613cb3a6f6f4f793cf27d151da00..30cd3a80dfc026409f330b68b1c375e1fb9e2e81 100644 (file)
@@ -238,7 +238,7 @@ struct RGWPoolIterCtx {
   librados::ObjectIterator iter;
 };
 
-struct RGWRadosParams {
+struct RGWZoneParams {
   rgw_bucket domain_root;
   rgw_bucket control_pool;
   rgw_bucket gc_pool;
@@ -253,6 +253,7 @@ struct RGWRadosParams {
 
   int init(CephContext *cct, RGWRados *store);
   void init_default();
+  int store_info(CephContext *cct, RGWRados *store);
 
   void encode(bufferlist& bl) const {
     ENCODE_START(1, 1, bl);
@@ -284,8 +285,9 @@ struct RGWRadosParams {
     DECODE_FINISH(bl);
   }
   void dump(Formatter *f) const;
+  void decode_json(JSONObj *obj);
 };
-WRITE_CLASS_ENCODER(RGWRadosParams);
+WRITE_CLASS_ENCODER(RGWZoneParams);
   
 class RGWRados
 {
@@ -390,7 +392,7 @@ public:
                cct(NULL), rados(NULL),
                pools_initialized(false) {}
 
-  RGWRadosParams params;
+  RGWZoneParams zone;
 
   virtual ~RGWRados() {
     if (rados) {
index 5602fd4345dc8d8d7334b577e14b37483d5a5ac6..3798c19fb3a783607eb18a27dbc358da2305353e 100644 (file)
@@ -80,14 +80,14 @@ int rgw_store_user_info(RGWRados *store, RGWUserInfo& info, RGWUserInfo *old_inf
   ::encode(ui, data_bl);
   ::encode(info, data_bl);
 
-  ret = rgw_put_system_obj(store, store->params.user_uid_pool, info.user_id, data_bl.c_str(), data_bl.length(), exclusive);
+  ret = rgw_put_system_obj(store, store->zone.user_uid_pool, info.user_id, data_bl.c_str(), data_bl.length(), exclusive);
   if (ret < 0)
     return ret;
 
   if (info.user_email.size()) {
     if (!old_info ||
         old_info->user_email.compare(info.user_email) != 0) { /* only if new index changed */
-      ret = rgw_put_system_obj(store, store->params.user_email_pool, info.user_email, link_bl.c_str(), link_bl.length(), exclusive);
+      ret = rgw_put_system_obj(store, store->zone.user_email_pool, info.user_email, link_bl.c_str(), link_bl.length(), exclusive);
       if (ret < 0)
         return ret;
     }
@@ -100,7 +100,7 @@ int rgw_store_user_info(RGWRados *store, RGWUserInfo& info, RGWUserInfo *old_inf
       if (old_info && old_info->access_keys.count(iter->first) != 0)
        continue;
 
-      ret = rgw_put_system_obj(store, store->params.user_keys_pool, k.id, link_bl.c_str(), link_bl.length(), exclusive);
+      ret = rgw_put_system_obj(store, store->zone.user_keys_pool, k.id, link_bl.c_str(), link_bl.length(), exclusive);
       if (ret < 0)
         return ret;
     }
@@ -112,7 +112,7 @@ int rgw_store_user_info(RGWRados *store, RGWUserInfo& info, RGWUserInfo *old_inf
     if (old_info && old_info->swift_keys.count(siter->first) != 0)
       continue;
 
-    ret = rgw_put_system_obj(store, store->params.user_swift_pool, k.id, link_bl.c_str(), link_bl.length(), exclusive);
+    ret = rgw_put_system_obj(store, store->zone.user_swift_pool, k.id, link_bl.c_str(), link_bl.length(), exclusive);
     if (ret < 0)
       return ret;
   }
@@ -150,7 +150,7 @@ int rgw_get_user_info_by_uid(RGWRados *store, string& uid, RGWUserInfo& info)
   bufferlist bl;
   RGWUID user_id;
 
-  int ret = rgw_get_obj(store, NULL, store->params.user_uid_pool, uid, bl);
+  int ret = rgw_get_obj(store, NULL, store->zone.user_uid_pool, uid, bl);
   if (ret < 0)
     return ret;
 
@@ -178,7 +178,7 @@ int rgw_get_user_info_by_uid(RGWRados *store, string& uid, RGWUserInfo& info)
  */
 int rgw_get_user_info_by_email(RGWRados *store, string& email, RGWUserInfo& info)
 {
-  return rgw_get_user_info_from_index(store, email, store->params.user_email_pool, info);
+  return rgw_get_user_info_from_index(store, email, store->zone.user_email_pool, info);
 }
 
 /**
@@ -187,7 +187,7 @@ int rgw_get_user_info_by_email(RGWRados *store, string& email, RGWUserInfo& info
  */
 extern int rgw_get_user_info_by_swift(RGWRados *store, string& swift_name, RGWUserInfo& info)
 {
-  return rgw_get_user_info_from_index(store, swift_name, store->params.user_swift_pool, info);
+  return rgw_get_user_info_from_index(store, swift_name, store->zone.user_swift_pool, info);
 }
 
 /**
@@ -196,7 +196,7 @@ extern int rgw_get_user_info_by_swift(RGWRados *store, string& swift_name, RGWUs
  */
 extern int rgw_get_user_info_by_access_key(RGWRados *store, string& access_key, RGWUserInfo& info)
 {
-  return rgw_get_user_info_from_index(store, access_key, store->params.user_keys_pool, info);
+  return rgw_get_user_info_from_index(store, access_key, store->zone.user_keys_pool, info);
 }
 
 static void get_buckets_obj(string& user_id, string& buckets_obj_id)
@@ -208,7 +208,7 @@ static void get_buckets_obj(string& user_id, string& buckets_obj_id)
 static int rgw_read_buckets_from_attr(RGWRados *store, string& user_id, RGWUserBuckets& buckets)
 {
   bufferlist bl;
-  rgw_obj obj(store->params.user_uid_pool, user_id);
+  rgw_obj obj(store->zone.user_uid_pool, user_id);
   int ret = store->get_attr(NULL, obj, RGW_ATTR_BUCKETS, bl);
   if (ret)
     return ret;
@@ -235,7 +235,7 @@ int rgw_read_user_buckets(RGWRados *store, string user_id, RGWUserBuckets& bucke
     string buckets_obj_id;
     get_buckets_obj(user_id, buckets_obj_id);
     bufferlist bl;
-    rgw_obj obj(store->params.user_uid_pool, buckets_obj_id);
+    rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id);
     bufferlist header;
     map<string,bufferlist> m;
 
@@ -286,7 +286,7 @@ int rgw_write_buckets_attr(RGWRados *store, string user_id, RGWUserBuckets& buck
   bufferlist bl;
   buckets.encode(bl);
 
-  rgw_obj obj(store->params.user_uid_pool, user_id);
+  rgw_obj obj(store->zone.user_uid_pool, user_id);
 
   int ret = store->set_attr(NULL, obj, RGW_ATTR_BUCKETS, bl);
 
@@ -310,7 +310,7 @@ int rgw_add_bucket(RGWRados *store, string user_id, rgw_bucket& bucket)
     string buckets_obj_id;
     get_buckets_obj(user_id, buckets_obj_id);
 
-    rgw_obj obj(store->params.user_uid_pool, buckets_obj_id);
+    rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id);
     ret = store->omap_set(obj, bucket_name, bl);
     if (ret < 0) {
       ldout(store->ctx(), 0) << "ERROR: error adding bucket to directory: "
@@ -351,7 +351,7 @@ int rgw_remove_user_bucket_info(RGWRados *store, string user_id, rgw_bucket& buc
     string buckets_obj_id;
     get_buckets_obj(user_id, buckets_obj_id);
 
-    rgw_obj obj(store->params.user_uid_pool, buckets_obj_id);
+    rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id);
     ret = store->omap_del(obj, bucket.name);
     if (ret < 0) {
       ldout(store->ctx(), 0) << "ERROR: error removing bucket from directory: "
@@ -373,28 +373,28 @@ int rgw_remove_user_bucket_info(RGWRados *store, string user_id, rgw_bucket& buc
 
 int rgw_remove_key_index(RGWRados *store, RGWAccessKey& access_key)
 {
-  rgw_obj obj(store->params.user_keys_pool, access_key.id);
+  rgw_obj obj(store->zone.user_keys_pool, access_key.id);
   int ret = store->delete_obj(NULL, obj);
   return ret;
 }
 
 int rgw_remove_uid_index(RGWRados *store, string& uid)
 {
-  rgw_obj obj(store->params.user_uid_pool, uid);
+  rgw_obj obj(store->zone.user_uid_pool, uid);
   int ret = store->delete_obj(NULL, obj);
   return ret;
 }
 
 int rgw_remove_email_index(RGWRados *store, string& email)
 {
-  rgw_obj obj(store->params.user_email_pool, email);
+  rgw_obj obj(store->zone.user_email_pool, email);
   int ret = store->delete_obj(NULL, obj);
   return ret;
 }
 
 int rgw_remove_swift_name_index(RGWRados *store, string& swift_name)
 {
-  rgw_obj obj(store->params.user_swift_pool, swift_name);
+  rgw_obj obj(store->zone.user_swift_pool, swift_name);
   int ret = store->delete_obj(NULL, obj);
   return ret;
 }
@@ -441,7 +441,7 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info) {
     }
   }
 
-  rgw_obj email_obj(store->params.user_email_pool, info.user_email);
+  rgw_obj email_obj(store->zone.user_email_pool, info.user_email);
   ldout(store->ctx(), 10) << "removing email index: " << info.user_email << dendl;
   ret = store->delete_obj(NULL, email_obj);
   if (ret < 0 && ret != -ENOENT) {
@@ -451,7 +451,7 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info) {
 
   string buckets_obj_id;
   get_buckets_obj(info.user_id, buckets_obj_id);
-  rgw_obj uid_bucks(store->params.user_uid_pool, buckets_obj_id);
+  rgw_obj uid_bucks(store->zone.user_uid_pool, buckets_obj_id);
   ldout(store->ctx(), 10) << "removing user buckets index" << dendl;
   ret = store->delete_obj(NULL, uid_bucks);
   if (ret < 0 && ret != -ENOENT) {
@@ -459,7 +459,7 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info) {
     return ret;
   }
   
-  rgw_obj uid_obj(store->params.user_uid_pool, info.user_id);
+  rgw_obj uid_obj(store->zone.user_uid_pool, info.user_id);
   ldout(store->ctx(), 10) << "removing user index: " << info.user_id << dendl;
   ret = store->delete_obj(NULL, uid_obj);
   if (ret < 0 && ret != -ENOENT) {