diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2021-01-04 12:36:29 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2021-01-04 12:42:08 +0100 |
commit | f4974ba0391b965954fdd4c26610c9b36b8172aa (patch) | |
tree | 56b58b393a04c51e583d978680bdeab13e13bb31 /storage | |
parent | 52560d13e5244ed2f69221f871dbf8eb32d06dba (diff) |
Add is_split_group_bucket() utility method.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/src/vespa/storage/distributor/distributor_bucket_space.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/storage/src/vespa/storage/distributor/distributor_bucket_space.cpp b/storage/src/vespa/storage/distributor/distributor_bucket_space.cpp index 784ae5ab8af..9ec4d31eb32 100644 --- a/storage/src/vespa/storage/distributor/distributor_bucket_space.cpp +++ b/storage/src/vespa/storage/distributor/distributor_bucket_space.cpp @@ -127,7 +127,17 @@ setup_ideal_nodes_bundle(IdealServiceLayerNodesBundle& ideal_nodes_bundle, ideal_nodes_bundle.set_available_nonretired_or_maintenance_nodes(distribution.getIdealStorageNodes(cluster_state, bucket, nonretired_or_maintenance_up_states)); } -// Ideal service layer nodes bundle used when bucket id used bits > 33. +/* + * Check if we trigger a streaming search latency optimization where + * we spread out data for a single group over multiple storage nodes. + * See storage::lib::Distribution::getStorageSeed for details. + */ +bool is_split_group_bucket(document::BucketId bucket) noexcept +{ + return bucket.getUsedBits() > 33; +} + +// Ideal service layer nodes bundle used when is_split_group_bucket returns true thread_local IdealServiceLayerNodesBundle fallback_ideal_nodes_bundle; } @@ -136,12 +146,12 @@ const IdealServiceLayerNodesBundle& DistributorBucketSpace::get_ideal_service_layer_nodes_bundle(document::BucketId bucket) const { assert(bucket.getUsedBits() >= _distribution_bits); - if (bucket.getUsedBits() > 33) { + if (is_split_group_bucket(bucket)) { IdealServiceLayerNodesBundle &ideal_nodes_bundle = fallback_ideal_nodes_bundle; setup_ideal_nodes_bundle(ideal_nodes_bundle, *_distribution, *_clusterState, bucket); return ideal_nodes_bundle; } - document::BucketId lookup_bucket((bucket.getUsedBits() > 33) ? bucket.getUsedBits() : _distribution_bits, bucket.getId()); + document::BucketId lookup_bucket(is_split_group_bucket(bucket) ? bucket.getUsedBits() : _distribution_bits, bucket.getId()); auto itr = _ideal_nodes.find(lookup_bucket); if (itr != _ideal_nodes.end()) { return itr->second; |