]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
tools: ceph-objectstore-tool: Allow target level as first positional param 24116/head
authorDavid Zafman <dzafman@redhat.com>
Fri, 7 Sep 2018 22:07:16 +0000 (15:07 -0700)
committerDavid Zafman <dzafman@redhat.com>
Fri, 14 Sep 2018 23:17:11 +0000 (16:17 -0700)
Maintain compatibility with --arg1 specification

Fixes: http://tracker.ceph.com/issues/35846
Signed-off-by: David Zafman <dzafman@redhat.com>
(cherry picked from commit f6394d8892d9c1f77ef5c82341bb4ee9c416182e)

src/tools/ceph_objectstore_tool.cc

index 1a3c8d8cacf0080d94f09e2823674ec33d05e30f..885f46dc460816349f78e393df145cacdd9f1b42 100644 (file)
@@ -3124,8 +3124,7 @@ int main(int argc, char **argv)
   positional.add_options()
     ("object", po::value<string>(&object), "'' for pgmeta_oid, object name or ghobject in json")
     ("objcmd", po::value<string>(&objcmd), "command [(get|set)-bytes, (get|set|rm)-(attr|omap), (get|set)-omaphdr, list-attrs, list-omap, remove]")
-    ("arg1", po::value<string>(&arg1), "arg1 based on cmd, "
-     "for apply-layout-settings: target hash level split to")
+    ("arg1", po::value<string>(&arg1), "arg1 based on cmd")
     ("arg2", po::value<string>(&arg2), "arg2 based on cmd")
     ;
 
@@ -3237,7 +3236,7 @@ int main(int argc, char **argv)
     usage(desc);
     return 1;
   }
-  if (op != "list" &&
+  if (op != "list" && op != "apply-layout-settings" &&
       vm.count("op") && vm.count("object")) {
     cerr << "Can't specify both --op and object command syntax" << std::endl;
     usage(desc);
@@ -3249,7 +3248,7 @@ int main(int argc, char **argv)
     usage(desc);
     return 1;
   }
-  if (op != "list" && vm.count("object") && !vm.count("objcmd")) {
+  if (op != "list" && op != "apply-layout-settings" && vm.count("object") && !vm.count("objcmd")) {
     cerr << "Invalid syntax, missing command" << std::endl;
     usage(desc);
     return 1;
@@ -3519,7 +3518,14 @@ int main(int argc, char **argv)
 
   if (op == "apply-layout-settings") {
     int target_level = 0;
-    if (vm.count("arg1") && isdigit(arg1[0])) {
+    // Single positional argument with apply-layout-settings
+    // for target_level.
+    if (vm.count("object") && isdigit(object[0])) {
+      target_level = atoi(object.c_str());
+    // This requires --arg1 to be specified since
+    // this is the third positional argument and normally
+    // used with object operations.
+    } else if (vm.count("arg1") && isdigit(arg1[0])) {
       target_level = atoi(arg1.c_str());
     }
     ret = apply_layout_settings(fs, superblock, pool, pgid, dry_run, target_level);