]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw-admin: fix bucket limit check argparse, div(0) 15316/head
authorMatt Benjamin <mbenjamin@redhat.com>
Fri, 26 May 2017 16:41:40 +0000 (12:41 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Fri, 26 May 2017 19:49:17 +0000 (15:49 -0400)
1. normalize arg parsing for "bucket limit check"
1.1 s/buckets/bucket/

2. avoid dividing by num_shards when it is 0

Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc

index d2cc6e6f04719f6f4f62176eda197151a06618e9..fe88d8247490541b579e24c1068989a75133bfec 100644 (file)
@@ -343,7 +343,7 @@ enum {
   OPT_KEY_CREATE,
   OPT_KEY_RM,
   OPT_BUCKETS_LIST,
-  OPT_BUCKETS_LIMIT_CHECK,
+  OPT_BUCKET_LIMIT_CHECK,
   OPT_BUCKET_LINK,
   OPT_BUCKET_UNLINK,
   OPT_BUCKET_STATS,
@@ -562,10 +562,6 @@ static int get_cmd(const char *cmd, const char *prev_cmd, const char *prev_prev_
   } else if (strcmp(prev_cmd, "buckets") == 0) {
     if (strcmp(cmd, "list") == 0)
       return OPT_BUCKETS_LIST;
-    if (strcmp(cmd, "limit") == 0) {
-      *need_more = true;
-      return 0;
-    }
   } else if (strcmp(prev_cmd, "bucket") == 0) {
     if (strcmp(cmd, "list") == 0)
       return OPT_BUCKETS_LIST;
@@ -587,6 +583,10 @@ static int get_cmd(const char *cmd, const char *prev_cmd, const char *prev_prev_
       *need_more = true;
       return 0;
     }
+    if (strcmp(cmd, "limit") == 0) {
+      *need_more = true;
+      return 0;
+    }
   } else if (prev_prev_cmd && strcmp(prev_prev_cmd, "bucket") == 0) {
     if (strcmp(prev_cmd, "sync") == 0) {
       if (strcmp(cmd, "status") == 0)
@@ -597,7 +597,7 @@ static int get_cmd(const char *cmd, const char *prev_cmd, const char *prev_prev_
        return OPT_BUCKET_SYNC_RUN;
     } else if ((strcmp(prev_cmd, "limit") == 0) &&
               (strcmp(cmd, "check") == 0)) {
-      return OPT_BUCKETS_LIMIT_CHECK;
+      return OPT_BUCKET_LIMIT_CHECK;
     }
   } else if (strcmp(prev_cmd, "log") == 0) {
     if (strcmp(cmd, "list") == 0)
@@ -4894,7 +4894,7 @@ int main(int argc, const char **argv)
     }
   }
 
-  if (opt_cmd == OPT_BUCKETS_LIMIT_CHECK) {
+  if (opt_cmd == OPT_BUCKET_LIMIT_CHECK) {
     void *handle;
     std::list<std::string> user_ids;
     metadata_key = "user";
@@ -4937,7 +4937,7 @@ int main(int argc, const char **argv)
       store->meta_mgr->list_keys_complete(handle);
     }
     return -ret;
-  } /* OPT_BUCKETS_LIMIT_CHECK */
+  } /* OPT_BUCKET_LIMIT_CHECK */
 
   if (opt_cmd == OPT_BUCKETS_LIST) {
     if (bucket_name.empty()) {
index 584ebe9f50fd90f0e8ec72ff1e15e1286600cfc9..8302b5a8e7fb338c885a1e2b69ded4227cd2cd8b 100644 (file)
@@ -1470,7 +1470,8 @@ int RGWBucketAdminOp::limit_check(RGWRados *store,
        }
 
        num_shards = info.num_shards;
-       uint64_t objs_per_shard = num_objects / num_shards;
+       uint64_t objs_per_shard =
+         (num_shards) ? num_objects/num_shards : num_objects;
        {
          bool warn = false;
          stringstream ss;