You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/01/24 02:18:12 UTC

[lucene-solr] 05/16: @1281 Clean up some MDC core logging.

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

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 65b1ef810d45ea017b20b8daf9e6a8f15832c893
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Jan 21 21:25:12 2021 -0600

    @1281 Clean up some MDC core logging.
---
 .../java/org/apache/solr/cloud/LeaderElector.java  | 223 +++++++++++----------
 .../solr/cloud/RecoveringCoreTermWatcher.java      |   6 +-
 .../java/org/apache/solr/cloud/ZkController.java   |  22 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  80 ++++----
 .../solr/handler/admin/CoreAdminOperation.java     |  51 ++---
 .../apache/solr/update/DefaultSolrCoreState.java   |   6 +-
 6 files changed, 206 insertions(+), 182 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java b/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
index 1e6dc35..c9b7ffe 100644
--- a/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
+++ b/solr/core/src/java/org/apache/solr/cloud/LeaderElector.java
@@ -25,6 +25,7 @@ import org.apache.solr.common.cloud.SolrZooKeeper;
 import org.apache.solr.common.cloud.ZooKeeperException;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.ObjectReleaseTracker;
+import org.apache.solr.logging.MDCLoggingContext;
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.KeeperException.ConnectionLossException;
@@ -119,141 +120,147 @@ public class LeaderElector implements Closeable {
   private synchronized boolean checkIfIamLeader(final ElectionContext context, boolean replacement) throws KeeperException,
           InterruptedException, IOException {
     //if (checkClosed(context)) return false;
-
-    if (log.isDebugEnabled()) log.debug("Check if I am leader {}", context.getClass().getSimpleName());
-    if (isClosed) {
-      log.info("elector is closed, won't join election");
-      return false;
-    }
-
-    executor.submit(() -> {
-      context.checkIfIamLeaderFired();
-    });
-
-    state = CHECK_IF_LEADER;
-    // get all other numbers...
-    final String holdElectionPath = context.electionPath + ELECTION_NODE;
-    List<String> seqs;
-    try {
-      seqs = zkClient.getChildren(holdElectionPath, null, true);
-    } catch (KeeperException.SessionExpiredException e) {
-      log.error("ZooKeeper session has expired");
-      state = OUT_OF_ELECTION;
-      return false;
-    } catch (KeeperException.NoNodeException e) {
-      log.info("the election node disappeared, check if we are the leader again");
-      state = OUT_OF_ELECTION;
-      return false;
-    } catch (KeeperException e) {
-      // we couldn't set our watch for some other reason, retry
-      log.warn("Failed setting election watch, retrying {} {}", e.getClass().getName(), e.getMessage());
-      state = OUT_OF_ELECTION;
-      return true;
-    } catch (Exception e) {
-      // we couldn't set our watch for some other reason, retry
-      log.error("Failed on election getchildren call {} {}", e.getClass().getName(), e.getMessage());
-      state = OUT_OF_ELECTION;
-      return true;
-    }
-
+    MDCLoggingContext.setCoreName(context.leaderProps.getName());
     try {
+      if (log.isDebugEnabled()) log.debug("Check if I am leader {}", context.getClass().getSimpleName());
+      if (isClosed) {
+        log.info("elector is closed, won't join election");
+        return false;
+      }
 
-      sortSeqs(seqs);
+      executor.submit(() -> {
+        context.checkIfIamLeaderFired();
+      });
 
-      String leaderSeqNodeName;
+      state = CHECK_IF_LEADER;
+      // get all other numbers...
+      final String holdElectionPath = context.electionPath + ELECTION_NODE;
+      List<String> seqs;
       try {
-        leaderSeqNodeName = context.leaderSeqPath.substring(context.leaderSeqPath.lastIndexOf('/') + 1);
-      } catch (NullPointerException e) {
+        seqs = zkClient.getChildren(holdElectionPath, null, true);
+      } catch (KeeperException.SessionExpiredException e) {
+        log.error("ZooKeeper session has expired");
         state = OUT_OF_ELECTION;
-        if (log.isDebugEnabled()) log.debug("leaderSeqPath has been removed, bailing");
         return true;
-      }
-      if (!seqs.contains(leaderSeqNodeName)) {
-        log.warn("Our node is no longer in line to be leader");
+      } catch (KeeperException.NoNodeException e) {
+        log.info("the election node disappeared");
         state = OUT_OF_ELECTION;
         return false;
+      } catch (KeeperException e) {
+        // we couldn't set our watch for some other reason, retry
+        log.warn("Failed setting election watch, retrying {} {}", e.getClass().getName(), e.getMessage());
+        state = OUT_OF_ELECTION;
+        return true;
+      } catch (Exception e) {
+        // we couldn't set our watch for some other reason, retry
+        log.error("Failed on election getchildren call {} {}", e.getClass().getName(), e.getMessage());
+        state = OUT_OF_ELECTION;
+        return true;
       }
-      if (log.isDebugEnabled()) log.debug("The leader election node is {}", leaderSeqNodeName);
-      if (leaderSeqNodeName.equals(seqs.get(0))) {
-        // I am the leader
-        if (log.isDebugEnabled()) log.debug("I am the potential leader {}, running leader process", context.leaderProps.getName());
-        ElectionWatcher oldWatcher = watcher;
-        if (oldWatcher != null) {
-          oldWatcher.close();
-        }
-
-        if ((zkController != null && zkController.getCoreContainer().isShutDown())) {
-          if (log.isDebugEnabled()) log.debug("Elector is closed, will not try and run leader processes");
-          state = OUT_OF_ELECTION;
-          return false;
-        }
 
-        state = POT_LEADER;
-        runIamLeaderProcess(context, replacement);
-        return false;
+      try {
 
-      } else {
+        sortSeqs(seqs);
 
-        String toWatch = seqs.get(0);
-        for (String node : seqs) {
-          if (leaderSeqNodeName.equals(node)) {
-            break;
-          }
-          toWatch = node;
-        }
+        String leaderSeqNodeName;
         try {
-          String watchedNode = holdElectionPath + "/" + toWatch;
-
-          log.info("I am not the leader (our path is ={}) - watch the node below me {} seqs={}", leaderSeqNodeName, watchedNode, seqs);
-
+          leaderSeqNodeName = context.leaderSeqPath.substring(context.leaderSeqPath.lastIndexOf('/') + 1);
+        } catch (NullPointerException e) {
+          state = OUT_OF_ELECTION;
+          if (log.isDebugEnabled()) log.debug("leaderSeqPath has been removed, bailing");
+          return true;
+        }
+        if (!seqs.contains(leaderSeqNodeName)) {
+          log.warn("Our node is no longer in line to be leader");
+          state = OUT_OF_ELECTION;
+          return false;
+        }
+        if (log.isDebugEnabled()) log.debug("The leader election node is {}", leaderSeqNodeName);
+        if (leaderSeqNodeName.equals(seqs.get(0))) {
+          // I am the leader
+          if (log.isDebugEnabled()) log.debug("I am the potential leader {}, running leader process", context.leaderProps.getName());
           ElectionWatcher oldWatcher = watcher;
           if (oldWatcher != null) {
-            IOUtils.closeQuietly(oldWatcher);
+            oldWatcher.close();
           }
 
-          watcher = new ElectionWatcher(context.leaderSeqPath, watchedNode, context);
-          Stat exists = zkClient.exists(watchedNode, watcher);
-          if (exists == null) {
+          if ((zkController != null && zkController.getCoreContainer().isShutDown())) {
+            if (log.isDebugEnabled()) log.debug("Elector is closed, will not try and run leader processes");
             state = OUT_OF_ELECTION;
-            return true;
+            return false;
           }
 
-          state = WAITING_IN_ELECTION;
-          if (log.isDebugEnabled()) log.debug("Watching path {} to know if I could be the leader, my node is {}", watchedNode, context.leaderSeqPath);
-
+          state = POT_LEADER;
+          runIamLeaderProcess(context, replacement);
           return false;
-        } catch (KeeperException.SessionExpiredException e) {
-          state = OUT_OF_ELECTION;
-          log.error("ZooKeeper session has expired");
-          throw e;
-        } catch (KeeperException.NoNodeException e) {
-          log.info("the previous node disappeared, check if we are the leader again");
 
-        } catch (KeeperException e) {
-          // we couldn't set our watch for some other reason, retry
-          log.warn("Failed setting election watch, retrying {} {}", e.getClass().getName(), e.getMessage());
+        } else {
+
+          String toWatch = seqs.get(0);
+          for (String node : seqs) {
+            if (leaderSeqNodeName.equals(node)) {
+              break;
+            }
+            toWatch = node;
+          }
+          try {
+            String watchedNode = holdElectionPath + "/" + toWatch;
 
-        } catch (Exception e) {
-          state = OUT_OF_ELECTION;
-          // we couldn't set our watch for some other reason, retry
-          log.error("Failed setting election watch {} {}", e.getClass().getName(), e.getMessage());
+            log.info("I am not the leader (our path is ={}) - watch the node below me {} seqs={}", leaderSeqNodeName, watchedNode, seqs);
+
+            ElectionWatcher oldWatcher = watcher;
+            if (oldWatcher != null) {
+              IOUtils.closeQuietly(oldWatcher);
+            }
+
+            watcher = new ElectionWatcher(context.leaderSeqPath, watchedNode, context);
+            Stat exists = zkClient.exists(watchedNode, watcher);
+            if (exists == null) {
+              state = OUT_OF_ELECTION;
+              return true;
+            }
+
+            state = WAITING_IN_ELECTION;
+            if (log.isDebugEnabled()) log.debug("Watching path {} to know if I could be the leader, my node is {}", watchedNode, context.leaderSeqPath);
+
+            return false;
+          } catch (KeeperException.SessionExpiredException e) {
+            state = OUT_OF_ELECTION;
+            log.error("ZooKeeper session has expired");
+            return true;
+          } catch (KeeperException.NoNodeException e) {
+            log.info("the previous node disappeared, check if we are the leader again");
+            state = OUT_OF_ELECTION;
+            return true;
+          } catch (KeeperException e) {
+            // we couldn't set our watch for some other reason, retry
+            log.warn("Failed setting election watch, retrying {} {}", e.getClass().getName(), e.getMessage());
+            state = OUT_OF_ELECTION;
+            return true;
+          } catch (Exception e) {
+            state = OUT_OF_ELECTION;
+            // we couldn't set our watch for some other reason, retry
+            log.error("Failed setting election watch {} {}", e.getClass().getName(), e.getMessage());
+            state = OUT_OF_ELECTION;
+            return true;
+          }
         }
+
+      } catch (KeeperException.SessionExpiredException e) {
+        log.error("ZooKeeper session has expired");
+        state = OUT_OF_ELECTION;
+        return true;
+      } catch (AlreadyClosedException e) {
+        state = OUT_OF_ELECTION;
+        return true;
+      } catch (Exception e) {
+        state = OUT_OF_ELECTION;
+        return true;
       }
 
-    } catch (KeeperException.SessionExpiredException e) {
-      log.error("ZooKeeper session has expired");
-      state = OUT_OF_ELECTION;
-      return false;
-    } catch (AlreadyClosedException e) {
-      state = OUT_OF_ELECTION;
-      return false;
-    } catch (Exception e) {
-      state = OUT_OF_ELECTION;
-      return true;
+    } finally {
+      MDCLoggingContext.clear();
     }
-
-    state = OUT_OF_ELECTION;
-    return true;
   }
 
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/RecoveringCoreTermWatcher.java b/solr/core/src/java/org/apache/solr/cloud/RecoveringCoreTermWatcher.java
index 5416b89..3a4d371 100644
--- a/solr/core/src/java/org/apache/solr/cloud/RecoveringCoreTermWatcher.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RecoveringCoreTermWatcher.java
@@ -22,6 +22,7 @@ import org.apache.solr.common.ParWork;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.logging.MDCLoggingContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,8 +51,9 @@ public class RecoveringCoreTermWatcher implements ZkShardTerms.CoreTermWatcher,
   @Override
   public boolean onTermChanged(ShardTerms terms) {
     if (coreContainer.isShutDown()) return false;
+    MDCLoggingContext.setCoreDescriptor(coreContainer, coreDescriptor);
 
-     try {
+    try {
       if (closed) {
         return false;
       }
@@ -74,6 +76,8 @@ public class RecoveringCoreTermWatcher implements ZkShardTerms.CoreTermWatcher,
         log.info("Failed to watch term of core {}", coreDescriptor.getName(), e);
       }
       return false;
+    } finally {
+      MDCLoggingContext.clear();
     }
 
     return true;
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index 1f4ecad..a5a6b19 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -1722,17 +1722,17 @@ public class ZkController implements Closeable, Runnable {
    */
   public void publish(final CoreDescriptor cd, final Replica.State state, boolean updateLastState) throws Exception {
     MDCLoggingContext.setCoreDescriptor(cc, cd);
-    log.info("publishing state={}", state);
-    try (SolrCore core = cc.getCore(cd.getName())) {
-      if ((state == Replica.State.ACTIVE || state == Replica.State.RECOVERING) && (isClosed() || (core != null && core.isClosing()))) {
-        log.info("already closed, won't publish state={}", state);
-        throw new AlreadyClosedException();
+    try {
+      log.info("publishing state={}", state);
+      try (SolrCore core = cc.getCore(cd.getName())) {
+        if ((state == Replica.State.ACTIVE || state == Replica.State.RECOVERING) && (isClosed() || (core != null && core.isClosing()))) {
+          log.info("already closed, won't publish state={}", state);
+          throw new AlreadyClosedException();
+        }
       }
-    }
 
-    // nocommit TODO if we publish anything but ACTIVE, cancel any possible election?
+      // nocommit TODO if we publish anything but ACTIVE, cancel any possible election?
 
-    try {
       String collection = cd.getCloudDescriptor().getCollectionName();
 
       // System.out.println(Thread.currentThread().getStackTrace()[3]);
@@ -1747,10 +1747,10 @@ public class ZkController implements Closeable, Runnable {
       Map<String,Object> props = new HashMap<>();
       props.put(Overseer.QUEUE_OPERATION, "state");
       props.put(ZkStateReader.STATE_PROP, state.toString());
-    //  props.put(ZkStateReader.ROLES_PROP, cd.getCloudDescriptor().getRoles());
+      //  props.put(ZkStateReader.ROLES_PROP, cd.getCloudDescriptor().getRoles());
       props.put(CORE_NAME_PROP, cd.getName());
-    //  props.put(ZkStateReader.NODE_NAME_PROP, getNodeName());
-    //  props.put(ZkStateReader.SHARD_ID_PROP, cd.getCloudDescriptor().getShardId());
+      //  props.put(ZkStateReader.NODE_NAME_PROP, getNodeName());
+      //  props.put(ZkStateReader.SHARD_ID_PROP, cd.getCloudDescriptor().getShardId());
       props.put(ZkStateReader.COLLECTION_PROP, collection);
       props.put(ZkStateReader.REPLICA_TYPE, cd.getCloudDescriptor().getReplicaType().toString());
 
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 7a0c006..54248c2 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -104,6 +104,7 @@ import org.apache.solr.util.SystemIdResolver;
 import org.apache.zookeeper.KeeperException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
 
 import static java.util.Objects.requireNonNull;
 import static org.apache.solr.common.params.CommonParams.AUTHC_PATH;
@@ -920,21 +921,25 @@ public class CoreContainer implements Closeable {
 
           coreLoadFutures.add(solrCoreLoadExecutor.submit(() -> {
             SolrCore core;
+            MDCLoggingContext.setCoreDescriptor(this, cd);
             try {
+              try {
 
-              core = createFromDescriptor(cd, false);
+                core = createFromDescriptor(cd, false);
 
-              if (core.getDirectoryFactory().isSharedStorage()) {
-                if (isZooKeeperAware()) {
-                  zkSys.getZkController().throwErrorIfReplicaReplaced(cd);
+                if (core.getDirectoryFactory().isSharedStorage()) {
+                  if (isZooKeeperAware()) {
+                    zkSys.getZkController().throwErrorIfReplicaReplaced(cd);
+                  }
                 }
-              }
 
+              } finally {
+                solrCores.markCoreAsNotLoading(cd);
+              } if (isZooKeeperAware()) {
+                new ZkController.RegisterCoreAsync(zkSys.zkController, cd, false).call();
+              }
             } finally {
-              solrCores.markCoreAsNotLoading(cd);
-            }
-            if (isZooKeeperAware()) {
-              new ZkController.RegisterCoreAsync(zkSys.zkController, cd, false).call();
+              MDCLoggingContext.clear();
             }
             return core;
           }));
@@ -1406,8 +1411,8 @@ public class CoreContainer implements Closeable {
       ConfigSet coreConfig = coreConfigService.loadConfigSet(dcore);
       dcore.setConfigSetTrusted(coreConfig.isTrusted());
       if (log.isInfoEnabled()) {
-        log.info("Creating SolrCore '{}' using configuration from {} solrconfig={}, trusted={}", dcore.getName(),
-            coreConfig.getName(), coreConfig.getSolrConfig().getName(), dcore.isConfigSetTrusted());
+        log.info("Creating SolrCore '{}' using configuration from {} solrconfig={}, trusted={}", dcore.getName(), coreConfig.getName(), coreConfig.getSolrConfig().getName(),
+            dcore.isConfigSetTrusted());
       }
 
       try {
@@ -1429,14 +1434,13 @@ public class CoreContainer implements Closeable {
 
         old = registerCore(dcore, core, true);
         registered = true;
-      } catch (Exception e){
+      } catch (Exception e) {
 
         throw new SolrException(ErrorCode.SERVER_ERROR, e);
       } finally {
         solrCores.markCoreAsNotLoading(dcore);
       }
 
-
       // always kick off recovery if we are in non-Cloud mode
       if (!isZooKeeperAware() && core.getUpdateHandler().getUpdateLog() != null) {
         core.getUpdateHandler().getUpdateLog().recoverFromLog();
@@ -1452,9 +1456,9 @@ public class CoreContainer implements Closeable {
         unload(dcore.getName(), true, true, true);
         throw e;
       }
-//      if (!registered) {
-//        solrCores.removeCoreDescriptor(dcore);
-//      }
+      //      if (!registered) {
+      //        solrCores.removeCoreDescriptor(dcore);
+      //      }
       final SolrException solrException = new SolrException(ErrorCode.SERVER_ERROR, "Unable to create core [" + dcore.getName() + "]", e);
       throw solrException;
     } catch (Throwable t) {
@@ -1465,33 +1469,35 @@ public class CoreContainer implements Closeable {
 
       throw t;
     } finally {
-
-      if (core != null) {
-        if (!registered) {
-          if (core != null) {
-
+      try {
+        if (core != null) {
+          if (!registered) {
+            if (core != null) {
+
+              SolrCore finalCore1 = core;
+              solrCoreCloseExecutor.submit(() -> {
+                finalCore1.closeAndWait();
+              });
+              SolrCore finalOld = old;
+              solrCoreCloseExecutor.submit(() -> {
+                if (finalOld != null) {
+                  finalOld.closeAndWait();
+                }
+              });
+            }
+          }
+          if (isShutDown) {
             SolrCore finalCore1 = core;
-            solrCoreCloseExecutor.submit(() -> {
+            ParWork.getRootSharedExecutor().submit(() -> {
+
               finalCore1.closeAndWait();
-            });
-            SolrCore finalOld = old;
-            solrCoreCloseExecutor.submit(() -> {
-              if (finalOld != null) {
-                finalOld.closeAndWait();
-              }
+
             });
           }
         }
-        if (isShutDown) {
-          SolrCore finalCore1 = core;
-          ParWork.getRootSharedExecutor().submit(() -> {
-
-            finalCore1.closeAndWait();
-
-          });
-        }
+      } finally {
+        MDCLoggingContext.clear();
       }
-      MDCLoggingContext.clear();
     }
   }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
index 76fab2e..935ee4a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
@@ -43,6 +43,7 @@ import org.apache.solr.core.snapshots.SolrSnapshotManager;
 import org.apache.solr.core.snapshots.SolrSnapshotMetaDataManager;
 import org.apache.solr.core.snapshots.SolrSnapshotMetaDataManager.SnapshotMetaData;
 import org.apache.solr.handler.admin.CoreAdminHandler.CoreAdminOp;
+import org.apache.solr.logging.MDCLoggingContext;
 import org.apache.solr.metrics.SolrMetricManager;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.update.UpdateLog;
@@ -72,35 +73,39 @@ import static org.apache.solr.handler.admin.CoreAdminHandler.normalizePath;
 enum CoreAdminOperation implements CoreAdminOp {
 
   CREATE_OP(CREATE, it -> {
-    assert TestInjection.injectRandomDelayInCoreCreation();
-
     SolrParams params = it.req.getParams();
     log().info("core create command {}", params);
     String coreName = params.required().get(CoreAdminParams.NAME);
-    Map<String, String> coreParams = buildCoreParams(params);
-    CoreContainer coreContainer = it.handler.coreContainer;
-    Path instancePath;
-
-    // TODO: Should we nuke setting odd instance paths?  They break core discovery, generally
-    String instanceDir = it.req.getParams().get(CoreAdminParams.INSTANCE_DIR);
-    if (instanceDir == null)
-      instanceDir = it.req.getParams().get("property.instanceDir");
-    if (instanceDir != null) {
-      instanceDir = PropertiesUtil.substituteProperty(instanceDir, coreContainer.getContainerProperties());
-      instancePath = coreContainer.getCoreRootDirectory().resolve(instanceDir).normalize();
-    } else {
-      instancePath = coreContainer.getCoreRootDirectory().resolve(coreName);
-    }
+    MDCLoggingContext.setCoreName(coreName);
+    try {
+      assert TestInjection.injectRandomDelayInCoreCreation();
+
+      Map<String,String> coreParams = buildCoreParams(params);
+      CoreContainer coreContainer = it.handler.coreContainer;
+      Path instancePath;
+
+      // TODO: Should we nuke setting odd instance paths?  They break core discovery, generally
+      String instanceDir = it.req.getParams().get(CoreAdminParams.INSTANCE_DIR);
+      if (instanceDir == null) instanceDir = it.req.getParams().get("property.instanceDir");
+      if (instanceDir != null) {
+        instanceDir = PropertiesUtil.substituteProperty(instanceDir, coreContainer.getContainerProperties());
+        instancePath = coreContainer.getCoreRootDirectory().resolve(instanceDir).normalize();
+      } else {
+        instancePath = coreContainer.getCoreRootDirectory().resolve(coreName);
+      }
 
-    boolean newCollection = params.getBool(CoreAdminParams.NEW_COLLECTION, false);
-    if (coreContainer.isShutDown()) {
-      log().warn("Will not create SolrCore, CoreContainer is shutdown");
-      throw new AlreadyClosedException("Will not create SolrCore, CoreContainer is shutdown");
-    }
+      boolean newCollection = params.getBool(CoreAdminParams.NEW_COLLECTION, false);
+      if (coreContainer.isShutDown()) {
+        log().warn("Will not create SolrCore, CoreContainer is shutdown");
+        throw new AlreadyClosedException("Will not create SolrCore, CoreContainer is shutdown");
+      }
 
-    coreContainer.create(coreName, instancePath, coreParams, newCollection);
+      coreContainer.create(coreName, instancePath, coreParams, newCollection);
 
-    it.rsp.add("core", coreName);
+      it.rsp.add("core", coreName);
+    } finally {
+      MDCLoggingContext.clear();
+    }
   }),
   UNLOAD_OP(UNLOAD, it -> {
     SolrParams params = it.req.getParams();
diff --git a/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java b/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
index 7c1f4f5..c8f29cd 100644
--- a/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
+++ b/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
@@ -320,13 +320,14 @@ public final class DefaultSolrCoreState extends SolrCoreState implements Recover
     CoreContainer corecontainer = core.getCoreContainer();
 
     Runnable recoveryTask = () -> {
+      CoreDescriptor coreDescriptor = core.getCoreDescriptor();
+      MDCLoggingContext.setCoreDescriptor(corecontainer, coreDescriptor);
       try {
         if (SKIP_AUTO_RECOVERY) {
           log.warn("Skipping recovery according to sys prop solrcloud.skip.autorecovery");
           return;
         }
-        CoreDescriptor coreDescriptor = core.getCoreDescriptor();
-        MDCLoggingContext.setCoreDescriptor(corecontainer, coreDescriptor);
+
         if (log.isDebugEnabled()) log.debug("Going to create and run RecoveryStrategy");
 
 //        try {
@@ -420,6 +421,7 @@ public final class DefaultSolrCoreState extends SolrCoreState implements Recover
       if (!success) {
         recoverying = false;
       }
+
     }
   }