]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: new RBD_FEATURE_NON_PRIMARY to prevent R/W IO
authorJason Dillaman <dillaman@redhat.com>
Tue, 3 Mar 2020 20:01:35 +0000 (15:01 -0500)
committerJason Dillaman <dillaman@redhat.com>
Tue, 10 Mar 2020 23:23:02 +0000 (19:23 -0400)
When a snapshot-based image is non-primary, we will need to use
this implicit feature to ensure that writes and maintenance
operations cannot be performed against the image.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
doc/rbd/rbd-config-ref.rst
src/include/rbd/features.h
src/librbd/Features.cc
src/pybind/rbd/rbd.pyx
src/tools/rbd/ArgumentTypes.cc

index 6fb1676c7b524044f41145a0d92e50fff4e26deb..3d114741a316bada35d1d8b28d3a3cec5ff6695d 100644 (file)
@@ -265,6 +265,13 @@ RBD supports advanced features which can be specified via the command line when
 :Added in: v14.0.1 (Nautilus)
 :KRBD support: no
 
+``Non-primary``
+
+:Description: Used to restrict changes to non-primary images using snapshot-based mirroring.
+:Internal value: 1024
+:Added in: v15.2.0 (Octopus)
+:KRBD support: no
+
 
 QOS Settings
 ============
index 89c54a36b213520c17c51566d8ea08fe0c1170c1..00cb4d2a1ead703ca5f596c90b5ea9a2bc5ba132 100644 (file)
@@ -11,6 +11,7 @@
 #define RBD_FEATURE_DATA_POOL           (1ULL<<7)
 #define RBD_FEATURE_OPERATIONS          (1ULL<<8)
 #define RBD_FEATURE_MIGRATING           (1ULL<<9)
+#define RBD_FEATURE_NON_PRIMARY         (1ULL<<10)
 
 #define RBD_FEATURES_DEFAULT             (RBD_FEATURE_LAYERING | \
                                          RBD_FEATURE_EXCLUSIVE_LOCK | \
@@ -28,6 +29,7 @@
 #define RBD_FEATURE_NAME_DATA_POOL       "data-pool"
 #define RBD_FEATURE_NAME_OPERATIONS      "operations"
 #define RBD_FEATURE_NAME_MIGRATING       "migrating"
+#define RBD_FEATURE_NAME_NON_PRIMARY     "non-primary"
 
 /// features that make an image inaccessible for read or write by
 /// clients that don't understand them
@@ -43,7 +45,8 @@
                                          RBD_FEATURE_DEEP_FLATTEN   | \
                                          RBD_FEATURE_JOURNALING     | \
                                          RBD_FEATURE_OPERATIONS     | \
-                                         RBD_FEATURE_MIGRATING)
+                                         RBD_FEATURE_MIGRATING      | \
+                                         RBD_FEATURE_NON_PRIMARY)
 
 #define RBD_FEATURES_ALL               (RBD_FEATURE_LAYERING       | \
                                         RBD_FEATURE_STRIPINGV2     | \
                                          RBD_FEATURE_JOURNALING     | \
                                          RBD_FEATURE_DATA_POOL      | \
                                          RBD_FEATURE_OPERATIONS     | \
-                                         RBD_FEATURE_MIGRATING)
+                                         RBD_FEATURE_MIGRATING      | \
+                                         RBD_FEATURE_NON_PRIMARY)
 
 /// features that may be dynamically enabled or disabled
 #define RBD_FEATURES_MUTABLE            (RBD_FEATURE_EXCLUSIVE_LOCK | \
                                          RBD_FEATURE_OBJECT_MAP     | \
                                          RBD_FEATURE_FAST_DIFF      | \
-                                         RBD_FEATURE_JOURNALING)
+                                         RBD_FEATURE_JOURNALING     | \
+                                         RBD_FEATURE_NON_PRIMARY)
 
 /// features that may be dynamically disabled
 #define RBD_FEATURES_DISABLE_ONLY       (RBD_FEATURE_DEEP_FLATTEN)
                                     RBD_FEATURE_JOURNALING)
 
 /// features that will be implicitly enabled
