/// 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
_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"
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
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));
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;
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);