mirror of
https://github.com/ceph/ceph
synced 2025-02-20 17:37:29 +00:00
cls::rbd: mirror_image_status_list returned max 64 items
Signed-off-by: Mykola Golub <mgolub@mirantis.com>
This commit is contained in:
parent
89d1601cf8
commit
e925ce8624
@ -3320,8 +3320,8 @@ int image_status_list(cls_method_context_t hctx,
|
||||
(*mirror_images)[image_id] = mirror_image;
|
||||
|
||||
cls::rbd::MirrorImageStatus status;
|
||||
r = image_status_get(hctx, mirror_image.global_image_id, &status);
|
||||
if (r < 0) {
|
||||
int r1 = image_status_get(hctx, mirror_image.global_image_id, &status);
|
||||
if (r1 < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1631,4 +1631,67 @@ TEST_F(TestClsRbd, mirror_image_status) {
|
||||
ASSERT_EQ(0, mirror_image_status_get_summary(&ioctx, &states));
|
||||
ASSERT_EQ(1U, states.size());
|
||||
ASSERT_EQ(3, states[cls::rbd::MIRROR_IMAGE_STATUS_STATE_UNKNOWN]);
|
||||
|
||||
// Remove images
|
||||
|
||||
image1.state = cls::rbd::MIRROR_IMAGE_STATE_DISABLING;
|
||||
image2.state = cls::rbd::MIRROR_IMAGE_STATE_DISABLING;
|
||||
image3.state = cls::rbd::MIRROR_IMAGE_STATE_DISABLING;
|
||||
|
||||
ASSERT_EQ(0, mirror_image_set(&ioctx, "image_id1", image1));
|
||||
ASSERT_EQ(0, mirror_image_set(&ioctx, "image_id2", image2));
|
||||
ASSERT_EQ(0, mirror_image_set(&ioctx, "image_id3", image3));
|
||||
|
||||
ASSERT_EQ(0, mirror_image_remove(&ioctx, "image_id1"));
|
||||
ASSERT_EQ(0, mirror_image_remove(&ioctx, "image_id2"));
|
||||
ASSERT_EQ(0, mirror_image_remove(&ioctx, "image_id3"));
|
||||
|
||||
states.clear();
|
||||
ASSERT_EQ(0, mirror_image_status_get_summary(&ioctx, &states));
|
||||
ASSERT_EQ(0U, states.size());
|
||||
|
||||
// Test status list with large number of images
|
||||
|
||||
size_t N = 1024;
|
||||
ASSERT_EQ(0U, N % 2);
|
||||
|
||||
for (size_t i = 0; i < N; i++) {
|
||||
std::string id = "id" + stringify(i);
|
||||
std::string uuid = "uuid" + stringify(i);
|
||||
cls::rbd::MirrorImage image(uuid, cls::rbd::MIRROR_IMAGE_STATE_ENABLED);
|
||||
cls::rbd::MirrorImageStatus status(cls::rbd::MIRROR_IMAGE_STATUS_STATE_UNKNOWN);
|
||||
ASSERT_EQ(0, mirror_image_set(&ioctx, id, image));
|
||||
ASSERT_EQ(0, mirror_image_status_set(&ioctx, uuid, status));
|
||||
}
|
||||
|
||||
std::string last_read = "";
|
||||
images.clear();
|
||||
statuses.clear();
|
||||
ASSERT_EQ(0, mirror_image_status_list(&ioctx, last_read, N * 2, &images,
|
||||
&statuses));
|
||||
ASSERT_EQ(N, images.size());
|
||||
ASSERT_EQ(N, statuses.size());
|
||||
|
||||
images.clear();
|
||||
statuses.clear();
|
||||
ASSERT_EQ(0, mirror_image_status_list(&ioctx, last_read, N / 2, &images,
|
||||
&statuses));
|
||||
ASSERT_EQ(N / 2, images.size());
|
||||
ASSERT_EQ(N / 2, statuses.size());
|
||||
|
||||
last_read = images.rbegin()->first;
|
||||
images.clear();
|
||||
statuses.clear();
|
||||
ASSERT_EQ(0, mirror_image_status_list(&ioctx, last_read, N / 2, &images,
|
||||
&statuses));
|
||||
ASSERT_EQ(N / 2, images.size());
|
||||
ASSERT_EQ(N / 2, statuses.size());
|
||||
|
||||
last_read = images.rbegin()->first;
|
||||
images.clear();
|
||||
statuses.clear();
|
||||
ASSERT_EQ(0, mirror_image_status_list(&ioctx, last_read, N / 2, &images,
|
||||
&statuses));
|
||||
ASSERT_EQ(0U, images.size());
|
||||
ASSERT_EQ(0U, statuses.size());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user