// uses information that the store has easy access to transition to the shard calculatoin logic
void RGWRados::calculate_preferred_shards(const DoutPrefixProvider* dpp,
+ const RGWBucketInfo& bucket_info,
const uint64_t num_objs,
const uint32_t num_source_shards,
const uint32_t min_layout_shards,
{
const uint32_t max_dynamic_shards =
uint32_t(cct->_conf.get_val<uint64_t>("rgw_max_dynamic_shards"));
- const uint64_t max_objs_per_shard =
+ uint64_t max_objs_per_shard =
cct->_conf.get_val<uint64_t>("rgw_max_objs_per_shard");
+
+ if (bucket_info.versioning_enabled()) {
+ // Since each versioned bucket requires 4 entries for the first object
+ // and 2 additional entries for each additional object, we want to
+ // trigger resharding sooner.
+ max_objs_per_shard /= 3;
+ }
+
const bool is_multisite = svc.zone->need_to_log_data();
RGWBucketReshard::calculate_preferred_shards(dpp,
const uint32_t min_layout_shards =
rgw::current_min_layout_shards(bucket_info.layout);
- calculate_preferred_shards(dpp, num_objs,
+ calculate_preferred_shards(dpp, bucket_info, num_objs,
num_source_shards, min_layout_shards,
need_resharding, &suggested_num_shards);
if (! need_resharding) {
optional_yield y, bool check_size_only = false);
void calculate_preferred_shards(const DoutPrefixProvider* dpp,
+ const RGWBucketInfo& bucket_info,
const uint64_t num_objs,
const uint32_t current_shard_count,
const uint32_t min_layout_shards,
// needed to perform the calculation before calling
// calculating_preferred_shards() in this class
store->getRados()->calculate_preferred_shards(
- dpp, num_entries, current_shard_count, min_layout_shards,
+ dpp, bucket_info, num_entries, current_shard_count, min_layout_shards,
needs_resharding, &suggested_shard_count);
// if we no longer need resharding or currently need to expand