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:09:44 UTC
[lucene] 12/33: SOLR-15004: Fix the use of prefixes for sysprops
and metrics. Finish the affinity test.
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch jira/solr-15016
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit 20a2778019cfc9999fafab7f5035284d8d5b30c1
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Tue Nov 24 15:18:26 2020 +0100
SOLR-15004: Fix the use of prefixes for sysprops and metrics. Finish the affinity test.
---
.../impl/AffinityPlacementFactoryTest.java | 41 ++++++++++++++++------
.../solr/cluster/placement/impl/Builders.java | 8 +++--
2 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/solr/core/src/test/org/apache/solr/cluster/placement/impl/AffinityPlacementFactoryTest.java b/solr/core/src/test/org/apache/solr/cluster/placement/impl/AffinityPlacementFactoryTest.java
index 6b64864..67350d0 100644
--- a/solr/core/src/test/org/apache/solr/cluster/placement/impl/AffinityPlacementFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/cluster/placement/impl/AffinityPlacementFactoryTest.java
@@ -183,19 +183,38 @@ public class AffinityPlacementFactoryTest extends Assert {
cluster.getLiveNodes(), 2, 2, 2);
PlacementPlanFactory placementPlanFactory = new PlacementPlanFactoryImpl();
-
- PlacementPlan pp = plugin.computePlacement(cluster, placementRequest, clusterBuilder.buildAttributeFetcher(), placementPlanFactory);
+ AttributeFetcher attributeFetcher = clusterBuilder.buildAttributeFetcher();
+ PlacementPlan pp = plugin.computePlacement(cluster, placementRequest, attributeFetcher, placementPlanFactory);
// 2 shards, 6 replicas
assertEquals(12, pp.getReplicaPlacements().size());
- List<ReplicaPlacement> placements = new ArrayList<>(pp.getReplicaPlacements());
- Collections.sort(placements, Comparator
- .comparing((ReplicaPlacement p) -> p.getNode().getName())
- .thenComparing((ReplicaPlacement p) -> p.getShardName())
- .thenComparing((ReplicaPlacement p) -> p.getReplicaType())
- );
- log.info(placements.toString()); //nowarn
- // AZ -> shard -> replica count
- //Map<String, Map<String, AtomicInteger>>
+// List<ReplicaPlacement> placements = new ArrayList<>(pp.getReplicaPlacements());
+// Collections.sort(placements, Comparator
+// .comparing((ReplicaPlacement p) -> p.getNode().getName())
+// .thenComparing((ReplicaPlacement p) -> p.getShardName())
+// .thenComparing((ReplicaPlacement p) -> p.getReplicaType())
+// );
+ // shard -> AZ -> replica count
+ Map<Replica.ReplicaType, Map<String, Map<String, AtomicInteger>>> replicas = new HashMap<>();
+ AttributeValues attributeValues = attributeFetcher.fetchAttributes();
+ for (ReplicaPlacement rp : pp.getReplicaPlacements()) {
+ Optional<String> azOptional = attributeValues.getSystemProperty(rp.getNode(), AffinityPlacementFactory.AVAILABILITY_ZONE_SYSPROP);
+ if (!azOptional.isPresent()) {
+ fail("missing AZ sysprop for node " + rp.getNode());
+ }
+ String az = azOptional.get();
+ replicas.computeIfAbsent(rp.getReplicaType(), type -> new HashMap<>())
+ .computeIfAbsent(rp.getShardName(), shard -> new HashMap<>())
+ .computeIfAbsent(az, zone -> new AtomicInteger()).incrementAndGet();
+ }
+ replicas.forEach((type, perTypeReplicas) -> {
+ perTypeReplicas.forEach((shard, azCounts) -> {
+ assertEquals("number of AZs", 2, azCounts.size());
+ azCounts.forEach((az, count) -> {
+ assertTrue("too few replicas shard=" + shard + ", type=" + type + ", az=" + az,
+ count.get() >= 1);
+ });
+ });
+ });
}
@Test
diff --git a/solr/core/src/test/org/apache/solr/cluster/placement/impl/Builders.java b/solr/core/src/test/org/apache/solr/cluster/placement/impl/Builders.java
index 996186f..aa5092b 100644
--- a/solr/core/src/test/org/apache/solr/cluster/placement/impl/Builders.java
+++ b/solr/core/src/test/org/apache/solr/cluster/placement/impl/Builders.java
@@ -291,15 +291,17 @@ public class Builders {
if (sysprops == null) {
sysprops = new HashMap<>();
}
- sysprops.put(key, value);
+ String name = AttributeFetcherImpl.getSystemPropertySnitchTag(key);
+ sysprops.put(name, value);
return this;
}
- NodeBuilder setMetric(String key, Double value) {
+ NodeBuilder setMetric(AttributeFetcher.NodeMetricRegistry registry, String key, Double value) {
if (metrics == null) {
metrics = new HashMap<>();
}
- metrics.put(key, value);
+ String name = AttributeFetcherImpl.getMetricSnitchTag(key, registry);
+ metrics.put(name, value);
return this;
}