]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: avoid polluting shard info if need resharding 11439/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Wed, 12 Oct 2016 08:12:14 +0000 (16:12 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Wed, 12 Oct 2016 08:12:14 +0000 (16:12 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BlueStore.cc

index 1090f7a10717fc738249a8138b255cb153a58f5c..d534aa16cdb57e04c29a1ec337991dd1c2e55383 100644 (file)
@@ -1495,6 +1495,7 @@ bool BlueStore::ExtentMap::update(Onode *o, KeyValueDB::Transaction t,
       dout(20) << __func__ << " inline shard "
               << len << " bytes from " << n << " extents" << dendl;
       if (!force && len > g_conf->bluestore_extent_map_shard_max_size) {
+        inline_bl.clear();
        return true;
       }
     }
@@ -1516,18 +1517,19 @@ bool BlueStore::ExtentMap::update(Onode *o, KeyValueDB::Transaction t,
        if (encode_some(p->offset, endoff - p->offset, bl, &n)) {
          return true;
        }
+        size_t len = bl.length();
        dout(20) << __func__ << " shard 0x" << std::hex
-                << p->offset << std::dec << " is " << bl.length()
+                << p->offset << std::dec << " is " << len
                 << " bytes (was " << p->shard_info->bytes << ") from " << n
                 << " extents" << dendl;
+        if (!force &&
+            (len > g_conf->bluestore_extent_map_shard_max_size ||
+             len < g_conf->bluestore_extent_map_shard_min_size)) {
+          return true;
+        }
        assert(p->shard_info->offset == p->offset);
-       p->shard_info->bytes = bl.length();
+       p->shard_info->bytes = len;
        p->shard_info->extents = n;
-       if (!force &&
-           (bl.length() > g_conf->bluestore_extent_map_shard_max_size ||
-            bl.length() < g_conf->bluestore_extent_map_shard_min_size)) {
-         return true;
-       }
        t->set(PREFIX_OBJ, p->key, bl);
        p->dirty = false;
       }