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

noble pushed a commit to branch jira/SOLR15715
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 34e8f3905c9c0ebc729b574b43440be2539d3e4d
Author: Noble Paul <[email protected]>
AuthorDate: Mon Jan 3 15:10:19 2022 +1100

    refactor to minimize access to core
---
 .../solr/handler/component/AnalyticsComponent.java     |  2 +-
 .../transform/LTRFeatureLoggerTransformerFactory.java  |  2 +-
 .../org/apache/solr/ltr/search/LTRQParserPlugin.java   |  2 +-
 .../cloud/api/collections/CategoryRoutedAlias.java     |  4 ++--
 .../apache/solr/cloud/api/collections/RoutedAlias.java | 14 ++++++--------
 .../solr/cloud/api/collections/TimeRoutedAlias.java    |  7 +++----
 .../org/apache/solr/handler/RequestHandlerBase.java    |  4 ++--
 .../solr/handler/component/HttpShardHandler.java       |  6 +++---
 .../handler/component/HttpShardHandlerFactory.java     |  4 ++--
 .../apache/solr/handler/component/QueryComponent.java  |  4 ++--
 .../solr/handler/component/RealTimeGetComponent.java   |  8 ++++----
 .../apache/solr/handler/component/SearchHandler.java   |  4 ++--
 .../solr/handler/component/TaskManagementHandler.java  |  2 +-
 .../src/java/org/apache/solr/request/SimpleFacets.java |  2 +-
 .../java/org/apache/solr/request/SolrQueryRequest.java | 18 ++++++++++++++++++
 .../java/org/apache/solr/search/JoinQParserPlugin.java |  2 +-
 .../solr/search/join/ScoreJoinQParserPlugin.java       |  4 ++--
 .../org/apache/solr/search/stats/ExactStatsCache.java  |  6 +++---
 .../java/org/apache/solr/update/AddUpdateCommand.java  |  4 ++--
 .../processor/DistributedUpdateProcessorFactory.java   |  2 +-
 .../update/processor/DistributedZkUpdateProcessor.java | 10 +++++-----
 .../update/processor/RoutedAliasUpdateProcessor.java   |  2 +-
 .../solr/update/processor/TolerantUpdateProcessor.java |  2 +-
 23 files changed, 65 insertions(+), 50 deletions(-)

diff --git 
a/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
 
b/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
index a743586..90ac4c5 100644
--- 
a/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
+++ 
b/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
@@ -109,7 +109,7 @@ public class AnalyticsComponent extends SearchComponent {
 
     // Send out a request to each shard and merge the responses into our 
AnalyticsRequestManager
     
reqManager.shardStream.sendRequests(rb.req.getCore().getCoreDescriptor().getCollectionName(),
-        
rb.req.getCore().getCoreContainer().getZkController().getZkServerAddress());
+        rb.req.getCoreContainer().getZkController().getZkServerAddress());
 
     reqManager.sendShards = false;
 
diff --git 
a/solr/contrib/ltr/src/java/org/apache/solr/ltr/response/transform/LTRFeatureLoggerTransformerFactory.java
 
b/solr/contrib/ltr/src/java/org/apache/solr/ltr/response/transform/LTRFeatureLoggerTransformerFactory.java
index 310efb6..04f4980 100644
--- 
a/solr/contrib/ltr/src/java/org/apache/solr/ltr/response/transform/LTRFeatureLoggerTransformerFactory.java
+++ 
b/solr/contrib/ltr/src/java/org/apache/solr/ltr/response/transform/LTRFeatureLoggerTransformerFactory.java
@@ -216,7 +216,7 @@ public class LTRFeatureLoggerTransformerFactory extends 
TransformerFactory {
       }
       leafContexts = searcher.getTopReaderContext().leaves();
       if (threadManager != null) {
-        
threadManager.setExecutor(context.getRequest().getCore().getCoreContainer().getUpdateShardHandler().getUpdateExecutor());
+        
threadManager.setExecutor(context.getRequest().getCoreContainer().getUpdateShardHandler().getUpdateExecutor());
       }
 
       rerankingQueriesFromContext = 
