From 8a54e03f29e19af2072751fe2816b5313ff18abe Mon Sep 17 00:00:00 2001 From: Yanhu Cao Date: Tue, 8 Sep 2020 14:20:12 +0800 Subject: [PATCH] mds: fix purge_queue's _calculate_ops is inaccurate No need to account for removing (or zeroing) backtrace, because if item.size is 0, num is already set to 1. Fixes: https://tracker.ceph.com/issues/47353 Signed-off-by: Yanhu Cao --- src/mds/PurgeQueue.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mds/PurgeQueue.cc b/src/mds/PurgeQueue.cc index 7038d693007fc..71cc929aecc31 100644 --- a/src/mds/PurgeQueue.cc +++ b/src/mds/PurgeQueue.cc @@ -371,14 +371,12 @@ uint32_t PurgeQueue::_calculate_ops(const PurgeItem &item) const ops_required = 1 + leaves.size(); } else { // File, work out concurrent Filer::purge deletes + // Account for removing (or zeroing) backtrace const uint64_t num = (item.size > 0) ? Striper::get_num_objects(item.layout, item.size) : 1; ops_required = std::min(num, g_conf()->filer_max_purge_ops); - // Account for removing (or zeroing) backtrace - ops_required += 1; - // Account for deletions for old pools if (item.action != PurgeItem::TRUNCATE_FILE) { ops_required += item.old_pools.size(); -- 2.39.5