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

psalagnac pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new e9089326442 Skip creation of ZkCoreNodeProps when we have a Replica 
instance (#3315)
e9089326442 is described below

commit e9089326442a3c60e6194b68c4835da3bcb76fb0
Author: Pierre Salagnac <[email protected]>
AuthorDate: Mon Apr 14 16:03:16 2025 +0200

    Skip creation of ZkCoreNodeProps when we have a Replica instance (#3315)
    
    Trivial code clean-up to remove unnecessary creations of ZkCoreNodeProps 
objects (I think they exist for historical reasons). Instead, directly use 
getter methods from already existing Replica instances.
---
 .../java/org/apache/solr/cli/HealthcheckTool.java  | 11 ++--
 .../org/apache/solr/cloud/RecoveryStrategy.java    |  6 +--
 .../api/collections/CollectionHandlingUtils.java   |  6 +--
 .../apache/solr/cloud/overseer/SliceMutator.java   |  4 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |  3 +-
 .../apache/solr/handler/admin/api/SyncShard.java   | 10 ++--
 .../solr/cloud/DistributedVersionInfoTest.java     |  6 +--
 .../org/apache/solr/cloud/HttpPartitionTest.java   |  7 +--
 .../cloud/LeaderFailureAfterFreshStartTest.java    |  2 +-
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      |  4 +-
 .../apache/solr/cloud/PeerSyncReplicationTest.java |  2 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   |  4 +-
 .../apache/solr/cloud/TestCloudConsistency.java    |  4 +-
 .../solr/cloud/api/collections/ShardSplitTest.java |  9 ++--
 .../solr/client/solrj/io/sql/StatementImpl.java    |  4 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |  4 +-
 .../client/solrj/io/stream/TextLogitStream.java    |  4 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |  4 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |  3 +-
 .../solr/client/solrj/impl/CloudSolrClient.java    |  6 +--
 .../cloud/AbstractBasicDistributedZkTestBase.java  | 25 ++++-----
 .../solr/cloud/AbstractFullDistribZkTestBase.java  | 60 +++++++++-------------
 .../cloud/AbstractUnloadDistributedZkTestBase.java | 23 ++++-----
 ...bstractCollectionsAPIDistributedZkTestBase.java |  8 ++-
 .../component/TrackingShardHandlerFactory.java     |  3 +-
 25 files changed, 84 insertions(+), 138 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java 
b/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
index 4201392f933..afabd5275d3 100644
--- a/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/HealthcheckTool.java
@@ -40,7 +40,6 @@ import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.NamedList;
@@ -150,12 +149,11 @@ public class HealthcheckTool extends ToolBase {
         String replicaStatus;
         long numDocs = -1L;
 
-        ZkCoreNodeProps replicaCoreProps = new ZkCoreNodeProps(r);
-        String coreUrl = replicaCoreProps.getCoreUrl();
+        String coreUrl = r.getCoreUrl();
         boolean isLeader = coreUrl.equals(leaderUrl);
 
         // if replica's node is not live, its status is DOWN
-        String nodeName = replicaCoreProps.getNodeName();
+        String nodeName = r.getNodeName();
         if (nodeName == null || !liveNodes.contains(nodeName)) {
           replicaStatus = Replica.State.DOWN.toString();
         } else {
@@ -170,8 +168,7 @@ public class HealthcheckTool extends ToolBase {
             numDocs = qr.getResults().getNumFound();
             try (var solrClient =
                 CLIUtils.getSolrClient(
-                    replicaCoreProps.getBaseUrl(),
-                    cli.getOptionValue(CommonCLIOptions.CREDENTIALS_OPTION))) {
+                    r.getBaseUrl(), 
cli.getOptionValue(CommonCLIOptions.CREDENTIALS_OPTION))) {
               NamedList<Object> systemInfo =
                   solrClient.request(
                       new GenericSolrRequest(
@@ -183,7 +180,7 @@ public class HealthcheckTool extends ToolBase {
             }
 
             // if we get here, we can trust the state
-            replicaStatus = replicaCoreProps.getState();
+            replicaStatus = String.valueOf(r.getState());
           } catch (Exception exc) {
             log.error("ERROR: {} when trying to reach: {}", exc, coreUrl);
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java 
b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
index 164f10d0db0..022ea8a9b34 100644
--- a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
@@ -365,9 +365,9 @@ public class RecoveryStrategy implements Runnable, 
Closeable {
     while (!successfulRecovery && !Thread.currentThread().isInterrupted() && 
!isClosed()) {
       try {
         CloudDescriptor cloudDesc = this.coreDescriptor.getCloudDescriptor();
-        ZkNodeProps leaderprops =
+        Replica leader =
             zkStateReader.getLeaderRetry(cloudDesc.getCollectionName(), 
cloudDesc.getShardId());
-        final String leaderUrl = ZkCoreNodeProps.getCoreUrl(leaderprops);
+        final String leaderUrl = leader.getCoreUrl();
         final String ourUrl = ZkCoreNodeProps.getCoreUrl(baseUrl, coreName);
 
         // TODO: We can probably delete most of this code if we say this 
strategy can only be used
@@ -407,7 +407,7 @@ public class RecoveryStrategy implements Runnable, 
Closeable {
             log.info("Stopping background replicate from leader process");
             zkController.stopReplicationFromLeader(coreName);
           }
-          replicate(zkController.getNodeName(), core, leaderprops);
+          replicate(zkController.getNodeName(), core, leader);
 
           if (isClosed()) {
             if (log.isInfoEnabled()) {
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
index a0eb4d3233f..738994a94d5 100644
--- 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
+++ 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
@@ -55,7 +55,6 @@ import org.apache.solr.common.cloud.DocRouter;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.SolrZkClient;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CollectionAdminParams;
@@ -221,13 +220,12 @@ public class CollectionHandlingUtils {
 
   static void commit(NamedList<Object> results, String slice, Replica 
parentShardLeader) {
     log.debug("Calling soft commit to make sub shard updates visible");
-    final var zkCoreProps = new ZkCoreNodeProps(parentShardLeader);
-    String coreUrl = new ZkCoreNodeProps(parentShardLeader).getCoreUrl();
+    String coreUrl = parentShardLeader.getCoreUrl();
     // HttpShardHandler is hard coded to send a QueryRequest hence we go direct
     // and we force open a searcher so that we have documents to show upon 
switching states
     UpdateResponse updateResponse = null;
     try {
-      updateResponse = softCommit(zkCoreProps.getBaseUrl(), 
zkCoreProps.getCoreName());
+      updateResponse = softCommit(parentShardLeader.getBaseUrl(), 
parentShardLeader.getCoreName());
       CollectionHandlingUtils.processResponse(
           results, null, coreUrl, updateResponse, slice, 
Collections.emptySet());
     } catch (Exception e) {
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java 
b/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java
index 66af10548a8..962f7ea0b47 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/SliceMutator.java
@@ -171,9 +171,7 @@ public class SliceMutator {
     final Map<String, Replica> newReplicas = new LinkedHashMap<>();
     for (Replica replica : slice.getReplicas()) {
       // TODO: this should only be calculated once and cached somewhere?
-      String coreURL =
-          ZkCoreNodeProps.getCoreUrl(
-              replica.getBaseUrl(), 
replica.getStr(ZkStateReader.CORE_NAME_PROP));
+      String coreURL = replica.getCoreUrl();
 
       if (replica.equals(oldLeader) && !coreURL.equals(leaderUrl)) {
         replica = ReplicaMutator.unsetLeader(replica);
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java 
b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
index d4980a0a674..39e115146b9 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ColStatus.java
@@ -34,7 +34,6 @@ import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.RoutingRule;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CommonParams;
@@ -184,7 +183,7 @@ public class ColStatus {
         if (!leader.isActive(clusterState.getLiveNodes())) {
           continue;
         }
-        String url = ZkCoreNodeProps.getCoreUrl(leader);
+        String url = leader.getCoreUrl();
         if (url == null) {
           continue;
         }
diff --git 
a/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java 
b/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java
index 17f63fa739e..8dbe4921c9a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/api/SyncShard.java
@@ -32,8 +32,7 @@ import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.CoreAdminRequest;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
-import org.apache.solr.common.cloud.ZkNodeProps;
+import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.handler.api.V2ApiUtils;
 import org.apache.solr.jersey.PermissionName;
@@ -78,18 +77,17 @@ public class SyncShard extends AdminAPIBase implements 
SyncShardApi {
     ClusterState clusterState = 
coreContainer.getZkController().getClusterState();
 
     DocCollection docCollection = clusterState.getCollection(collection);
-    ZkNodeProps leaderProps = docCollection.getLeader(shardName);
-    ZkCoreNodeProps nodeProps = new ZkCoreNodeProps(leaderProps);
+    Replica leader = docCollection.getLeader(shardName);
 
     try (SolrClient client =
-        new HttpSolrClient.Builder(nodeProps.getBaseUrl())
+        new HttpSolrClient.Builder(leader.getBaseUrl())
             .withConnectionTimeout(15000, TimeUnit.MILLISECONDS)
             .withSocketTimeout(60000, TimeUnit.MILLISECONDS)
             .build()) {
       CoreAdminRequest.RequestSyncShard reqSyncShard = new 
CoreAdminRequest.RequestSyncShard();
       reqSyncShard.setCollection(collection);
       reqSyncShard.setShard(shardName);
-      reqSyncShard.setCoreName(nodeProps.getCoreName());
+      reqSyncShard.setCoreName(leader.getCoreName());
       client.request(reqSyncShard);
     }
   }
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java 
b/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
index 38f7abeca0e..b5c902467a4 100644
--- a/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/DistributedVersionInfoTest.java
@@ -47,7 +47,6 @@ import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.NamedList;
@@ -378,10 +377,9 @@ public class DistributedVersionInfoTest extends 
SolrCloudTestCase {
   }
 
   protected boolean reloadCollection(Replica replica, String 
testCollectionName) throws Exception {
-    ZkCoreNodeProps coreProps = new ZkCoreNodeProps(replica);
-    String coreName = coreProps.getCoreName();
+    String coreName = replica.getCoreName();
     boolean reloadedOk = false;
-    try (SolrClient client = getHttpSolrClient(coreProps.getBaseUrl())) {
+    try (SolrClient client = getHttpSolrClient(replica.getBaseUrl())) {
       CoreAdminResponse statusResp = CoreAdminRequest.getStatus(coreName, 
client);
       long leaderCoreStartTime = statusResp.getStartTime(coreName).getTime();
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java 
b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
index d274539a2b3..7527af9cc08 100644
--- a/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
@@ -46,7 +46,6 @@ import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.CoreContainer;
@@ -241,8 +240,7 @@ public class HttpPartitionTest extends 
AbstractFullDistribZkTestBase {
     // SOLR-7625)
     JettySolrRunner replicaJetty = getJettyOnPort(getReplicaPort(notLeader));
     CoreContainer coreContainer = replicaJetty.getCoreContainer();
-    ZkCoreNodeProps replicaCoreNodeProps = new ZkCoreNodeProps(notLeader);
-    String coreName = replicaCoreNodeProps.getCoreName();
+    String coreName = notLeader.getCoreName();
     try (SolrCore core = coreContainer.getCore(coreName)) {
       assertNotNull("Core '" + coreName + "' not found for replica: " + 
notLeader.getName(), core);
     }
@@ -517,8 +515,7 @@ public class HttpPartitionTest extends 
AbstractFullDistribZkTestBase {
   }
 
   protected SolrClient getHttpSolrClient(Replica replica, String collection) {
-    ZkCoreNodeProps zkProps = new ZkCoreNodeProps(replica);
-    return getHttpSolrClient(zkProps.getBaseUrl(), collection);
+    return getHttpSolrClient(replica.getBaseUrl(), collection);
   }
 
   // Send doc directly to a server (without going through proxy)
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
 
b/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
index 5710f1a6624..fb297fbdca2 100644
--- 
a/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
+++ 
b/solr/core/src/test/org/apache/solr/cloud/LeaderFailureAfterFreshStartTest.java
@@ -152,7 +152,7 @@ public class LeaderFailureAfterFreshStartTest extends 
AbstractFullDistribZkTestB
       // shutdown the original leader
       log.info("Now shutting down initial leader");
       forceNodeFailures(singletonList(initialLeaderJetty));
-      waitForNewLeader(cloudClient, "shard1", (Replica) 
initialLeaderJetty.client.info);
+      waitForNewLeader(cloudClient, "shard1", initialLeaderJetty.info);
       waitTillNodesActive();
       log.info("Updating mappings from zk");
       updateMappingsFromZk(jettys, clients, true);
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java 
b/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java
index 7f64a5d8a94..d8299d4fe9d 100644
--- a/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/LeaderVoteWaitTimeoutTest.java
@@ -38,7 +38,6 @@ import 
org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.embedded.JettySolrRunner;
@@ -341,7 +340,6 @@ public class LeaderVoteWaitTimeoutTest extends 
SolrCloudTestCase {
   }
 
   protected SolrClient getSolrClient(Replica replica, String coll) {
-    ZkCoreNodeProps zkProps = new ZkCoreNodeProps(replica);
-    return getHttpSolrClient(zkProps.getBaseUrl(), coll);
+    return getHttpSolrClient(replica.getBaseUrl(), coll);
   }
 }
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java 
b/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java
index 5c29bc834fb..6695fcef951 100644
--- a/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/PeerSyncReplicationTest.java
@@ -151,7 +151,7 @@ public class PeerSyncReplicationTest extends 
AbstractFullDistribZkTestBase {
       log.info("Now shutting down initial leader");
       forceNodeFailures(singletonList(initialLeaderJetty));
       log.info("Updating mappings from zk");
-      waitForNewLeader(cloudClient, "shard1", (Replica) 
initialLeaderJetty.client.info);
+      waitForNewLeader(cloudClient, "shard1", initialLeaderJetty.info);
       updateMappingsFromZk(jettys, clients, true);
       assertEquals(
           "PeerSynced node did not become leader",
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java 
b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
index f375bfc229c..4d6158e0179 100644
--- a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java
@@ -37,7 +37,6 @@ import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.DocRouter;
 import org.apache.solr.common.cloud.Replica;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.embedded.JettySolrRunner;
@@ -267,8 +266,7 @@ public class ReplicationFactorTest extends 
AbstractFullDistribZkTestBase {
 
   protected void sendNonDirectUpdateRequestReplica(
       Replica replica, UpdateRequest up, int expectedRf, String collection) 
throws Exception {
-    ZkCoreNodeProps zkProps = new ZkCoreNodeProps(replica);
-    try (SolrClient solrServer = getHttpSolrClient(zkProps.getBaseUrl(), 
collection)) {
+    try (SolrClient solrServer = getHttpSolrClient(replica.getBaseUrl(), 
collection)) {
       NamedList<?> resp = solrServer.request(up);
       NamedList<?> hdr = (NamedList<?>) resp.get("responseHeader");
       Integer batchRf = (Integer) hdr.get(UpdateRequest.REPFACT);
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java 
b/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
index 009a1d48d07..0ef05c16988 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudConsistency.java
@@ -36,7 +36,6 @@ import 
org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.embedded.JettySolrRunner;
 import org.junit.After;
@@ -349,7 +348,6 @@ public class TestCloudConsistency extends SolrCloudTestCase 
{
   }
 
   protected SolrClient getHttpSolrClient(Replica replica, String coll) {
-    ZkCoreNodeProps zkProps = new ZkCoreNodeProps(replica);
-    return getHttpSolrClient(zkProps.getBaseUrl(), coll);
+    return getHttpSolrClient(replica.getBaseUrl(), coll);
   }
 }
diff --git 
a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java 
b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java
index 7e610b2c2da..4b5a784185d 100644
--- 
a/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java
+++ 
b/solr/core/src/test/org/apache/solr/cloud/api/collections/ShardSplitTest.java
@@ -61,7 +61,6 @@ import org.apache.solr.common.cloud.DocRouter;
 import org.apache.solr.common.cloud.HashBasedRouter;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CollectionParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
@@ -1190,8 +1189,7 @@ public class ShardSplitTest extends 
BasicDistributedZkTest {
     SolrQuery query = new SolrQuery("*:*").setRows(1000).setFields("id", 
"_version_");
     query.set("distrib", false);
 
-    ZkCoreNodeProps shard1_0 =
-        getLeaderUrlFromZk(AbstractDistribZkTestBase.DEFAULT_COLLECTION, 
SHARD1_0);
+    Replica shard1_0 = 
getLeaderFromZk(AbstractDistribZkTestBase.DEFAULT_COLLECTION, SHARD1_0);
     QueryResponse response;
     try (SolrClient shard1_0Client =
         getHttpSolrClient(shard1_0.getBaseUrl(), shard1_0.getCoreName())) {
@@ -1199,8 +1197,7 @@ public class ShardSplitTest extends 
BasicDistributedZkTest {
     }
     long shard10Count = response.getResults().getNumFound();
 
-    ZkCoreNodeProps shard1_1 =
-        getLeaderUrlFromZk(AbstractDistribZkTestBase.DEFAULT_COLLECTION, 
SHARD1_1);
+    Replica shard1_1 = 
getLeaderFromZk(AbstractDistribZkTestBase.DEFAULT_COLLECTION, SHARD1_1);
     QueryResponse response2;
     try (SolrClient shard1_1Client =
         getHttpSolrClient(shard1_1.getBaseUrl(), shard1_1.getCoreName())) {
@@ -1224,7 +1221,7 @@ public class ShardSplitTest extends 
BasicDistributedZkTest {
     long[] numFound = new long[slice.getReplicasMap().size()];
     int c = 0;
     for (Replica replica : slice.getReplicas()) {
-      String coreUrl = new ZkCoreNodeProps(replica).getCoreUrl();
+      String coreUrl = replica.getCoreUrl();
       QueryResponse response;
       try (SolrClient client = getHttpSolrClient(replica)) {
         response = client.query(query);
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
index c2a6259576a..f76f7bdb06e 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/sql/StatementImpl.java
@@ -31,7 +31,6 @@ import org.apache.solr.client.solrj.io.stream.CloudSolrStream;
 import org.apache.solr.client.solrj.io.stream.SolrStream;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 
@@ -97,8 +96,7 @@ class StatementImpl implements Statement {
       }
 
       Replica rep = shuffler.get(0);
-      ZkCoreNodeProps zkProps = new ZkCoreNodeProps(rep);
-      String url = zkProps.getCoreUrl();
+      String url = rep.getCoreUrl();
       return new SolrStream(url, params);
     } catch (Exception e) {
       throw new IOException(e);
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
index 1a694fc72b1..946a1141f17 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FeaturesSelectionStream.java
@@ -52,7 +52,6 @@ import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.NamedList;
 
@@ -285,8 +284,7 @@ public class FeaturesSelectionStream extends TupleStream 
implements Expressible
 
         Collections.shuffle(shuffler, new Random());
         Replica rep = shuffler.get(0);
-        ZkCoreNodeProps zkProps = new ZkCoreNodeProps(rep);
-        String url = zkProps.getCoreUrl();
+        String url = rep.getCoreUrl();
         baseUrls.add(url);
       }
 
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
index 6f79ef04876..2ac825c7ea4 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
@@ -52,7 +52,6 @@ import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.NamedList;
 
@@ -392,8 +391,7 @@ public class TextLogitStream extends TupleStream implements 
Expressible {
 
         Collections.shuffle(shuffler, new Random());
         Replica rep = shuffler.get(0);
-        ZkCoreNodeProps zkProps = new ZkCoreNodeProps(rep);
-        String url = zkProps.getCoreUrl();
+        String url = rep.getCoreUrl();
         baseUrls.add(url);
       }
 
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
index dbc295e79e3..b3bc4967c6d 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
@@ -57,7 +57,6 @@ import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 
@@ -551,8 +550,7 @@ public class TopicStream extends CloudSolrStream implements 
Expressible {
       }
 
       Replica rep = shuffler.get(random.nextInt(shuffler.size()));
-      ZkCoreNodeProps zkProps = new ZkCoreNodeProps(rep);
-      String url = zkProps.getCoreUrl();
+      String url = rep.getCoreUrl();
       SolrStream solrStream = new SolrStream(url, localParams);
       solrStream.setSlice(slice.getName());
       solrStream.setCheckpoint(checkpoint);
diff --git 
a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java 
b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index aa8b4edc799..e9a21713d22 100644
--- 
a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ 
b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -911,8 +911,7 @@ public class ZkStateReader implements SolrCloseable {
     if (replica == null || replica.getBaseUrl() == null) {
       return null;
     }
-    ZkCoreNodeProps props = new ZkCoreNodeProps(replica);
-    return props.getCoreUrl();
+    return replica.getCoreUrl();
   }
 
   public Replica getLeader(Set<String> liveNodes, DocCollection docCollection, 
String shard) {
diff --git 
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java 
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
index a0dc29f7196..8a7bddd0ad1 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
@@ -69,7 +69,6 @@ import org.apache.solr.common.cloud.DocRouter;
 import org.apache.solr.common.cloud.ImplicitDocRouter;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.ShardParams;
 import org.apache.solr.common.params.SolrParams;
@@ -1290,10 +1289,9 @@ public abstract class CloudSolrClient extends SolrClient 
{
       for (Slice slice : coll.getActiveSlicesArr()) {
         Replica leader = slice.getLeader();
         if (leader != null) {
-          ZkCoreNodeProps zkProps = new ZkCoreNodeProps(leader);
-          String leaderUrl = zkProps.getBaseUrl() + "/" + 
zkProps.getCoreName();
+          String leaderUrl = leader.getBaseUrl() + "/" + leader.getCoreName();
           leaders.put(leaderUrl, slice.getName());
-          String altLeaderUrl = zkProps.getBaseUrl() + "/" + collection;
+          String altLeaderUrl = leader.getBaseUrl() + "/" + collection;
           leaders.put(altLeaderUrl, slice.getName());
         }
       }
diff --git 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java
 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java
index 4fcd1b1279f..ed37dcde551 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractBasicDistributedZkTestBase.java
@@ -66,8 +66,6 @@ import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
-import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CollectionParams.CollectionAction;
 import org.apache.solr.common.params.CommonParams;
@@ -1160,13 +1158,13 @@ public abstract class 
AbstractBasicDistributedZkTestBase extends AbstractFullDis
   }
 
   @Override
-  protected ZkCoreNodeProps getLeaderUrlFromZk(String collection, String 
slice) {
+  protected Replica getLeaderFromZk(String collection, String slice) {
     ClusterState clusterState = getCommonCloudSolrClient().getClusterState();
-    ZkNodeProps leader = 
clusterState.getCollection(collection).getLeader(slice);
+    Replica leader = clusterState.getCollection(collection).getLeader(slice);
     if (leader == null) {
       throw new RuntimeException("Could not find leader:" + collection + " " + 
slice);
     }
-    return new ZkCoreNodeProps(leader);
+    return leader;
   }
 
   /**
@@ -1369,12 +1367,11 @@ public abstract class 
AbstractBasicDistributedZkTestBase extends AbstractFullDis
         
zkStateReader.getClusterState().getCollection(oneInstanceCollection2).getSlicesMap();
     assertNotNull(slices);
 
-    ZkCoreNodeProps props =
-        new ZkCoreNodeProps(
-            getCommonCloudSolrClient()
-                .getClusterState()
-                .getCollection(oneInstanceCollection2)
-                .getLeader("shard1"));
+    Replica leader =
+        getCommonCloudSolrClient()
+            .getClusterState()
+            .getCollection(oneInstanceCollection2)
+            .getLeader("shard1");
 
     // now test that unloading a core gets us a new leader
     try (SolrClient unloadClient =
@@ -1383,9 +1380,9 @@ public abstract class AbstractBasicDistributedZkTestBase 
extends AbstractFullDis
             .withSocketTimeout(60000, TimeUnit.MILLISECONDS)
             .build()) {
       Unload unloadCmd = new Unload(true);
-      unloadCmd.setCoreName(props.getCoreName());
+      unloadCmd.setCoreName(leader.getCoreName());
 
-      String leader = props.getCoreUrl();
+      String leaderUrl = leader.getCoreUrl();
 
       testExecutor.execute(
           new Runnable() {
@@ -1410,7 +1407,7 @@ public abstract class AbstractBasicDistributedZkTestBase 
extends AbstractFullDis
                 TimeUnit.MILLISECONDS,
                 (n, c) -> {
                   try {
-                    if (leader.equals(
+                    if (leaderUrl.equals(
                         zkStateReader.getLeaderUrl(oneInstanceCollection2, 
"shard1", 10000))) {
                       return false;
                     }
diff --git 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
index 681bf7152e5..00a74dc7eb2 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
@@ -73,7 +73,6 @@ import org.apache.solr.common.cloud.ClusterStateUtil;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CollectionParams;
@@ -164,7 +163,7 @@ public abstract class AbstractFullDistribZkTestBase extends 
AbstractDistribZkTes
     public String url;
 
     public CloudSolrServerClient client;
-    public ZkNodeProps info;
+    public Replica info;
 
     @Override
     public int hashCode() {
@@ -189,9 +188,8 @@ public abstract class AbstractFullDistribZkTestBase extends 
AbstractDistribZkTes
 
   public static class CloudSolrServerClient {
     SolrClient solrClient;
-    String shardName;
+    String nodeName;
     int port;
-    public ZkNodeProps info;
 
     public CloudSolrServerClient() {}
 
@@ -932,8 +930,7 @@ public abstract class AbstractFullDistribZkTestBase extends 
AbstractDistribZkTes
             CloudSolrServerClient csc = new CloudSolrServerClient();
             csc.solrClient = client;
             csc.port = port;
-            csc.shardName = replica.getStr(ZkStateReader.NODE_NAME_PROP);
-            csc.info = replica;
+            csc.nodeName = replica.getNodeName();
 
             theClients.add(csc);
 
@@ -1130,12 +1127,12 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
     controlClient.add(doc);
   }
 
-  protected ZkCoreNodeProps getLeaderUrlFromZk(String collection, String 
slice) throws IOException {
+  protected Replica getLeaderFromZk(String collection, String slice) {
     getCommonCloudSolrClient();
     ClusterState clusterState = cloudClient.getClusterState();
     final DocCollection docCollection = 
clusterState.getCollectionOrNull(collection);
     if (docCollection != null && docCollection.getLeader(slice) != null) {
-      return new ZkCoreNodeProps(docCollection.getLeader(slice));
+      return docCollection.getLeader(slice);
     }
     throw new RuntimeException("Could not find leader:" + collection + " " + 
slice);
   }
@@ -1467,10 +1464,9 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
     assertNotNull("no jetties found for shard: " + shard, solrJetties);
 
     for (CloudJettyRunner cjetty : solrJetties) {
-      ZkNodeProps props = cjetty.info;
-      String nodeName = props.getStr(ZkStateReader.NODE_NAME_PROP);
-      boolean active =
-          Replica.State.getState(props.getStr(ZkStateReader.STATE_PROP)) == 
Replica.State.ACTIVE;
+      Replica replica = cjetty.info;
+      String nodeName = replica.getNodeName();
+      boolean active = replica.getState() == Replica.State.ACTIVE;
       boolean live = 
zkStateReader.getClusterState().liveNodesContain(nodeName);
       if (active && live) {
         shardClients.add(cjetty.client.solrClient);
@@ -1536,9 +1532,9 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
 
     CloudJettyRunner lastJetty = null;
     for (CloudJettyRunner cjetty : solrJetties) {
-      ZkNodeProps props = cjetty.info;
+      Replica replica = cjetty.info;
       log.debug("client{}", cnt);
-      log.debug("PROPS:{}", props);
+      log.debug("REPLICA:{}", replica);
       cnt++;
 
       try {
@@ -1560,15 +1556,14 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
       }
 
       boolean live = false;
-      String nodeName = props.getStr(ZkStateReader.NODE_NAME_PROP);
+      String nodeName = replica.getNodeName();
       if (zkStateReader.getClusterState().liveNodesContain(nodeName)) {
         live = true;
       }
       log.debug(" live:{}", live);
       log.debug(" num:{}", num);
 
-      boolean active =
-          Replica.State.getState(props.getStr(ZkStateReader.STATE_PROP)) == 
Replica.State.ACTIVE;
+      boolean active = replica.getState() == Replica.State.ACTIVE;
       if (active && live) {
         if (lastNum > -1 && lastNum != num && failMessage == null) {
           failMessage =
@@ -1612,8 +1607,8 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
       List<CloudJettyRunner> solrJetties = shardToJetty.get(shard);
 
       for (CloudJettyRunner cjetty : solrJetties) {
-        ZkNodeProps props = cjetty.info;
-        log.debug("PROPS:{}", props);
+        Replica info = cjetty.info;
+        log.debug("REPLICA:{}", info);
 
         try {
           SolrParams query =
@@ -1636,7 +1631,7 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
           continue;
         }
         boolean live = false;
-        String nodeName = props.getStr(ZkStateReader.NODE_NAME_PROP);
+        String nodeName = info.getNodeName();
         ZkStateReader zkStateReader = ZkStateReader.from(cloudClient);
         if (zkStateReader.getClusterState().liveNodesContain(nodeName)) {
           live = true;
@@ -1729,18 +1724,15 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
       for (int i = 0; i < times; i++) {
         try {
           CloudJettyRunner cjetty = shardToJetty.get(s).get(i);
-          ZkNodeProps props = cjetty.info;
+          Replica replica = cjetty.info;
           SolrClient client = cjetty.client.solrClient;
-          boolean active =
-              Replica.State.getState(props.getStr(ZkStateReader.STATE_PROP))
-                  == Replica.State.ACTIVE;
+          boolean active = replica.getState() == Replica.State.ACTIVE;
           if (active) {
             SolrQuery query = new SolrQuery("*:*");
             query.set("distrib", false);
             long results = client.query(query).getResults().getNumFound();
-            if (verbose)
-              System.err.println(new ZkCoreNodeProps(props).getCoreUrl() + " : 
" + results);
-            if (verbose) System.err.println("shard:" + 
props.getStr(ZkStateReader.SHARD_ID_PROP));
+            if (verbose) System.err.println(replica.getCoreUrl() + " : " + 
results);
+            if (verbose) System.err.println("shard:" + replica.getShard());
             cnt += results;
             break;
           }
@@ -1774,7 +1766,7 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
   protected SolrClient getClient(String nodeName) {
     for (CloudJettyRunner cjetty : cloudJettys) {
       CloudSolrServerClient client = cjetty.client;
-      if (client.shardName.equals(nodeName)) {
+      if (client.nodeName.equals(nodeName)) {
         return client.solrClient;
       }
     }
@@ -1827,12 +1819,9 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
       }
       ZkStateReader zkStateReader = ZkStateReader.from(cloudClient);
       long count = 0;
-      final Replica.State currentState =
-          Replica.State.getState(cjetty.info.getStr(ZkStateReader.STATE_PROP));
+      final Replica.State currentState = cjetty.info.getState();
       if (currentState == Replica.State.ACTIVE
-          && zkStateReader
-              .getClusterState()
-              
.liveNodesContain(cjetty.info.getStr(ZkStateReader.NODE_NAME_PROP))) {
+          && 
zkStateReader.getClusterState().liveNodesContain(cjetty.info.getNodeName())) {
         SolrQuery query = new SolrQuery("*:*");
         query.set("distrib", false);
         count = client.solrClient.query(query).getResults().getNumFound();
@@ -2540,10 +2529,9 @@ public abstract class AbstractFullDistribZkTestBase 
extends AbstractDistribZkTes
   }
 
   protected boolean reloadCollection(Replica replica, String 
testCollectionName) throws Exception {
-    ZkCoreNodeProps coreProps = new ZkCoreNodeProps(replica);
-    String coreName = coreProps.getCoreName();
+    String coreName = replica.getCoreName();
     boolean reloadedOk = false;
-    try (SolrClient client = getHttpSolrClient(coreProps.getBaseUrl())) {
+    try (SolrClient client = getHttpSolrClient(replica.getBaseUrl())) {
       CoreAdminResponse statusResp = CoreAdminRequest.getStatus(coreName, 
client);
       long leaderCoreStartTime = statusResp.getStartTime(coreName).getTime();
 
diff --git 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractUnloadDistributedZkTestBase.java
 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractUnloadDistributedZkTestBase.java
index ee7fac68736..1cbc29b1146 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/cloud/AbstractUnloadDistributedZkTestBase.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/cloud/AbstractUnloadDistributedZkTestBase.java
@@ -36,7 +36,6 @@ import 
org.apache.solr.client.solrj.request.CoreAdminRequest.Unload;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.ExecutorUtil;
@@ -242,12 +241,12 @@ public abstract class AbstractUnloadDistributedZkTestBase 
extends AbstractFullDi
 
     waitForRecoveriesToFinish("unloadcollection", zkStateReader, false);
 
-    ZkCoreNodeProps leaderProps = getLeaderUrlFromZk("unloadcollection", 
"shard1");
+    Replica leader = getLeaderFromZk("unloadcollection", "shard1");
 
     Random random = random();
     if (random.nextBoolean()) {
       try (SolrClient collectionClient =
-          getHttpSolrClient(leaderProps.getBaseUrl(), 
leaderProps.getCoreName())) {
+          getHttpSolrClient(leader.getBaseUrl(), leader.getCoreName())) {
         // lets try and use the solrj client to index and retrieve a couple
         // documents
         SolrInputDocument doc1 =
@@ -292,10 +291,10 @@ public abstract class AbstractUnloadDistributedZkTestBase 
extends AbstractFullDi
     // collectionClient.commit();
 
     // unload the leader
-    try (SolrClient collectionClient = 
newSolrClient(leaderProps.getBaseUrl())) {
+    try (SolrClient collectionClient = newSolrClient(leader.getBaseUrl())) {
 
       Unload unloadCmd = new Unload(false);
-      unloadCmd.setCoreName(leaderProps.getCoreName());
+      unloadCmd.setCoreName(leader.getCoreName());
       ModifiableSolrParams p = (ModifiableSolrParams) unloadCmd.getParams();
 
       collectionClient.request(unloadCmd);
@@ -304,7 +303,7 @@ public abstract class AbstractUnloadDistributedZkTestBase 
extends AbstractFullDi
     //    printLayout();
 
     int tries = 50;
-    while (leaderProps
+    while (leader
         .getCoreUrl()
         .equals(zkStateReader.getLeaderUrl("unloadcollection", "shard1", 
15000))) {
       Thread.sleep(100);
@@ -341,15 +340,15 @@ public abstract class AbstractUnloadDistributedZkTestBase 
extends AbstractFullDi
     waitForRecoveriesToFinish("unloadcollection", zkStateReader, false);
 
     // unload the leader again
-    leaderProps = getLeaderUrlFromZk("unloadcollection", "shard1");
-    try (SolrClient collectionClient = 
newSolrClient(leaderProps.getBaseUrl())) {
+    leader = getLeaderFromZk("unloadcollection", "shard1");
+    try (SolrClient collectionClient = newSolrClient(leader.getBaseUrl())) {
 
       Unload unloadCmd = new Unload(false);
-      unloadCmd.setCoreName(leaderProps.getCoreName());
+      unloadCmd.setCoreName(leader.getCoreName());
       collectionClient.request(unloadCmd);
     }
     tries = 50;
-    while (leaderProps
+    while (leader
         .getCoreUrl()
         .equals(zkStateReader.getLeaderUrl("unloadcollection", "shard1", 
15000))) {
       Thread.sleep(100);
@@ -363,9 +362,9 @@ public abstract class AbstractUnloadDistributedZkTestBase 
extends AbstractFullDi
     TestInjection.skipIndexWriterCommitOnClose = false; // set this back
     assertTrue(
         CollectionAdminRequest.addReplicaToShard("unloadcollection", "shard1")
-            .setCoreName(leaderProps.getCoreName())
+            .setCoreName(leader.getCoreName())
             .setDataDir(core1DataDir)
-            .setNode(leaderProps.getNodeName())
+            .setNode(leader.getNodeName())
             .process(cloudClient)
             .isSuccess());
 
diff --git 
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
 
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
index 0a2a7ae6099..fd984b244f5 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/cloud/api/collections/AbstractCollectionsAPIDistributedZkTestBase.java
@@ -54,7 +54,6 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.CollectionParams.CollectionAction;
 import org.apache.solr.common.params.CoreAdminParams;
@@ -565,13 +564,12 @@ public abstract class 
AbstractCollectionsAPIDistributedZkTestBase extends SolrCl
     if (collectionState != null) {
       for (Slice shard : collectionState) {
         for (Replica replica : shard) {
-          ZkCoreNodeProps coreProps = new ZkCoreNodeProps(replica);
           CoreStatusResponse.SingleCoreData coreStatus;
-          try (SolrClient server = getHttpSolrClient(coreProps.getBaseUrl())) {
-            coreStatus = 
CoreAdminRequest.getCoreStatus(coreProps.getCoreName(), false, server);
+          try (SolrClient server = getHttpSolrClient(replica.getBaseUrl())) {
+            coreStatus = CoreAdminRequest.getCoreStatus(replica.getCoreName(), 
false, server);
           }
           long before = coreStatus.startTime.getTime();
-          urlToTime.put(coreProps.getCoreUrl(), before);
+          urlToTime.put(replica.getCoreUrl(), before);
         }
       }
     } else {
diff --git 
a/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java
 
b/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java
index d7bfc961b77..d8c1e039f78 100644
--- 
a/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java
+++ 
b/solr/test-framework/src/java/org/apache/solr/handler/component/TrackingShardHandlerFactory.java
@@ -27,7 +27,6 @@ import org.apache.solr.cloud.MiniSolrCloudCluster;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.StrUtils;
@@ -273,7 +272,7 @@ public class TrackingShardHandlerFactory extends 
HttpShardHandlerFactory {
         // multiple shard addresses may be present separated by '|'
         List<String> list = StrUtils.splitSmart(entry.getKey(), '|');
         for (Map.Entry<String, Replica> replica : 
slice.getReplicasMap().entrySet()) {
-          String coreUrl = new 
ZkCoreNodeProps(replica.getValue()).getCoreUrl();
+          String coreUrl = replica.getValue().getCoreUrl();
           if (list.contains(coreUrl)) {
             return new ArrayList<>(entry.getValue());
           }

Reply via email to