]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: separate clone v2 op feature bit for parent/child
authorJason Dillaman <dillaman@redhat.com>
Mon, 29 Jan 2018 18:49:39 +0000 (13:49 -0500)
committerJason Dillaman <dillaman@redhat.com>
Mon, 5 Feb 2018 16:11:59 +0000 (11:11 -0500)
librbd needs to be able to handle the case when flattening a v2 clone
that is also a v2 parent of other images.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/include/rbd/features.h
src/pybind/rbd/rbd.pyx
src/test/cls_rbd/test_cls_rbd.cc
src/tools/rbd/action/Info.cc

index 5e6e06f5aa277036908b6fa0f41082e8b323f1cd..074d744a7936edd2d6254802fcdb8b3be9758648 100644 (file)
 
 /// features that will be implicitly enabled
 #define RBD_FEATURES_IMPLICIT_ENABLE  (RBD_FEATURE_STRIPINGV2 | \
-                                       RBD_FEATURE_DATA_POOL | \
+                                       RBD_FEATURE_DATA_POOL  | \
                                        RBD_FEATURE_OPERATIONS)
 
 /// features that cannot be controlled by the user
 #define RBD_FEATURES_INTERNAL         (RBD_FEATURE_OPERATIONS)
 
-#define RBD_OPERATION_FEATURE_CLONE_V2        (1ULL<<0)
-#define RBD_OPERATION_FEATURE_GROUP           (1ULL<<1)
-#define RBD_OPERATION_FEATURE_SNAP_TRASH      (1ULL<<2)
+#define RBD_OPERATION_FEATURE_CLONE_PARENT      (1ULL<<0)
+#define RBD_OPERATION_FEATURE_CLONE_CHILD       (1ULL<<1)
+#define RBD_OPERATION_FEATURE_GROUP             (1ULL<<2)
+#define RBD_OPERATION_FEATURE_SNAP_TRASH        (1ULL<<3)
 
-#define RBD_OPERATION_FEATURE_NAME_CLONE_V2   "clone"
-#define RBD_OPERATION_FEATURE_NAME_GROUP      "group"
-#define RBD_OPERATION_FEATURE_NAME_SNAP_TRASH "snap-trash"
+#define RBD_OPERATION_FEATURE_NAME_CLONE_PARENT "clone-parent"
+#define RBD_OPERATION_FEATURE_NAME_CLONE_CHILD  "clone-child"
+#define RBD_OPERATION_FEATURE_NAME_GROUP        "group"
+#define RBD_OPERATION_FEATURE_NAME_SNAP_TRASH   "snap-trash"
 
 /// all valid operation features
-#define RBD_OPERATION_FEATURES_ALL (RBD_OPERATION_FEATURE_CLONE_V2 | \
-                                    RBD_OPERATION_FEATURE_GROUP | \
+#define RBD_OPERATION_FEATURES_ALL (RBD_OPERATION_FEATURE_CLONE_PARENT | \
+                                    RBD_OPERATION_FEATURE_CLONE_CHILD  | \
+                                    RBD_OPERATION_FEATURE_GROUP        | \
                                     RBD_OPERATION_FEATURE_SNAP_TRASH)
 
 #endif
index 97f0ddf382a6de4c54c714a5331fdd4583af05cd..7c4d2d864c7550126718e34f41dfe75fd4e58a64 100644 (file)
@@ -65,7 +65,8 @@ cdef extern from "rbd/librbd.h" nogil:
         _RBD_FEATURES_SINGLE_CLIENT "RBD_FEATURES_SINGLE_CLIENT"
         _RBD_FEATURES_ALL "RBD_FEATURES_ALL"
 
-        _RBD_OPERATION_FEATURE_CLONE_V2 "RBD_OPERATION_FEATURE_CLONE_V2"
+        _RBD_OPERATION_FEATURE_CLONE_PARENT "RBD_OPERATION_FEATURE_CLONE_PARENT"
+        _RBD_OPERATION_FEATURE_CLONE_CHILD "RBD_OPERATION_FEATURE_CLONE_CHILD"
         _RBD_OPERATION_FEATURE_GROUP "RBD_OPERATION_FEATURE_GROUP"
         _RBD_OPERATION_FEATURE_SNAP_TRASH "RBD_OPERATION_FEATURE_SNAP_TRASH"
 
