summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-02-20 17:03:10 -0800
committerYehuda Sadeh <yehuda@inktank.com>2013-02-25 15:00:07 -0800
commitb462ca943732f7e1b444c469193a8d81afb28a76 (patch)
tree9ac9df74299614fa5f2b65bc707f5dd21f169b87
parentca98a02aa6b93e98fe72fd62793f4d034b5eb1e9 (diff)
downloadceph-b462ca943732f7e1b444c469193a8d81afb28a76.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 78c6d3c693c..ad4c8dce916 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,
@@ -299,6 +303,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;
@@ -984,7 +992,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 ||
@@ -1020,6 +1029,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);
@@ -1039,6 +1052,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;
}