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;
         }