int root_id = c.get_item_id("default");
int clone_id;
- ASSERT_EQ(c.device_class_clone(root_id, cl, &clone_id), 0);
+ map<int32_t, map<int32_t, int32_t>> old_class_bucket;
+ set<int32_t> used_ids;
+
+ ASSERT_EQ(c.device_class_clone(root_id, cl, old_class_bucket, used_ids,
+ &clone_id), 0);
ASSERT_TRUE(c.name_exists("default"));
ASSERT_TRUE(c.name_exists("default~ssd"));
c.reweight(g_ceph_context);
+ map<int32_t, map<int32_t, int32_t>> old_class_bucket;
+ set<int32_t> used_ids;
int root_id = c.get_item_id("default");
int clone_id;
- ASSERT_EQ(c.device_class_clone(root_id, cl, &clone_id), 0);
+ ASSERT_EQ(c.device_class_clone(root_id, cl, old_class_bucket, used_ids,
+ &clone_id), 0);
ASSERT_TRUE(c.name_exists("default~ssd"));
ASSERT_EQ(clone_id, c.get_item_id("default~ssd"));
ASSERT_TRUE(c.subtree_contains(clone_id, item));
ASSERT_EQ(c.get_item_weightf(clone_id), 1);
// cloning again does nothing and returns the existing one
int other_clone_id;
- ASSERT_EQ(c.device_class_clone(root_id, cl, &other_clone_id), 0);
+ ASSERT_EQ(c.device_class_clone(root_id, cl, old_class_bucket, used_ids,
+ &other_clone_id), 0);
ASSERT_EQ(clone_id, other_clone_id);
// invalid arguments
- ASSERT_EQ(c.device_class_clone(12345, cl, &other_clone_id), -ECHILD);
- ASSERT_EQ(c.device_class_clone(root_id, 12345, &other_clone_id), -EBADF);
+ ASSERT_EQ(c.device_class_clone(12345, cl, old_class_bucket, used_ids,
+ &other_clone_id), -ECHILD);
+ ASSERT_EQ(c.device_class_clone(root_id, 12345, old_class_bucket, used_ids,
+ &other_clone_id), -EBADF);
}
TEST(CrushWrapper, split_id_class) {
int class_id = c.get_or_create_class_id("ssd");
c.class_map[item] = class_id;
+ map<int32_t, map<int32_t, int32_t>> old_class_bucket;
+ set<int32_t> used_ids;
int item_id = c.get_item_id("default");
int clone_id;
- ASSERT_EQ(c.device_class_clone(item_id, class_id, &clone_id), 0);
+ ASSERT_EQ(c.device_class_clone(item_id, class_id, old_class_bucket, used_ids,
+ &clone_id), 0);
int retrieved_item_id;
int retrieved_class_id;
ASSERT_EQ(c.split_id_class(clone_id, &retrieved_item_id, &retrieved_class_id), 0);
ASSERT_EQ(-1, retrieved_class_id);
}
-TEST(CrushWrapper, populate_and_cleanup_classes) {
+TEST(CrushWrapper, populate_classes) {
CrushWrapper c;
c.create();
c.set_type_name(1, "root");
int class_id = c.get_or_create_class_id("ssd");
c.class_map[item] = class_id;
- ASSERT_EQ(c.populate_classes(), 0);
+ map<int32_t, map<int32_t, int32_t>> old_class_bucket;
+ ASSERT_EQ(c.populate_classes(old_class_bucket), 0);
ASSERT_TRUE(c.name_exists("default~ssd"));
- c.class_bucket.clear();
- ASSERT_EQ(c.cleanup_classes(), 0);
- ASSERT_FALSE(c.name_exists("default~ssd"));
+ old_class_bucket = c.class_bucket;
+ ASSERT_EQ(c.populate_classes(old_class_bucket), 0);
+ ASSERT_EQ(old_class_bucket, c.class_bucket);
}
TEST(CrushWrapper, remove_class_name) {