You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ds...@apache.org on 2023/07/18 04:36:00 UTC
[solr] branch branch_9x updated: Refactor: remove PerReplicaStatesFetcher (#1724)
This is an automated email from the ASF dual-hosted git repository.
dsmiley pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new a99e0bc96f0 Refactor: remove PerReplicaStatesFetcher (#1724)
a99e0bc96f0 is described below
commit a99e0bc96f0dfdaac235a0d4685dc232d4d7b341
Author: David Smiley <ds...@apache.org>
AuthorDate: Tue Jul 18 00:12:00 2023 -0400
Refactor: remove PerReplicaStatesFetcher (#1724)
The methods go to PerReplicaStatesOps
---
.../solr/cloud/DistributedClusterStateUpdater.java | 3 +-
.../solr/cloud/ShardLeaderElectionContextBase.java | 3 +-
.../java/org/apache/solr/cloud/ZkController.java | 7 ++-
.../cloud/api/collections/CreateCollectionCmd.java | 8 ++-
.../solr/cloud/overseer/CollectionMutator.java | 3 +-
.../apache/solr/cloud/overseer/NodeMutator.java | 3 +-
.../apache/solr/cloud/overseer/ZkStateWriter.java | 10 ++--
.../solr/cloud/overseer/ZkStateReaderTest.java | 27 +++++-----
.../solr/cloud/overseer/ZkStateWriterTest.java | 6 +--
.../solrj/impl/ZkClientClusterStateProvider.java | 4 +-
.../client/solrj/impl/ZkDistribStateManager.java | 4 +-
.../solr/common/cloud/PerReplicaStatesFetcher.java | 62 ----------------------
.../solr/common/cloud/PerReplicaStatesOps.java | 36 ++++++++++++-
.../solr/common/cloud/TestPerReplicaStates.java | 12 ++---
.../client/solrj/impl/CloudSolrClientTest.java | 9 ++--
.../cloud/PerReplicaStatesIntegrationTest.java | 22 ++++----
16 files changed, 90 insertions(+), 129 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java b/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java
index 935f32e5940..bc565ad97e8 100644
--- a/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java
+++ b/solr/core/src/java/org/apache/solr/cloud/DistributedClusterStateUpdater.java
@@ -52,7 +52,6 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -506,7 +505,7 @@ public class DistributedClusterStateUpdater {
// Fetch the per replica states updates done previously or skip fetching if we already
// have them
fetchedPerReplicaStates =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
docCollection.getZNode(), zkStateReader.getZkClient(), fetchedPerReplicaStates);
// Transpose the per replica states into the cluster state
updatedState =
diff --git a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java
index 20ebe1710e5..64ff0b3d5d4 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContextBase.java
@@ -25,7 +25,6 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.SolrZkClient;
@@ -237,7 +236,7 @@ class ShardLeaderElectionContextBase extends ElectionContext {
}
if (coll != null && coll.isPerReplicaState()) {
PerReplicaStates prs =
- PerReplicaStatesFetcher.fetch(coll.getZNode(), zkClient, coll.getPerReplicaStates());
+ PerReplicaStatesOps.fetch(coll.getZNode(), zkClient, coll.getPerReplicaStates());
PerReplicaStatesOps.flipLeader(
zkStateReader
.getClusterState()
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 241eee4f398..548587b9e04 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -83,7 +83,6 @@ import org.apache.solr.common.cloud.LiveNodesListener;
import org.apache.solr.common.cloud.NodesSysPropsCacher;
import org.apache.solr.common.cloud.OnReconnect;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Replica.Type;
@@ -1801,7 +1800,7 @@ public class ZkController implements Closeable {
// as overseer does not and should not handle those entries
if (coll != null && coll.isPerReplicaState() && coreNodeName != null) {
PerReplicaStates perReplicaStates =
- PerReplicaStatesFetcher.fetch(coll.getZNode(), zkClient, coll.getPerReplicaStates());
+ PerReplicaStatesOps.fetch(coll.getZNode(), zkClient, coll.getPerReplicaStates());
PerReplicaStatesOps.flipState(coreNodeName, state, perReplicaStates)
.persist(coll.getZNode(), zkClient);
}
@@ -1886,7 +1885,7 @@ public class ZkController implements Closeable {
docCollection.getName());
}
PerReplicaStates perReplicaStates =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
docCollection.getZNode(), zkClient, docCollection.getPerReplicaStates());
PerReplicaStatesOps.deleteReplica(coreNodeName, perReplicaStates)
.persist(docCollection.getZNode(), zkClient);
@@ -2961,7 +2960,7 @@ public class ZkController implements Closeable {
});
PerReplicaStatesOps.downReplicas(
replicasToDown,
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
coll.getZNode(), zkClient, coll.getPerReplicaStates()))
.persist(coll.getZNode(), zkClient);
}
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
index 99aa221519a..9accbf4dc69 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
@@ -69,7 +69,7 @@ import org.apache.solr.common.cloud.DocCollection.CollectionStateProps;
import org.apache.solr.common.cloud.DocRouter;
import org.apache.solr.common.cloud.ImplicitDocRouter;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
+import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ReplicaPosition;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -425,14 +425,12 @@ public class CreateCollectionCmd implements CollApiCmds.CollectionApiCommand {
TimeUnit.SECONDS,
ccc.getSolrCloudManager().getTimeSource()); // could be a big cluster
PerReplicaStates prs =
- PerReplicaStatesFetcher.fetch(
- collectionPath, ccc.getZkStateReader().getZkClient(), null);
+ PerReplicaStatesOps.fetch(collectionPath, ccc.getZkStateReader().getZkClient(), null);
while (!timeout.hasTimedOut()) {
if (prs.allActive()) break;
Thread.sleep(100);
prs =
- PerReplicaStatesFetcher.fetch(
- collectionPath, ccc.getZkStateReader().getZkClient(), null);
+ PerReplicaStatesOps.fetch(collectionPath, ccc.getZkStateReader().getZkClient(), null);
}
if (prs.allActive()) {
// we have successfully found all replicas to be ACTIVE
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
index 028beb37dfd..318dd595d31 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
@@ -34,7 +34,6 @@ import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.DocCollection.CollectionStateProps;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
@@ -128,7 +127,7 @@ public class CollectionMutator {
log.error("trying to set perReplicaState to {} from {}", val, coll.isPerReplicaState());
continue;
}
- PerReplicaStates prs = PerReplicaStatesFetcher.fetch(coll.getZNode(), zkClient, null);
+ PerReplicaStates prs = PerReplicaStatesOps.fetch(coll.getZNode(), zkClient, null);
replicaOps =
enable ? PerReplicaStatesOps.enable(coll, prs) : PerReplicaStatesOps.disable(prs);
if (!enable) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java
index 4c78f0d6718..8afcd805233 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java
@@ -28,7 +28,6 @@ import org.apache.solr.client.solrj.cloud.SolrCloudManager;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
@@ -123,7 +122,7 @@ public class NodeMutator {
PerReplicaStates prs =
client == null
? docCollection.getPerReplicaStates()
- : PerReplicaStatesFetcher.fetch(
+ : PerReplicaStatesOps.fetch(
docCollection.getZNode(), client, docCollection.getPerReplicaStates());
return Optional.of(
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
index e38e58b3798..234fbdbd31d 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
@@ -30,7 +30,7 @@ import org.apache.solr.cloud.Overseer;
import org.apache.solr.cloud.Stats;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
+import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.Compressor;
import org.apache.solr.common.util.Utils;
@@ -273,7 +273,7 @@ public class ZkStateWriter {
clusterState.copyWith(
name,
cmd.collection.setPerReplicaStates(
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
cmd.collection.getZNode(), reader.getZkClient(), null)));
}
@@ -302,7 +302,7 @@ public class ZkStateWriter {
c.getProperties(),
c.getRouter(),
stat.getVersion(),
- PerReplicaStatesFetcher.getZkClientPrsSupplier(reader.getZkClient(), path));
+ PerReplicaStatesOps.getZkClientPrsSupplier(reader.getZkClient(), path));
clusterState = clusterState.copyWith(name, newCollection);
} else {
log.debug("going to create_collection {}", path);
@@ -314,7 +314,7 @@ public class ZkStateWriter {
c.getProperties(),
c.getRouter(),
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(reader.getZkClient(), path));
+ PerReplicaStatesOps.getZkClientPrsSupplier(reader.getZkClient(), path));
clusterState = clusterState.copyWith(name, newCollection);
}
}
@@ -326,7 +326,7 @@ public class ZkStateWriter {
clusterState.copyWith(
name,
currentCollState.setPerReplicaStates(
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
currentCollState.getZNode(), reader.getZkClient(), null)));
}
}
diff --git a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateReaderTest.java b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateReaderTest.java
index 52671ed003b..6e1f4221943 100644
--- a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateReaderTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateReaderTest.java
@@ -41,7 +41,6 @@ import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.DocCollectionWatcher;
import org.apache.solr.common.cloud.DocRouter;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.SolrZkClient;
@@ -144,7 +143,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1"))));
writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(c1), null);
@@ -171,7 +170,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
ZkWriteCommand wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null);
@@ -190,7 +189,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
props,
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null);
@@ -231,7 +230,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
ZkWriteCommand wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null);
@@ -269,7 +268,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
"true"),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
ZkWriteCommand wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(clusterState, Collections.singletonList(wc), null);
@@ -292,7 +291,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
DocCollection collection = ref.get();
PerReplicaStates prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
collection.getZNode(), fixture.zkClient, collection.getPerReplicaStates());
PerReplicaStatesOps.addReplica("r1", Replica.State.DOWN, false, prs)
.persist(collection.getZNode(), fixture.zkClient);
@@ -351,7 +350,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
// re-add PRS
collection = ref.get();
prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
collection.getZNode(), fixture.zkClient, collection.getPerReplicaStates());
PerReplicaStatesOps.addReplica("r1", Replica.State.DOWN, false, prs)
.persist(collection.getZNode(), fixture.zkClient);
@@ -389,7 +388,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
ZkWriteCommand wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null);
@@ -411,7 +410,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
ref.get().getZNodeVersion(),
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(wc), null);
@@ -434,7 +433,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c2")));
ZkWriteCommand wc2 = new ZkWriteCommand("c2", state);
@@ -550,7 +549,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
ZkWriteCommand wc1 = new ZkWriteCommand("c1", state1);
DocCollection state2 =
@@ -560,7 +559,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
Map.of(ZkStateReader.CONFIGNAME_PROP, ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
// do not listen to c2
@@ -615,7 +614,7 @@ public class ZkStateReaderTest extends SolrTestCaseJ4 {
ConfigSetsHandler.DEFAULT_CONFIGSET_NAME),
DocRouter.DEFAULT,
currentVersion,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
fixture.zkClient, DocCollection.getCollectionPath("c1")));
ZkWriteCommand wc = new ZkWriteCommand("c1", state);
writer.enqueueUpdate(clusterState, Collections.singletonList(wc), null);
diff --git a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java
index d99097d8573..1a2c940e8dd 100644
--- a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java
@@ -33,7 +33,7 @@ import org.apache.solr.cloud.ZkTestServer;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.DocRouter;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
+import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.SolrZkClient;
@@ -184,7 +184,7 @@ public class ZkStateWriterTest extends SolrTestCaseJ4 {
prsProps,
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
zkClient, DocCollection.getCollectionPath("c1"))));
ZkStateWriter writer =
new ZkStateWriter(reader, new Stats(), -1, STATE_COMPRESSION_PROVIDER);
@@ -270,7 +270,7 @@ public class ZkStateWriterTest extends SolrTestCaseJ4 {
prsProps,
DocRouter.DEFAULT,
0,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
zkClient, DocCollection.getCollectionPath("prs1"))));
ZkStateWriter writer =
new ZkStateWriter(reader, new Stats(), -1, STATE_COMPRESSION_PROVIDER);
diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkClientClusterStateProvider.java b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkClientClusterStateProvider.java
index d6005da2a3f..ff805fced17 100644
--- a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkClientClusterStateProvider.java
+++ b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkClientClusterStateProvider.java
@@ -28,7 +28,7 @@ import org.apache.solr.common.AlreadyClosedException;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
+import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
@@ -118,7 +118,7 @@ public class ZkClientClusterStateProvider implements ClusterStateProvider {
version,
stateMap,
liveNodes,
- PerReplicaStatesFetcher.getZkClientPrsSupplier(
+ PerReplicaStatesOps.getZkClientPrsSupplier(
zkClient, DocCollection.getCollectionPath(coll)));
}
diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
index 4e050d22572..e5a987c38d9 100644
--- a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
+++ b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/ZkDistribStateManager.java
@@ -29,7 +29,7 @@ import org.apache.solr.client.solrj.cloud.NotEmptyException;
import org.apache.solr.client.solrj.cloud.VersionedData;
import org.apache.solr.common.AlreadyClosedException;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
+import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.util.Utils;
import org.apache.zookeeper.CreateMode;
@@ -216,6 +216,6 @@ public class ZkDistribStateManager implements DistribStateManager {
@Override
public PerReplicaStates getReplicaStates(String path)
throws KeeperException, InterruptedException {
- return PerReplicaStatesFetcher.fetch(path, zkClient, null);
+ return PerReplicaStatesOps.fetch(path, zkClient, null);
}
}
diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesFetcher.java b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesFetcher.java
deleted file mode 100644
index 1de41b93b93..00000000000
--- a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesFetcher.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.solr.common.cloud;
-
-import java.lang.invoke.MethodHandles;
-import java.util.Collections;
-import java.util.List;
-import org.apache.solr.common.SolrException;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.data.Stat;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PerReplicaStatesFetcher {
- private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- /**
- * Fetch the latest {@link PerReplicaStates} . It fetches data after checking the {@link
- * Stat#getCversion()} of state.json. If this is not modified, the same object is returned
- */
- public static PerReplicaStates fetch(
- String path, SolrZkClient zkClient, PerReplicaStates current) {
- try {
- if (current != null) {
- Stat stat = zkClient.exists(current.path, null, true);
- if (stat == null) return new PerReplicaStates(path, 0, Collections.emptyList());
- if (current.cversion == stat.getCversion()) return current; // not modifiedZkStateReaderTest
- }
- Stat stat = new Stat();
- List<String> children = zkClient.getChildren(path, null, stat, true);
- return new PerReplicaStates(path, stat.getCversion(), Collections.unmodifiableList(children));
- } catch (KeeperException e) {
- throw new SolrException(
- SolrException.ErrorCode.SERVER_ERROR, "Error fetching per-replica states", e);
- } catch (InterruptedException e) {
- SolrZkClient.checkInterrupted(e);
- throw new SolrException(
- SolrException.ErrorCode.SERVER_ERROR,
- "Thread interrupted when loading per-replica states from " + path,
- e);
- }
- }
-
- public static DocCollection.PrsSupplier getZkClientPrsSupplier(
- SolrZkClient zkClient, String collectionPath) {
- return () -> PerReplicaStatesFetcher.fetch(collectionPath, zkClient, null);
- }
-}
diff --git a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesOps.java b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesOps.java
index e85646d7207..475b852e75c 100644
--- a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesOps.java
+++ b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/PerReplicaStatesOps.java
@@ -26,9 +26,11 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
+import org.apache.solr.common.SolrException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.Op;
+import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,6 +49,38 @@ public class PerReplicaStatesOps {
this.fun = fun;
}
+ /**
+ * Fetch the latest {@link PerReplicaStates} . It fetches data after checking the {@link
+ * Stat#getCversion()} of state.json. If this is not modified, the same object is returned
+ */
+ public static PerReplicaStates fetch(
+ String path, SolrZkClient zkClient, PerReplicaStates current) {
+ try {
+ if (current != null) {
+ Stat stat = zkClient.exists(current.path, null, true);
+ if (stat == null) return new PerReplicaStates(path, 0, Collections.emptyList());
+ if (current.cversion == stat.getCversion()) return current; // not modifiedZkStateReaderTest
+ }
+ Stat stat = new Stat();
+ List<String> children = zkClient.getChildren(path, null, stat, true);
+ return new PerReplicaStates(path, stat.getCversion(), Collections.unmodifiableList(children));
+ } catch (KeeperException e) {
+ throw new SolrException(
+ SolrException.ErrorCode.SERVER_ERROR, "Error fetching per-replica states", e);
+ } catch (InterruptedException e) {
+ SolrZkClient.checkInterrupted(e);
+ throw new SolrException(
+ SolrException.ErrorCode.SERVER_ERROR,
+ "Thread interrupted when loading per-replica states from " + path,
+ e);
+ }
+ }
+
+ public static DocCollection.PrsSupplier getZkClientPrsSupplier(
+ SolrZkClient zkClient, String collectionPath) {
+ return () -> fetch(collectionPath, zkClient, null);
+ }
+
/** Persist a set of operations to Zookeeper */
private void persist(
List<PerReplicaStates.Operation> operations, String znode, SolrZkClient zkClient)
@@ -97,7 +131,7 @@ public class PerReplicaStatesOps {
if (log.isInfoEnabled()) {
log.info("Stale state for {}, attempt: {}. retrying...", znode, i);
}
- operations = refresh(PerReplicaStatesFetcher.fetch(znode, zkClient, null));
+ operations = refresh(fetch(znode, zkClient, null));
}
}
}
diff --git a/solr/solrj-zookeeper/src/test/org/apache/solr/common/cloud/TestPerReplicaStates.java b/solr/solrj-zookeeper/src/test/org/apache/solr/common/cloud/TestPerReplicaStates.java
index 99edf56cd69..ab650bdc608 100644
--- a/solr/solrj-zookeeper/src/test/org/apache/solr/common/cloud/TestPerReplicaStates.java
+++ b/solr/solrj-zookeeper/src/test/org/apache/solr/common/cloud/TestPerReplicaStates.java
@@ -95,7 +95,7 @@ public class TestPerReplicaStates extends SolrCloudTestCase {
}
ZkStateReader zkStateReader = cluster.getZkStateReader();
- PerReplicaStates rs = PerReplicaStatesFetcher.fetch(root, zkStateReader.getZkClient(), null);
+ PerReplicaStates rs = PerReplicaStatesOps.fetch(root, zkStateReader.getZkClient(), null);
assertEquals(3, rs.states.size());
assertTrue(rs.cversion >= 5);
@@ -103,7 +103,7 @@ public class TestPerReplicaStates extends SolrCloudTestCase {
assertEquals(1, ops.get().size());
assertEquals(PerReplicaStates.Operation.Type.ADD, ops.ops.get(0).typ);
ops.persist(root, cluster.getZkClient());
- rs = PerReplicaStatesFetcher.fetch(root, zkStateReader.getZkClient(), null);
+ rs = PerReplicaStatesOps.fetch(root, zkStateReader.getZkClient(), null);
assertEquals(4, rs.states.size());
assertTrue(rs.cversion >= 6);
assertEquals(6, cluster.getZkClient().getChildren(root, null, true).size());
@@ -115,7 +115,7 @@ public class TestPerReplicaStates extends SolrCloudTestCase {
assertEquals(PerReplicaStates.Operation.Type.DELETE, ops.ops.get(2).typ);
assertEquals(PerReplicaStates.Operation.Type.DELETE, ops.ops.get(3).typ);
ops.persist(root, cluster.getZkClient());
- rs = PerReplicaStatesFetcher.fetch(root, zkStateReader.getZkClient(), null);
+ rs = PerReplicaStatesOps.fetch(root, zkStateReader.getZkClient(), null);
assertEquals(4, rs.states.size());
assertEquals(3, rs.states.get("R1").version);
@@ -123,7 +123,7 @@ public class TestPerReplicaStates extends SolrCloudTestCase {
assertEquals(1, ops.ops.size());
ops.persist(root, cluster.getZkClient());
- rs = PerReplicaStatesFetcher.fetch(root, zkStateReader.getZkClient(), null);
+ rs = PerReplicaStatesOps.fetch(root, zkStateReader.getZkClient(), null);
assertEquals(3, rs.states.size());
ops = PerReplicaStatesOps.flipLeader(Set.of("R4", "R3", "R1"), "R4", rs);
@@ -131,11 +131,11 @@ public class TestPerReplicaStates extends SolrCloudTestCase {
assertEquals(PerReplicaStates.Operation.Type.ADD, ops.ops.get(0).typ);
assertEquals(PerReplicaStates.Operation.Type.DELETE, ops.ops.get(1).typ);
ops.persist(root, cluster.getZkClient());
- rs = PerReplicaStatesFetcher.fetch(root, zkStateReader.getZkClient(), null);
+ rs = PerReplicaStatesOps.fetch(root, zkStateReader.getZkClient(), null);
ops = PerReplicaStatesOps.flipLeader(Set.of("R4", "R3", "R1"), "R3", rs);
assertEquals(4, ops.ops.size());
ops.persist(root, cluster.getZkClient());
- rs = PerReplicaStatesFetcher.fetch(root, zkStateReader.getZkClient(), null);
+ rs = PerReplicaStatesOps.fetch(root, zkStateReader.getZkClient(), null);
assertTrue(rs.get("R3").isLeader);
}
}
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
index d29d6b23153..cd19861577f 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
@@ -59,7 +59,7 @@ import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.DocRouter;
import org.apache.solr.common.cloud.PerReplicaStates;
-import org.apache.solr.common.cloud.PerReplicaStatesFetcher;
+import org.apache.solr.common.cloud.PerReplicaStatesOps;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkStateReader;
@@ -1184,8 +1184,7 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
DocCollection c = cluster.getZkStateReader().getCollection(testCollection);
c.forEachReplica((s, replica) -> assertNotNull(replica.getReplicaState()));
- PerReplicaStates prs =
- PerReplicaStatesFetcher.fetch(collectionPath, cluster.getZkClient(), null);
+ PerReplicaStates prs = PerReplicaStatesOps.fetch(collectionPath, cluster.getZkClient(), null);
assertEquals(4, prs.states.size());
JettySolrRunner jsr = null;
@@ -1195,7 +1194,7 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
// Now let's do an add replica
CollectionAdminRequest.addReplicaToShard(testCollection, "shard1")
.process(cluster.getSolrClient());
- prs = PerReplicaStatesFetcher.fetch(collectionPath, cluster.getZkClient(), null);
+ prs = PerReplicaStatesOps.fetch(collectionPath, cluster.getZkClient(), null);
assertEquals(5, prs.states.size());
// create a collection with PRS and v2 API
@@ -1211,7 +1210,7 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
cluster.waitForActiveCollection(testCollection, 2, 4);
c = cluster.getZkStateReader().getCollection(testCollection);
c.forEachReplica((s, replica) -> assertNotNull(replica.getReplicaState()));
- prs = PerReplicaStatesFetcher.fetch(collectionPath, cluster.getZkClient(), null);
+ prs = PerReplicaStatesOps.fetch(collectionPath, cluster.getZkClient(), null);
assertEquals(4, prs.states.size());
} finally {
if (jsr != null) {
diff --git a/solr/solrj/src/test/org/apache/solr/common/cloud/PerReplicaStatesIntegrationTest.java b/solr/solrj/src/test/org/apache/solr/common/cloud/PerReplicaStatesIntegrationTest.java
index 2edfe3b7d54..e75100f1a50 100644
--- a/solr/solrj/src/test/org/apache/solr/common/cloud/PerReplicaStatesIntegrationTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/cloud/PerReplicaStatesIntegrationTest.java
@@ -78,7 +78,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
DocCollection c = cluster.getZkStateReader().getCollection(testCollection);
c.forEachReplica((s, replica) -> assertNotNull(replica.getReplicaState()));
PerReplicaStates prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
DocCollection.getCollectionPath(testCollection), cluster.getZkClient(), null);
assertEquals(4, prs.states.size());
JettySolrRunner jsr = cluster.startJettySolrRunner();
@@ -87,7 +87,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
.process(cluster.getSolrClient());
cluster.waitForActiveCollection(testCollection, 2, 5);
prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
DocCollection.getCollectionPath(testCollection), cluster.getZkClient(), null);
assertEquals(5, prs.states.size());
@@ -97,7 +97,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
.process(cluster.getSolrClient());
cluster.waitForActiveCollection(testCollection, 2, 4);
prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
DocCollection.getCollectionPath(testCollection), cluster.getZkClient(), null);
assertEquals(4, prs.states.size());
@@ -112,7 +112,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
c = cluster.getZkStateReader().getCollection(testCollection);
c.forEachReplica((s, replica) -> assertNotNull(replica.getReplicaState()));
prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
DocCollection.getCollectionPath(testCollection), cluster.getZkClient(), null);
assertEquals(4, prs.states.size());
} finally {
@@ -144,8 +144,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
c.forEachReplica((s, replica) -> assertNotNull(replica.getReplicaState()));
String collectionPath = DocCollection.getCollectionPath(testCollection);
PerReplicaStates prs =
- PerReplicaStatesFetcher.fetch(
- collectionPath, SolrCloudTestCase.cluster.getZkClient(), null);
+ PerReplicaStatesOps.fetch(collectionPath, SolrCloudTestCase.cluster.getZkClient(), null);
assertEquals(1, prs.states.size());
JettySolrRunner jsr = cluster.startJettySolrRunner();
@@ -156,8 +155,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
.process(cluster.getSolrClient());
cluster.waitForActiveCollection(testCollection, 1, 2);
prs =
- PerReplicaStatesFetcher.fetch(
- collectionPath, SolrCloudTestCase.cluster.getZkClient(), null);
+ PerReplicaStatesOps.fetch(collectionPath, SolrCloudTestCase.cluster.getZkClient(), null);
assertEquals(2, prs.states.size());
c = cluster.getZkStateReader().getCollection(testCollection);
prs.states.forEachEntry((s, state) -> assertEquals(Replica.State.ACTIVE, state.state));
@@ -183,7 +181,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
log.info("after down node, state.json v: {}", c.getZNodeVersion());
}
prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
collectionPath, SolrCloudTestCase.cluster.getZkClient(), null);
PerReplicaStates.State st = prs.get(replicaName);
assertNotEquals(Replica.State.ACTIVE, st.state);
@@ -214,7 +212,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
jsr.start();
cluster.waitForActiveCollection(testCollection, 1, 2);
prs =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
collectionPath, SolrCloudTestCase.cluster.getZkClient(), null);
prs.states.forEachEntry((s, state) -> assertEquals(Replica.State.ACTIVE, state.state));
}
@@ -247,7 +245,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
PerReplicaStates prs1 =
original =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
DocCollection.getCollectionPath(COLL), cluster.getZkClient(), null);
log.info("prs1 : {}", prs1);
@@ -274,7 +272,7 @@ public class PerReplicaStatesIntegrationTest extends SolrCloudTestCase {
(liveNodes, collectionState) -> {
AtomicBoolean anyFail = new AtomicBoolean(false);
PerReplicaStates prs2 =
- PerReplicaStatesFetcher.fetch(
+ PerReplicaStatesOps.fetch(
DocCollection.getCollectionPath(COLL), cluster.getZkClient(), null);
prs2.states.forEachEntry(
(r, newState) -> {