]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: fix space balancing overflow 30255/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Mon, 9 Sep 2019 08:47:47 +0000 (16:47 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Mon, 9 Sep 2019 23:55:45 +0000 (07:55 +0800)
When gifting, bluestore should not gift more than it actually has.
same for bluefs when reclaming.

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BlueStore.cc

index 40f29fcf7815a2f118b7bc2a3c33f18da2364960..769f28f2588508041432e31b381ad1d61331dbee 100644 (file)
@@ -5783,6 +5783,8 @@ int64_t BlueStore::_get_bluefs_size_delta(uint64_t bluefs_free, uint64_t bluefs_
   uint64_t reclaim = 0;
   if (bluefs_ratio < cct->_conf->bluestore_bluefs_min_ratio) {
     gift = cct->_conf->bluestore_bluefs_gift_ratio * total_free;
+    if (gift >= my_free)
+      gift = my_free / 2;
     dout(10) << __func__ << " bluefs_ratio " << bluefs_ratio
             << " < min_ratio " << cct->_conf->bluestore_bluefs_min_ratio
             << ", should gift " << byte_u_t(gift) << dendl;
@@ -5790,6 +5792,8 @@ int64_t BlueStore::_get_bluefs_size_delta(uint64_t bluefs_free, uint64_t bluefs_
     reclaim = cct->_conf->bluestore_bluefs_reclaim_ratio * total_free;
     if (bluefs_total - reclaim < cct->_conf->bluestore_bluefs_min)
       reclaim = bluefs_total - cct->_conf->bluestore_bluefs_min;
+    if (reclaim >= bluefs_free)
+      reclaim = bluefs_free / 2;
     dout(10) << __func__ << " bluefs_ratio " << bluefs_ratio
             << " > max_ratio " << cct->_conf->bluestore_bluefs_max_ratio
             << ", should reclaim " << byte_u_t(reclaim) << dendl;