// create the parent and snapshot
ASSERT_EQ(0, create_image(&ioctx, parent_image, 2<<20, 0,
- RBD_FEATURE_LAYERING, parent_image));
+ RBD_FEATURE_LAYERING, parent_image, -1));
ASSERT_EQ(0, snapshot_add(&ioctx, parent_image, snapid, snapname));
// add child to it, verify it showed up
string object_prefix = oid;
ASSERT_EQ(0, create_image(&ioctx, oid, size, order,
- features, object_prefix));
+ features, object_prefix, -1));
ASSERT_EQ(-EEXIST, create_image(&ioctx, oid, size, order,
- features, object_prefix));
+ features, object_prefix, -1));
ASSERT_EQ(0, ioctx.remove(oid));
ASSERT_EQ(-EINVAL, create_image(&ioctx, oid, size, order,
- features, ""));
+ features, "", -1));
ASSERT_EQ(-ENOENT, ioctx.remove(oid));
ASSERT_EQ(0, create_image(&ioctx, oid, 0, order,
- features, object_prefix));
+ features, object_prefix, -1));
ASSERT_EQ(0, ioctx.remove(oid));
ASSERT_EQ(-ENOSYS, create_image(&ioctx, oid, size, order,
- -1, object_prefix));
+ -1, object_prefix, -1));
ASSERT_EQ(-ENOENT, ioctx.remove(oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, size, order, RBD_FEATURE_DATA_POOL,
+ object_prefix, 123));
+ ASSERT_EQ(0, ioctx.remove(oid));
+ ASSERT_EQ(-EINVAL, create_image(&ioctx, oid, size, order,
+ RBD_FEATURE_DATA_POOL, object_prefix, -1));
+ ASSERT_EQ(-EINVAL, create_image(&ioctx, oid, size, order, 0, object_prefix,
+ 123));
+
bufferlist inbl, outbl;
ASSERT_EQ(-EINVAL, ioctx.exec(oid, "rbd", "create", inbl, outbl));
uint64_t features;
ASSERT_EQ(-ENOENT, get_features(&ioctx, oid, CEPH_NOSNAP, &features));
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
ASSERT_EQ(0, get_features(&ioctx, oid, CEPH_NOSNAP, &features));
ASSERT_EQ(0u, features);
string object_prefix;
ASSERT_EQ(-ENOENT, get_object_prefix(&ioctx, oid, &object_prefix));
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
ASSERT_EQ(0, get_object_prefix(&ioctx, oid, &object_prefix));
ASSERT_EQ(oid, object_prefix);
ioctx.close();
}
+TEST_F(TestClsRbd, get_data_pool)
+{
+ librados::IoCtx ioctx;
+ ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx));
+
+ string oid = get_temp_image_name();
+
+ int64_t data_pool_id;
+ ASSERT_EQ(0, ioctx.create(oid, true));
+ ASSERT_EQ(0, get_data_pool(&ioctx, oid, &data_pool_id));
+ ASSERT_EQ(-1, data_pool_id);
+ ASSERT_EQ(0, ioctx.remove(oid));
+
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, RBD_FEATURE_DATA_POOL, oid,
+ 12));
+ ASSERT_EQ(0, get_data_pool(&ioctx, oid, &data_pool_id));
+ ASSERT_EQ(12, data_pool_id);
+}
+
TEST_F(TestClsRbd, get_size)
{
librados::IoCtx ioctx;
uint8_t order;
ASSERT_EQ(-ENOENT, get_size(&ioctx, oid, CEPH_NOSNAP, &size, &order));
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
ASSERT_EQ(0, get_size(&ioctx, oid, CEPH_NOSNAP, &size, &order));
ASSERT_EQ(0u, size);
ASSERT_EQ(22, order);
ASSERT_EQ(0, ioctx.remove(oid));
- ASSERT_EQ(0, create_image(&ioctx, oid, 2 << 22, 0, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 2 << 22, 0, 0, oid, -1));
ASSERT_EQ(0, get_size(&ioctx, oid, CEPH_NOSNAP, &size, &order));
ASSERT_EQ(2u << 22, size);
ASSERT_EQ(0, order);
uint64_t size;
uint8_t order;
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
ASSERT_EQ(0, get_size(&ioctx, oid, CEPH_NOSNAP, &size, &order));
ASSERT_EQ(0u, size);
ASSERT_EQ(22, order);
ASSERT_EQ(-ENOENT, set_protection_status(&ioctx, oid,
CEPH_NOSNAP, status));
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, RBD_FEATURE_LAYERING, oid));
- ASSERT_EQ(0, create_image(&ioctx, oid2, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, RBD_FEATURE_LAYERING, oid, -1));
+ ASSERT_EQ(0, create_image(&ioctx, oid2, 0, 22, 0, oid, -1));
ASSERT_EQ(-EINVAL, get_protection_status(&ioctx, oid2,
CEPH_NOSNAP, &status));
ASSERT_EQ(-ENOEXEC, set_protection_status(&ioctx, oid2,
librados::ObjectWriteOperation op;
string oid = get_temp_image_name();
uint64_t limit;
-
+
ASSERT_EQ(-ENOENT, snapshot_get_limit(&ioctx, oid, &limit));
-
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, RBD_FEATURE_LAYERING, oid));
+
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, RBD_FEATURE_LAYERING, oid, -1));
snapshot_set_limit(&op, 2);
ASSERT_EQ(-ENOENT, get_parent(&ioctx, "doesnotexist", CEPH_NOSNAP, &pspec, &size));
// old image should fail
- ASSERT_EQ(0, create_image(&ioctx, "old", 33<<20, 22, 0, "old_blk."));
+ ASSERT_EQ(0, create_image(&ioctx, "old", 33<<20, 22, 0, "old_blk.", -1));
// get nonexistent parent: succeed, return (-1, "", CEPH_NOSNAP), overlap 0
ASSERT_EQ(0, get_parent(&ioctx, "old", CEPH_NOSNAP, &pspec, &size));
ASSERT_EQ(pspec.pool_id, -1);
ASSERT_EQ(-ENOEXEC, remove_parent(&ioctx, "old"));
// new image will work
- ASSERT_EQ(0, create_image(&ioctx, oid, 33<<20, 22, RBD_FEATURE_LAYERING, "foo."));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 33<<20, 22, RBD_FEATURE_LAYERING,
+ "foo.", -1));
ASSERT_EQ(0, get_parent(&ioctx, oid, CEPH_NOSNAP, &pspec, &size));
ASSERT_EQ(-1, pspec.pool_id);
ASSERT_EQ(0, ioctx.remove(oid));
ASSERT_EQ(0, create_image(&ioctx, oid, 33<<20, 22,
RBD_FEATURE_LAYERING | RBD_FEATURE_DEEP_FLATTEN,
- "foo."));
+ "foo.", -1));
ASSERT_EQ(0, set_parent(&ioctx, oid, parent_spec(1, "parent", 3), 100<<20));
ASSERT_EQ(0, snapshot_add(&ioctx, oid, 1, "snap1"));
ASSERT_EQ(0, snapshot_add(&ioctx, oid, 2, "snap2"));
string oid = get_temp_image_name();
ASSERT_EQ(-ENOENT, snapshot_add(&ioctx, oid, 0, "snap1"));
- ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, 0, oid, -1));
vector<string> snap_names;
vector<uint64_t> snap_sizes;
string oid = get_temp_image_name();
string oid2 = get_temp_image_name();
- ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, 0, oid, -1));
uint64_t su = 65536, sc = 12;
ASSERT_EQ(-ENOEXEC, get_stripe_unit_count(&ioctx, oid, &su, &sc));
ASSERT_EQ(-ENOEXEC, set_stripe_unit_count(&ioctx, oid, su, sc));
- ASSERT_EQ(0, create_image(&ioctx, oid2, 10, 22, RBD_FEATURE_STRIPINGV2, oid2));
+ ASSERT_EQ(0, create_image(&ioctx, oid2, 10, 22, RBD_FEATURE_STRIPINGV2,
+ oid2, -1));
ASSERT_EQ(0, get_stripe_unit_count(&ioctx, oid2, &su, &sc));
ASSERT_EQ(1ull << 22, su);
ASSERT_EQ(1ull, sc);
string oid = get_temp_image_name();
ASSERT_EQ(0, create_image(&ioctx, oid, 10, 22, RBD_FEATURE_EXCLUSIVE_LOCK,
- oid));
+ oid, -1));
uint64_t size, features, incompatible_features;
std::map<rados::cls::lock::locker_id_t,
ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx));
string oid = get_temp_image_name();
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
uint64_t flags;
std::vector<snapid_t> snap_ids;
ASSERT_EQ(0, _rados.ioctx_create(_pool_name.c_str(), ioctx));
string oid = get_temp_image_name();
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, 0, oid, -1));
map<string, bufferlist> pairs;
string value;
string oid = get_temp_image_name();
uint64_t base_features = RBD_FEATURE_LAYERING | RBD_FEATURE_DEEP_FLATTEN;
- ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, base_features, oid));
+ ASSERT_EQ(0, create_image(&ioctx, oid, 0, 22, base_features, oid, -1));
uint64_t features = RBD_FEATURES_MUTABLE;
uint64_t mask = RBD_FEATURES_MUTABLE;
string image_id = "imageid";
ASSERT_EQ(0, create_image(&ioctx, image_id, 2<<20, 0,
- RBD_FEATURE_LAYERING, image_id));
+ RBD_FEATURE_LAYERING, image_id, -1));
string group_id = "group_id";
string image_id = "image_id";
ASSERT_EQ(0, create_image(&ioctx, image_id, 2<<20, 0,
- RBD_FEATURE_LAYERING, image_id));
+ RBD_FEATURE_LAYERING, image_id, -1));
string group_id = "group_id";
string image_id = "imageidgroupspec";
ASSERT_EQ(0, create_image(&ioctx, image_id, 2<<20, 0,
- RBD_FEATURE_LAYERING, image_id));
+ RBD_FEATURE_LAYERING, image_id, -1));
string group_id = "group_id_get_group_spec";