@@ -466,7 +467,8 @@ RBD_FEATURES_MUTABLE = _RBD_FEATURES_MUTABLE
 RBD_FEATURES_SINGLE_CLIENT = _RBD_FEATURES_SINGLE_CLIENT
 RBD_FEATURES_ALL = _RBD_FEATURES_ALL
 
-RBD_OPERATION_FEATURE_CLONE_V2 = _RBD_OPERATION_FEATURE_CLONE_V2
+RBD_OPERATION_FEATURE_CLONE_PARENT = _RBD_OPERATION_FEATURE_CLONE_PARENT
+RBD_OPERATION_FEATURE_CLONE_CHILD = _RBD_OPERATION_FEATURE_CLONE_CHILD
 RBD_OPERATION_FEATURE_GROUP = _RBD_OPERATION_FEATURE_GROUP
 RBD_OPERATION_FEATURE_SNAP_TRASH = _RBD_OPERATION_FEATURE_SNAP_TRASH
 
index c2978fb5c465a4be2b5eaed3ee1d798ca6d9a8d2..1a2e96c37a2b32245795f04242e188e6ef209064 100644 (file)
@@ -2463,7 +2463,7 @@ TEST_F(TestClsRbd, op_features)
   string oid = get_temp_image_name();
   ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
 
-  uint64_t op_features = RBD_OPERATION_FEATURE_CLONE_V2;
+  uint64_t op_features = RBD_OPERATION_FEATURE_CLONE_PARENT;
   uint64_t mask = ~RBD_OPERATION_FEATURES_ALL;
   ASSERT_EQ(-EINVAL, op_features_set(&ioctx, oid, op_features, mask));
 
@@ -2488,12 +2488,12 @@ TEST_F(TestClsRbd, op_features)
   ASSERT_EQ(RBD_FEATURE_OPERATIONS, features);
 
   op_features = 0;
-  mask = RBD_OPERATION_FEATURE_CLONE_V2;
+  mask = RBD_OPERATION_FEATURE_CLONE_PARENT;
   ASSERT_EQ(0, op_features_set(&ioctx, oid, op_features, mask));
   ASSERT_EQ(0, op_features_get(&ioctx, oid, &actual_op_features));
 
   uint64_t expected_op_features = RBD_OPERATION_FEATURES_ALL &
-                                    ~RBD_OPERATION_FEATURE_CLONE_V2;
+                                    ~RBD_OPERATION_FEATURE_CLONE_PARENT;
   ASSERT_EQ(expected_op_features, actual_op_features);
 
   mask = RBD_OPERATION_FEATURES_ALL;
index 8f462ba1fadcfc5006e7d533527933b57780ff54..5a4f4c392aaf9551444c6b6e11fe1016b9820796 100644 (file)
@@ -59,7 +59,8 @@ static void format_features(Formatter *f, uint64_t features)
 static void format_op_features(Formatter *f, uint64_t op_features)
 {
   static std::map<uint64_t, std::string> mapping = {
-    {RBD_OPERATION_FEATURE_CLONE_V2, RBD_OPERATION_FEATURE_NAME_CLONE_V2},
+    {RBD_OPERATION_FEATURE_CLONE_PARENT, RBD_OPERATION_FEATURE_NAME_CLONE_PARENT},
+    {RBD_OPERATION_FEATURE_CLONE_CHILD, RBD_OPERATION_FEATURE_NAME_CLONE_CHILD},
     {RBD_OPERATION_FEATURE_GROUP, RBD_OPERATION_FEATURE_NAME_GROUP},
     {RBD_OPERATION_FEATURE_SNAP_TRASH, RBD_OPERATION_FEATURE_NAME_SNAP_TRASH}};
   format_bitmask(f, "op_feature", mapping, op_features);