From fa34cb85b462ad7b022fa544229e5619811618d3 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 1 Mar 2023 17:20:06 -0500 Subject: [PATCH] rgw/reshard: avoid infinite loop if bi_list() returns -ENOENT Signed-off-by: Casey Bodley (cherry picked from commit 3e10944ff551e7bbb3d9083cb351ceb53c6b07b9) --- src/rgw/driver/rados/rgw_reshard.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rgw/driver/rados/rgw_reshard.cc b/src/rgw/driver/rados/rgw_reshard.cc index 01d917022d30..2abf029080fc 100644 --- a/src/rgw/driver/rados/rgw_reshard.cc +++ b/src/rgw/driver/rados/rgw_reshard.cc @@ -837,7 +837,12 @@ int RGWBucketReshard::do_reshard(const rgw::bucket_index_layout_generation& curr while (is_truncated) { entries.clear(); int ret = store->getRados()->bi_list(dpp, bucket_info, i, null_object_filter, marker, max_entries, &entries, &is_truncated); - if (ret < 0 && ret != -ENOENT) { + if (ret == -ENOENT) { + ldpp_dout(dpp, 1) << "WARNING: " << __func__ << " failed to find shard " + << i << ", skipping" << dendl; + // break out of the is_truncated loop and move on to the next shard + break; + } else if (ret < 0) { derr << "ERROR: bi_list(): " << cpp_strerror(-ret) << dendl; return ret; } -- 2.47.3