]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
RadosClient: reimplement the pool alignment methods using the new ones 6489/head
authorxiexingguo <258156334@qq.com>
Thu, 19 Nov 2015 04:48:32 +0000 (12:48 +0800)
committerxiexingguo <258156334@qq.com>
Thu, 19 Nov 2015 04:48:32 +0000 (12:48 +0800)
so we don't less duplicated code and the logic reveals the problem of the old methods in a more visible way.
Fixes: #13715
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/librados/RadosClient.cc

index 09128e2a0bd1c0cc307196c11f8b294dc3f66aef..1acde03ae21ea9716d411d53efba5d8a36d8a80f 100644 (file)
@@ -94,16 +94,15 @@ int64_t librados::RadosClient::lookup_pool(const char *name)
 
 bool librados::RadosClient::pool_requires_alignment(int64_t pool_id)
 {
-  int r = wait_for_osdmap();
+  bool requires;
+  int r = pool_requires_alignment2(pool_id, &requires);
   if (r < 0) {
-    return r;
+    // Cast answer to false, this is a little bit problematic
+    // since we really don't know the answer yet, say.
+    return false;
   }
 
-  const OSDMap *osdmap = objecter->get_osdmap_read();
-  bool ret = osdmap->have_pg_pool(pool_id) &&
-    osdmap->get_pg_pool(pool_id)->requires_aligned_append();
-  objecter->put_osdmap_read();
-  return ret;
+  return requires;
 }
 
 // a safer version of pool_requires_alignment
@@ -130,16 +129,13 @@ int librados::RadosClient::pool_requires_alignment2(int64_t pool_id,
 
 uint64_t librados::RadosClient::pool_required_alignment(int64_t pool_id)
 {
-  int r = wait_for_osdmap();
+  uint64_t alignment;
+  int r = pool_required_alignment2(pool_id, &alignment);
   if (r < 0) {
-    return r;
+    return 0;
   }
 
-  const OSDMap *osdmap = objecter->get_osdmap_read();
-  uint64_t ret = osdmap->have_pg_pool(pool_id) ?
-    osdmap->get_pg_pool(pool_id)->required_alignment() : 0;
-  objecter->put_osdmap_read();
-  return ret;
+  return alignment;
 }
 
 // a safer version of pool_required_alignment