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