-#define RBD_FEATURES_IMPLICIT_ENABLE  (RBD_FEATURE_STRIPINGV2 | \
-                                       RBD_FEATURE_DATA_POOL  | \
-                                       RBD_FEATURE_FAST_DIFF  | \
-                                       RBD_FEATURE_OPERATIONS | \
-                                       RBD_FEATURE_MIGRATING)
+#define RBD_FEATURES_IMPLICIT_ENABLE  (RBD_FEATURE_STRIPINGV2  | \
+                                       RBD_FEATURE_DATA_POOL   | \
+                                       RBD_FEATURE_FAST_DIFF   | \
+                                       RBD_FEATURE_OPERATIONS  | \
+                                       RBD_FEATURE_MIGRATING   | \
+                                       RBD_FEATURE_NON_PRIMARY)
 
 /// features that cannot be controlled by the user
 #define RBD_FEATURES_INTERNAL         (RBD_FEATURE_OPERATIONS | \
index a2c25169c432b91bc0f2c4f541ea21666b5a70c5..de50218ac099544174c9dc30dd584cf7d6f08264 100644 (file)
@@ -21,8 +21,9 @@ static const std::map<std::string, uint64_t> RBD_FEATURE_MAP = {
   {RBD_FEATURE_NAME_DATA_POOL, RBD_FEATURE_DATA_POOL},
   {RBD_FEATURE_NAME_OPERATIONS, RBD_FEATURE_OPERATIONS},
   {RBD_FEATURE_NAME_MIGRATING, RBD_FEATURE_MIGRATING},
+  {RBD_FEATURE_NAME_NON_PRIMARY, RBD_FEATURE_NON_PRIMARY},
 };
-static_assert((RBD_FEATURE_MIGRATING << 1) > RBD_FEATURES_ALL,
+static_assert((RBD_FEATURE_NON_PRIMARY << 1) > RBD_FEATURES_ALL,
              "new RBD feature added");
 
 
index 34e1d92cbaa4f7df42b2b6cff1241e5ee84695c9..b71458b5cb9362364014efe29f31185214a22bca 100644 (file)
@@ -72,6 +72,7 @@ cdef extern from "rbd/librbd.h" nogil:
         _RBD_FEATURE_DATA_POOL "RBD_FEATURE_DATA_POOL"
         _RBD_FEATURE_OPERATIONS "RBD_FEATURE_OPERATIONS"
         _RBD_FEATURE_MIGRATING "RBD_FEATURE_MIGRATING"
+        _RBD_FEATURE_NON_PRIMARY "RBD_FEATURE_NON_PRIMARY"
 
         _RBD_FEATURES_INCOMPATIBLE "RBD_FEATURES_INCOMPATIBLE"
         _RBD_FEATURES_RW_INCOMPATIBLE "RBD_FEATURES_RW_INCOMPATIBLE"
@@ -714,6 +715,7 @@ RBD_FEATURE_JOURNALING = _RBD_FEATURE_JOURNALING
 RBD_FEATURE_DATA_POOL = _RBD_FEATURE_DATA_POOL
 RBD_FEATURE_OPERATIONS = _RBD_FEATURE_OPERATIONS
 RBD_FEATURE_MIGRATING = _RBD_FEATURE_MIGRATING
+RBD_FEATURE_NON_PRIMARY = _RBD_FEATURE_NON_PRIMARY
 
 RBD_FEATURES_INCOMPATIBLE = _RBD_FEATURES_INCOMPATIBLE
 RBD_FEATURES_RW_INCOMPATIBLE = _RBD_FEATURES_RW_INCOMPATIBLE
index ae5f9fd76d83f3c7230877b546c22481b58cca5d..74115d8a30aa930b8f799a1be5510fc59aba6f57 100644 (file)
@@ -28,6 +28,7 @@ const std::map<uint64_t, std::string> ImageFeatures::FEATURE_MAPPING = {
   {RBD_FEATURE_DATA_POOL, RBD_FEATURE_NAME_DATA_POOL},
   {RBD_FEATURE_OPERATIONS, RBD_FEATURE_NAME_OPERATIONS},
   {RBD_FEATURE_MIGRATING, RBD_FEATURE_NAME_MIGRATING},
+  {RBD_FEATURE_NON_PRIMARY, RBD_FEATURE_NAME_NON_PRIMARY},
 };
 
 Format::Formatter Format::create_formatter(bool pretty) const {