From d1d9ca8bc935424ec1acc29bb13fbb10c28c3830 Mon Sep 17 00:00:00 2001 From: David Smiley Date: Thu, 16 Oct 2025 22:51:06 -0400 Subject: [PATCH] SOLR-17963: Don't lock: COLLECTIONPROP, ADDREPLICAPROP, DELETEREPLICAPROP These SolrCloud commands no longer aquire locks (waiting or blocking on other commands that do): COLLECTIONPROP, ADDREPLICAPROP, DELETEREPLICAPROP. They are atomic/transactional and are not believed to interfere with commands that need locks. --- solr/CHANGES.txt | 3 +++ solr/core/src/test/org/apache/solr/cloud/TestLockTree.java | 5 ++--- .../org/apache/solr/common/params/CollectionParams.java | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 47c400d77c6e..c19615a63c83 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -328,6 +328,9 @@ Other Changes * PR#3758: Logs: removed webapp=/solr and also removed from internal context map. +* SOLR-17963: These SolrCloud commands no longer aquire locks (waiting or blocking on other commands that do): + COLLECTIONPROP, ADDREPLICAPROP, DELETEREPLICAPROP. (David Smiley) + ================== 9.10.0 ================== New Features --------------------- diff --git a/solr/core/src/test/org/apache/solr/cloud/TestLockTree.java b/solr/core/src/test/org/apache/solr/cloud/TestLockTree.java index 33455cc2f0c7..2604feadd65f 100644 --- a/solr/core/src/test/org/apache/solr/cloud/TestLockTree.java +++ b/solr/core/src/test/org/apache/solr/cloud/TestLockTree.java @@ -19,6 +19,7 @@ import static org.apache.solr.common.params.CollectionParams.CollectionAction.ADDREPLICAPROP; import static org.apache.solr.common.params.CollectionParams.CollectionAction.DELETEREPLICA; +import static org.apache.solr.common.params.CollectionParams.CollectionAction.MOCK_REPLICA_TASK; import static org.apache.solr.common.params.CollectionParams.CollectionAction.MODIFYCOLLECTION; import static org.apache.solr.common.params.CollectionParams.CollectionAction.SPLITSHARD; @@ -48,8 +49,6 @@ public void testLocks() throws Exception { .getSession() .lock(CollectionAction.BALANCESHARDUNIQUE, Arrays.asList("coll1", "shard1"))); - assertNull( - lockTree.getSession().lock(ADDREPLICAPROP, Arrays.asList("coll1", "shard1", "core_node2"))); coll1Lock.unlock(); Lock shard1Lock = lockTree @@ -62,7 +61,7 @@ public void testLocks() throws Exception { assertNotNull(replica1Lock); List>> operations = new ArrayList<>(); - operations.add(new Pair<>(ADDREPLICAPROP, Arrays.asList("coll1", "shard1", "core_node2"))); + operations.add(new Pair<>(MOCK_REPLICA_TASK, Arrays.asList("coll1", "shard1", "core_node2"))); operations.add(new Pair<>(MODIFYCOLLECTION, Arrays.asList("coll1"))); operations.add(new Pair<>(SPLITSHARD, Arrays.asList("coll1", "shard1"))); operations.add(new Pair<>(SPLITSHARD, Arrays.asList("coll2", "shard2"))); diff --git a/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java b/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java index 73e2e9518a1d..6ae82508df4b 100644 --- a/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java +++ b/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java @@ -101,7 +101,7 @@ enum CollectionAction { ADDROLE(true, LockLevel.NONE), REMOVEROLE(true, LockLevel.NONE), CLUSTERPROP(true, LockLevel.NONE), - COLLECTIONPROP(true, LockLevel.COLLECTION), + COLLECTIONPROP(true, LockLevel.NONE), // atomic; no lock REQUESTSTATUS(false, LockLevel.NONE), DELETESTATUS(false, LockLevel.NONE), ADDREPLICA(true, LockLevel.SHARD), @@ -111,8 +111,8 @@ enum CollectionAction { DISTRIBUTEDAPIPROCESSING(false, LockLevel.NONE), LIST(false, LockLevel.NONE), CLUSTERSTATUS(false, LockLevel.NONE), - ADDREPLICAPROP(true, LockLevel.REPLICA), - DELETEREPLICAPROP(true, LockLevel.REPLICA), + ADDREPLICAPROP(true, LockLevel.NONE), // atomic; no lock + DELETEREPLICAPROP(true, LockLevel.NONE), // atomic; no lock BALANCESHARDUNIQUE(true, LockLevel.COLLECTION), REBALANCELEADERS(true, LockLevel.COLLECTION), MODIFYCOLLECTION(true, LockLevel.COLLECTION),