You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ho...@apache.org on 2023/05/23 19:50:50 UTC

[solr] branch branch_9x updated: SOLR-9378: Internal shard requests no longer include the wasteful shard.url param.

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

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


The following commit(s) were added to refs/heads/branch_9x by this push:
     new f4c541a94b7 SOLR-9378: Internal shard requests no longer include the wasteful shard.url param.
f4c541a94b7 is described below

commit f4c541a94b7a579eeacc3b4b7fc9dd5a9db346a0
Author: Chris Hostetter <ho...@apache.org>
AuthorDate: Tue May 23 09:49:03 2023 -0700

    SOLR-9378: Internal shard requests no longer include the wasteful shard.url param.
    
    [shard] transformer now defaults to returning only the shard id (based on luceneMatchVersion), but can be configured to return the legacy list of replicas.
    
    (cherry picked from commit 7a55ce3852f0d58e02eb5f532b2a8c693d65ff4f)
---
 solr/CHANGES.txt                                   |  3 +
 .../solr/handler/component/HttpShardHandler.java   | 12 +--
 .../solr/handler/component/SearchHandler.java      |  2 +-
 .../handler/component/TaskManagementHandler.java   |  2 +-
 .../response/transform/ShardAugmenterFactory.java  | 79 ++++++++++++++++--
 .../apache/solr/cloud/TestCloudDeleteByQuery.java  |  9 +-
 .../solr/cloud/TestCloudPseudoReturnFields.java    | 97 ++++++++++++++++++++--
 .../cloud/TestTolerantUpdateProcessorCloud.java    |  9 +-
 .../handler/component/ShardsAllowListTest.java     |  2 -
 .../query-guide/pages/document-transformers.adoc   | 14 +++-
 .../solr/common/params/ModifiableSolrParams.java   |  3 +-
 .../org/apache/solr/common/params/ShardParams.java |  9 +-
 .../common/params/ModifiableSolrParamsTest.java    |  4 +-
 .../apache/solr/common/params/ShardParamsTest.java |  4 -
 14 files changed, 196 insertions(+), 53 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 13e8ccdbeec..8258c21b5cd 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -96,6 +96,9 @@ Improvements
 
 * SOLR-16759: Introducing logAll parameter in the feature logger (Anna Ruggero, Alessandro Benedetti)
 
