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

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


The following commit(s) were added to refs/heads/branch_10x by this push:
     new 7cd6a2184c8 SOLR-17995: Deprecate "core URL" SolrStream constructors 
(#4830)
7cd6a2184c8 is described below

commit 7cd6a2184c8386f402a8be33cb8845f209bcc604
Author: Jason Gerlowski <[email protected]>
AuthorDate: Fri Sep 4 08:56:02 2026 -0400

    SOLR-17995: Deprecate "core URL" SolrStream constructors (#4830)
---
 .../SOLR-17995-solrstream-coreUrl-removal.yml      |  13 ++
 .../client/solrj/io/stream/CloudSolrStream.java    |  11 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |   6 +-
 .../client/solrj/io/stream/ParallelStream.java     |   8 +-
 .../solr/client/solrj/io/stream/SolrStream.java    |   6 +-
 .../solr/client/solrj/io/stream/SqlStream.java     |   5 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |   6 +-
 .../solrj/io/stream/CloudAuthStreamTest.java       |  64 +++++--
 .../solrj/io/stream/StreamExpressionTest.java      | 204 +++++++++++++--------
 .../solr/client/solrj/io/stream/StreamingTest.java |   8 +-
 10 files changed, 223 insertions(+), 108 deletions(-)

diff --git a/changelog/unreleased/SOLR-17995-solrstream-coreUrl-removal.yml 
b/changelog/unreleased/SOLR-17995-solrstream-coreUrl-removal.yml
new file mode 100644
index 00000000000..af00755a93e
--- /dev/null
+++ b/changelog/unreleased/SOLR-17995-solrstream-coreUrl-removal.yml
@@ -0,0 +1,13 @@
+# See https://github.com/apache/solr/blob/main/dev-docs/changelog.adoc
+
+title: >
+  Deprecated the `SolrStream` constructors that accept a "core URL" (e.g.
+  `SolrStream(String collectionOrCoreUrl, SolrParams params)` and
+  `SolrStream(String collectionOrCoreUrl, String path, SolrParams params)`). 
Use one of the
+  "base URL" constructors instead, which take the core/collection name as a 
separate parameter.
+type: deprecated
+authors:
+  - name: Jason Gerlowski
+links:
+  - name: SOLR-17995
+    url: https://issues.apache.org/jira/browse/SOLR-17995
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
index b721788f37f..5f16e7348b2 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
@@ -55,6 +55,7 @@ import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.URLUtil;
 
 /**
  * Connects to Zookeeper to pick replicas from a specific collection to send 
the query to. Under the
@@ -410,7 +411,15 @@ public class CloudSolrStream extends TupleStream 
implements Expressible {
             getShards(this.solrConnection, this.collection, 
this.streamContext, mParams);
         if (shards.isEmpty())
           throw new IOException("No shards available from ZooKeeper: " + 
this.solrConnection);
-        streamOfSolrStream = shards.stream().map(s -> new SolrStream(s, path, 
mParams));
+        streamOfSolrStream =
+            shards.stream()
+                .map(
+                    s ->
+                        new SolrStream(
+                            URLUtil.extractBaseUrl(s),
+                            URLUtil.extractCoreFromCoreUrl(s),
+                            path,
+                            mParams));
       } else {
         // stream of replicas to reuse the same SolrHttpClient per baseUrl
         // avoids re-parsing data we already have in the replicas
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
index ffd4edbe70a..8c44fb45d29 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
@@ -50,6 +50,7 @@ import 
org.apache.solr.client.solrj.io.stream.expr.StreamExpressionValue;
 import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.URLUtil;
 
 /**
  * Connects to Zookeeper to pick replicas from a specific collection to send 
the query to. Under the
@@ -295,8 +296,9 @@ public class DeepRandomStream extends TupleStream 
implements Expressible {
         } else {
           useParams = mParams;
         }
-
-        SolrStream solrStream = new SolrStream(shardUrl, useParams);
+        final var baseUrl = URLUtil.extractBaseUrl(shardUrl);
+        final var core = URLUtil.extractCoreFromCoreUrl(shardUrl);
+        SolrStream solrStream = new SolrStream(baseUrl, useParams, core);
         if (streamContext != null) {
           solrStream.setStreamContext(streamContext);
         }
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/ParallelStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/ParallelStream.java
index 0b34ef954bc..3ef41e6bece 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/ParallelStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/ParallelStream.java
@@ -36,6 +36,7 @@ import 
org.apache.solr.client.solrj.io.stream.expr.StreamExpressionNamedParamete
 import org.apache.solr.client.solrj.io.stream.expr.StreamExpressionValue;
 import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.URLUtil;
 
 /**
  * The ParallelStream decorates a TupleStream implementation and pushes it to 
N workers for parallel
@@ -299,7 +300,12 @@ public class ParallelStream extends CloudSolrStream 
implements Expressible {
         paramsLoc.set("expr", pushStream.toString());
 
         String url = shardUrls.get(w);
-        SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+        SolrStream solrStream =
+            new SolrStream(
+                URLUtil.extractBaseUrl(url),
+                URLUtil.extractCoreFromCoreUrl(url),
+                "/stream",
+                paramsLoc);
         solrStream.setStreamContext(streamContext);
         solrStreams.add(solrStream);
       }
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SolrStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SolrStream.java
index ff1d9ecf950..3b5e4b2164a 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SolrStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SolrStream.java
@@ -69,13 +69,13 @@ public class SolrStream extends TupleStream {
   private transient SolrClientCache clientCache;
   private transient boolean doCloseCache;
 
-  // TODO SOLR-17995 proposes that we should deprecate this constructor in 
favor of one of the other
-  // constructors that requires users to provide the core as an explicit 
parameter
   /**
    * @param collectionOrCoreUrl URL of the Solr core or collection to query, 
typically of the form
    *     "http://host:8983/solr/myCore";.
    * @param params query-parameters sent with the streaming request
+   * @deprecated Use base URL constructor instead.
    */
+  @Deprecated(since = "10.1")
   public SolrStream(String collectionOrCoreUrl, SolrParams params) {
     this.baseUrl = collectionOrCoreUrl;
     this.params = params;
@@ -89,7 +89,9 @@ public class SolrStream extends TupleStream {
    * @param path the request handler path to query (e.g. "/export"). If not 
provided, defaults to
    *     "/select".
    * @param params query-parameters sent with the streaming request
+   * @deprecated Use base URL constructor instead.
    */
+  @Deprecated(since = "10.1")
   public SolrStream(String collectionOrCoreUrl, String path, SolrParams 
params) {
     this(collectionOrCoreUrl, null, path, params);
   }
diff --git 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
index 442ed2fc224..334acc0f7f8 100644
--- 
a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
+++ 
b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
@@ -37,6 +37,7 @@ import 
org.apache.solr.client.solrj.io.stream.expr.StreamExpressionNamedParamete
 import org.apache.solr.client.solrj.io.stream.expr.StreamFactory;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.URLUtil;
 
 /**
  * @since 7.0.0
@@ -194,7 +195,9 @@ public class SqlStream extends TupleStream implements 
Expressible {
       Collections.shuffle(shardUrls, new Random());
       String url = shardUrls.get(0);
       ModifiableSolrParams mParams = new ModifiableSolrParams(params);
-      this.tupleStream = new SolrStream(url, "/sql", mParams);
+      this.tupleStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(url), 
URLUtil.extractCoreFromCoreUrl(url), "/sql", mParams);
       if (streamContext != null) {
         tupleStream.setStreamContext(streamContext);
         if (streamContext.isLocal()) {
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 797e80a91c3..e3cc5ea12ec 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
@@ -420,8 +420,7 @@ public class TopicStream extends CloudSolrStream implements 
Expressible {
     params.set("rows", 1);
     for (Replica replica : replicas) {
       if (replica.getState() == Replica.State.ACTIVE && 
liveNodes.contains(replica.getNodeName())) {
-        String coreUrl = replica.getCoreUrl();
-        SolrStream solrStream = new SolrStream(coreUrl, params);
+        SolrStream solrStream = new SolrStream(replica.getBaseUrl(), params, 
replica.getCoreName());
 
         if (streamContext != null) {
           StreamContext localContext = new StreamContext();
@@ -534,8 +533,7 @@ public class TopicStream extends CloudSolrStream implements 
Expressible {
       }
 
       Replica rep = shuffler.get(random.nextInt(shuffler.size()));
-      String url = rep.getCoreUrl();
-      SolrStream solrStream = new SolrStream(url, localParams);
+      SolrStream solrStream = new SolrStream(rep.getBaseUrl(), localParams, 
rep.getCoreName());
       solrStream.setSlice(slice.getName());
       solrStream.setCheckpoint(checkpoint);
       solrStream.setTrace(true);
diff --git 
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
 
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
index 6bd61e22426..7e3808e4f85 100644
--- 
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
+++ 
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/CloudAuthStreamTest.java
@@ -351,7 +351,8 @@ public class CloudAuthStreamTest extends SolrCloudTestCase {
     { // WRITE_X user should be able to update X via a (dummy) stream from Y...
       final SolrStream solrStream =
           new SolrStream(
-              solrUrl + "/" + COLLECTION_Y,
+              solrUrl,
+              COLLECTION_Y,
               "/stream",
               params(
                   "expr",
@@ -429,10 +430,11 @@ public class CloudAuthStreamTest extends 
SolrCloudTestCase {
   public void testIndirectUpdateStreamInsufficientCredentials() throws 
Exception {
 
     // regardless of how it's routed, WRITE_Y should NOT have authz to stream 
updates to X...
-    for (String path : Arrays.asList(COLLECTION_X, COLLECTION_Y)) {
+    for (String coll : Arrays.asList(COLLECTION_X, COLLECTION_Y)) {
       final SolrStream solrStream =
           new SolrStream(
-              solrUrl + "/" + path,
+              solrUrl,
+              coll,
               "/stream",
               params(
                   "expr",
@@ -502,8 +504,10 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
   }
 
   public void testDaemonUpdateStream() throws Exception {
-    final String daemonUrl = getRandomCoreUrl(COLLECTION_X);
-    log.info("Using Daemon @ {}", daemonUrl);
+    final Replica daemonReplica = getRandomReplica(COLLECTION_X);
+    if (log.isInfoEnabled()) {
+      log.info("Using Daemon @ {}", daemonReplica.getCoreUrl());
+    }
 
     {
       // NOTE: in spite of what is implied by 'terminate=true', this daemon 
will NEVER terminate on
@@ -513,7 +517,12 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
           "daemon(id=daemonId,runInterval=1000,terminate=true,update("
               + COLLECTION_X
               + ",tuple(id=42,a_i=1,b_i=5)))";
-      final SolrStream solrStream = new SolrStream(daemonUrl, "/stream", 
params("expr", expr));
+      final SolrStream solrStream =
+          new SolrStream(
+              daemonReplica.getBaseUrl(),
+              daemonReplica.getCoreName(),
+              "/stream",
+              params("expr", expr));
       solrStream.setCredentials(WRITE_X_USER, passwordFor(WRITE_X_USER));
       final List<Tuple> tuples = getTuples(solrStream);
       assertEquals(1, tuples.size()); // daemon starting status
@@ -524,7 +533,11 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
       final TimeOut timeout = new TimeOut(60, TimeUnit.SECONDS, 
TimeSource.NANO_TIME);
       while (!timeout.hasTimedOut()) {
         final SolrStream daemonCheck =
-            new SolrStream(daemonUrl, "/stream", params("action", "list"));
+            new SolrStream(
+                daemonReplica.getBaseUrl(),
+                daemonReplica.getCoreName(),
+                "/stream",
+                params("action", "list"));
         daemonCheck.setCredentials(WRITE_X_USER, passwordFor(WRITE_X_USER));
         final List<Tuple> tuples = getTuples(daemonCheck);
         assertEquals(1, tuples.size()); // our daemon;
@@ -541,7 +554,11 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
     } finally {
       // kill the damon...
       final SolrStream daemonKiller =
-          new SolrStream(daemonUrl, "/stream", params("action", "kill", "id", 
"daemonId"));
+          new SolrStream(
+              daemonReplica.getBaseUrl(),
+              daemonReplica.getCoreName(),
+              "/stream",
+              params("action", "kill", "id", "daemonId"));
       daemonKiller.setCredentials(WRITE_X_USER, passwordFor(WRITE_X_USER));
       final List<Tuple> tuples = getTuples(daemonKiller);
       assertEquals(1, tuples.size()); // daemon death status
@@ -551,8 +568,10 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
   }
 
   public void testDaemonUpdateStreamInsufficientCredentials() throws Exception 
{
-    final String daemonUrl = getRandomCoreUrl(COLLECTION_X);
-    log.info("Using Daemon @ {}", daemonUrl);
+    final Replica daemonReplica = getRandomReplica(COLLECTION_X);
+    if (log.isInfoEnabled()) {
+      log.info("Using Daemon @ {}", daemonReplica.getCoreUrl());
+    }
 
     // both of these users have valid credentials and authz read COLLECTION_X, 
but neither has
     // authz to write to X...
@@ -568,7 +587,10 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
                 + ",tuple(id=42,a_i=1,b_i=5)))     ";
         final SolrStream solrStream =
             new SolrStream(
-                daemonUrl, "/stream", params("_trace", "start_" + daemonId, 
"expr", expr));
+                daemonReplica.getBaseUrl(),
+                daemonReplica.getCoreName(),
+                "/stream",
+                params("_trace", "start_" + daemonId, "expr", expr));
         solrStream.setCredentials(user, passwordFor(user));
         final List<Tuple> tuples = getTuples(solrStream);
         assertEquals(1, tuples.size()); // daemon starting status
@@ -580,7 +602,10 @@ public class CloudAuthStreamTest extends SolrCloudTestCase 
{
         while (!timeout.hasTimedOut()) {
           final SolrStream daemonCheck =
               new SolrStream(
-                  daemonUrl, "/stream", params("_trace", "check_" + daemonId, 
"action", "list"));
+                  daemonReplica.getBaseUrl(),
+                  daemonReplica.getCoreName(),
+                  "/stream",
+                  params("_trace", "check_" + daemonId, "action", "list"));
           daemonCheck.setCredentials(user, passwordFor(user));
           final List<Tuple> tuples = getTuples(daemonCheck);
           assertEquals(1, tuples.size()); // our daemon;
@@ -604,7 +629,8 @@ public class CloudAuthStreamTest extends SolrCloudTestCase {
         // kill the damon...
         final SolrStream daemonKiller =
             new SolrStream(
-                daemonUrl,
+                daemonReplica.getBaseUrl(),
+                daemonReplica.getCoreName(),
                 "/stream",
                 params("_trace", "kill_" + daemonId, "action", "kill", "id", 
daemonId));
         daemonKiller.setCredentials(user, passwordFor(user));
@@ -765,7 +791,8 @@ public class CloudAuthStreamTest extends SolrCloudTestCase {
     { // WRITE_X user should be able to delete X via a (dummy) stream from Y...
       final SolrStream solrStream =
           new SolrStream(
-              solrUrl + "/" + COLLECTION_Y,
+              solrUrl,
+              COLLECTION_Y,
               "/stream",
               params("expr", "delete(" + COLLECTION_X + ",batchSize=1," + 
"tuple(id=42z))"));
       solrStream.setCredentials(WRITE_X_USER, passwordFor(WRITE_X_USER));
@@ -921,16 +948,15 @@ public class CloudAuthStreamTest extends 
SolrCloudTestCase {
   }
 
   /** Sigh. DaemonStream requires polling the same core where the stream was 
executed. */
-  protected static String getRandomCoreUrl(final String collection) {
-    final List<String> replicaUrls =
+  protected static Replica getRandomReplica(final String collection) {
+    final List<Replica> replicas =
         cluster
             .getZkStateReader()
             .getClusterState()
             .getCollectionOrNull(collection)
             .replicaStream()
-            .map(Replica::getCoreUrl)
             .collect(Collectors.toList());
-    Collections.shuffle(replicaUrls, random());
-    return replicaUrls.get(0);
+    Collections.shuffle(replicas, random());
+    return replicas.get(0);
   }
 }
diff --git 
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
 
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
index 1ec315c8da3..11bfe63ae0a 100644
--- 
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
+++ 
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamExpressionTest.java
@@ -59,6 +59,7 @@ import 
org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.URLUtil;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.embedded.JettySolrRunner;
 import org.junit.Assume;
@@ -309,7 +310,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
 
       ModifiableSolrParams solrParams = new ModifiableSolrParams();
       solrParams.add("expr", "sort(search(" + COLLECTIONORALIAS + "), by=\"a_i 
asc\")");
-      SolrStream solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParams);
+      SolrStream solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(5, tuples.size());
@@ -343,7 +349,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
           "sort(search("
               + COLLECTIONORALIAS
               + ", q=\"*:*\", fl=\"id,a_i\", sort=\"a_i asc\", 
partitionKeys=\"id\", qt=\"/export\"), by=\"a_i asc\")");
-      solrStream = new SolrStream(shardUrls.get(0), "/stream", solrParams);
+      solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(5, tuples.size());
@@ -387,7 +398,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       solrParams.add(
           "expr",
           "sql(" + COLLECTIONORALIAS + ", stmt=\"select id from collection1 
order by a_i asc\")");
-      SolrStream solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParams);
+      SolrStream solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(5, tuples.size());
@@ -396,7 +412,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       // Test with using the default collection
       solrParams = new ModifiableSolrParams();
       solrParams.add("expr", "sql(stmt=\"select id from collection1 order by 
a_i asc\")");
-      solrStream = new SolrStream(shardUrls.get(0), "/stream", solrParams);
+      solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(5, tuples.size());
@@ -519,8 +540,7 @@ public class StreamExpressionTest extends SolrCloudTestCase 
{
           .add(id, "1", "a_s", "hello1", "a_i", "1", "a_f", "1")
           .commit(cluster.getSolrClient(), COLLECTIONORALIAS);
 
-      String url =
-          cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
+      String url = 
cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
       List<Tuple> tuples;
       TupleStream stream;
 
@@ -536,7 +556,7 @@ public class StreamExpressionTest extends SolrCloudTestCase 
{
           "q2",
           "search(" + COLLECTIONORALIAS + ", q=\"id:(1)\", 
fl=\"id,a_s,a_i,a_f\", sort=${mySort})");
       sParams.set("mySort", "a_f asc");
-      stream = new SolrStream(url, "/stream", sParams);
+      stream = new SolrStream(url, COLLECTIONORALIAS, "/stream", sParams);
       tuples = getTuples(stream);
 
       assertEquals(4, tuples.size());
@@ -544,7 +564,7 @@ public class StreamExpressionTest extends SolrCloudTestCase 
{
 
       // Basic test desc
       sParams.set("mySort", "a_f desc");
-      stream = new SolrStream(url, "/stream", sParams);
+      stream = new SolrStream(url, COLLECTIONORALIAS, "/stream", sParams);
       tuples = getTuples(stream);
 
       assertEquals(4, tuples.size());
@@ -557,7 +577,7 @@ public class StreamExpressionTest extends SolrCloudTestCase 
{
               + COLLECTIONORALIAS
               + ", q=\"id:(1 2)\", fl=\"id,a_s,a_i,a_f\", sort=${mySort})");
       sParams.set("mySort", "\"a_f asc, a_s asc\"");
-      stream = new SolrStream(url, "/stream", sParams);
+      stream = new SolrStream(url, COLLECTIONORALIAS, "/stream", sParams);
       tuples = getTuples(stream);
 
       assertEquals(5, tuples.size());
@@ -1061,7 +1081,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       ModifiableSolrParams solrParams = new ModifiableSolrParams();
       solrParams.add("expr", expr);
       solrParams.add("myCollection.shards", buf.toString());
-      SolrStream solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParams);
+      SolrStream solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       tuples = getTuples(solrStream);
       assertEquals(1, tuples.size());
 
@@ -1091,7 +1116,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       try {
         ModifiableSolrParams solrParamsBad = new ModifiableSolrParams();
         solrParamsBad.add("expr", expr);
-        solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParamsBad);
+        solrStream =
+            new SolrStream(
+                URLUtil.extractBaseUrl(shardUrls.get(0)),
+                URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+                "/stream",
+                solrParamsBad);
         tuples = getTuples(solrStream);
         throw new Exception("Exception should have been thrown above");
       } catch (IOException e) {
@@ -1125,9 +1155,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
         "facet2D(collection1, q=\"*:*\", x=\"diseases_s\", y=\"symptoms_s\", 
dimensions=\"3,1\", count(*))";
     paramsLoc.set("expr", expr);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -1154,7 +1183,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     expr = "facet2D(collection1, x=\"diseases_s\", y=\"symptoms_s\", 
dimensions=\"3,1\")";
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -1182,7 +1211,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
         "facet2D(collection1, q=\"*:*\", x=\"diseases_s\", y=\"symptoms_s\", 
dimensions=\"3,1\", sum(cases_i))";
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -1210,7 +1239,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
         "facet2D(collection1, q=\"*:*\", x=\"diseases_s\", y=\"symptoms_s\", 
dimensions=\"3,1\", avg(cases_i))";
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -1238,7 +1267,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
         "facet2D(collection1, q=\"*:*\", x=\"diseases_s\", y=\"symptoms_s\", 
dimensions=\"2,2\")";
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -2236,7 +2265,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       solrParams.add(
           "expr",
           "search(\"collection1, collection2\", q=\"*:*\", fl=\"id, a_i\", 
rows=50, sort=\"a_i asc\")");
-      SolrStream solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParams);
+      SolrStream solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(10, tuples.size());
@@ -2248,7 +2282,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       solrParams.add(
           "expr",
           "search(\"collection1, collection2\", q=\"*:*\", fl=\"id, a_i\", 
sort=\"a_i asc\", path=\"/export\")");
-      solrStream = new SolrStream(shardUrls.get(0), "/stream", solrParams);
+      solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(10, tuples.size());
@@ -2258,7 +2297,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       solrParams.add(
           "expr",
           "facet(\"collection1, collection2\", q=\"*:*\", buckets=\"a_s\", 
bucketSorts=\"count(*) asc\", count(*))");
-      solrStream = new SolrStream(shardUrls.get(0), "/stream", solrParams);
+      solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(1, tuples.size());
@@ -2277,7 +2321,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
 
       solrParams = new ModifiableSolrParams();
       solrParams.add("expr", expr);
-      solrStream = new SolrStream(shardUrls.get(0), "/stream", solrParams);
+      solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(1, tuples.size());
@@ -2291,7 +2340,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       solrParams.add(
           "expr",
           "parallel(collection1, sort=\"a_i asc\", workers=2, 
search(\"collection1, collection2\", q=\"*:*\", fl=\"id, a_i\", sort=\"a_i 
asc\", path=\"/export\", partitionKeys=\"a_s\"))");
-      solrStream = new SolrStream(shardUrls.get(0), "/stream", solrParams);
+      solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);
       assertEquals(10, tuples.size());
@@ -2941,9 +2995,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -2956,7 +3009,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -2968,7 +3021,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -2980,7 +3033,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -2996,7 +3049,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3012,7 +3065,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3038,9 +3091,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -3142,9 +3194,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -3214,7 +3265,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3268,7 +3319,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3322,7 +3373,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3385,7 +3436,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3563,7 +3614,7 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    solrStream = new SolrStream(url, "/stream", paramsLoc);
+    solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", paramsLoc);
 
     solrStream.setStreamContext(context);
     tuples = getTuples(solrStream);
@@ -3625,9 +3676,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", cat);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -3656,9 +3706,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -3682,9 +3731,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc2 = new ModifiableSolrParams();
     paramsLoc2.set("expr", expr2);
 
-    String url2 =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream2 = new SolrStream(url2, "/stream", paramsLoc2);
+    String url2 = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream2 = new SolrStream(url2, COLLECTIONORALIAS, 
"/stream", paramsLoc2);
 
     StreamContext context2 = new StreamContext();
     solrStream2.setStreamContext(context2);
@@ -4080,7 +4128,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       ModifiableSolrParams solrParams = new ModifiableSolrParams();
       solrParams.add("expr", significantTerms);
       solrParams.add("myCollection.shards", buf.toString());
-      SolrStream solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParams);
+      SolrStream solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       tuples = getTuples(solrStream);
       assertEquals(2, tuples.size());
 
