RBD_GROUP_SNAP_STATE_COMPLETE
} rbd_group_snap_state_t;
+typedef enum {
+ RBD_GROUP_SNAP_NAMESPACE_TYPE_USER = 0
+} rbd_group_snap_namespace_type_t;
+
typedef struct {
char *image_name;
int64_t pool_id;
char *name;
char *image_snap_name;
rbd_group_snap_state_t state;
- //rbd_group_snap_namespace_type_t namespace_type;
+ rbd_group_snap_namespace_type_t namespace_type;
size_t image_snaps_count;
rbd_group_image_snap_info_t *image_snaps;
} rbd_group_snap_info2_t;
} group_info_t;
typedef rbd_group_snap_state_t group_snap_state_t;
+ typedef rbd_group_snap_namespace_type_t group_snap_namespace_type_t;
typedef struct {
std::string image_name;
std::string name;
std::string image_snap_name;
group_snap_state_t state;
- //group_snap_namespace_type_t namespace_type;
+ group_snap_namespace_type_t namespace_type;
std::vector<group_image_snap_info_t> image_snaps;
} group_snap_info2_t;
group_snap->id = cls_group_snap.id;
group_snap->name = cls_group_snap.name;
group_snap->state = static_cast<group_snap_state_t>(cls_group_snap.state);
+ group_snap->namespace_type = RBD_GROUP_SNAP_NAMESPACE_TYPE_USER;
if (!image_snaps.empty()) {
group_snap->image_snap_name = calc_ind_image_snap_name(
group_ioctx.get_id(), group_id, cls_group_snap.id);
c_info->name = strdup(cpp_info.name.c_str());
c_info->image_snap_name = strdup(cpp_info.image_snap_name.c_str());
c_info->state = cpp_info.state;
+ c_info->namespace_type = cpp_info.namespace_type;
c_info->image_snaps_count = cpp_info.image_snaps.size();
c_info->image_snaps = static_cast<rbd_group_image_snap_info_t*>(calloc(
cpp_info.image_snaps.size(), sizeof(rbd_group_image_snap_info_t)));
_RBD_GROUP_SNAP_STATE_INCOMPLETE "RBD_GROUP_SNAP_STATE_INCOMPLETE"
_RBD_GROUP_SNAP_STATE_COMPLETE "RBD_GROUP_SNAP_STATE_COMPLETE"
+ ctypedef enum rbd_group_snap_namespace_type_t:
+ _RBD_GROUP_SNAP_NAMESPACE_TYPE_USER "RBD_GROUP_SNAP_NAMESPACE_TYPE_USER"
+
ctypedef struct rbd_group_image_snap_info_t:
char *image_name
int64_t pool_id
char *name
char *image_snap_name
rbd_group_snap_state_t state
+ rbd_group_snap_namespace_type_t namespace_type
size_t image_snaps_count
rbd_group_image_snap_info_t *image_snaps
_RBD_GROUP_SNAP_STATE_INCOMPLETE "RBD_GROUP_SNAP_STATE_INCOMPLETE"
_RBD_GROUP_SNAP_STATE_COMPLETE "RBD_GROUP_SNAP_STATE_COMPLETE"
+ ctypedef enum rbd_group_snap_namespace_type_t:
+ _RBD_GROUP_SNAP_NAMESPACE_TYPE_USER "RBD_GROUP_SNAP_NAMESPACE_TYPE_USER"
+
ctypedef struct rbd_group_image_snap_info_t:
char *image_name
int64_t pool_id
char *name
char *image_snap_name
rbd_group_snap_state_t state
+ rbd_group_snap_namespace_type_t namespace_type
size_t image_snaps_count
rbd_group_image_snap_info_t *image_snaps
RBD_GROUP_SNAP_STATE_INCOMPLETE = _RBD_GROUP_SNAP_STATE_INCOMPLETE
RBD_GROUP_SNAP_STATE_COMPLETE = _RBD_GROUP_SNAP_STATE_COMPLETE
+RBD_GROUP_SNAP_NAMESPACE_TYPE_USER = _RBD_GROUP_SNAP_NAMESPACE_TYPE_USER
+
RBD_IMAGE_MIGRATION_STATE_UNKNOWN = _RBD_IMAGE_MIGRATION_STATE_UNKNOWN
RBD_IMAGE_MIGRATION_STATE_ERROR = _RBD_IMAGE_MIGRATION_STATE_ERROR
RBD_IMAGE_MIGRATION_STATE_PREPARING = _RBD_IMAGE_MIGRATION_STATE_PREPARING
* ``state`` (int) - state of the group snapshot
+ * ``namespace_type`` (int) - group snapshot namespace type
+
* ``image_snap_name`` (str) - name of the image snapshots
* ``image_snaps`` (list) - image snapshots that constitute the group snapshot.
'id': decode_cstr(group_snap.id),
'name': decode_cstr(group_snap.name),
'state': group_snap.state,
+ 'namespace_type': group_snap.namespace_type,
'image_snap_name': decode_cstr(group_snap.image_snap_name),
'image_snaps': image_snaps
}
* ``state`` (int) - state of the group snapshot
+ * ``namespace_type`` (int) - group snapshot namespace type
+
* ``image_snap_name`` (str) - name of the image snapshots
* ``image_snaps`` (list) - image snapshots that constitute the group snapshot.
'id': decode_cstr(group_snap.id),
'name': decode_cstr(group_snap.name),
'state': group_snap.state,
+ 'namespace_type': group_snap.namespace_type,
'image_snap_name': decode_cstr(group_snap.image_snap_name),
'image_snaps': image_snaps,
}
&gp_snap_info));
ASSERT_STREQ(gp_snap_name, gp_snap_info.name);
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
+ ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
ASSERT_STREQ("", gp_snap_info.image_snap_name);
ASSERT_EQ(0U, gp_snap_info.image_snaps_count);
&gp_snap_info));
ASSERT_STREQ(gp_snap_name, gp_snap_info.name);
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
+ ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
ASSERT_EQ(1U, gp_snap_info.image_snaps_count);
ASSERT_EQ(m_image_name, gp_snap_info.image_snaps[0].image_name);
ASSERT_EQ(rados_ioctx_get_id(ioctx), gp_snap_info.image_snaps[0].pool_id);
&gp_snap_info));
ASSERT_EQ(gp_snap_name, gp_snap_info.name);
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
+ ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
ASSERT_EQ("", gp_snap_info.image_snap_name);
ASSERT_EQ(0U, gp_snap_info.image_snaps.size());
&gp_snap_info));
ASSERT_EQ(gp_snap_name, gp_snap_info.name);
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
+ ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
ASSERT_EQ(1U, gp_snap_info.image_snaps.size());
ASSERT_EQ(m_image_name, gp_snap_info.image_snaps[0].image_name);
ASSERT_EQ(m_ioctx.get_id(), gp_snap_info.image_snaps[0].pool_id);
for (int i = 0; i < 4; i++) {
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snaps[i].state);
+ ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snaps[i].namespace_type);
if (!strcmp(gp_snaps[i].name, gp_snap_names[0])) {
ASSERT_EQ(0U, gp_snaps[i].image_snaps_count);
} else if (!strcmp(gp_snaps[i].name, gp_snap_names[1])) {
for (const auto& gp_snap : gp_snaps) {
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap.state);
+ ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap.namespace_type);
if (gp_snap.name == gp_snap_names[0]) {
ASSERT_EQ(0U, gp_snap.image_snaps.size());
} else if (gp_snap.name == gp_snap_names[1]) {
RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR,
RBD_WRITE_ZEROES_FLAG_THICK_PROVISION,
RBD_ENCRYPTION_FORMAT_LUKS1, RBD_ENCRYPTION_FORMAT_LUKS2,
- RBD_ENCRYPTION_FORMAT_LUKS, RBD_GROUP_SNAP_STATE_COMPLETE)
+ RBD_ENCRYPTION_FORMAT_LUKS, RBD_GROUP_SNAP_STATE_COMPLETE,
+ RBD_GROUP_SNAP_NAMESPACE_TYPE_USER)
rados = None
ioctx = None
class TestGroups(object):
img_snap_keys = ['image_name', 'pool_id', 'snap_id']
- gp_snap_keys = ['id', 'image_snap_name', 'image_snaps', 'name', 'state']
+ gp_snap_keys = ['id', 'image_snap_name', 'image_snaps', 'name',
+ 'namespace_type', 'state']
def setup_method(self, method):
global snap_name
assert sorted(snap_info_dict.keys()) == self.gp_snap_keys
assert snap_info_dict['name'] == snap_name
assert snap_info_dict['state'] == RBD_GROUP_SNAP_STATE_COMPLETE
+ assert snap_info_dict['namespace_type'] == RBD_GROUP_SNAP_NAMESPACE_TYPE_USER
for image_snap in snap_info_dict['image_snaps']:
assert sorted(image_snap.keys()) == self.img_snap_keys
assert image_snap['pool_id'] == pool_id
assert sorted(snap_info_dict.keys()) == self.gp_snap_keys
assert snap_info_dict['name'] == snap_name
assert snap_info_dict['state'] == RBD_GROUP_SNAP_STATE_COMPLETE
+ assert snap_info_dict['namespace_type'] == RBD_GROUP_SNAP_NAMESPACE_TYPE_USER
assert snap_info_dict['image_snap_name'] == ""
assert snap_info_dict['image_snaps'] == []