Skip to content

Commit 45cdd37

Browse files
committed
librbd: introduce rbd_group_snap_namespace_type_t enum
Commit e5ccce1 ("rbd: add group snap info command") added a commented out field in rbd_group_snap_info2_t struct but didn't define the corresponding enum, expecting it to be brought in with the patchset that introduces mirror group snapshots. That work is still in progress, but there is already interest in the new command and APIs that use rbd_group_snap_info2_t struct and even a backport request. Finalize the struct definition to avoid a breaking change for those users in the future. RBD_GROUP_SNAP_NAMESPACE_TYPE_USER can be treated as dummy in terms of meaning until RBD_GROUP_SNAP_NAMESPACE_TYPE_MIRROR is added. Signed-off-by: Ilya Dryomov <[email protected]>
1 parent 8b3860d commit 45cdd37

File tree

9 files changed

+37
-4
lines changed

9 files changed

+37
-4
lines changed

src/include/rbd/librbd.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,10 @@ typedef enum {
249249
RBD_GROUP_SNAP_STATE_COMPLETE
250250
} rbd_group_snap_state_t;
251251

252+
typedef enum {
253+
RBD_GROUP_SNAP_NAMESPACE_TYPE_USER = 0
254+
} rbd_group_snap_namespace_type_t;
255+
252256
typedef struct {
253257
char *image_name;
254258
int64_t pool_id;
@@ -265,7 +269,7 @@ typedef struct {
265269
char *name;
266270
char *image_snap_name;
267271
rbd_group_snap_state_t state;
268-
//rbd_group_snap_namespace_type_t namespace_type;
272+
rbd_group_snap_namespace_type_t namespace_type;
269273
size_t image_snaps_count;
270274
rbd_group_image_snap_info_t *image_snaps;
271275
} rbd_group_snap_info2_t;

src/include/rbd/librbd.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ namespace librbd {
160160
} group_info_t;
161161

162162
typedef rbd_group_snap_state_t group_snap_state_t;
163+
typedef rbd_group_snap_namespace_type_t group_snap_namespace_type_t;
163164

164165
typedef struct {
165166
std::string image_name;
@@ -177,7 +178,7 @@ namespace librbd {
177178
std::string name;
178179
std::string image_snap_name;
179180
group_snap_state_t state;
180-
//group_snap_namespace_type_t namespace_type;
181+
group_snap_namespace_type_t namespace_type;
181182
std::vector<group_image_snap_info_t> image_snaps;
182183
} group_snap_info2_t;
183184

src/librbd/api/Group.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ int GroupSnapshot_to_group_snap_info2(
483483
group_snap->id = cls_group_snap.id;
484484
group_snap->name = cls_group_snap.name;
485485
group_snap->state = static_cast<group_snap_state_t>(cls_group_snap.state);
486+
group_snap->namespace_type = RBD_GROUP_SNAP_NAMESPACE_TYPE_USER;
486487
if (!image_snaps.empty()) {
487488
group_snap->image_snap_name = calc_ind_image_snap_name(
488489
group_ioctx.get_id(), group_id, cls_group_snap.id);

src/librbd/librbd.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ void group_snap_info2_cpp_to_c(const librbd::group_snap_info2_t &cpp_info,
275275
c_info->name = strdup(cpp_info.name.c_str());
276276
c_info->image_snap_name = strdup(cpp_info.image_snap_name.c_str());
277277
c_info->state = cpp_info.state;
278+
c_info->namespace_type = cpp_info.namespace_type;
278279
c_info->image_snaps_count = cpp_info.image_snaps.size();
279280
c_info->image_snaps = static_cast<rbd_group_image_snap_info_t*>(calloc(
280281
cpp_info.image_snaps.size(), sizeof(rbd_group_image_snap_info_t)));

src/pybind/rbd/c_rbd.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,9 @@ cdef extern from "rbd/librbd.h" nogil:
224224
_RBD_GROUP_SNAP_STATE_INCOMPLETE "RBD_GROUP_SNAP_STATE_INCOMPLETE"
225225
_RBD_GROUP_SNAP_STATE_COMPLETE "RBD_GROUP_SNAP_STATE_COMPLETE"
226226

227+
ctypedef enum rbd_group_snap_namespace_type_t:
228+
_RBD_GROUP_SNAP_NAMESPACE_TYPE_USER "RBD_GROUP_SNAP_NAMESPACE_TYPE_USER"
229+
227230
ctypedef struct rbd_group_image_snap_info_t:
228231
char *image_name
229232
int64_t pool_id
@@ -234,6 +237,7 @@ cdef extern from "rbd/librbd.h" nogil:
234237
char *name
235238
char *image_snap_name
236239
rbd_group_snap_state_t state
240+
rbd_group_snap_namespace_type_t namespace_type
237241
size_t image_snaps_count
238242
rbd_group_image_snap_info_t *image_snaps
239243

src/pybind/rbd/mock_rbd.pxi

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@ cdef nogil:
228228
_RBD_GROUP_SNAP_STATE_INCOMPLETE "RBD_GROUP_SNAP_STATE_INCOMPLETE"
229229
_RBD_GROUP_SNAP_STATE_COMPLETE "RBD_GROUP_SNAP_STATE_COMPLETE"
230230

231+
ctypedef enum rbd_group_snap_namespace_type_t:
232+
_RBD_GROUP_SNAP_NAMESPACE_TYPE_USER "RBD_GROUP_SNAP_NAMESPACE_TYPE_USER"
233+
231234
ctypedef struct rbd_group_image_snap_info_t:
232235
char *image_name
233236
int64_t pool_id
@@ -238,6 +241,7 @@ cdef nogil:
238241
char *name
239242
char *image_snap_name
240243
rbd_group_snap_state_t state
244+
rbd_group_snap_namespace_type_t namespace_type
241245
size_t image_snaps_count
242246
rbd_group_image_snap_info_t *image_snaps
243247

src/pybind/rbd/rbd.pyx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ RBD_GROUP_IMAGE_STATE_INCOMPLETE = _RBD_GROUP_IMAGE_STATE_INCOMPLETE
134134
RBD_GROUP_SNAP_STATE_INCOMPLETE = _RBD_GROUP_SNAP_STATE_INCOMPLETE
135135
RBD_GROUP_SNAP_STATE_COMPLETE = _RBD_GROUP_SNAP_STATE_COMPLETE
136136

137+
RBD_GROUP_SNAP_NAMESPACE_TYPE_USER = _RBD_GROUP_SNAP_NAMESPACE_TYPE_USER
138+
137139
RBD_IMAGE_MIGRATION_STATE_UNKNOWN = _RBD_IMAGE_MIGRATION_STATE_UNKNOWN
138140
RBD_IMAGE_MIGRATION_STATE_ERROR = _RBD_IMAGE_MIGRATION_STATE_ERROR
139141
RBD_IMAGE_MIGRATION_STATE_PREPARING = _RBD_IMAGE_MIGRATION_STATE_PREPARING
@@ -2843,6 +2845,8 @@ cdef class Group(object):
28432845
28442846
* ``state`` (int) - state of the group snapshot
28452847
2848+
* ``namespace_type`` (int) - group snapshot namespace type
2849+
28462850
* ``image_snap_name`` (str) - name of the image snapshots
28472851
28482852
* ``image_snaps`` (list) - image snapshots that constitute the group snapshot.
@@ -2881,6 +2885,7 @@ cdef class Group(object):
28812885
'id': decode_cstr(group_snap.id),
28822886
'name': decode_cstr(group_snap.name),
28832887
'state': group_snap.state,
2888+
'namespace_type': group_snap.namespace_type,
28842889
'image_snap_name': decode_cstr(group_snap.image_snap_name),
28852890
'image_snaps': image_snaps
28862891
}
@@ -6055,6 +6060,8 @@ cdef class GroupSnapIterator(object):
60556060
60566061
* ``state`` (int) - state of the group snapshot
60576062
6063+
* ``namespace_type`` (int) - group snapshot namespace type
6064+
60586065
* ``image_snap_name`` (str) - name of the image snapshots
60596066
60606067
* ``image_snaps`` (list) - image snapshots that constitute the group snapshot.
@@ -6105,6 +6112,7 @@ cdef class GroupSnapIterator(object):
61056112
'id': decode_cstr(group_snap.id),
61066113
'name': decode_cstr(group_snap.name),
61076114
'state': group_snap.state,
6115+
'namespace_type': group_snap.namespace_type,
61086116
'image_snap_name': decode_cstr(group_snap.image_snap_name),
61096117
'image_snaps': image_snaps,
61106118
}

src/test/librbd/test_Groups.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,7 @@ TEST_F(TestGroup, snap_get_info)
522522
&gp_snap_info));
523523
ASSERT_STREQ(gp_snap_name, gp_snap_info.name);
524524
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
525+
ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
525526
ASSERT_STREQ("", gp_snap_info.image_snap_name);
526527
ASSERT_EQ(0U, gp_snap_info.image_snaps_count);
527528

@@ -536,6 +537,7 @@ TEST_F(TestGroup, snap_get_info)
536537
&gp_snap_info));
537538
ASSERT_STREQ(gp_snap_name, gp_snap_info.name);
538539
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
540+
ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
539541
ASSERT_EQ(1U, gp_snap_info.image_snaps_count);
540542
ASSERT_EQ(m_image_name, gp_snap_info.image_snaps[0].image_name);
541543
ASSERT_EQ(rados_ioctx_get_id(ioctx), gp_snap_info.image_snaps[0].pool_id);
@@ -574,6 +576,7 @@ TEST_F(TestGroup, snap_get_infoPP)
574576
&gp_snap_info));
575577
ASSERT_EQ(gp_snap_name, gp_snap_info.name);
576578
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
579+
ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
577580
ASSERT_EQ("", gp_snap_info.image_snap_name);
578581
ASSERT_EQ(0U, gp_snap_info.image_snaps.size());
579582