@@ -4097,7 +4150,12 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
       try {
         ModifiableSolrParams solrParamsBad = new ModifiableSolrParams();
         solrParamsBad.add("expr", significantTerms);
-        solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParamsBad);
+        solrStream =
+            new SolrStream(
+                URLUtil.extractBaseUrl(shardUrls.get(0)),
+                URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+                "/stream",
+                solrParamsBad);
         tuples = getTuples(solrStream);
         throw new Exception("Exception should have been thrown above");
       } catch (IOException e) {
@@ -4196,10 +4254,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     final String catStream = "cat(\"topLevel1.txt\")";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4218,10 +4275,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     final String catStream = "cat(\"topLevel1.txt.gz\")";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4240,10 +4296,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     final String catStream = "cat(\"topLevel-empty.txt\")";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4257,10 +4312,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     final String catStream = "cat(\"topLevel1.txt,topLevel-empty.txt\")";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4280,10 +4334,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     final String catStream = "cat(\"topLevel1.txt\", maxLines=2)";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4302,10 +4355,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     final String catStream = "cat(\"directory1\")";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4335,10 +4387,9 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
             + "secondLevel2.txt\")";
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", catStream);
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
FILESTREAM_COLLECTION;
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
 
-    SolrStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    SolrStream solrStream = new SolrStream(url, FILESTREAM_COLLECTION, 
"/stream", paramsLoc);
 
     StreamContext context = new StreamContext();
     solrStream.setStreamContext(context);
@@ -4363,9 +4414,8 @@ public class StreamExpressionTest extends 
SolrCloudTestCase {
     ModifiableSolrParams paramsLoc = new ModifiableSolrParams();
     paramsLoc.set("expr", expr);
 
-    String url =
-        cluster.getJettySolrRunners().get(0).getBaseUrl().toString() + "/" + 
COLLECTIONORALIAS;
-    TupleStream solrStream = new SolrStream(url, "/stream", paramsLoc);
+    String url = cluster.getJettySolrRunners().get(0).getBaseUrl().toString();
+    TupleStream solrStream = new SolrStream(url, COLLECTIONORALIAS, "/stream", 
paramsLoc);
     solrStream.setStreamContext(streamContext);
     getTuples(solrStream);
   }
diff --git 
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
 
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
index d4e50c00fb0..66f4967efae 100644
--- 
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
+++ 
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
@@ -64,6 +64,7 @@ import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.ShardParams;
 import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.URLUtil;
 import org.apache.solr.embedded.JettySolrRunner;
 import org.junit.Assume;
 import org.junit.Before;
@@ -2130,7 +2131,12 @@ public class StreamingTest extends SolrCloudTestCase {
           "rollup(search("
               + COLLECTIONORALIAS
               + ",q=\"*:*\",fl=\"a_s,a_i,a_f,b_f\",sort=\"a_s 
asc\",partitionKeys=\"a_s\", 
path=\"/export\"),over=\"a_s\",sum(a_i),sum(a_f),min(a_i),min(a_f),max(a_i),max(a_f),avg(a_i),avg(a_f),count(*),missing(b_f))\n");
-      SolrStream solrStream = new SolrStream(shardUrls.get(0), "/stream", 
solrParams);
+      SolrStream solrStream =
+          new SolrStream(
+              URLUtil.extractBaseUrl(shardUrls.get(0)),
+              URLUtil.extractCoreFromCoreUrl(shardUrls.get(0)),
+              "/stream",
+              solrParams);
       streamContext = new StreamContext();
       solrStream.setStreamContext(streamContext);
       tuples = getTuples(solrStream);

Reply via email to