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:10:04 UTC

[lucene] 07/07: ZkStateReader#getLeader(String coll, String shard) deprecated

This is an automated email from the ASF dual-hosted git repository.

dweiss pushed a commit to branch jira/solr14003
in repository https://gitbox.apache.org/repos/asf/lucene.git

commit 6babe266e560928d130365037b8234648c7b97ea
Author: noble <no...@apache.org>
AuthorDate: Wed Dec 18 12:04:07 2019 +1100

    ZkStateReader#getLeader(String coll, String shard) deprecated
---
 .../src/java/org/apache/solr/cloud/ElectionContext.java   |  2 +-
 .../update/processor/DistributedZkUpdateProcessor.java    |  2 +-
 .../apache/solr/client/solrj/cloud/DirectShardState.java  | 15 ++++++++++++++-
 .../solr/client/solrj/cloud/ShardStateProvider.java       |  3 ++-
 .../client/solrj/impl/BaseHttpClusterStateProvider.java   |  2 +-
 .../solr/client/solrj/impl/ClusterStateProvider.java      |  8 +++++++-
 .../java/org/apache/solr/common/cloud/ZkStateReader.java  |  5 ++++-
 7 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java b/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
index 1585440..5a51aaa 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ElectionContext.java
@@ -232,7 +232,7 @@ class ShardLeaderElectionContextBase extends ElectionContext {
     boolean isAlreadyLeader = false;
     if (zkStateReader.getClusterState() != null &&
         zkStateReader.getClusterState().getCollection(collection).getSlice(shardId).getReplicas().size() < 2) {
-      Replica leader = zkStateReader.getLeader(collection, shardId);
+      Replica leader =  zkStateReader.getShardStateProvider(collection).getLeader(collection, shardId);
       if (leader != null
           && leader.getBaseUrl().equals(leaderProps.get(ZkStateReader.BASE_URL_PROP))
           && leader.getCoreName().equals(leaderProps.get(ZkStateReader.CORE_NAME_PROP))) {
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
index d9fa04e..d73d73a 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
@@ -1124,7 +1124,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
         Exception getLeaderExc = null;
         Replica leaderProps = null;
         try {
-          leaderProps = zkController.getZkStateReader().getLeader(collection, shardId);
+          leaderProps = req.getCore().getShardStateProvider().getLeader(collection, shardId);
           if (leaderProps != null) {
             leaderCoreNodeName = leaderProps.getName();
           }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DirectShardState.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DirectShardState.java
index 9fb987a..169acf8 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DirectShardState.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/DirectShardState.java
@@ -17,8 +17,10 @@
 
 package org.apache.solr.client.solrj.cloud;
 
+import java.util.function.Function;
 import java.util.function.Predicate;
 
+import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
 
@@ -28,9 +30,11 @@ import org.apache.solr.common.cloud.Slice;
 public class DirectShardState implements ShardStateProvider {
 
   private final Predicate<String> isNodeLive;
+  private final Function<String , DocCollection> collectionProvider;
 
-  public DirectShardState(Predicate<String> isNodeLive) {
+  public DirectShardState(Predicate<String> isNodeLive, Function<String, DocCollection> collectionProvider) {
     this.isNodeLive = isNodeLive;
+    this.collectionProvider = collectionProvider;
   }
 
   @Override
@@ -44,6 +48,15 @@ public class DirectShardState implements ShardStateProvider {
   }
 
   @Override
+  public Replica getLeader(String coll, String slice) {
+    DocCollection c = collectionProvider.apply(coll);
+    if (c == null) return null;
+    Slice sl = c.getSlice(slice);
+    if (sl == null) return null;
+    return getLeader(sl);
+  }
+
+  @Override
   public boolean isActive(Replica replica) {
     return  replica.getNodeName() != null &&
         replica.getState() == Replica.State.ACTIVE &&
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/ShardStateProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/ShardStateProvider.java
index 84a172b..10a69a1 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/ShardStateProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/ShardStateProvider.java
@@ -35,13 +35,14 @@ public interface ShardStateProvider {
    */
   Replica getLeader(Slice slice);
 
+  Replica getLeader(String coll, String slice);
+
   /**Get the leader of the slice. Wait for one if there is no leader
    * @param timeout how much time to wait for a leader to com eup. -1 means the default value will be used
    * Throws an {@link InterruptedException} if interrupted in between
    */
   Replica getLeader(Slice slice, int timeout) throws InterruptedException;
 
-
   /** Same as {@link #getLeader(Slice, int)}. But without the Slice Object
    *
    */
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java
index 9528690..afc1999 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseHttpClusterStateProvider.java
@@ -329,7 +329,7 @@ public abstract class BaseHttpClusterStateProvider implements ClusterStateProvid
   private class NotACollectionException extends Exception {
   }
 
-  private ShardStateProvider shardStateProvider = new DirectShardState(s -> getLiveNodes().contains(s));
+  private ShardStateProvider shardStateProvider = new DirectShardState(s -> getLiveNodes().contains(s), coll -> getClusterState().getCollectionOrNull(coll));
   @Override
   public ShardStateProvider getShardStateProvider(String coll) {
     return shardStateProvider;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ClusterStateProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ClusterStateProvider.java
index 58bf548..07c9294 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ClusterStateProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ClusterStateProvider.java
@@ -110,7 +110,13 @@ public interface ClusterStateProvider extends SolrCloseable {
   String getPolicyNameByCollection(String coll);
 
   default ShardStateProvider getShardStateProvider(String coll) {
-    return new DirectShardState(s -> getLiveNodes().contains(s)) ;
+    return new DirectShardState(s -> getLiveNodes().contains(s), s -> {
+      try {
+        return getCollection(s);
+      } catch (IOException e) {
+        throw new RuntimeException(e);
+      }
+    }) ;
   }
 
   void connect();
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index d1ade98..bff4e7d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -219,7 +219,7 @@ public class ZkStateReader implements SolrCloseable {
 
   private Set<ClusterPropertiesListener> clusterPropertiesListeners = ConcurrentHashMap.newKeySet();
 
-  private final ShardStateProvider directReplicaState = new DirectShardState(s -> liveNodes.contains(s)) {
+  private final ShardStateProvider directReplicaState = new DirectShardState(s -> liveNodes.contains(s), s -> clusterState.getCollectionOrNull(s)) {
     @Override
     public Replica getLeader(Slice slice, int timeout) throws InterruptedException {
       return getLeaderRetry(slice.collection, slice.getName(), timeout);
@@ -952,6 +952,9 @@ public class ZkStateReader implements SolrCloseable {
     return null;
   }
 
+  /**Use {@link ShardStateProvider#getLeader(String, String)} instead
+   */
+  @Deprecated
   public Replica getLeader(String collection, String shard) {
     if (clusterState != null) {
       DocCollection docCollection = clusterState.getCollectionOrNull(collection);