SolrQueryRequestContextUtils.getScoringQueries(req);
diff --git 
a/solr/contrib/ltr/src/java/org/apache/solr/ltr/search/LTRQParserPlugin.java 
b/solr/contrib/ltr/src/java/org/apache/solr/ltr/search/LTRQParserPlugin.java
index f29e7f3..592f94c 100644
--- a/solr/contrib/ltr/src/java/org/apache/solr/ltr/search/LTRQParserPlugin.java
+++ b/solr/contrib/ltr/src/java/org/apache/solr/ltr/search/LTRQParserPlugin.java
@@ -152,7 +152,7 @@ public class LTRQParserPlugin extends QParserPlugin 
implements ResourceLoaderAwa
     @Override
     public Query parse() throws SyntaxError {
       if (threadManager != null) {
-        
threadManager.setExecutor(req.getCore().getCoreContainer().getUpdateShardHandler().getUpdateExecutor());
+        
threadManager.setExecutor(req.getCoreContainer().getUpdateShardHandler().getUpdateExecutor());
       }
       // ReRanking Model
       final String[] modelNames = 
localParams.getParams(LTRQParserPlugin.MODEL);
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
index 3e55863..8600eb8 100644
--- 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
+++ 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/CategoryRoutedAlias.java
@@ -121,7 +121,7 @@ public class CategoryRoutedAlias extends RoutedAlias {
   @Override
   public void validateRouteValue(AddUpdateCommand cmd) throws SolrException {
     if (this.aliases == null) {
-      
updateParsedCollectionAliases(cmd.getReq().getCore().getCoreContainer().getZkController().zkStateReader,
 false);
+      
updateParsedCollectionAliases(cmd.getReq().getCoreContainer().getZkController().zkStateReader,
 false);
     }
 
     Object fieldValue = 
cmd.getSolrInputDocument().getFieldValue(getRouteField());
@@ -225,7 +225,7 @@ public class CategoryRoutedAlias extends RoutedAlias {
   public CandidateCollection findCandidateGivenValue(AddUpdateCommand cmd) {
     Object value = cmd.getSolrInputDocument().getFieldValue(getRouteField());
     String targetColName = buildCollectionNameFromValue(String.valueOf(value));
-    ZkStateReader zkStateReader = 
cmd.getReq().getCore().getCoreContainer().getZkController().zkStateReader;
+    ZkStateReader zkStateReader = 
cmd.getReq().getCoreContainer().getZkController().zkStateReader;
     updateParsedCollectionAliases(zkStateReader, true);
     List<String> collectionList = getCollectionList(this.aliases);
     if (collectionList.contains(targetColName)) {
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/RoutedAlias.java 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/RoutedAlias.java
index c72d16f..86cbf90 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/RoutedAlias.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/RoutedAlias.java
@@ -322,9 +322,7 @@ public abstract class RoutedAlias {
    */
   private String createAllRequiredCollections(AddUpdateCommand cmd, 
CandidateCollection targetCollectionDesc) {
 
-    SolrQueryRequest req = cmd.getReq();
-    SolrCore core = req.getCore();
-    CoreContainer coreContainer = core.getCoreContainer();
+    CoreContainer coreContainer = cmd.getReq().getCoreContainer();
     do {
       switch (targetCollectionDesc.getCreationType()) {
         case NONE:
@@ -333,7 +331,7 @@ public abstract class RoutedAlias {
           targetCollectionDesc = doSynchronous( cmd, targetCollectionDesc, 
coreContainer);
           break;
         case ASYNC_PREEMPTIVE:
-          return doPreemptive(targetCollectionDesc, core, coreContainer);
+          return doPreemptive(targetCollectionDesc, cmd.getReq(), 
coreContainer);
         default:
           throw unknownCreateType();
       }
@@ -354,7 +352,7 @@ public abstract class RoutedAlias {
     return targetCollectionDesc;
   }
 
-  private String doPreemptive(CandidateCollection targetCollectionDesc, 
SolrCore core, CoreContainer coreContainer) {
+  private String doPreemptive(CandidateCollection targetCollectionDesc, 
SolrQueryRequest req, CoreContainer coreContainer) {
 
     if (!this.preemptiveCreateOnceAlready) {
       preemptiveAsync(() -> {
@@ -363,7 +361,7 @@ public abstract class RoutedAlias {
         } catch (Exception e) {
           log.error("Async creation of a collection for routed Alias {} 
failed!", this.getAliasName(), e);
         }
-      }, core);
+      }, req);
     }
     return targetCollectionDesc.destinationCollection;
   }
@@ -375,9 +373,9 @@ public abstract class RoutedAlias {
    */
   abstract protected String getHeadCollectionIfOrdered(AddUpdateCommand cmd);
 
-  private void preemptiveAsync(Runnable r, SolrCore core) {
+  private void preemptiveAsync(Runnable r, SolrQueryRequest req) {
     preemptiveCreateOnceAlready = true;
-    core.runAsync(r);
+    req.runAsync(r);
   }
 
   private SolrException unknownCreateType() {
diff --git 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java
index 3e6b31e..2e183a2 100644
--- 
a/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java
+++ 
b/solr/core/src/java/org/apache/solr/cloud/api/collections/TimeRoutedAlias.java
@@ -370,8 +370,7 @@ public class TimeRoutedAlias extends RoutedAlias {
       startTime = Instant.parse(start);
     } catch (DateTimeParseException e) {
       startTime = DateMathParser.parseMath(new Date(), start).toInstant();
-      SolrCore core = cmd.getReq().getCore();
-      ZkStateReader zkStateReader = 
core.getCoreContainer().getZkController().zkStateReader;
+      ZkStateReader zkStateReader = 
cmd.getReq().getCoreContainer().getZkController().zkStateReader;
       Aliases aliases = zkStateReader.getAliases();
       Map<String, String> props = new 
HashMap<>(aliases.getCollectionAliasProperties(aliasName));
       start = DateTimeFormatter.ISO_INSTANT.format(startTime);
@@ -381,7 +380,7 @@ public class TimeRoutedAlias extends RoutedAlias {
       // should all be identical and who wins won't matter (baring cases of 
Date Math involving seconds,
       // which is pretty far fetched). Putting this in a separate thread to 
ensure that any failed
       // races don't cause documents to get rejected.
-      core.runAsync(() -> 
zkStateReader.aliasesManager.applyModificationAndExportToZk(
+      cmd.getReq().runAsync(() -> 
zkStateReader.aliasesManager.applyModificationAndExportToZk(
           (a) -> aliases.cloneWithCollectionAliasProperties(aliasName, 
props)));
 
     }
@@ -449,7 +448,7 @@ public class TimeRoutedAlias extends RoutedAlias {
   @Override
   public CandidateCollection findCandidateGivenValue(AddUpdateCommand cmd) {
     Object value = cmd.getSolrInputDocument().getFieldValue(getRouteField());
-    ZkStateReader zkStateReader = 
cmd.getReq().getCore().getCoreContainer().getZkController().zkStateReader;
+    ZkStateReader zkStateReader = 
cmd.getReq().getCoreContainer().getZkController().zkStateReader;
     String printableId = cmd.getPrintableId();
     updateParsedCollectionAliases(zkStateReader, true);
 
diff --git a/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java 
b/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
index d761c55..f17e22f 100644
--- a/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
+++ b/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
@@ -188,7 +188,7 @@ public abstract class RequestHandlerBase implements 
SolrRequestHandler, SolrInfo
     requests.inc();
     // requests are distributed by default when ZK is in use, unless indicated 
otherwise
     boolean distrib = req.getParams().getBool(CommonParams.DISTRIB,
-        req.getCore() != null ? 
req.getCore().getCoreContainer().isZooKeeperAware() : false);
+        req.getCoreContainer() != null ? 
req.getCoreContainer().isZooKeeperAware() : false);
     if (req.getParams().getBool(ShardParams.IS_SHARD, false)) {
       shardPurposes.computeIfAbsent("total", name -> new Counter()).inc();
       int purpose = req.getParams().getInt(ShardParams.SHARDS_PURPOSE, 0);
@@ -221,7 +221,7 @@ public abstract class RequestHandlerBase implements 
SolrRequestHandler, SolrInfo
       }
     } catch (Exception e) {
       if (req.getCore() != null) {
-        boolean isTragic = 
req.getCore().getCoreContainer().checkTragicException(req.getCore());
+        boolean isTragic = 
req.getCoreContainer().checkTragicException(req.getCore());
         if (isTragic) {
           if (e instanceof SolrException) {
             // Tragic exceptions should always throw a server error
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 8a32581..76d4b02 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
@@ -262,12 +262,12 @@ public class HttpShardHandler extends ShardHandler {
     final String shards = params.get(ShardParams.SHARDS);
 
     CoreDescriptor coreDescriptor = req.getCore().getCoreDescriptor();
-    CloudDescriptor cloudDescriptor = coreDescriptor.getCloudDescriptor();
-    ZkController zkController = 
req.getCore().getCoreContainer().getZkController();
+    CloudDescriptor cloudDescriptor = req.getCloudDescriptor();
+    ZkController zkController = req.getCoreContainer().getZkController();
 
     final ReplicaListTransformer replicaListTransformer = 
httpShardHandlerFactory.getReplicaListTransformer(req);
 
-    AllowListUrlChecker urlChecker = 
req.getCore().getCoreContainer().getAllowListUrlChecker();
+    AllowListUrlChecker urlChecker = 
req.getCoreContainer().getAllowListUrlChecker();
     if (shards != null && zkController == null && urlChecker.isEnabled() && 
!urlChecker.hasExplicitAllowList()) {
       throw new SolrException(SolrException.ErrorCode.FORBIDDEN,
               "solr.xml property '" + AllowListUrlChecker.URL_ALLOW_LIST
diff --git 
a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
 
b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
index d15d01e..cd65127 100644
--- 
a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
+++ 
b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
@@ -340,9 +340,9 @@ public class HttpShardHandlerFactory extends 
ShardHandlerFactory implements org.
 
   protected ReplicaListTransformer getReplicaListTransformer(final 
SolrQueryRequest req) {
     final SolrParams params = req.getParams();
-    final SolrCore core = req.getCore(); // explicit check for null core 
(temporary?, for tests)
+//    final SolrCore core = req.getCore(); // explicit check for null core 
(temporary?, for tests)
     @SuppressWarnings("resource")
-    ZkController zkController = core == null ? null : 
core.getCoreContainer().getZkController();
+    ZkController zkController = req.getCoreContainer() == null ? null : 
req.getCoreContainer().getZkController();
     if (zkController != null) {
       return requestReplicaListTransformerGenerator.getReplicaListTransformer(
           params,
diff --git 
a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java 
b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index 241b966..2dd565e 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -288,7 +288,7 @@ public class QueryComponent extends SearchComponent
     groupingSpec.setResponseFormat(responseFormat);
 
     // See SOLR-12249. Disallow grouping on text fields that are not 
SortableText in cloud mode
-    if (req.getCore().getCoreContainer().isZooKeeperAware()) {
+    if (req.getCoreContainer().isZooKeeperAware()) {
       IndexSchema schema = rb.req.getSchema();
       String[] fields = params.getParams(GroupParams.GROUP_FIELD);
       if (fields != null) {
@@ -1569,7 +1569,7 @@ public class QueryComponent extends SearchComponent
   }
 
   private static String generateQueryID(SolrQueryRequest req) {
-    ZkController zkController = 
req.getCore().getCoreContainer().getZkController();
+    ZkController zkController = req.getCoreContainer().getZkController();
     String nodeName = req.getCore().getCoreContainer().getHostName();
 
     if (zkController != null) {
diff --git 
a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
 
b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index d965cb7..3badb56 100644
--- 
a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ 
b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@ -119,7 +119,7 @@ public class RealTimeGetComponent extends SearchComponent
     SolrQueryRequest req = rb.req;
     SolrQueryResponse rsp = rb.rsp;
     SolrParams params = req.getParams();
-    CloudDescriptor cloudDesc = 
req.getCore().getCoreDescriptor().getCloudDescriptor();
+    CloudDescriptor cloudDesc = req.getCloudDescriptor();
 
     if (cloudDesc != null) {
       Replica.Type replicaType = cloudDesc.getReplicaType();
@@ -975,11 +975,11 @@ public class RealTimeGetComponent extends SearchComponent
 
     // TODO: handle collection=...?
 
-    ZkController zkController = 
rb.req.getCore().getCoreContainer().getZkController();
+    ZkController zkController = rb.req.getCoreContainer().getZkController();
 
     // if shards=... then use that
     if (zkController != null && params.get(ShardParams.SHARDS) == null) {
-      CloudDescriptor cloudDescriptor = 
rb.req.getCore().getCoreDescriptor().getCloudDescriptor();
+      CloudDescriptor cloudDescriptor = rb.req.getCloudDescriptor();
 
       String collection = cloudDescriptor.getCollectionName();
       ClusterState clusterState = zkController.getClusterState();
@@ -1207,7 +1207,7 @@ public class RealTimeGetComponent extends SearchComponent
     boolean onlyIfActive = rb.req.getParams().getBool("onlyIfActive", false);
     
     if (onlyIfActive) {
-      if 
(rb.req.getCore().getCoreDescriptor().getCloudDescriptor().getLastPublished() 
!= Replica.State.ACTIVE) {
+      if (rb.req.getCloudDescriptor().getLastPublished() != 
Replica.State.ACTIVE) {
         log.info("Last published state was not ACTIVE, cannot sync.");
         rb.rsp.add("sync", "false");
         return;
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 0cd3db0..0073892 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
@@ -239,7 +239,7 @@ public class SearchHandler extends RequestHandlerBase 
implements SolrCoreAware,
   public ShardHandler getAndPrepShardHandler(SolrQueryRequest req, 
ResponseBuilder rb) {
     ShardHandler shardHandler = null;
 
-    CoreContainer cc = req.getCore().getCoreContainer();
+    CoreContainer cc = req.getCoreContainer();
     boolean isZkAware = cc.isZooKeeperAware();
     rb.isDistrib = req.getParams().getBool(DISTRIB, isZkAware);
     if (!rb.isDistrib) {
@@ -577,7 +577,7 @@ public class SearchHandler extends RequestHandlerBase 
implements SolrCoreAware,
   }
 
   private static String generateRid(SolrQueryRequest req) {
-    String hostName = req.getCore().getCoreContainer().getHostName();
+    String hostName = req.getCoreContainer().getHostName();
     return hostName + "-" + ridCounter.getAndIncrement();
   }
 
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 f679007..7e3d08b 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
@@ -132,7 +132,7 @@ public abstract class TaskManagementHandler extends 
RequestHandlerBase implement
 
     public static ResponseBuilder buildResponseBuilder(SolrQueryRequest req, 
SolrQueryResponse rsp,
                                                        List<SearchComponent> 
components) {
-        CoreContainer cc = req.getCore().getCoreContainer();
+        CoreContainer cc = req.getCoreContainer();
         boolean isZkAware = cc.isZooKeeperAware();
 
         ResponseBuilder rb = new ResponseBuilder(req, rsp, components);
diff --git a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java 
b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
index d98cf79..ac2da0b 100644
--- a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
@@ -167,7 +167,7 @@ public class SimpleFacets {
     this.docsOrig = docs;
     this.global = params;
     this.rb = rb;
-    this.facetExecutor = 
req.getCore().getCoreContainer().getUpdateShardHandler().getUpdateExecutor();
+    this.facetExecutor = 
req.getCoreContainer().getUpdateShardHandler().getUpdateExecutor();
   }
 
   public void setFacetDebugInfo(FacetDebugInfo fdebugParent) {
diff --git a/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java 
b/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java
index f472040..446ca82 100644
--- a/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java
+++ b/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java
@@ -25,9 +25,12 @@ import io.opentracing.Span;
 import io.opentracing.Tracer;
 import io.opentracing.noop.NoopSpan;
 import io.opentracing.util.GlobalTracer;
+import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.CommandOperation;
 import org.apache.solr.common.util.ContentStream;
+import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.search.SolrIndexSearcher;
@@ -153,6 +156,21 @@ public interface SolrQueryRequest extends AutoCloseable {
   default Span getSpan() {
     return NoopSpan.INSTANCE;
   }
+
+  default CoreContainer getCoreContainer() {
+    return getCore() == null ? null : getCore().getCoreContainer();
+  }
+
+  default void runAsync(Runnable r) {
+    getCore().runAsync(r);
+  }
+
+  default CloudDescriptor getCloudDescriptor() {
+    SolrCore core = getCore();
+    if (core == null) return null;
+    return core.getCoreDescriptor().getCloudDescriptor();
+  }
+
 }
 
 
diff --git a/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java 
b/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
index 54f05b0..93459ba 100644
--- a/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
@@ -137,7 +137,7 @@ public class JoinQParserPlugin extends QParserPlugin {
       long fromCoreOpenTime = 0;
 
       if (fromIndex != null && 
!fromIndex.equals(qparser.req.getCore().getCoreDescriptor().getName()) ) {
-        CoreContainer container = qparser.req.getCore().getCoreContainer();
+        CoreContainer container = qparser.req.getCoreContainer();
 
         // if in SolrCloud mode, fromIndex should be the name of a 
single-sharded collection
         coreName = ScoreJoinQParserPlugin.getCoreName(fromIndex, container);
diff --git 
a/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java 
b/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
index c87e318..ed1603d 100644
--- a/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/join/ScoreJoinQParserPlugin.java
@@ -90,7 +90,7 @@ public class ScoreJoinQParserPlugin extends QParserPlugin {
     public Weight createWeight(IndexSearcher searcher, 
org.apache.lucene.search.ScoreMode scoreMode, float boost) throws IOException {
       SolrRequestInfo info = SolrRequestInfo.getRequestInfo();
 
-      CoreContainer container = info.getReq().getCore().getCoreContainer();
+      CoreContainer container = info.getReq().getCoreContainer();
 
       final SolrCore fromCore = container.getCore(fromIndex);
 
@@ -228,7 +228,7 @@ public class ScoreJoinQParserPlugin extends QParserPlugin {
         final String myCore = req.getCore().getCoreDescriptor().getName();
 
         if (fromIndex != null && (!fromIndex.equals(myCore) || 
byPassShortCircutCheck)) {
-          CoreContainer container = req.getCore().getCoreContainer();
+          CoreContainer container = req.getCoreContainer();
 
           final String coreName = getCoreName(fromIndex, container);
           final SolrCore fromCore = container.getCore(coreName);
diff --git 
a/solr/core/src/java/org/apache/solr/search/stats/ExactStatsCache.java 
b/solr/core/src/java/org/apache/solr/search/stats/ExactStatsCache.java
index d11cc61..3dc7679 100644
--- a/solr/core/src/java/org/apache/solr/search/stats/ExactStatsCache.java
+++ b/solr/core/src/java/org/apache/solr/search/stats/ExactStatsCache.java
@@ -230,10 +230,10 @@ public class ExactStatsCache extends StatsCache {
       Map<String,TermStats> globalTermStats = new HashMap<>();
       Map<String,CollectionStats> globalColStats = new HashMap<>();
       // aggregate collection stats, only for the field in terms
-      String collectionName = 
rb.req.getCore().getCoreDescriptor().getCollectionName();
-      if (collectionName == null) {
+      String collectionName = rb.req.getCloudDescriptor().getCollectionName();
+     /* if (collectionName == null) {
         collectionName = rb.req.getCore().getCoreDescriptor().getName();
-      }
+      }*/
       List<String> shards = new ArrayList<>();
       for (String shardUrl : rb.shards) {
         String shard = StatsUtil.shardUrlToShard(collectionName, shardUrl);
diff --git a/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java 
b/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
index 2de9e6b..4b45087 100644
--- a/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
+++ b/solr/core/src/java/org/apache/solr/update/AddUpdateCommand.java
@@ -88,9 +88,9 @@ public class AddUpdateCommand extends UpdateCommand {
         route = null;
       } else {
         // use route but there's one last exclusion: It's incompatible with 
SolrCloud implicit router.
-        String collectionName = 
req.getCore().getCoreDescriptor().getCollectionName();
+        String collectionName = req.getCloudDescriptor().getCollectionName();
         if (collectionName != null) {
-          DocRouter router = 
req.getCore().getCoreContainer().getZkController().getClusterState()
+          DocRouter router = 
req.getCoreContainer().getZkController().getClusterState()
               .getCollection(collectionName).getRouter();
           if (router instanceof ImplicitDocRouter) {
             route = null;
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
 
b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
index 93c1bf2..deaa1d9 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
@@ -50,7 +50,7 @@ public class DistributedUpdateProcessorFactory
   public UpdateRequestProcessor getInstance(SolrQueryRequest req,
       SolrQueryResponse rsp, UpdateRequestProcessor next) {
 
-    final boolean isZkAware = 
req.getCore().getCoreContainer().isZooKeeperAware();
+    final boolean isZkAware = req.getCoreContainer().isZooKeeperAware();
 
     DistributedUpdateProcessor distribUpdateProcessor =
         isZkAware ?
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
 
b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
index c58bca8..0df59e6 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
@@ -111,8 +111,8 @@ public class DistributedZkUpdateProcessor extends 
DistributedUpdateProcessor {
   public DistributedZkUpdateProcessor(SolrQueryRequest req,
                                       SolrQueryResponse rsp, 
UpdateRequestProcessor next) {
     super(req, rsp, next);
-    CoreContainer cc = req.getCore().getCoreContainer();
-    cloudDesc = req.getCore().getCoreDescriptor().getCloudDescriptor();
+    CoreContainer cc = req.getCoreContainer();
+    cloudDesc = req.getCloudDescriptor();
     zkController = cc.getZkController();
     distributedClusterStateUpdater = 
zkController.getDistributedClusterStateUpdater();
     cmdDistrib = new SolrCmdDistributor(cc.getUpdateShardHandler());
@@ -149,7 +149,7 @@ public class DistributedZkUpdateProcessor extends 
DistributedUpdateProcessor {
   @Override
   protected Replica.Type computeReplicaType() {
     // can't use cloudDesc since this is called by super class, before the 
constructor instantiates cloudDesc.
-    return 
req.getCore().getCoreDescriptor().getCloudDescriptor().getReplicaType();
+    return req.getCloudDescriptor().getReplicaType();
   }
 
   @Override
@@ -757,7 +757,7 @@ public class DistributedZkUpdateProcessor extends 
DistributedUpdateProcessor {
     // a batch we need to use the _same_ leader replication tracker.
     if (isLeader && leaderReplicationTracker == null) {
       leaderReplicationTracker = new LeaderRequestReplicationTracker(
-          req.getCore().getCoreDescriptor().getCloudDescriptor().getShardId());
+          req.getCloudDescriptor().getShardId());
     }
   }
 
@@ -1246,7 +1246,7 @@ public class DistributedZkUpdateProcessor extends 
DistributedUpdateProcessor {
     // Streaming updates can delay shutdown and cause big update reorderings 
(new streams can't be
     // initiated, but existing streams carry on).  This is why we check if the 
CC is shutdown.
     // See SOLR-8203 and loop HdfsChaosMonkeyNothingIsSafeTest (and check for 
inconsistent shards) to test.
-    if (req.getCore().getCoreContainer().isShutDown()) {
+    if (req.getCoreContainer().isShutDown()) {
       throw new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE, 
"CoreContainer is shutting down.");
     }
 
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
 
b/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
index d95f946..e359a2f 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/RoutedAliasUpdateProcessor.java
@@ -127,7 +127,7 @@ public class RoutedAliasUpdateProcessor extends 
UpdateRequestProcessor {
   }
 
   private static Map<String, String> getAliasProps(SolrQueryRequest req, 
String aliasName) {
-    ZkController zkController = 
req.getCore().getCoreContainer().getZkController();
+    ZkController zkController = req.getCoreContainer().getZkController();
     final Map<String, String> aliasProperties = 
zkController.getZkStateReader().getAliases().getCollectionAliasProperties(aliasName);
     if (aliasProperties.isEmpty()) {
       throw RoutedAlias.newAliasMustExistException(aliasName); // if it did 
exist, we'd have a non-null map
diff --git 
a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
 
b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
index d0cc6d7..eb99317 100644
--- 
a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
+++ 
b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
@@ -134,7 +134,7 @@ public class TolerantUpdateProcessor extends 
UpdateRequestProcessor {
     this.distribPhase = distribPhase;
     assert ! DistribPhase.FROMLEADER.equals(distribPhase);
     
-    this.zkController = 
this.req.getCore().getCoreContainer().getZkController();
+    this.zkController = this.req.getCoreContainer().getZkController();
     this.uniqueKeyField = 
this.req.getCore().getLatestSchema().getUniqueKeyField();
     assert null != uniqueKeyField : "Factory didn't enforce uniqueKey field?";
   }

Reply via email to