]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tools/rbd: only set the options specified by user in get_image_options().
authorDongsheng Yang <dongsheng.yang@easystack.cn>
Thu, 2 Jun 2016 07:56:53 +0000 (03:56 -0400)
committerDongsheng Yang <dongsheng.yang@easystack.cn>
Fri, 22 Jul 2016 11:04:03 +0000 (07:04 -0400)
Signed-off-by: Dongsheng Yang <dongsheng.yang@easystack.cn>
src/tools/rbd/Utils.cc

index 92ca721a991e0933f0e47fe68ac5841f434bef07..90712e78cc808eee5bc79dcad5e35b4ebb1faf68 100644 (file)
@@ -422,8 +422,10 @@ int validate_snapshot_name(at::ArgumentModifier mod,
 
 int get_image_options(const boost::program_options::variables_map &vm,
                      bool get_format, librbd::ImageOptions *opts) {
-  uint64_t order, features, stripe_unit, stripe_count, object_size;
+  uint64_t order, features = 0, stripe_unit, stripe_count, object_size;
+  bool order_specified = true;
   bool features_specified = false;
+  bool stripe_specified = false;
 
   if (vm.count(at::IMAGE_ORDER)) {
     order = vm[at::IMAGE_ORDER].as<uint64_t>();
@@ -433,26 +435,22 @@ int get_image_options(const boost::program_options::variables_map &vm,
     object_size = vm[at::IMAGE_OBJECT_SIZE].as<uint64_t>();
     order = std::round(std::log2(object_size)); 
   } else {
-    order = g_conf->rbd_default_order;
+    order_specified = false;
   }
 
   if (vm.count(at::IMAGE_FEATURES)) {
     features = vm[at::IMAGE_FEATURES].as<uint64_t>();
     features_specified = true;
-  } else {
-    features = g_conf->rbd_default_features;
   }
 
   if (vm.count(at::IMAGE_STRIPE_UNIT)) {
     stripe_unit = vm[at::IMAGE_STRIPE_UNIT].as<uint64_t>();
-  } else {
-    stripe_unit = g_conf->rbd_default_stripe_unit;
+    stripe_specified = true;
   }
 
   if (vm.count(at::IMAGE_STRIPE_COUNT)) {
     stripe_count = vm[at::IMAGE_STRIPE_COUNT].as<uint64_t>();
-  } else {
-    stripe_count = g_conf->rbd_default_stripe_count;
+    stripe_specified = true;
   }
 
   if ((stripe_unit != 0 && stripe_count == 0) ||
@@ -480,10 +478,11 @@ int get_image_options(const boost::program_options::variables_map &vm,
 
   if (vm.count(at::IMAGE_SHARED) && vm[at::IMAGE_SHARED].as<bool>()) {
     features &= ~RBD_FEATURES_SINGLE_CLIENT;
+    features_specified = true;
   }
 
   if (get_format) {
-    uint64_t format;
+    uint64_t format = 0;
     bool format_specified = false;
     if (vm.count(at::IMAGE_NEW_FORMAT)) {
       format = 2;
@@ -491,8 +490,6 @@ int get_image_options(const boost::program_options::variables_map &vm,
     } else if (vm.count(at::IMAGE_FORMAT)) {
       format = vm[at::IMAGE_FORMAT].as<uint32_t>();
       format_specified = true;
-    } else {
-      format = g_conf->rbd_default_format;
     }
     if (format == 1) {
       std::cerr << "rbd: image format 1 is deprecated" << std::endl;
@@ -524,15 +521,18 @@ int get_image_options(const boost::program_options::variables_map &vm,
     if (format_specified) {
       int r = g_conf->set_val("rbd_default_format", stringify(format));
       assert(r == 0);
+      opts->set(RBD_IMAGE_OPTION_FORMAT, format);
     }
-
-    opts->set(RBD_IMAGE_OPTION_FORMAT, format);
   }
 
-  opts->set(RBD_IMAGE_OPTION_ORDER, order);
-  opts->set(RBD_IMAGE_OPTION_FEATURES, features);
-  opts->set(RBD_IMAGE_OPTION_STRIPE_UNIT, stripe_unit);
-  opts->set(RBD_IMAGE_OPTION_STRIPE_COUNT, stripe_count);
+  if (order_specified)
+    opts->set(RBD_IMAGE_OPTION_ORDER, order);
+  if (features_specified)
+    opts->set(RBD_IMAGE_OPTION_FEATURES, features);
+  if (stripe_specified) {
+    opts->set(RBD_IMAGE_OPTION_STRIPE_UNIT, stripe_unit);
+    opts->set(RBD_IMAGE_OPTION_STRIPE_COUNT, stripe_count);
+  }
 
   int r = get_journal_options(vm, opts);
   if (r < 0) {