This is an automated email from the ASF dual-hosted git repository. dsmiley pushed a commit to branch branch_10x in repository https://gitbox.apache.org/repos/asf/solr.git
commit 71f9cd613600e1be754efab484ae168f68f4220f Author: Serhiy Bzhezytskyy <[email protected]> AuthorDate: Tue Aug 25 01:28:52 2026 +0300 SOLR-18149: remove ClusterState.createFromJson -- deprecated (#4777) And removed mostly unused String intern on ClusterState. Prefer simplicity over dubious improvement we don't even have today. (cherry picked from commit a733331b8fd9ae5c054de4af487e383d09bf451a) --- .../java/org/apache/solr/core/CoreContainer.java | 34 ---------------- .../org/apache/solr/core/backup/BackupManager.java | 5 ++- .../org/apache/solr/cloud/ClusterStateTest.java | 18 ++------- .../test/org/apache/solr/cloud/SliceStateTest.java | 4 +- .../org/apache/solr/common/cloud/ClusterState.java | 46 ---------------------- .../solrj/impl/CloudSolrClientCacheTest.java | 15 +++++-- 6 files changed, 21 insertions(+), 101 deletions(-) diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java index 81f3b067fd0..86a3b2677d9 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -34,7 +34,6 @@ import static org.apache.solr.metrics.SolrMetricProducer.TYPE_ATTR; import static org.apache.solr.search.SolrIndexSearcher.EXECUTOR_MAX_CPU_THREADS; import static org.apache.solr.security.AuthenticationPlugin.AUTHENTICATION_PLUGIN_PROP; -import com.github.benmanes.caffeine.cache.Interner; import com.google.common.annotations.VisibleForTesting; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.Tracer; @@ -58,7 +57,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeoutException; -import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; import org.apache.lucene.index.CorruptIndexException; @@ -85,7 +83,6 @@ import org.apache.solr.common.AlreadyClosedException; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrException.ErrorCode; import org.apache.solr.common.cloud.Aliases; -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.Replica.State; @@ -163,8 +160,6 @@ import org.apache.solr.util.tracing.TraceUtils; import org.apache.zookeeper.KeeperException; import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.jersey.server.ApplicationHandler; -import org.noggit.JSONParser; -import org.noggit.ObjectBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -418,7 +413,6 @@ public class CoreContainer { if (null != this.cfg.getBooleanQueryMaxClauseCount()) { IndexSearcher.setMaxClauseCount(this.cfg.getBooleanQueryMaxClauseCount()); } - setWeakStringInterner(); this.coresLocator = locator; this.containerProperties = new Properties(config.getSolrProperties()); this.asyncSolrCoreLoad = asyncSolrCoreLoad; @@ -2501,34 +2495,6 @@ public class CoreContainer { coreContainerAsyncTaskExecutor.execute(r); } - public static void setWeakStringInterner() { - boolean enable = "true".equals(EnvUtils.getProperty("solr.use.str.intern", "true")); - if (!enable) return; - Interner<String> interner = Interner.newWeakInterner(); - ClusterState.setStrInternerParser( - new Function<>() { - @Override - public ObjectBuilder apply(JSONParser p) { - try { - return new ObjectBuilder(p) { - @Override - public void addKeyVal(Object map, Object key, Object val) throws IOException { - if (key != null) { - key = interner.intern(key.toString()); - } - if (val instanceof String) { - val = interner.intern((String) val); - } - super.addKeyVal(map, key, val); - } - }; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }); - } - /** * Audit an event if our audit plugin is installed and wants to audit this type of event. * diff --git a/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java b/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java index 3d4ae4d2f0e..ac3bd04900b 100644 --- a/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java +++ b/solr/core/src/java/org/apache/solr/core/backup/BackupManager.java @@ -224,7 +224,10 @@ public class BackupManager { is.readBytes(arr, 0, (int) is.length()); // set a default created date, we don't aim at reading actual zookeeper state. The restored // collection will have a new creation date when persisted in zookeeper. - ClusterState c_state = ClusterState.createFromJson(-1, arr, Set.of(), Instant.EPOCH, null); + @SuppressWarnings("unchecked") + Map<String, Object> stateMap = (Map<String, Object>) Utils.fromJSON(arr, 0, arr.length); + ClusterState c_state = + ClusterState.createFromCollectionMap(-1, stateMap, Set.of(), Instant.EPOCH, null); return c_state.getCollection(collectionName); } } diff --git a/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java b/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java index e88193b4a3c..fb037c2ae88 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ClusterStateTest.java @@ -74,8 +74,10 @@ public class ClusterStateTest extends SolrTestCaseJ4 { byte[] bytes = Utils.toJSON(clusterState); Instant creationTime = Instant.now(); + @SuppressWarnings("unchecked") + Map<String, Object> stateMap = (Map<String, Object>) Utils.fromJSON(bytes, 0, bytes.length); ClusterState loadedClusterState = - ClusterState.createFromJson(-1, bytes, liveNodes, creationTime, null); + ClusterState.createFromCollectionMap(-1, stateMap, liveNodes, creationTime, null); assertFalse( loadedClusterState.getCollection("collection1").getProperties().containsKey("shards")); @@ -103,19 +105,5 @@ public class ClusterStateTest extends SolrTestCaseJ4 { assertEquals(creationTime, loadedClusterState.getCollection("collection1").getCreationTime()); assertEquals(creationTime, loadedClusterState.getCollection("collection2").getCreationTime()); - - loadedClusterState = - ClusterState.createFromJson(-1, new byte[0], liveNodes, Instant.now(), null); - - assertEquals( - "Provided liveNodes not used properly", 2, loadedClusterState.getLiveNodes().size()); - assertEquals("Should not have collections", 0, loadedClusterState.size()); - - loadedClusterState = - ClusterState.createFromJson(-1, (byte[]) null, liveNodes, Instant.now(), null); - - assertEquals( - "Provided liveNodes not used properly", 2, loadedClusterState.getLiveNodes().size()); - assertEquals("Should not have collections", 0, loadedClusterState.size()); } } diff --git a/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java b/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java index 6b5fe92a519..39d318e8e14 100644 --- a/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/SliceStateTest.java @@ -68,8 +68,10 @@ public class SliceStateTest extends SolrTestCaseJ4 { ClusterState clusterState = new ClusterState(liveNodes, collectionStates); byte[] bytes = Utils.toJSON(clusterState); + @SuppressWarnings("unchecked") + Map<String, Object> stateMap = (Map<String, Object>) Utils.fromJSON(bytes, 0, bytes.length); ClusterState loadedClusterState = - ClusterState.createFromJson(-1, bytes, liveNodes, Instant.now(), null); + ClusterState.createFromCollectionMap(-1, stateMap, liveNodes, Instant.now(), null); assertSame( "Default state not set to active", diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java index ba92c3a9011..7064c13e707 100644 --- a/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java +++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java @@ -16,8 +16,6 @@ */ package org.apache.solr.common.cloud; -import static org.apache.solr.common.util.Utils.STANDARDOBJBUILDER; - import java.io.IOException; import java.lang.invoke.MethodHandles; import java.time.Instant; @@ -31,17 +29,12 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Function; import java.util.stream.Stream; import org.apache.solr.common.MapWriter; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrException.ErrorCode; import org.apache.solr.common.cloud.DocCollection.CollectionStateProps; import org.apache.solr.common.util.CollectionUtil; -import org.apache.solr.common.util.Utils; -import org.noggit.JSONParser; -import org.noggit.JSONWriter; -import org.noggit.ObjectBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -197,34 +190,6 @@ public class ClusterState implements MapWriter { return sb.toString(); } - /** - * Create a ClusterState from Json. This method doesn't support legacy configName location and - * thus don't call it where that's important - * - * @param bytes a byte array of a Json representation of a mapping from collection name to the - * Json representation of a {@link DocCollection} as written by {@link #write(JSONWriter)}. It - * can represent one or more collections. - * @param liveNodes list of live nodes - * @param creationTime assigns this date to all {@link DocCollection} referenced by the returned - * {@link ClusterState} - * @return the ClusterState - */ - @Deprecated - public static ClusterState createFromJson( - int version, - byte[] bytes, - Set<String> liveNodes, - Instant creationTime, - DocCollection.PrsSupplier prsSupplier) { - if (bytes == null || bytes.length == 0) { - return new ClusterState(liveNodes, Map.of()); - } - @SuppressWarnings({"unchecked"}) - Map<String, Object> stateMap = - (Map<String, Object>) Utils.fromJSON(bytes, 0, bytes.length, STR_INTERNER_OBJ_BUILDER); - return createFromCollectionMap(version, stateMap, liveNodes, creationTime, prsSupplier); - } - @Deprecated public static ClusterState createFromCollectionMap( int version, @@ -388,15 +353,4 @@ public class ClusterState implements MapWriter { public int size() { return collectionStates.size(); } - - private static volatile Function<JSONParser, ObjectBuilder> STR_INTERNER_OBJ_BUILDER = - STANDARDOBJBUILDER; - - /** - * @lucene.internal - */ - public static void setStrInternerParser(Function<JSONParser, ObjectBuilder> fun) { - if (fun == null) return; - STR_INTERNER_OBJ_BUILDER = fun; - } } diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java index 18a279cbcd2..0b671fb81d4 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientCacheTest.java @@ -57,6 +57,7 @@ import org.apache.solr.common.util.ContentStream; import org.apache.solr.common.util.ExecutorUtil; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.SolrNamedThreadFactory; +import org.apache.solr.common.util.Utils; import org.junit.BeforeClass; public class CloudSolrClientCacheTest extends SolrTestCaseJ4 { @@ -106,9 +107,12 @@ public class CloudSolrClientCacheTest extends SolrTestCaseJ4 { } }.build()) { livenodes.addAll(Set.of("192.168.1.108:7574_solr", "192.168.1.108:8983_solr")); + byte[] coll1StateBytes = COLL1_STATE.getBytes(UTF_8); + @SuppressWarnings("unchecked") + Map<String, Object> stateMap = + (Map<String, Object>) Utils.fromJSON(coll1StateBytes, 0, coll1StateBytes.length); ClusterState cs = - ClusterState.createFromJson( - 1, COLL1_STATE.getBytes(UTF_8), Set.of(), Instant.now(), null); + ClusterState.createFromCollectionMap(1, stateMap, Set.of(), Instant.now(), null); refs.put(collName, new Ref(collName)); colls.put(collName, cs.getCollectionOrNull(collName)); responses.put( @@ -346,9 +350,12 @@ public class CloudSolrClientCacheTest extends SolrTestCaseJ4 { } private DocCollection loadCollection(String collection, int version) throws Exception { + byte[] coll1StateBytes = COLL1_STATE.getBytes(UTF_8); + @SuppressWarnings("unchecked") + Map<String, Object> stateMap = + (Map<String, Object>) Utils.fromJSON(coll1StateBytes, 0, coll1StateBytes.length); ClusterState state = - ClusterState.createFromJson( - version, COLL1_STATE.getBytes(UTF_8), Set.of(), Instant.now(), null); + ClusterState.createFromCollectionMap(version, stateMap, Set.of(), Instant.now(), null); return state.getCollectionOrNull(collection); }
