]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: set journaling feature when --mirror-image-mode is journal 59842/head
authorChanyoung Park <park910113@gmail.com>
Tue, 17 Sep 2024 12:59:37 +0000 (21:59 +0900)
committerChanyoung Park <park910113@gmail.com>
Tue, 17 Sep 2024 12:59:37 +0000 (21:59 +0900)
Fixes: http://tracker.ceph.com/issues/58683
Signed-off-by: Chanyoung Park <park910113@gmail.com>
src/tools/rbd/Utils.cc

index 71da0bd274ac14f5815bb1620d9075ad1eb3af50..95c8725aa339aa43eee4a9191e7a12211ec6c5d5 100644 (file)
@@ -478,10 +478,11 @@ 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 = 0, stripe_unit = 0, stripe_count = 0, object_size = 0;
-  uint64_t features = 0, features_clear = 0;
+  uint64_t features = 0, features_set = 0, features_clear = 0;
   std::string data_pool;
   bool order_specified = true;
   bool features_specified = false;
+  bool features_set_specified = false;
   bool features_clear_specified = false;
   bool stripe_specified = false;
 
@@ -509,6 +510,13 @@ int get_image_options(const boost::program_options::variables_map &vm,
     stripe_specified = true;
   }
 
+  if (vm.count(at::IMAGE_MIRROR_IMAGE_MODE) &&
+      vm[at::IMAGE_MIRROR_IMAGE_MODE].as<librbd::mirror_image_mode_t>() ==
+      RBD_MIRROR_IMAGE_MODE_JOURNAL) {
+    features_set |= (RBD_FEATURE_EXCLUSIVE_LOCK | RBD_FEATURE_JOURNALING);
+    features_set_specified = true;
+  }
+
   if (vm.count(at::IMAGE_SHARED) && vm[at::IMAGE_SHARED].as<bool>()) {
     if (features_specified) {
       features &= ~RBD_FEATURES_SINGLE_CLIENT;
@@ -581,6 +589,8 @@ int get_image_options(const boost::program_options::variables_map &vm,
     opts->set(RBD_IMAGE_OPTION_ORDER, order);
   if (features_specified)
     opts->set(RBD_IMAGE_OPTION_FEATURES, features);
+  if (features_set_specified)
+    opts->set(RBD_IMAGE_OPTION_FEATURES_SET, features_set);
   if (features_clear_specified) {
     opts->set(RBD_IMAGE_OPTION_FEATURES_CLEAR, features_clear);
   }