@@ -587,6 +590,7 @@ TEST_F(TestGroup, snap_get_infoPP)
587590
&gp_snap_info));
588591
ASSERT_EQ(gp_snap_name, gp_snap_info.name);
589592
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap_info.state);
593+
ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap_info.namespace_type);
590594
ASSERT_EQ(1U, gp_snap_info.image_snaps.size());
591595
ASSERT_EQ(m_image_name, gp_snap_info.image_snaps[0].image_name);
592596
ASSERT_EQ(m_ioctx.get_id(), gp_snap_info.image_snaps[0].pool_id);
@@ -652,6 +656,7 @@ TEST_F(TestGroup, snap_list2)
652656

653657
for (int i = 0; i < 4; i++) {
654658
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snaps[i].state);
659+
ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snaps[i].namespace_type);
655660
if (!strcmp(gp_snaps[i].name, gp_snap_names[0])) {
656661
ASSERT_EQ(0U, gp_snaps[i].image_snaps_count);
657662
} else if (!strcmp(gp_snaps[i].name, gp_snap_names[1])) {
@@ -739,6 +744,7 @@ TEST_F(TestGroup, snap_list2PP)
739744

740745
for (const auto& gp_snap : gp_snaps) {
741746
ASSERT_EQ(RBD_GROUP_SNAP_STATE_COMPLETE, gp_snap.state);
747+
ASSERT_EQ(RBD_GROUP_SNAP_NAMESPACE_TYPE_USER, gp_snap.namespace_type);
742748
if (gp_snap.name == gp_snap_names[0]) {
743749
ASSERT_EQ(0U, gp_snap.image_snaps.size());
744750
} else if (gp_snap.name == gp_snap_names[1]) {

src/test/pybind/test_rbd.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@
4949
RBD_SNAP_CREATE_IGNORE_QUIESCE_ERROR,
5050
RBD_WRITE_ZEROES_FLAG_THICK_PROVISION,
5151
RBD_ENCRYPTION_FORMAT_LUKS1, RBD_ENCRYPTION_FORMAT_LUKS2,
52-
RBD_ENCRYPTION_FORMAT_LUKS, RBD_GROUP_SNAP_STATE_COMPLETE)
52+
RBD_ENCRYPTION_FORMAT_LUKS, RBD_GROUP_SNAP_STATE_COMPLETE,
53+
RBD_GROUP_SNAP_NAMESPACE_TYPE_USER)
5354

5455
rados = None
5556
ioctx = None
@@ -2836,7 +2837,8 @@ def test_list_groups_after_removed():
28362837

28372838
class TestGroups(object):
28382839
img_snap_keys = ['image_name', 'pool_id', 'snap_id']
2839-
gp_snap_keys = ['id', 'image_snap_name', 'image_snaps', 'name', 'state']
2840+
gp_snap_keys = ['id', 'image_snap_name', 'image_snaps', 'name',
2841+
'namespace_type', 'state']
28402842

28412843
def setup_method(self, method):
28422844
global snap_name
@@ -2925,6 +2927,7 @@ def test_group_snap_get_info(self):
29252927
assert sorted(snap_info_dict.keys()) == self.gp_snap_keys
29262928
assert snap_info_dict['name'] == snap_name
29272929
assert snap_info_dict['state'] == RBD_GROUP_SNAP_STATE_COMPLETE
2930+
assert snap_info_dict['namespace_type'] == RBD_GROUP_SNAP_NAMESPACE_TYPE_USER
29282931
for image_snap in snap_info_dict['image_snaps']:
29292932
assert sorted(image_snap.keys()) == self.img_snap_keys
29302933
assert image_snap['pool_id'] == pool_id
@@ -2946,6 +2949,7 @@ def test_group_snap_get_info_no_member_images(self):
29462949
assert sorted(snap_info_dict.keys()) == self.gp_snap_keys
29472950
assert snap_info_dict['name'] == snap_name
29482951
assert snap_info_dict['state'] == RBD_GROUP_SNAP_STATE_COMPLETE
2952+
assert snap_info_dict['namespace_type'] == RBD_GROUP_SNAP_NAMESPACE_TYPE_USER
29492953
assert snap_info_dict['image_snap_name'] == ""
29502954
assert snap_info_dict['image_snaps'] == []
29512955

0 commit comments

Comments
 (0)