Skip to content

Commit 3ed23ca

Browse files
authored
Merge pull request ceph#60403 from trociny/wip-68206
rgw: trigger resharding of versioned buckets sooner Reviewed-by: J. Eric Ivancich <[email protected]>
2 parents 9ef9c12 + fe3bc76 commit 3ed23ca

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

src/rgw/driver/rados/rgw_rados.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10815,6 +10815,7 @@ int RGWRados::cls_bucket_head_async(const DoutPrefixProvider *dpp, const RGWBuck
1081510815

1081610816
// uses information that the store has easy access to transition to the shard calculatoin logic
1081710817
void RGWRados::calculate_preferred_shards(const DoutPrefixProvider* dpp,
10818+
bool is_versioned,
1081810819
const uint64_t num_objs,
1081910820
const uint32_t num_source_shards,
1082010821
const uint32_t min_layout_shards,
@@ -10823,8 +10824,16 @@ void RGWRados::calculate_preferred_shards(const DoutPrefixProvider* dpp,
1082310824
{
1082410825
const uint32_t max_dynamic_shards =
1082510826
uint32_t(cct->_conf.get_val<uint64_t>("rgw_max_dynamic_shards"));
10826-
const uint64_t max_objs_per_shard =
10827+
uint64_t max_objs_per_shard =
1082710828
cct->_conf.get_val<uint64_t>("rgw_max_objs_per_shard");
10829+
10830+
if (is_versioned) {
10831+
// Since each versioned bucket requires 4 entries for the first object
10832+
// and 2 additional entries for each additional object, we want to
10833+
// trigger resharding sooner.
10834+
max_objs_per_shard /= 3;
10835+
}
10836+
1082810837
const bool is_multisite = svc.zone->need_to_log_data();
1082910838

1083010839
RGWBucketReshard::calculate_preferred_shards(dpp,
@@ -10861,12 +10870,13 @@ int RGWRados::check_bucket_shards(const RGWBucketInfo& bucket_info,
1086110870

1086210871
bool need_resharding = false;
1086310872
uint32_t suggested_num_shards = 0;
10873+
const bool is_versioned = bucket_info.versioned();
1086410874
const uint32_t num_source_shards =
1086510875
rgw::current_num_shards(bucket_info.layout);
1086610876
const uint32_t min_layout_shards =
1086710877
rgw::current_min_layout_shards(bucket_info.layout);
1086810878

10869-
calculate_preferred_shards(dpp, num_objs,
10879+
calculate_preferred_shards(dpp, is_versioned, num_objs,
1087010880
num_source_shards, min_layout_shards,
1087110881
need_resharding, &suggested_num_shards);
1087210882
if (! need_resharding) {

src/rgw/driver/rados/rgw_rados.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,6 +1628,7 @@ int restore_obj_from_cloud(RGWLCCloudTierCtx& tier_ctx,
16281628
optional_yield y, bool check_size_only = false);
16291629

16301630
void calculate_preferred_shards(const DoutPrefixProvider* dpp,
1631+
bool is_versioned,
16311632
const uint64_t num_objs,
16321633
const uint32_t current_shard_count,
16331634
const uint32_t min_layout_shards,

src/rgw/driver/rados/rgw_reshard.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1642,6 +1642,7 @@ int RGWReshard::process_entry(const cls_rgw_reshard_entry& entry,
16421642
num_entries += s.second.num_objects;
16431643
}
16441644

1645+
const bool is_versioned = bucket_info.versioned();
16451646
const uint32_t current_shard_count =
16461647
rgw::current_num_shards(bucket_info.layout);
16471648
const uint32_t min_layout_shards =
@@ -1653,7 +1654,7 @@ int RGWReshard::process_entry(const cls_rgw_reshard_entry& entry,
16531654
// needed to perform the calculation before calling
16541655
// calculating_preferred_shards() in this class
16551656
store->getRados()->calculate_preferred_shards(
1656-
dpp, num_entries, current_shard_count, min_layout_shards,
1657+
dpp, is_versioned, num_entries, current_shard_count, min_layout_shards,
16571658
needs_resharding, &suggested_shard_count);
16581659

16591660
// if we no longer need resharding or currently need to expand

0 commit comments

Comments
 (0)