From: Jason Dillaman Date: Mon, 29 Jan 2018 18:49:39 +0000 (-0500) Subject: librbd: separate clone v2 op feature bit for parent/child X-Git-Tag: v13.0.2~327^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e1f994225b16856939bca85acd646966596f21ad;p=ceph.git librbd: separate clone v2 op feature bit for parent/child 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 --- diff --git a/src/include/rbd/features.h b/src/include/rbd/features.h index 5e6e06f5aa27..074d744a7936 100644 --- a/src/include/rbd/features.h +++ b/src/include/rbd/features.h @@ -70,23 +70,26 @@ /// 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 diff --git a/src/pybind/rbd/rbd.pyx b/src/pybind/rbd/rbd.pyx index 97f0ddf382a6..7c4d2d864c75 100644 --- a/src/pybind/rbd/rbd.pyx +++ b/src/pybind/rbd/rbd.pyx @@ -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 diff --git a/src/test/cls_rbd/test_cls_rbd.cc b/src/test/cls_rbd/test_cls_rbd.cc index c2978fb5c465..1a2e96c37a2b 100644 --- a/src/test/cls_rbd/test_cls_rbd.cc +++ b/src/test/cls_rbd/test_cls_rbd.cc @@ -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; diff --git a/src/tools/rbd/action/Info.cc b/src/tools/rbd/action/Info.cc index 8f462ba1fadc..5a4f4c392aaf 100644 --- a/src/tools/rbd/action/Info.cc +++ b/src/tools/rbd/action/Info.cc @@ -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 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);