You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 10:07:02 UTC
[lucene] 15/17: SOLR-15019: Renaming,
iterators and other fixes from review.
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch jira/solr-15019
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit 95b1b118a6dcac14d37187e055f2b1b684fe3939
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Dec 24 09:48:21 2020 +0100
SOLR-15019: Renaming, iterators and other fixes from review.
---
.../solr/cluster/placement/AttributeFetcher.java | 6 +--
.../solr/cluster/placement/AttributeValues.java | 2 +-
.../solr/cluster/placement/CollectionMetrics.java | 2 +
.../{MetricAttribute.java => Metric.java} | 15 +------
.../apache/solr/cluster/placement/NodeMetric.java | 11 +++--
.../solr/cluster/placement/ReplicaMetric.java | 2 +-
.../solr/cluster/placement/ReplicaMetrics.java | 4 ++
.../solr/cluster/placement/ShardMetrics.java | 3 ++
.../placement/impl/AttributeFetcherImpl.java | 12 +++---
.../placement/impl/CollectionMetricsBuilder.java | 50 +++++++++++++++++++---
.../{MetricAttributeImpl.java => MetricImpl.java} | 20 ++++-----
.../cluster/placement/impl/NodeMetricImpl.java | 4 +-
.../cluster/placement/impl/ReplicaMetricImpl.java | 2 +-
.../apache/solr/cluster/placement/Builders.java | 4 +-
14 files changed, 88 insertions(+), 49 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/AttributeFetcher.java b/solr/core/src/java/org/apache/solr/cluster/placement/AttributeFetcher.java
index 14051d7..5502c47 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/AttributeFetcher.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/AttributeFetcher.java
@@ -61,10 +61,10 @@ public interface AttributeFetcher {
AttributeFetcher fetchFrom(Set<Node> nodes);
/**
- * Fetches all requested node attributes from all nodes passed to {@link #fetchFrom(Set)} as well as non node attributes
- * (those requested for example using {@link #requestNodeMetric(NodeMetric)}.
+ * Fetches all requested node attributes from all nodes passed to {@link #fetchFrom(Set)} as well as non-node attributes
+ * (those requested using e.g. {@link #requestCollectionMetrics(SolrCollection, Set)}.
*
- * @return An instance allowing retrieval of all attributed that could be fetched.
+ * @return An instance allowing retrieval of all attributes that could be fetched.
*/
AttributeValues fetchAttributes();
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/AttributeValues.java b/solr/core/src/java/org/apache/solr/cluster/placement/AttributeValues.java
index 43e51e5..b0e7e45 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/AttributeValues.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/AttributeValues.java
@@ -33,7 +33,7 @@ public interface AttributeValues {
Optional<String> getEnvironmentVariable(Node node, String name);
/**
- * For the given node: metric of specific name and registry
+ * For the given node: metric identified by an instance of {@link NodeMetric}
*/
<T> Optional<T> getNodeMetric(Node node, NodeMetric<T> metric);
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/CollectionMetrics.java b/solr/core/src/java/org/apache/solr/cluster/placement/CollectionMetrics.java
index 5093745..3d20516 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/CollectionMetrics.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/CollectionMetrics.java
@@ -17,6 +17,7 @@
package org.apache.solr.cluster.placement;
+import java.util.Iterator;
import java.util.Optional;
/**
@@ -27,4 +28,5 @@ import java.util.Optional;
public interface CollectionMetrics {
Optional<ShardMetrics> getShardMetrics(String shardName);
+ Iterator<ShardMetrics> iterator();
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/MetricAttribute.java b/solr/core/src/java/org/apache/solr/cluster/placement/Metric.java
similarity index 79%
rename from solr/core/src/java/org/apache/solr/cluster/placement/MetricAttribute.java
rename to solr/core/src/java/org/apache/solr/cluster/placement/Metric.java
index c587b9e..a29abde 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/MetricAttribute.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/Metric.java
@@ -16,14 +16,12 @@
*/
package org.apache.solr.cluster.placement;
-import java.util.function.Function;
-
/**
* Metric-related attribute of a node or replica. It defines a short symbolic name of the metric, the corresponding
* internal metric name and the desired format/unit conversion. Generic type
* defines the type of converted values of this attribute.
*/
-public interface MetricAttribute<T> {
+public interface Metric<T> {
/**
* Return the short-hand name that identifies this attribute.
@@ -36,18 +34,9 @@ public interface MetricAttribute<T> {
String getInternalName();
/**
- * Conversion function to convert formats/units of raw values.
- */
- Function<Object, T> getConverter();
-
- /**
* Convert raw value. This may involve changing value type or units.
- * Default implementation simply applies the converter function
- * returned by {@link #getConverter()}.
* @param value raw value
* @return converted value
*/
- default T convert(Object value) {
- return getConverter().apply(value);
- }
+ T convert(Object value);
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/NodeMetric.java b/solr/core/src/java/org/apache/solr/cluster/placement/NodeMetric.java
index fba5aed..f9eb65c 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/NodeMetric.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/NodeMetric.java
@@ -20,10 +20,8 @@ package org.apache.solr.cluster.placement;
/**
* Node metric identifier, corresponding
* to a node-level metric registry and the internal metric name.
- * Alternatively this identified may use a fully-qualified metric key,
- * in which case the registry is set to null.
*/
-public interface NodeMetric<T> extends MetricAttribute<T> {
+public interface NodeMetric<T> extends Metric<T> {
/**
* Metric registry. If this metric identifier uses a fully-qualified
@@ -46,6 +44,11 @@ public interface NodeMetric<T> extends MetricAttribute<T> {
/**
* corresponds to solr.jetty
*/
- SOLR_JETTY
+ SOLR_JETTY,
+ /**
+ * In case when the registry name is not relevant (eg. a fully-qualified
+ * metric key was provided as the metric name).
+ */
+ UNSPECIFIED
}
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetric.java b/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetric.java
index 368c313..9e70d53 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetric.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetric.java
@@ -20,5 +20,5 @@ package org.apache.solr.cluster.placement;
* Replica metric identifier, corresponding to one of the
* internal replica-level metric names (as reported in <code>solr.core.[collection].[replica]</code> registry)
*/
-public interface ReplicaMetric<T> extends MetricAttribute<T> {
+public interface ReplicaMetric<T> extends Metric<T> {
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetrics.java b/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetrics.java
index f5783e8..4c061c8 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetrics.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/ReplicaMetrics.java
@@ -17,6 +17,8 @@
package org.apache.solr.cluster.placement;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Optional;
/**
@@ -24,5 +26,7 @@ import java.util.Optional;
*/
public interface ReplicaMetrics {
+ String getReplicaName();
<T> Optional<T> getReplicaMetric(ReplicaMetric<T> metric);
+ Iterator<Map.Entry<ReplicaMetric<?>, Object>> iterator();
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/ShardMetrics.java b/solr/core/src/java/org/apache/solr/cluster/placement/ShardMetrics.java
index 79d5966..9fe0360 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/ShardMetrics.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/ShardMetrics.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.cluster.placement;
+import java.util.Iterator;
import java.util.Optional;
/**
@@ -24,6 +25,8 @@ import java.util.Optional;
* primitive shard-level metrics.
*/
public interface ShardMetrics {
+ String getShardName();
Optional<ReplicaMetrics> getLeaderMetrics();
Optional<ReplicaMetrics> getReplicaMetrics(String replicaName);
+ Iterator<ReplicaMetrics> iterator();
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/impl/AttributeFetcherImpl.java b/solr/core/src/java/org/apache/solr/cluster/placement/impl/AttributeFetcherImpl.java
index b4bb971..e3a7a3f 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/impl/AttributeFetcherImpl.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/impl/AttributeFetcherImpl.java
@@ -94,7 +94,6 @@ public class AttributeFetcherImpl implements AttributeFetcher {
@Override
public AttributeValues fetchAttributes() {
- // TODO Code here only supports node related attributes for now
// Maps in which attribute values will be added
Map<String, Map<Node, String>> systemSnitchToNodeToValue = new HashMap<>();
@@ -132,6 +131,8 @@ public class AttributeFetcherImpl implements AttributeFetcher {
});
// Now that we know everything we need to fetch (and where to put it), just do it.
+ // TODO: we could probably fetch this in parallel - for large clusters this could
+ // significantly shorten the execution time
for (Node node : nodes) {
Map<String, Object> tagValues = cloudManager.getNodeStateProvider().getNodeValues(node.getName(), allSnitchTagsToInsertion.keySet());
for (Map.Entry<String, Object> e : tagValues.entrySet()) {
@@ -159,19 +160,16 @@ public class AttributeFetcherImpl implements AttributeFetcher {
entry.getValue().forEach((shardName, replicas) -> {
CollectionMetricsBuilder.ShardMetricsBuilder shardMetricsBuilder =
collectionMetricsBuilder.getShardMetricsBuilders()
- .computeIfAbsent(shardName, s -> new CollectionMetricsBuilder.ShardMetricsBuilder());
+ .computeIfAbsent(shardName, s -> new CollectionMetricsBuilder.ShardMetricsBuilder(s));
replicas.forEach(replica -> {
CollectionMetricsBuilder.ReplicaMetricsBuilder replicaMetricsBuilder =
shardMetricsBuilder.getReplicaMetricsBuilders()
- .computeIfAbsent(replica.getName(), n -> new CollectionMetricsBuilder.ReplicaMetricsBuilder());
+ .computeIfAbsent(replica.getName(), n -> new CollectionMetricsBuilder.ReplicaMetricsBuilder(n));
replicaMetricsBuilder.setLeader(replica.isLeader());
if (replica.isLeader()) {
shardMetricsBuilder.setLeaderMetrics(replicaMetricsBuilder);
}
Set<ReplicaMetric<?>> requestedMetrics = requestedCollectionNamesMetrics.get(replica.getCollection());
- if (requestedMetrics == null) {
- throw new RuntimeException("impossible error");
- }
requestedMetrics.forEach(metric -> {
replicaMetricsBuilder.addMetric(metric, replica.get(metric.getInternalName()));
});
@@ -202,7 +200,7 @@ public class AttributeFetcherImpl implements AttributeFetcher {
}
public static String getMetricSnitchTag(NodeMetric<?> metric) {
- if (metric.getRegistry() != null) {
+ if (metric.getRegistry() != NodeMetric.Registry.UNSPECIFIED) {
// regular registry + metricName
return SolrClientNodeStateProvider.METRICS_PREFIX +
SolrMetricManager.getRegistryName(getGroupFromMetricRegistry(metric.getRegistry())) + ":" + metric.getInternalName();
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilder.java b/solr/core/src/java/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilder.java
index 0f88feb..2aeec59 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilder.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/impl/CollectionMetricsBuilder.java
@@ -22,6 +22,7 @@ import org.apache.solr.cluster.placement.ReplicaMetrics;
import org.apache.solr.cluster.placement.ShardMetrics;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import java.util.Optional;
@@ -40,19 +41,37 @@ public class CollectionMetricsBuilder {
public CollectionMetrics build() {
final Map<String, ShardMetrics> metricsMap = new HashMap<>();
shardMetricsBuilders.forEach((shard, builder) -> metricsMap.put(shard, builder.build()));
- return shardName -> Optional.ofNullable(metricsMap.get(shardName));
+ return new CollectionMetrics() {
+ @Override
+ public Optional<ShardMetrics> getShardMetrics(String shardName) {
+ return Optional.ofNullable(metricsMap.get(shardName));
+ }
+
+ @Override
+ public Iterator<ShardMetrics> iterator() {
+ return metricsMap.values().iterator();
+ }
+ };
}
public static class ShardMetricsBuilder {
final Map<String, ReplicaMetricsBuilder> replicaMetricsBuilders = new HashMap<>();
+ final String shardName;
ReplicaMetricsBuilder leaderMetricsBuilder;
+ public ShardMetricsBuilder(String shardName) {
+ this.shardName = shardName;
+ }
+
public Map<String, ReplicaMetricsBuilder> getReplicaMetricsBuilders() {
return replicaMetricsBuilders;
}
public ShardMetricsBuilder setLeaderMetrics(ReplicaMetricsBuilder replicaMetricsBuilder) {
leaderMetricsBuilder = replicaMetricsBuilder;
+ if (leaderMetricsBuilder != null) {
+ replicaMetricsBuilders.put(leaderMetricsBuilder.replicaName, leaderMetricsBuilder);
+ }
return this;
}
@@ -61,19 +80,20 @@ public class CollectionMetricsBuilder {
replicaMetricsBuilders.forEach((name, replicaBuilder) -> {
ReplicaMetrics metrics = replicaBuilder.build();
metricsMap.put(name, metrics);
- // skip leader from map
if (replicaBuilder.leader) {
if (leaderMetricsBuilder == null) {
leaderMetricsBuilder = replicaBuilder;
}
- if (replicaBuilder != leaderMetricsBuilder) {
- throw new RuntimeException("inconsistent data for leader metrics: found " + replicaBuilder + " but expected " + leaderMetricsBuilder);
- }
}
});
final ReplicaMetrics finalLeaderMetrics = leaderMetricsBuilder != null ? leaderMetricsBuilder.build() : null;
return new ShardMetrics() {
@Override
+ public String getShardName() {
+ return shardName;
+ }
+
+ @Override
public Optional<ReplicaMetrics> getLeaderMetrics() {
return Optional.ofNullable(finalLeaderMetrics);
}
@@ -82,14 +102,24 @@ public class CollectionMetricsBuilder {
public Optional<ReplicaMetrics> getReplicaMetrics(String replicaName) {
return Optional.ofNullable(metricsMap.get(replicaName));
}
+
+ @Override
+ public Iterator<ReplicaMetrics> iterator() {
+ return metricsMap.values().iterator();
+ }
};
}
}
public static class ReplicaMetricsBuilder {
final Map<ReplicaMetric<?>, Object> metrics = new HashMap<>();
+ final String replicaName;
boolean leader;
+ public ReplicaMetricsBuilder(String replicaName) {
+ this.replicaName = replicaName;
+ }
+
public ReplicaMetricsBuilder setLeader(boolean leader) {
this.leader = leader;
return this;
@@ -111,10 +141,20 @@ public class CollectionMetricsBuilder {
public ReplicaMetrics build() {
return new ReplicaMetrics() {
@Override
+ public String getReplicaName() {
+ return replicaName;
+ }
+
+ @Override
@SuppressWarnings("unchecked")
public <T> Optional<T> getReplicaMetric(ReplicaMetric<T> metric) {
return Optional.ofNullable((T) metrics.get(metric));
}
+
+ @Override
+ public Iterator<Map.Entry<ReplicaMetric<?>, Object>> iterator() {
+ return metrics.entrySet().iterator();
+ }
};
}
}
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricAttributeImpl.java b/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
similarity index 85%
rename from solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricAttributeImpl.java
rename to solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
index 60e55f1..7b789d7 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricAttributeImpl.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/impl/MetricImpl.java
@@ -16,15 +16,15 @@
*/
package org.apache.solr.cluster.placement.impl;
-import org.apache.solr.cluster.placement.MetricAttribute;
+import org.apache.solr.cluster.placement.Metric;
import java.util.Objects;
import java.util.function.Function;
/**
- * Base class for {@link MetricAttribute} implementations.
+ * Base class for {@link Metric} implementations.
*/
-public class MetricAttributeImpl<T> implements MetricAttribute<T> {
+public abstract class MetricImpl<T> implements Metric<T> {
public static final double GB = 1024 * 1024 * 1024;
@@ -54,7 +54,7 @@ public class MetricAttributeImpl<T> implements MetricAttribute<T> {
return null;
}
try {
- sizeInBytes = Double.valueOf(String.valueOf(v)).doubleValue();
+ sizeInBytes = Double.parseDouble(String.valueOf(v));
} catch (Exception nfe) {
return null;
}
@@ -73,7 +73,7 @@ public class MetricAttributeImpl<T> implements MetricAttribute<T> {
* @param name short-hand name that identifies this attribute.
* @param internalName internal name of a Solr metric.
*/
- public MetricAttributeImpl(String name, String internalName) {
+ public MetricImpl(String name, String internalName) {
this(name, internalName, null);
}
@@ -84,7 +84,7 @@ public class MetricAttributeImpl<T> implements MetricAttribute<T> {
* @param converter optional raw value converter. If null then
* {@link #IDENTITY_CONVERTER} will be used.
*/
- public MetricAttributeImpl(String name, String internalName, Function<Object, T> converter) {
+ public MetricImpl(String name, String internalName, Function<Object, T> converter) {
Objects.requireNonNull(name);
Objects.requireNonNull(internalName);
this.name = name;
@@ -107,8 +107,8 @@ public class MetricAttributeImpl<T> implements MetricAttribute<T> {
}
@Override
- public Function<Object, T> getConverter() {
- return converter;
+ public T convert(Object value) {
+ return converter.apply(value);
}
@Override
@@ -119,8 +119,8 @@ public class MetricAttributeImpl<T> implements MetricAttribute<T> {
if (o == null || getClass() != o.getClass()) {
return false;
}
- MetricAttribute<?> that = (MetricAttribute<?>) o;
- return name.equals(that.getName()) && internalName.equals(that.getInternalName()) && converter.equals(that.getConverter());
+ MetricImpl<?> that = (MetricImpl<?>) o;
+ return name.equals(that.getName()) && internalName.equals(that.getInternalName()) && converter.equals(that.converter);
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java b/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
index f98f441..8c27331 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/impl/NodeMetricImpl.java
@@ -27,7 +27,7 @@ import java.util.function.Function;
* Node metric identifier, corresponding
* to a node-level metric registry and the internal metric name.
*/
-public class NodeMetricImpl<T> extends MetricAttributeImpl<T> implements NodeMetric<T> {
+public class NodeMetricImpl<T> extends MetricImpl<T> implements NodeMetric<T> {
/** Total disk space in GB. */
public static final NodeMetricImpl<Double> TOTAL_DISK_GB = new NodeMetricImpl<>("totalDisk",
@@ -67,7 +67,7 @@ public class NodeMetricImpl<T> extends MetricAttributeImpl<T> implements NodeMet
public NodeMetricImpl(String key, Function<Object, T> converter) {
super(key, key, converter);
- this.registry = null;
+ this.registry = Registry.UNSPECIFIED;
}
public Registry getRegistry() {
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java b/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
index 27afa72..f793a64 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/impl/ReplicaMetricImpl.java
@@ -24,7 +24,7 @@ import java.util.function.Function;
* Replica metric identifier, corresponding to one of the
* internal replica-level metric names (as reported in <code>solr.core.[collection].[replica]</code> registry)
*/
-public class ReplicaMetricImpl<T> extends MetricAttributeImpl<T> implements ReplicaMetric<T> {
+public class ReplicaMetricImpl<T> extends MetricImpl<T> implements ReplicaMetric<T> {
public static final ReplicaMetricImpl<Double> INDEX_SIZE_GB = new ReplicaMetricImpl<>("sizeGB", "INDEX.sizeInBytes", BYTES_TO_GB_CONVERTER);
diff --git a/solr/core/src/test/org/apache/solr/cluster/placement/Builders.java b/solr/core/src/test/org/apache/solr/cluster/placement/Builders.java
index 44807e5..21b8369 100644
--- a/solr/core/src/test/org/apache/solr/cluster/placement/Builders.java
+++ b/solr/core/src/test/org/apache/solr/cluster/placement/Builders.java
@@ -286,7 +286,7 @@ public class Builders {
for (int shardNumber = 1; shardNumber <= countShards; shardNumber++) {
String shardName = buildShardName(shardNumber);
- CollectionMetricsBuilder.ShardMetricsBuilder shardMetricsBuilder = new CollectionMetricsBuilder.ShardMetricsBuilder();
+ CollectionMetricsBuilder.ShardMetricsBuilder shardMetricsBuilder = new CollectionMetricsBuilder.ShardMetricsBuilder(shardName);
LinkedList<ReplicaBuilder> replicas = new LinkedList<>();
ReplicaBuilder leader = null;
@@ -315,7 +315,7 @@ public class Builders {
.setReplicaState(Replica.ReplicaState.ACTIVE).setReplicaNode(node);
replicas.add(replicaBuilder);
- CollectionMetricsBuilder.ReplicaMetricsBuilder replicaMetricsBuilder = new CollectionMetricsBuilder.ReplicaMetricsBuilder();
+ CollectionMetricsBuilder.ReplicaMetricsBuilder replicaMetricsBuilder = new CollectionMetricsBuilder.ReplicaMetricsBuilder(replicaName);
shardMetricsBuilder.getReplicaMetricsBuilders().put(replicaName, replicaMetricsBuilder);
if (initialSizeGBPerShard != null) {
replicaMetricsBuilder.addMetric(ReplicaMetricImpl.INDEX_SIZE_GB, initialSizeGBPerShard.get(shardNumber - 1) * ReplicaMetricImpl.GB);