+* SOLR-9378: Internal shard requests no longer include the wasteful shard.url param.  [shard] transformer now defaults to returning 
+  only the shard id (based on luceneMatchVersion), but can be configured to return the legacy list of replicas. (hossman)
+
 Optimizations
 ---------------------
 
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
index 7135b599a8e..0ad76294335 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
@@ -367,17 +367,7 @@ public class HttpShardHandler extends ShardHandler {
   }
 
   private static String createSliceShardsStr(final List<String> shardUrls) {
-    final StringBuilder sliceShardsStr = new StringBuilder();
-    boolean first = true;
-    for (String shardUrl : shardUrls) {
-      if (first) {
-        first = false;
-      } else {
-        sliceShardsStr.append('|');
-      }
-      sliceShardsStr.append(shardUrl);
-    }
-    return sliceShardsStr.toString();
+    return String.join("|", shardUrls);
   }
 
   private boolean canShortCircuit(
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
index fb84bb827de..73cb880a7fc 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
@@ -498,7 +498,7 @@ public class SearchHandler extends RequestHandlerBase
             // TODO: map from shard to address[]
             for (String shard : sreq.actualShards) {
               ModifiableSolrParams params = new ModifiableSolrParams(sreq.params);
-              params.setShardAttributesToParams(sreq.purpose, shard);
+              params.setShardAttributesToParams(sreq.purpose);
 
               // Distributed request -- need to send queryID as a part of the distributed request
               params.setNonNull(ShardParams.QUERY_ID, rb.queryID);
diff --git a/solr/core/src/java/org/apache/solr/handler/component/TaskManagementHandler.java b/solr/core/src/java/org/apache/solr/handler/component/TaskManagementHandler.java
index 43b3cdf0e9b..8986bd86cbc 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/TaskManagementHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/TaskManagementHandler.java
@@ -79,7 +79,7 @@ public abstract class TaskManagementHandler extends RequestHandlerBase
         String reqPath = (String) req.getContext().get(PATH);
 
         params.set(CommonParams.QT, reqPath);
-        params.setShardAttributesToParams(sreq.purpose, shard);
+        params.setShardAttributesToParams(sreq.purpose);
 
         if (extraParams != null) {
           for (Map.Entry<String, String> entry : extraParams.entrySet()) {
diff --git a/solr/core/src/java/org/apache/solr/response/transform/ShardAugmenterFactory.java b/solr/core/src/java/org/apache/solr/response/transform/ShardAugmenterFactory.java
index 8cb9c5330d7..92066ba4204 100644
--- a/solr/core/src/java/org/apache/solr/response/transform/ShardAugmenterFactory.java
+++ b/solr/core/src/java/org/apache/solr/response/transform/ShardAugmenterFactory.java
@@ -16,24 +16,85 @@
  */
 package org.apache.solr.response.transform;
 
-import org.apache.solr.common.params.ShardParams;
+import java.util.Locale;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.apache.lucene.util.Version;
+import org.apache.solr.cloud.CloudDescriptor;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.cloud.Replica;
+import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 
 /**
  * @since solr 4.0
  */
 public class ShardAugmenterFactory extends TransformerFactory {
+  protected enum Style {
+    URLS,
+    ID;
+
+    public static Optional<Style> getStyle(final String s) {
+      if (null == s || s.trim().isEmpty()) {
+        return Optional.empty();
+      }
+      try {
+        return Optional.of(Style.valueOf(s.toUpperCase(Locale.ROOT)));
+      } catch (Exception e) {
+        throw new SolrException(ErrorCode.BAD_REQUEST, "Unknown [shard] style: " + s);
+      }
+    }
+  }
+
+  protected Optional<Style> configuredDefaultStyle = Optional.empty();
+
+  @Override
+  public void init(NamedList<?> args) {
+    super.init(args);
+    if (defaultUserArgs != null) {
+      configuredDefaultStyle = Style.getStyle(defaultUserArgs);
+    }
+  }
+
   @Override
   public DocTransformer create(String field, SolrParams params, SolrQueryRequest req) {
-    String v = req.getParams().get(ShardParams.SHARD_URL);
-    if (v == null) {
-      if (req.getParams().getBool(ShardParams.IS_SHARD, false)) {
-        v = "[unknown]";
-      } else {
-        v = "[not a shard request]";
-      }
+
+    final SolrCore core = req.getCore();
+    if (!core.getCoreContainer().isZooKeeperAware()) {
+      return new ValueAugmenterFactory.ValueAugmenter(field, "[not a shard request]");
+    }
+
+    final CloudDescriptor cd = core.getCoreDescriptor().getCloudDescriptor();
+    if (null == cd) { // Not sure if these can even happen?
+      return new ValueAugmenterFactory.ValueAugmenter(field, "[unknown]");
     }
-    return new ValueAugmenterFactory.ValueAugmenter(field, v);
+
+    final Style style =
+        Style.getStyle(params.get("style", ""))
+            .or(() -> configuredDefaultStyle)
+            .orElse( // if not cnfigured at init, default Style driven by luceneMatchVersion
+                core.getSolrConfig().luceneMatchVersion.onOrAfter(Version.LUCENE_9_5_0)
+                    ? Style.ID
+                    : Style.URLS);
+
+    final String shardId = cd.getShardId();
+    if (style == Style.ID) {
+      return new ValueAugmenterFactory.ValueAugmenter(field, shardId);
+    }
+
+    final Slice slice =
+        req.getCore()
+            .getCoreContainer()
+            .getZkController()
+            .getClusterState()
+            .getCollection(cd.getCollectionName())
+            .getSlice(shardId);
+    final String urls =
+        slice.getReplicas().stream().map(Replica::getCoreUrl).collect(Collectors.joining("|"));
+    return new ValueAugmenterFactory.ValueAugmenter(field, urls);
   }
 }
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
index 90994febb24..d52525f5111 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudDeleteByQuery.java
@@ -199,20 +199,19 @@ public class TestCloudDeleteByQuery extends SolrCloudTestCase {
     assertEquals(2, docs.getNumFound());
     assertEquals(2, docs.size());
     for (SolrDocument doc : docs) {
-      String expected = COLLECTION_NAME + "_" + doc.getFirstValue("expected_shard_s") + "_replica";
+      String expected = doc.getFirstValue("expected_shard_s").toString();
       String docShard = doc.getFirstValue("[shard]").toString();
       assertTrue(
           "shard routing prefixes don't seem to be aligned anymore, "
               + "did someone change the default routing rules? "
-              + "and/or the the default core name rules? "
+              + "and/or the the default shard name rules? "
               + "and/or the numShards used by this test? ... "
-              + "couldn't find "
               + expected
-              + " as substring of [shard] == '"
+              + " is ot the same as [shard] == '"
               + docShard
               + "' ... for docId == "
               + doc.getFirstValue("id"),
-          docShard.contains(expected));
+          docShard.equals(expected));
     }
   }
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java b/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java
index 3db1166fae0..434bd380a14 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestCloudPseudoReturnFields.java
@@ -16,16 +16,21 @@
  */
 package org.apache.solr.cloud;
 
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.startsWith;
+
 import java.lang.invoke.MethodHandles;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
+import java.util.Set;
 import org.apache.lucene.tests.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -42,6 +47,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.embedded.JettySolrRunner;
 import org.apache.solr.search.TestPseudoReturnFields;
+import org.hamcrest.MatcherAssert;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -56,6 +62,9 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
   private static final String DEBUG_LABEL = MethodHandles.lookup().lookupClass().getName();
   private static final String COLLECTION_NAME = DEBUG_LABEL + "_collection";
 
+  // randomized for testing '[shards]' behavior...
+  private static int repFactor;
+
   /** A collection specific client for operations at the cloud level */
   private static CloudSolrClient COLLECTION_CLIENT;
   /** One client per node */
@@ -63,9 +72,10 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
 
   @BeforeClass
   public static void createMiniSolrCloudCluster() throws Exception {
-    // multi replicas should matter...
-    final int repFactor = usually() ? 1 : 2;
-    // ... but we definitely want to ensure forwarded requests to other shards work ...
+    // replication factor will impact wether we expect a list of urls from the '[shard]'
+    // augmenter...
+    repFactor = usually() ? 1 : 2;
+    // ... and we definitely want to ensure forwarded requests to other shards work ...
     final int numShards = 2;
     // ... including some forwarded requests from nodes not hosting a shard
     final int numNodes = 1 + (numShards * repFactor);
@@ -698,9 +708,18 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
 
     for (SolrParams p :
         Arrays.asList(
-            params("q", "*:*", "fl", "[docid],[shard],[explain],x_alias:[value v=10 t=int]"),
             params(
-                "q", "*:*", "fl", "[docid],[shard]", "fl", "[explain],x_alias:[value v=10 t=int]"),
+                "q",
+                "*:*",
+                "fl",
+                "[docid],[shard],replica_urls:[shard style='urls'],shard_id:[shard style='id'],[explain],x_alias:[value v=10 t=int]"),
+            params(
+                "q",
+                "*:*",
+                "fl",
+                "[docid],[shard]",
+                "fl",
+                "replica_urls:[shard style='urls'],shard_id:[shard style='id'],[explain],x_alias:[value v=10 t=int]"),
             params(
                 "q",
                 "*:*",
@@ -709,6 +728,10 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
                 "fl",
                 "[shard]",
                 "fl",
+                "replica_urls:[shard style='urls']",
+                "fl",
+                "shard_id:[shard style='id']",
+                "fl",
                 "[explain]",
                 "fl",
                 "x_alias:[value v=10 t=int]"))) {
@@ -717,14 +740,74 @@ public class TestCloudPseudoReturnFields extends SolrCloudTestCase {
       // shouldn't matter what doc we pick...
       for (SolrDocument doc : docs) {
         String msg = p + " => " + doc;
-        assertEquals(msg, 4, doc.size());
+        assertEquals(msg, 6, doc.size());
         assertTrue(msg, doc.getFieldValue("[docid]") instanceof Integer);
-        assertTrue(msg, doc.getFieldValue("[shard]") instanceof String);
+
+        assertTrue(msg, doc.getFieldValue("shard_id") instanceof String);
+        MatcherAssert.assertThat(doc.getFieldValue("shard_id").toString(), startsWith("shard"));
+
+        assertTrue(msg, doc.getFieldValue("replica_urls") instanceof String);
+        MatcherAssert.assertThat(
+            doc.getFieldValue("replica_urls").toString(),
+            containsString(
+                "/solr/org.apache.solr.cloud.TestCloudPseudoReturnFields_collection_shard"));
+        if (1 < repFactor) {
+          MatcherAssert.assertThat(
+              doc.getFieldValue("replica_urls").toString(), containsString("|"));
+        }
+
+        assertEquals(msg, doc.getFieldValue("shard_id"), doc.getFieldValue("[shard]"));
+
         assertTrue(msg, doc.getFieldValue("[explain]") instanceof String);
         assertTrue(msg, doc.getFieldValue("x_alias") instanceof Integer);
         assertEquals(msg, 10, doc.getFieldValue("x_alias"));
       }
     }
+
+    // [shard] should still work with routing options
+    for (SolrParams p :
+        Arrays.asList(
+            params(
+                "q",
+                "*:*",
+                "_route_",
+                "blah!", // doesn't matter, just forcing a single shard
+                "fl",
+                "id,[shard],replica_urls:[shard style='urls'],shard_id:[shard style='id']"),
+            params(
+                "q",
+                "*:*",
+                "shards",
+                "shard1", // doesn't matter, just forcing a single shard
+                "fl",
+                "id,[shard],replica_urls:[shard style='urls'],shard_id:[shard style='id']"))) {
+      docs = assertSearch(p);
+      // Don't make assumptions about exact shard distribution, just assert we got at least one doc
+      assertTrue(
+          "Not enough docs in shard -- did routing rules change? => " + docs, 1 <= docs.size());
+      Set<Object> shardsSeen = new HashSet<>();
+      for (SolrDocument doc : docs) {
+        String msg = p + " => " + doc;
+
+        assertTrue(msg, doc.getFieldValue("shard_id") instanceof String);
+        MatcherAssert.assertThat(doc.getFieldValue("shard_id").toString(), startsWith("shard"));
+
+        assertTrue(msg, doc.getFieldValue("replica_urls") instanceof String);
+        MatcherAssert.assertThat(
+            doc.getFieldValue("replica_urls").toString(),
+            containsString(
+                "/solr/org.apache.solr.cloud.TestCloudPseudoReturnFields_collection_shard"));
+        if (1 < repFactor) {
+          MatcherAssert.assertThat(
+              doc.getFieldValue("replica_urls").toString(), containsString("|"));
+        }
+
+        assertEquals(msg, doc.getFieldValue("shard_id"), doc.getFieldValue("[shard]"));
+
+        shardsSeen.add(doc.getFieldValue("shard_id"));
+      }
+      assertEquals("Only expected results from one shard => " + docs, 1, shardsSeen.size());
+    }
   }
 
   public void testDocIdAugmenterRTG() throws Exception {
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestTolerantUpdateProcessorCloud.java b/solr/core/src/test/org/apache/solr/cloud/TestTolerantUpdateProcessorCloud.java
index 79f1f1b78cc..612fdb1615e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestTolerantUpdateProcessorCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestTolerantUpdateProcessorCloud.java
@@ -188,20 +188,19 @@ public class TestTolerantUpdateProcessorCloud extends SolrCloudTestCase {
     assertEquals(2, docs.getNumFound());
     assertEquals(2, docs.size());
     for (SolrDocument doc : docs) {
-      String expected = COLLECTION_NAME + "_" + doc.getFirstValue("expected_shard_s") + "_replica";
+      String expected = doc.getFirstValue("expected_shard_s").toString();
       String docShard = doc.getFirstValue("[shard]").toString();
       assertTrue(
           "shard routing prefixes don't seem to be aligned anymore, "
               + "did someone change the default routing rules? "
-              + "and/or the the default core name rules? "
+              + "and/or the the default shard name rules? "
               + "and/or the numShards used by this test? ... "
-              + "couldn't find "
               + expected
-              + " as substring of [shard] == '"
+              + " is ot the same as [shard] == '"
               + docShard
               + "' ... for docId == "
               + doc.getFirstValue("id"),
-          docShard.contains(expected));
+          docShard.equals(expected));
     }
   }
 
diff --git a/solr/core/src/test/org/apache/solr/handler/component/ShardsAllowListTest.java b/solr/core/src/test/org/apache/solr/handler/component/ShardsAllowListTest.java
index 6a30ba88db4..174ebbd7a8d 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/ShardsAllowListTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/ShardsAllowListTest.java
@@ -250,8 +250,6 @@ public class ShardsAllowListTest extends MultiSolrCloudTestCase {
             implicitCluster,
             "distrib",
             "false",
-            "shard.url",
-            getShardUrl("shard2", explicitCluster),
             "shards.purpose",
             "64",
             "isShard",
diff --git a/solr/solr-ref-guide/modules/query-guide/pages/document-transformers.adoc b/solr/solr-ref-guide/modules/query-guide/pages/document-transformers.adoc
index c1ddce4ed91..3821f772a94 100644
--- a/solr/solr-ref-guide/modules/query-guide/pages/document-transformers.adoc
+++ b/solr/solr-ref-guide/modules/query-guide/pages/document-transformers.adoc
@@ -212,8 +212,20 @@ When paths do not start with a `/` they are treated as "path suffixes":
 
 This transformer adds information about what shard each individual document came from in a distributed request.
 
-ShardAugmenterFactory does not support any request parameters, or configuration options.
+[source,plain]
+----
+q=fl=id,[shard]
+----
+
+A `style` local parameter can be specified as either `id` (the default) or `urls` which returns a pipe delimited list of all replica urls for backcompat reasons.
 
+The default style can be changed by specifying an `args` parameter in your `solrconfig.xml` configuration:
+[source,xml]
+----
+<transformer name="shard" class="org.apache.solr.response.transform.ShardAugmenterFactory" >
+  <str name="args">urls</str>
+</transformer>
+----
 
 === [docid] - DocIdAugmenterFactory
 
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/ModifiableSolrParams.java b/solr/solrj/src/java/org/apache/solr/common/params/ModifiableSolrParams.java
index 47469e2e911..331773660ed 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/ModifiableSolrParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/ModifiableSolrParams.java
@@ -178,14 +178,13 @@ public class ModifiableSolrParams extends SolrParams {
   // ----------------------------------------------------------------
   // ----------------------------------------------------------------
 
-  public void setShardAttributesToParams(int purpose, String shardUrl) {
+  public void setShardAttributesToParams(int purpose) {
     remove(ShardParams.SHARDS); // not a top-level request
     set(DISTRIB, Boolean.FALSE.toString()); // not a top-level request
     remove(INDENT);
     remove(CommonParams.HEADER_ECHO_PARAMS);
     set(ShardParams.IS_SHARD, true); // a sub (shard) request
     set(ShardParams.SHARDS_PURPOSE, purpose);
-    set(ShardParams.SHARD_URL, shardUrl); // so the shard knows what was asked
     set(CommonParams.OMIT_HEADER, false);
   }
 
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/ShardParams.java b/solr/solrj/src/java/org/apache/solr/common/params/ShardParams.java
index fd423ec5085..8a6b87577ec 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/ShardParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/ShardParams.java
@@ -42,8 +42,13 @@ public interface ShardParams {
   /** whether the request goes to a shard */
   String IS_SHARD = "isShard";
 
-  /** The requested URL for this shard */
-  String SHARD_URL = "shard.url";
+  /**
+   * The requested URL for this shard
+   *
+   * @deprecated This was an internally used param never ment for clients to specify; it is no
+   *     longer used by Solr.
+   */
+  @Deprecated String SHARD_URL = "shard.url";
 
   /** The requested shard name */
   String SHARD_NAME = "shard.name";
diff --git a/solr/solrj/src/test/org/apache/solr/common/params/ModifiableSolrParamsTest.java b/solr/solrj/src/test/org/apache/solr/common/params/ModifiableSolrParamsTest.java
index 91871062889..9cf97fe1cdf 100644
--- a/solr/solrj/src/test/org/apache/solr/common/params/ModifiableSolrParamsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/params/ModifiableSolrParamsTest.java
@@ -128,17 +128,15 @@ public class ModifiableSolrParamsTest extends SolrTestCase {
   }
 
   public void testSetShardAttributesToParams() {
-    var dummyShardUrl = "Shard-Url";
     var dummyIndent = "Dummy-Indent";
 
     modifiable.set(ShardParams.SHARDS, "dummyValue");
     modifiable.set(CommonParams.HEADER_ECHO_PARAMS, "dummyValue");
     modifiable.set(CommonParams.INDENT, dummyIndent);
 
-    modifiable.setShardAttributesToParams(2, dummyShardUrl);
+    modifiable.setShardAttributesToParams(2);
 
     assertEquals(Boolean.FALSE.toString(), modifiable.get(CommonParams.DISTRIB));
-    assertEquals(dummyShardUrl, modifiable.get(ShardParams.SHARD_URL));
     assertEquals("2", modifiable.get(ShardParams.SHARDS_PURPOSE));
     assertEquals(Boolean.FALSE.toString(), modifiable.get(CommonParams.OMIT_HEADER));
     assertEquals(Boolean.TRUE.toString(), modifiable.get(ShardParams.IS_SHARD));
diff --git a/solr/solrj/src/test/org/apache/solr/common/params/ShardParamsTest.java b/solr/solrj/src/test/org/apache/solr/common/params/ShardParamsTest.java
index e1c926638d8..63f09d644d3 100644
--- a/solr/solrj/src/test/org/apache/solr/common/params/ShardParamsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/params/ShardParamsTest.java
@@ -45,10 +45,6 @@ public class ShardParamsTest extends SolrTestCase {
     assertEquals(ShardParams.IS_SHARD, "isShard");
   }
 
-  public void testShardUrl() {
-    assertEquals(ShardParams.SHARD_URL, "shard.url");
-  }
-
   public void testShardsQt() {
     assertEquals(ShardParams.SHARDS_QT, "shards.qt");
   }