summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-02-20 17:03:10 -0800
committerYehuda Sadeh <yehuda@inktank.com>2013-03-22 11:23:58 -0700
commit57a98277d1e2dc17f64a265219f5862052fc54d5 (patch)
treee17c4fb2820f1300ed46671b8aeeee8ab4af3e85
parent1ad4db5ffeaa5ec0699462e2282fdd2f78724da3 (diff)
downloadceph-57a98277d1e2dc17f64a265219f5862052fc54d5.tar.gz
rgw: set region info, default region
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_admin.cc50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc
index e318c1440a6..4145a703f05 100644
--- a/src/rgw/rgw_admin.cc
+++ b/src/rgw/rgw_admin.cc
@@ -62,6 +62,8 @@ void _usage()
cerr << " object unlink unlink object from bucket index\n";
cerr << " region info show region info\n";
cerr << " region list list all regions\n";
+ cerr << " region set set region info\n";
+ cerr << " region default set default region\n";
cerr << " zone info show zone params info\n";
cerr << " pool add add an existing pool for data placement\n";
cerr << " pool rm remove an existing pool from data placement set\n";
@@ -168,6 +170,8 @@ enum {
OPT_GC_PROCESS,
OPT_REGION_INFO,
OPT_REGION_LIST,
+ OPT_REGION_SET,
+ OPT_REGION_DEFAULT,
OPT_ZONE_INFO,
OPT_ZONE_SET,
OPT_CAPS_ADD,
@@ -301,6 +305,10 @@ static int get_cmd(const char *cmd, const char *prev_cmd, bool *need_more)
return OPT_REGION_INFO;
if (strcmp(cmd, "list") == 0)
return OPT_REGION_LIST;
+ if (strcmp(cmd, "set") == 0)
+ return OPT_REGION_SET;
+ if (strcmp(cmd, "default") == 0)
+ return OPT_REGION_DEFAULT;
} else if (strcmp(prev_cmd, "zone") == 0) {
if (strcmp(cmd, "info") == 0)
return OPT_ZONE_INFO;
@@ -985,7 +993,8 @@ int main(int argc, char **argv)
return usage();
}
- bool raw_storage_op = (opt_cmd == OPT_REGION_INFO || opt_cmd == OPT_REGION_LIST);
+ bool raw_storage_op = (opt_cmd == OPT_REGION_INFO || opt_cmd == OPT_REGION_LIST ||
+ opt_cmd == OPT_REGION_SET || opt_cmd == OPT_REGION_DEFAULT);
user_modify_op = (opt_cmd == OPT_USER_MODIFY || opt_cmd == OPT_SUBUSER_MODIFY ||
@@ -1021,6 +1030,10 @@ int main(int argc, char **argv)
if (opt_cmd == OPT_REGION_LIST) {
RGWRegion region;
int ret = region.init(g_ceph_context, store, false);
+ if (ret < 0) {
+ cerr << "failed to init region: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
list<string> regions;
ret = store->list_regions(regions);
@@ -1040,6 +1053,41 @@ int main(int argc, char **argv)
formatter->flush(cout);
cout << std::endl;
}
+ if (opt_cmd == OPT_REGION_SET) {
+ RGWRegion region;
+ int ret = region.init(g_ceph_context, store, false);
+ if (ret < 0) {
+ cerr << "failed to init region: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+ ret = read_decode_json(infile, region);
+ if (ret < 0) {
+ return 1;
+ }
+
+ ret = region.store_info(false);
+ if (ret < 0) {
+ cerr << "ERROR: couldn't store zone info: " << cpp_strerror(-ret) << std::endl;
+ return 1;
+ }
+
+ encode_json("region", region, formatter);
+ formatter->flush(cout);
+ }
+ if (opt_cmd == OPT_REGION_DEFAULT) {
+ RGWRegion region;
+ int ret = region.init(g_ceph_context, store);
+ if (ret < 0) {
+ cerr << "failed to init region: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+
+ ret = region.set_as_default();
+ if (ret < 0) {
+ cerr << "failed to set region as default: " << cpp_strerror(-ret) << std::endl;
+ return -ret;
+ }
+ }
return 0;
}