}
int validate_data_pool(CephContext *cct, IoCtx &io_ctx, uint64_t features,
- const std::string &data_pool) {
+ const std::string &data_pool, int64_t *data_pool_id) {
if ((features & RBD_FEATURE_DATA_POOL) == 0) {
return 0;
}
lderr(cct) << "data pool " << data_pool << " does not exist" << dendl;
return -ENOENT;
}
+
+ *data_pool_id = data_io_ctx.get_id();
return 0;
}
m_force_non_primary = !non_primary_global_image_id.empty();
- if (/* TODO */ false && !m_data_pool.empty() && m_data_pool != ioctx.get_pool_name()) {
+ if (!m_data_pool.empty() && m_data_pool != ioctx.get_pool_name()) {
m_features |= RBD_FEATURE_DATA_POOL;
} else {
m_features &= ~RBD_FEATURE_DATA_POOL;
return;
}
- r = validate_data_pool(m_cct, m_ioctx, m_features, m_data_pool);
+ r = validate_data_pool(m_cct, m_ioctx, m_features, m_data_pool,
+ &m_data_pool_id);
if (r < 0) {
complete(r);
return;
ostringstream oss;
oss << RBD_DATA_PREFIX << m_image_id;
+ assert(m_data_pool.empty() || m_data_pool_id != -1);
+
librados::ObjectWriteOperation op;
op.create(true);
cls_client::create_image(&op, m_size, m_order, m_features, oss.str(),
- /* TODO */-1);
+ m_data_pool_id);
using klass = CreateRequest<I>;
librados::AioCompletion *comp =