]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: store data pool id with image header during creation
authorJason Dillaman <dillaman@redhat.com>
Thu, 6 Oct 2016 19:04:51 +0000 (15:04 -0400)
committerJason Dillaman <dillaman@redhat.com>
Mon, 10 Oct 2016 18:08:09 +0000 (14:08 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/image/CreateRequest.cc
src/librbd/image/CreateRequest.h

index df0fe28f079947834643cd4b82890eccecf65652..0e0d02bd9909961105193116fa2ba6a2b477cb6d 100644 (file)
@@ -72,7 +72,7 @@ int validate_striping(CephContext *cct, uint8_t order, uint64_t stripe_unit,
 }
 
 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;
   }
@@ -84,6 +84,8 @@ int validate_data_pool(CephContext *cct, IoCtx &io_ctx, uint64_t features,
     lderr(cct) << "data pool " << data_pool << " does not exist" << dendl;
     return -ENOENT;
   }
+
+  *data_pool_id = data_io_ctx.get_id();
   return 0;
 }
 
@@ -185,7 +187,7 @@ CreateRequest<I>::CreateRequest(IoCtx &ioctx, const std::string &image_name,
 
   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;
@@ -242,7 +244,8 @@ void CreateRequest<I>::send() {
     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;
@@ -388,10 +391,12 @@ void CreateRequest<I>::create_image() {
   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 =
index 90941129104ebc9a19eac8c54630c81ed5c0557f..aa30615c1437528d4830058db74269e304bc09cb 100644 (file)
@@ -109,6 +109,7 @@ private:
   uint8_t m_journal_splay_width = 0;
   std::string m_journal_pool;
   std::string m_data_pool;
+  int64_t m_data_pool_id = -1;
   const std::string m_non_primary_global_image_id;
   const std::string m_primary_mirror_uuid;