ASSERT_NE("", m_pool_name = create_pool());
}
+ void validate_object_map(rbd_image_t image, bool *passed) {
+ uint64_t flags;
+ ASSERT_EQ(0, rbd_get_flags(image, &flags));
+ *passed = ((flags & RBD_FLAG_OBJECT_MAP_INVALID) == 0);
+ }
+
+ void validate_object_map(librbd::Image &image, bool *passed) {
+ uint64_t flags;
+ ASSERT_EQ(0, image.get_flags(&flags));
+ *passed = ((flags & RBD_FLAG_OBJECT_MAP_INVALID) == 0);
+ }
+
std::string get_temp_image_name() {
++_image_number;
return "image" + stringify(_image_number);
ASSERT_EQ(0, rbd_resize(image, size / 2));
ASSERT_EQ(0, rbd_stat(image, &info, sizeof(info)));
ASSERT_EQ(info.size, size / 2);
-
+
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
ASSERT_EQ(0, image.resize(size / 2));
ASSERT_EQ(0, image.stat(info, sizeof(info)));
ASSERT_EQ(info.size, size / 2);
+ ASSERT_PASSED(validate_object_map, image);
}
ioctx.close();
ASSERT_EQ(3, test_ls(ioctx, 3, name.c_str(), name2.c_str(), name3.c_str()));
ASSERT_EQ(0, rbd_close(image));
-
rados_ioctx_destroy(ioctx);
}
ASSERT_EQ(-EINVAL, rbd_aio_write(image, info.size, 1, test_data, comp));
ASSERT_EQ(-EINVAL, rbd_aio_read(image, info.size, 1, test_data, comp));
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
ASSERT_EQ(-EINVAL, rbd_aio_read2(image, info.size, 1, test_data, comp,
LIBRADOS_OP_FLAG_FADVISE_DONTNEED));
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
ASSERT_PASSED(aio_discard_test_data, image, 0, 1*1024*1024);
ASSERT_PASSED(aio_discard_test_data, image, 0, 4*1024*1024);
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*2, TEST_IO_SIZE, 0);
ASSERT_PASSED(read_test_data, image, zero_data, TEST_IO_SIZE*3, TEST_IO_SIZE, 0);
ASSERT_PASSED(read_test_data, image, test_data, TEST_IO_SIZE*4, TEST_IO_SIZE, 0);
+
+ ASSERT_PASSED(validate_object_map, image);
}
ioctx.close();
for (i = 5; i < 10; ++i)
ASSERT_PASSED(aio_read_test_data, image, test_data, strlen(test_data) * i,
TEST_IO_SIZE, LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL|LIBRADOS_OP_FLAG_FADVISE_DONTNEED);
+
+ ASSERT_PASSED(validate_object_map, image);
}
ioctx.close();
ASSERT_EQ(0, rbd_snap_remove(image, "orig"));
ASSERT_EQ(0, test_ls_snaps(image, 0));
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
ASSERT_EQ(pinfo.size, 4UL<<20);
printf("sized up clone, changed size but not overlap or parent's size\n");
+ ASSERT_PASSED(validate_object_map, child);
ASSERT_EQ(0, rbd_close(child));
+ ASSERT_PASSED(validate_object_map, parent);
ASSERT_EQ(-EBUSY, rbd_snap_remove(parent, "parent_snap"));
printf("can't remove parent while child still exists\n");
ASSERT_EQ(0, rbd_remove(ioctx, child_name.c_str()));
ASSERT_EQ((ssize_t)sizeof(test), rbd_read(child, 0, sizeof(test), test));
ASSERT_EQ(0, memcmp(test, data, strlen(data)));
+ ASSERT_PASSED(validate_object_map, child);
+ ASSERT_PASSED(validate_object_map, parent);
+
ASSERT_EQ(0, rbd_close(child));
ASSERT_EQ(0, rbd_close(parent));
rados_ioctx_destroy(ioctx);
ASSERT_EQ(0, rbd_close(parent));
ASSERT_EQ(0, rbd_open(ioctx, "parent", &parent, "parent_snap"));
ASSERT_EQ(0, rbd_snap_protect(parent, "parent_snap"));
+ ASSERT_PASSED(validate_object_map, parent);
ASSERT_EQ(0, rbd_close(parent));
printf("made snapshot \"parent@parent_snap\" and protect it\n");
}
rados_nobjects_list_close(list_ctx);
ASSERT_TRUE(obj_checker.empty());
+ ASSERT_PASSED(validate_object_map, child);
ASSERT_EQ(0, rbd_close(child));
rados_ioctx_destroy(ioctx);
rbd_aio_release(write_comps[i]);
}
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
ASSERT_EQ(0, rbd_remove(ioctx, name.c_str()));
rados_ioctx_destroy(ioctx);
ASSERT_EQ(1, comp->is_complete());
delete comp;
}
+ ASSERT_PASSED(validate_object_map, image);
}
ioctx.close();
vector_iterate_cb, (void *) &extents));
ASSERT_EQ(1u, extents.size());
ASSERT_EQ(diff_extent(0, 256, false), extents[0]);
+ ASSERT_PASSED(validate_object_map, image);
ioctx.close();
}
}
}
+ ASSERT_PASSED(validate_object_map, image);
ioctx.close();
}
ASSERT_EQ(1, rbd_read(image, 0, 1, read_data));
ASSERT_EQ('\0', read_data[0]);
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
ASSERT_EQ((int)strlen(data), rbd_read(image, 0, strlen(data), read_data));
ASSERT_EQ(0, memcmp(data, read_data, strlen(data)));
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
rados_ioctx_destroy(ioctx);
comps[i]));
}
+ ASSERT_PASSED(validate_object_map, image);
ASSERT_EQ(0, rbd_close(image));
for (size_t i = 0; i < num_aios; ++i) {
ASSERT_EQ(1, rbd_aio_is_complete(comps[i]));