You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by st...@apache.org on 2023/09/12 21:26:18 UTC

[solr] branch branch_9x updated: SOLR-16899: Do not statically register ops in CoreAdminHandler (#1892)

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

stillalex 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 d35a1720f19 SOLR-16899: Do not statically register ops in CoreAdminHandler (#1892)
d35a1720f19 is described below

commit d35a1720f19fc88c44e6e45529d6acff41c254c5
Author: Vincent P <vi...@gmail.com>
AuthorDate: Tue Sep 12 23:23:21 2023 +0200

    SOLR-16899: Do not statically register ops in CoreAdminHandler (#1892)
    
    Co-authored-by: Vincent Primault <vp...@salesforce.com>
    Co-authored-by: Alex Deparvu <st...@apache.org>
    (cherry picked from commit 4989aadf2794d688879353fd8219a69190ad1049)
---
 solr/CHANGES.txt                                       |  2 ++
 .../apache/solr/handler/admin/CoreAdminHandler.java    | 18 +++++++++++-------
 .../solr/handler/admin/CoreAdminHandlerActionTest.java |  3 +--
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 1331a29c333..c1a7553bec2 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -112,6 +112,8 @@ Bug Fixes
 * SOLR-16415: asyncId must not have '/'; enforce this.  Enhance ZK cleanup to process directories
   instead of fail.  (David Smiley, Paul McArthur)
 
+* SOLR-16899: CoreAdminOp are statically registered in CoreAdminHandler, preventing more than one Solr instance in the same JVM (Vincent Primault via Alex Deparvu)
+
 Dependency Upgrades
 ---------------------
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
index f9819dcaf80..8ee1bf3254a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
@@ -95,6 +95,7 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   protected final CoreContainer coreContainer;
   protected final CoreAdminAsyncTracker coreAdminAsyncTracker;
+  protected final Map<String, CoreAdminOp> opMap;
 
   public static String RESPONSE_STATUS = "STATUS";
 
@@ -107,6 +108,7 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
     // should happen in the constructor...
     this.coreContainer = null;
     this.coreAdminAsyncTracker = new CoreAdminAsyncTracker();
+    this.opMap = initializeOpMap();
   }
 
   /**
@@ -117,6 +119,7 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
   public CoreAdminHandler(final CoreContainer coreContainer) {
     this.coreContainer = coreContainer;
     this.coreAdminAsyncTracker = new CoreAdminAsyncTracker();
+    this.opMap = initializeOpMap();
   }
 
   @Override
@@ -275,6 +278,14 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
           Map.entry(ZkStateReader.NUM_SHARDS_PROP, CloudDescriptor.NUM_SHARDS),
           Map.entry(CoreAdminParams.REPLICA_TYPE, CloudDescriptor.REPLICA_TYPE));
 
+  private static Map<String, CoreAdminOp> initializeOpMap() {
+    Map<String, CoreAdminOp> opMap = new HashMap<>();
+    for (CoreAdminOperation op : CoreAdminOperation.values()) {
+      opMap.put(op.action.toString().toLowerCase(Locale.ROOT), op);
+    }
+    return opMap;
+  }
+
   protected static Map<String, String> buildCoreParams(SolrParams params) {
 
     Map<String, String> coreParams = new HashMap<>();
@@ -345,8 +356,6 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
     coreAdminAsyncTracker.shutdown();
   }
 
-  private static final Map<String, CoreAdminOp> opMap = new HashMap<>();
-
   public static class CallInfo {
     public final CoreAdminHandler handler;
     public final SolrQueryRequest req;
@@ -397,11 +406,6 @@ public class CoreAdminHandler extends RequestHandlerBase implements PermissionNa
         CoreSnapshotAPI.class, InstallCoreDataAPI.class, BackupCoreAPI.class, RestoreCoreAPI.class);
   }
 
-  static {
-    for (CoreAdminOperation op : CoreAdminOperation.values())
-      opMap.put(op.action.toString().toLowerCase(Locale.ROOT), op);
-  }
-
   public interface CoreAdminOp {
 
     default boolean isExpensive() {
diff --git a/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerActionTest.java b/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerActionTest.java
index 58ca65a795b..235db7af21e 100644
--- a/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerActionTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerActionTest.java
@@ -47,8 +47,7 @@ public class CoreAdminHandlerActionTest extends SolrTestCaseJ4 {
   public static void beforeClass() throws Exception {
 
     setupNoCoreTest(createTempDir(), SOLR_XML);
-
-    admin = new CoreAdminHandler(h.getCoreContainer());
+    admin = h.getCoreContainer().getMultiCoreHandler();
   }
 
   @Test