]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw-admin: fix bucket limit check argparse, div(0) 16952/head
authorMatt Benjamin <mbenjamin@redhat.com>
Fri, 26 May 2017 16:41:40 +0000 (12:41 -0400)
committerRobin H. Johnson <robin.johnson@dreamhost.com>
Wed, 9 Aug 2017 18:43:59 +0000 (11:43 -0700)
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>
(cherry picked from commit fb8e2fa61f0b4621b5fdc83048467982a7ca2961)
Fixes: http://tracker.ceph.com/issues/20966
src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc

index 60596e25507bd6a274634cb3472dc37bb99fb74a..936e20ba0ed5a61e4dfb98a13641338fb9f3e761 100644 (file)
@@ -296,7 +296,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,
@@ -492,10 +492,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;
@@ -517,6 +513,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)
@@ -527,7 +527,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)
@@ -4323,7 +4323,7 @@ int main(int argc, 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";
@@ -4366,7 +4366,7 @@ int main(int argc, 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 88695ad74953ba0e6cc2161b33843312bec5e2d6..8678a0ca531850b943f6722391fab5b6349498ff 100644 (file)
@@ -1488,7 +1488,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;