This is an automated email from the ASF dual-hosted git repository.
gerlowskija 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 22271d73c8c SOLR-17024: Remove deprecated 'collectionDefaults' support
(#2002)
22271d73c8c is described below
commit 22271d73c8cb5c149d82e97d928cd0340f61c14d
Author: Jason Gerlowski <[email protected]>
AuthorDate: Thu Oct 19 16:15:09 2023 -0400
SOLR-17024: Remove deprecated 'collectionDefaults' support (#2002)
Solr 7.5 replaced the 'collectionDefaults: {...}' clusterprop convention
with the additionally nested `defaults: collection: {...}` syntax. The
legacy convention was deprecated and slated for removal in 8.0, but fell
through the cracks.
This commit removes the last vestiges of this convention from our code.
---
solr/CHANGES.txt | 2 +-
.../apache/solr/cloud/CollectionsAPISolrJTest.java | 116 +--------------------
.../src/test/org/apache/solr/util/TestUtils.java | 11 +-
.../pages/cluster-node-management.adoc | 6 --
.../solr/common/cloud/ClusterProperties.java | 49 +--------
.../apache/solr/common/cloud/ZkStateReader.java | 11 +-
6 files changed, 14 insertions(+), 181 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index a10005c443c..dc634381da6 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -96,7 +96,7 @@ Dependency Upgrades
Other Changes
---------------------
-(No changes)
+* SOLR-17024: Remove support for the long-defunct "collectionDefaults"
clusterprops key (Jason Gerlowski)
================== 9.4.0 ==================
New Features
diff --git
a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
index 30d9339d50c..4877b27aee6 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
@@ -17,7 +17,6 @@
package org.apache.solr.cloud;
import static java.util.Arrays.asList;
-import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_DEF;
import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
import static org.apache.solr.common.cloud.ZkStateReader.NUM_SHARDS_PROP;
import static org.apache.solr.common.params.CollectionAdminParams.COLLECTION;
@@ -127,114 +126,6 @@ public class CollectionsAPISolrJTest extends
SolrCloudTestCase {
(n, c) -> c == null);
}
- @Test
- public void testCreateCollWithDefaultClusterPropertiesOldFormat() throws
Exception {
- String COLL_NAME = "CollWithDefaultClusterProperties";
- try {
- V2Response rsp =
- new V2Request.Builder("/cluster")
- .withMethod(SolrRequest.METHOD.POST)
- .withPayload(
- "{set-obj-property:{collectionDefaults:{numShards : 2 ,
nrtReplicas : 2}}}")
- .build()
- .process(cluster.getSolrClient());
-
- for (int i = 0; i < 300; i++) {
- Map<?, ?> m =
cluster.getZkStateReader().getClusterProperty(COLLECTION_DEF, null);
- if (m != null) break;
- Thread.sleep(10);
- }
- Object clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(DEFAULTS, COLLECTION,
NUM_SHARDS_PROP), null);
- assertEquals("2", String.valueOf(clusterProperty));
- clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(DEFAULTS, COLLECTION, NRT_REPLICAS),
null);
- assertEquals("2", String.valueOf(clusterProperty));
- CollectionAdminResponse response =
- CollectionAdminRequest.createCollection(COLL_NAME, "conf", null,
null, null, null)
- .process(cluster.getSolrClient());
- assertEquals(0, response.getStatus());
- assertTrue(response.isSuccess());
-
- cluster.waitForActiveCollection(COLL_NAME, 2, 4);
-
- DocCollection coll =
cluster.getSolrClient().getClusterState().getCollection(COLL_NAME);
- Map<String, Slice> slices = coll.getSlicesMap();
- assertEquals(2, slices.size());
- for (Slice slice : slices.values()) {
- assertEquals(2, slice.getReplicas().size());
- }
-
CollectionAdminRequest.deleteCollection(COLL_NAME).process(cluster.getSolrClient());
-
- // unset only a single value using old format
- rsp =
- new V2Request.Builder("/cluster")
- .withMethod(SolrRequest.METHOD.POST)
- .withPayload(
- "{\n"
- + " \"set-obj-property\": {\n"
- + " \"collectionDefaults\": {\n"
- + " \"nrtReplicas\": null\n"
- + " }\n"
- + " }\n"
- + "}")
- .build()
- .process(cluster.getSolrClient());
- // assert that it is really gone in both old and new paths
- // we use a timeout so that the change made in ZK is reflected in the
watched copy inside
- // ZkStateReader
- TimeOut timeOut = new TimeOut(5, TimeUnit.SECONDS, new
TimeSource.NanoTimeSource());
- while (!timeOut.hasTimedOut()) {
- clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(DEFAULTS, COLLECTION,
NRT_REPLICAS), null);
- if (clusterProperty == null) break;
- }
- assertNull(clusterProperty);
- clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(COLLECTION_DEF, NRT_REPLICAS), null);
- assertNull(clusterProperty);
-
- // delete all defaults the old way
- rsp =
- new V2Request.Builder("/cluster")
- .withMethod(SolrRequest.METHOD.POST)
- .withPayload("{set-obj-property:{collectionDefaults:null}}")
- .build()
- .process(cluster.getSolrClient());
- // assert that it is really gone in both old and new paths
- timeOut = new TimeOut(5, TimeUnit.SECONDS, new
TimeSource.NanoTimeSource());
- while (!timeOut.hasTimedOut()) {
- clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(DEFAULTS, COLLECTION,
NUM_SHARDS_PROP), null);
- if (clusterProperty == null) break;
- }
- assertNull(clusterProperty);
- clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(COLLECTION_DEF, NUM_SHARDS_PROP),
null);
- assertNull(clusterProperty);
- } finally {
- // clean up in case there was an exception during the test
- V2Response rsp =
- new V2Request.Builder("/cluster")
- .withMethod(SolrRequest.METHOD.POST)
- .withPayload("{set-obj-property:{collectionDefaults: null}}")
- .build()
- .process(cluster.getSolrClient());
- }
- }
-
@Test
public void testCreateCollWithDefaultClusterPropertiesNewFormat() throws
Exception {
String COLL_NAME = "CollWithDefaultClusterProperties";
@@ -248,7 +139,7 @@ public class CollectionsAPISolrJTest extends
SolrCloudTestCase {
.process(cluster.getSolrClient());
for (int i = 0; i < 300; i++) {
- Map<?, ?> m =
cluster.getZkStateReader().getClusterProperty(COLLECTION_DEF, null);
+ Map<?, ?> m = cluster.getZkStateReader().getClusterProperty(DEFAULTS,
null);
if (m != null) break;
Thread.sleep(10);
}
@@ -322,11 +213,6 @@ public class CollectionsAPISolrJTest extends
SolrCloudTestCase {
if (clusterProperty == null) break;
}
assertNull(clusterProperty);
- clusterProperty =
- cluster
- .getZkStateReader()
- .getClusterProperty(List.of(COLLECTION_DEF, NUM_SHARDS_PROP),
null);
- assertNull(clusterProperty);
} finally {
V2Response rsp =
new V2Request.Builder("/cluster")
diff --git a/solr/core/src/test/org/apache/solr/util/TestUtils.java
b/solr/core/src/test/org/apache/solr/util/TestUtils.java
index 949c2dc15fe..e05f3130360 100644
--- a/solr/core/src/test/org/apache/solr/util/TestUtils.java
+++ b/solr/core/src/test/org/apache/solr/util/TestUtils.java
@@ -18,9 +18,10 @@ package org.apache.solr.util;
import static java.nio.charset.StandardCharsets.UTF_8;
import static java.util.Arrays.asList;
-import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_DEF;
+import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
import static org.apache.solr.common.cloud.ZkStateReader.NUM_SHARDS_PROP;
+import static org.apache.solr.common.params.CollectionAdminParams.DEFAULTS;
import static org.apache.solr.common.util.Utils.fromJSONString;
import java.io.ByteArrayOutputStream;
@@ -287,8 +288,10 @@ public class TestUtils extends SolrTestCaseJ4 {
Utils.mergeJson(
sink,
(Map<String, Object>)
- Utils.fromJSONString("collectionDefaults:{numShards:3 ,
nrtReplicas:2}")));
- assertEquals(3L, Utils.getObjectByPath(sink, true, List.of(COLLECTION_DEF,
NUM_SHARDS_PROP)));
- assertEquals(2L, Utils.getObjectByPath(sink, true, List.of(COLLECTION_DEF,
NRT_REPLICAS)));
+ Utils.fromJSONString("defaults: {collection: {numShards:3 ,
nrtReplicas:2}}")));
+ assertEquals(
+ 3L, Utils.getObjectByPath(sink, true, List.of(DEFAULTS,
COLLECTION_PROP, NUM_SHARDS_PROP)));
+ assertEquals(
+ 2L, Utils.getObjectByPath(sink, true, List.of(DEFAULTS,
COLLECTION_PROP, NRT_REPLICAS)));
}
}
diff --git
a/solr/solr-ref-guide/modules/deployment-guide/pages/cluster-node-management.adoc
b/solr/solr-ref-guide/modules/deployment-guide/pages/cluster-node-management.adoc
index 117d066add4..4e5e02430ca 100644
---
a/solr/solr-ref-guide/modules/deployment-guide/pages/cluster-node-management.adoc
+++
b/solr/solr-ref-guide/modules/deployment-guide/pages/cluster-node-management.adoc
@@ -335,12 +335,6 @@ curl -X POST -H 'Content-type:application/json'
--data-binary '
}' http://localhost:8983/api/cluster
----
-NOTE: Until Solr 7.5, cluster properties supported a `collectionDefaults` key
which is now deprecated and
-replaced with `defaults`.
-Using the `collectionDefaults` parameter in Solr 7.4 or 7.5 will continue to
work
- but the format of the properties will automatically be converted to the new
nested structure.
-Support for the "collectionDefaults" key will be removed in Solr 9.
-
=== Default Shard Preferences
Using the `defaultShardPreferences` parameter, you can implement rack or
availability zone awareness.
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ClusterProperties.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ClusterProperties.java
index 84e5cf462e4..38e9e046266 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ClusterProperties.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/ClusterProperties.java
@@ -17,8 +17,6 @@
package org.apache.solr.common.cloud;
-import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_DEF;
-
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.Arrays;
@@ -28,7 +26,6 @@ import java.util.List;
import java.util.Map;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
-import org.apache.solr.common.params.CollectionAdminParams;
import org.apache.solr.common.util.Utils;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
@@ -98,7 +95,7 @@ public class ClusterProperties {
Map<String, Object> properties =
(Map<String, Object>)
Utils.fromJSON(client.getData(ZkStateReader.CLUSTER_PROPS, null,
new Stat(), true));
- return convertCollectionDefaultsToNestedFormat(properties);
+ return properties;
} catch (KeeperException.NoNodeException e) {
return Collections.emptyMap();
} catch (KeeperException | InterruptedException e) {
@@ -111,13 +108,10 @@ public class ClusterProperties {
client.atomicUpdate(
ZkStateReader.CLUSTER_PROPS,
zkData -> {
- if (zkData == null)
- return
Utils.toJSON(convertCollectionDefaultsToNestedFormat(properties));
+ if (zkData == null) return Utils.toJSON(properties);
@SuppressWarnings({"unchecked"})
Map<String, Object> zkJson = (Map<String, Object>)
Utils.fromJSON(zkData);
- zkJson = convertCollectionDefaultsToNestedFormat(zkJson);
- boolean modified =
- Utils.mergeJson(zkJson,
convertCollectionDefaultsToNestedFormat(properties));
+ boolean modified = Utils.mergeJson(zkJson, properties);
return modified ? Utils.toJSON(zkJson) : null;
});
}
@@ -145,43 +139,6 @@ public class ClusterProperties {
});
}
- /**
- * See SOLR-12827 for background. We auto convert any "collectionDefaults"
keys to
- * "defaults/collection" format. This method will modify the given map and
return the same object.
- * Remove this method in Solr 9.
- *
- * @param properties the properties to be converted
- * @return the converted map
- */
- @SuppressWarnings({"unchecked"})
- static Map<String, Object> convertCollectionDefaultsToNestedFormat(
- Map<String, Object> properties) {
- if (properties.containsKey(COLLECTION_DEF)) {
- Map<String, Object> values = (Map<String, Object>)
properties.remove(COLLECTION_DEF);
- if (values != null) {
- properties.putIfAbsent(CollectionAdminParams.DEFAULTS, new
LinkedHashMap<>());
- Map<String, Object> defaults =
- (Map<String, Object>)
properties.get(CollectionAdminParams.DEFAULTS);
- defaults.compute(
- CollectionAdminParams.COLLECTION,
- (k, v) -> {
- if (v == null) return values;
- else {
- ((Map) v).putAll(values);
- return v;
- }
- });
- } else {
- // explicitly set to null, so set null in the nested format as well
- properties.putIfAbsent(CollectionAdminParams.DEFAULTS, new
LinkedHashMap<>());
- Map<String, Object> defaults =
- (Map<String, Object>)
properties.get(CollectionAdminParams.DEFAULTS);
- defaults.put(CollectionAdminParams.COLLECTION, null);
- }
- }
- return properties;
- }
-
/**
* This method sets a cluster property.
*
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 f6b736620ae..d6904d5bfcd 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
@@ -141,11 +141,6 @@ public class ZkStateReader implements SolrCloseable {
public static final String CONFIGS_ZKNODE = "/configs";
public static final String CONFIGNAME_PROP = "configName";
- /**
- * @deprecated use {@link
org.apache.solr.common.params.CollectionAdminParams#DEFAULTS} instead.
- */
- @Deprecated public static final String COLLECTION_DEF = "collectionDefaults";
-
public static final String URL_SCHEME = "urlScheme";
public static final String HTTP = "http";
public static final String HTTPS = "https";
@@ -1136,6 +1131,7 @@ public class ZkStateReader implements SolrCloseable {
loadClusterProperties();
};
+ @SuppressWarnings("unchecked")
private void loadClusterProperties() {
try {
while (true) {
@@ -1143,10 +1139,7 @@ public class ZkStateReader implements SolrCloseable {
byte[] data =
zkClient.getData(
ZkStateReader.CLUSTER_PROPS, clusterPropertiesWatcher, new
Stat(), true);
- @SuppressWarnings("unchecked")
- Map<String, Object> properties = (Map<String, Object>)
Utils.fromJSON(data);
- this.clusterProperties =
-
ClusterProperties.convertCollectionDefaultsToNestedFormat(properties);
+ this.clusterProperties = (Map<String, Object>) Utils.fromJSON(data);
log.debug("Loaded cluster properties: {}", this.clusterProperties);
for (ClusterPropertiesListener listener :
clusterPropertiesListeners) {