mirror of
https://github.com/ceph/ceph
synced 2025-02-20 09:27:35 +00:00
Merge pull request #9067 from trociny/fixup-mirror_image_status_list
cls::rbd: mirror_image_status_list returned max 64 items Reviewed-by: Jason Dillaman <dillaman@redhat.com>
This commit is contained in:
commit
24578f6d13
@ -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