You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2019/06/25 07:02:40 UTC

[lucene-solr] branch master updated: reformatting

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 742c805  reformatting
742c805 is described below

commit 742c80550c3c353f6b420e7f39487b78f034eb12
Author: Noble Paul <no...@apache.org>
AuthorDate: Tue Jun 25 17:02:17 2019 +1000

    reformatting
---
 .../java/org/apache/solr/core/BlobRepository.java  |  54 +-
 .../apache/solr/core/CachingDirectoryFactory.java  | 106 ++--
 .../src/java/org/apache/solr/core/CloudConfig.java |  20 +-
 .../org/apache/solr/core/ConfigSetProperties.java  |   4 +-
 .../java/org/apache/solr/core/CoreContainer.java   | 209 ++++----
 .../src/java/org/apache/solr/core/SolrCore.java    | 591 +++++++++++----------
 .../solr/handler/admin/CollectionsHandler.java     | 124 ++---
 .../apache/solr/common/cloud/ZkStateReader.java    | 255 +++++----
 8 files changed, 720 insertions(+), 643 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/BlobRepository.java b/solr/core/src/java/org/apache/solr/core/BlobRepository.java
index b9a1e73..24bb88e 100644
--- a/solr/core/src/java/org/apache/solr/core/BlobRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/BlobRepository.java
@@ -60,7 +60,7 @@ import static org.apache.solr.common.cloud.ZkStateReader.BASE_URL_PROP;
  * The purpose of this class is to store the Jars loaded in memory and to keep only one copy of the Jar in a single node.
  */
 public class BlobRepository {
-  private static final long MAX_JAR_SIZE = Long.parseLong(System.getProperty("runtme.lib.size", String.valueOf(5* 1024*1024)));
+  private static final long MAX_JAR_SIZE = Long.parseLong(System.getProperty("runtme.lib.size", String.valueOf(5 * 1024 * 1024)));
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   static final Random RANDOM;
   static final Pattern BLOB_KEY_PATTERN_CHECKER = Pattern.compile(".*/\\d+");
@@ -89,8 +89,9 @@ public class BlobRepository {
   }
 
   // I wanted to {@link SolrCore#loadDecodeAndCacheBlob(String, Decoder)} below but precommit complains
+
   /**
-   * Returns the contents of a blob containing a ByteBuffer and increments a reference count. Please return the 
+   * Returns the contents of a blob containing a ByteBuffer and increments a reference count. Please return the
    * same object to decrease the refcount. This is normally used for storing jar files, and binary raw data.
    * If you are caching Java Objects you want to use {@code SolrCore#loadDecodeAndCacheBlob(String, Decoder)}
    *
@@ -98,27 +99,27 @@ public class BlobRepository {
    * @return The reference of a blob
    */
   public BlobContentRef<ByteBuffer> getBlobIncRef(String key) {
-   return getBlobIncRef(key, () -> addBlob(key));
+    return getBlobIncRef(key, () -> addBlob(key));
   }
-  
+
   /**
-   * Internal method that returns the contents of a blob and increments a reference count. Please return the same 
-   * object to decrease the refcount. Only the decoded content will be cached when this method is used. Component 
-   * authors attempting to share objects across cores should use 
+   * Internal method that returns the contents of a blob and increments a reference count. Please return the same
+   * object to decrease the refcount. Only the decoded content will be cached when this method is used. Component
+   * authors attempting to share objects across cores should use
    * {@code SolrCore#loadDecodeAndCacheBlob(String, Decoder)} which ensures that a proper close hook is also created.
    *
-   * @param key it is a combination of blob name and version like blobName/version
+   * @param key     it is a combination of blob name and version like blobName/version
    * @param decoder a decoder that knows how to interpret the bytes from the blob
    * @return The reference of a blob
    */
   BlobContentRef<Object> getBlobIncRef(String key, Decoder<Object> decoder) {
-    return getBlobIncRef(key.concat(decoder.getName()), () -> addBlob(key,decoder));
+    return getBlobIncRef(key.concat(decoder.getName()), () -> addBlob(key, decoder));
   }
 
   BlobContentRef getBlobIncRef(String key, Decoder decoder, String url, String sha512) {
     StringBuffer keyBuilder = new StringBuffer(key);
-    if (decoder != null) keyBuilder .append( decoder.getName());
-    keyBuilder.append("/").append( sha512);
+    if (decoder != null) keyBuilder.append(decoder.getName());
+    keyBuilder.append("/").append(sha512);
 
     return getBlobIncRef(keyBuilder.toString(), () -> new BlobContent<>(key, fetchBlobAndVerify(key, url, sha512), decoder));
   }
@@ -133,7 +134,7 @@ public class BlobRepository {
           try {
             aBlob = blobCreator.call();
           } catch (Exception e) {
-            throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Blob loading failed: "+e.getMessage(), e);
+            throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Blob loading failed: " + e.getMessage(), e);
           }
         }
       }
@@ -151,7 +152,7 @@ public class BlobRepository {
   // For use cases sharing raw bytes
   private BlobContent<ByteBuffer> addBlob(String key) {
     ByteBuffer b = fetchBlob(key);
-    BlobContent<ByteBuffer> aBlob  = new BlobContent<>(key, b);
+    BlobContent<ByteBuffer> aBlob = new BlobContent<>(key, b);
     blobs.put(key, aBlob);
     return aBlob;
   }
@@ -159,11 +160,12 @@ public class BlobRepository {
   // for use cases sharing java objects
   private BlobContent<Object> addBlob(String key, Decoder<Object> decoder) {
     ByteBuffer b = fetchBlob(key);
-    String  keyPlusName = key + decoder.getName();
+    String keyPlusName = key + decoder.getName();
     BlobContent<Object> aBlob = new BlobContent<>(keyPlusName, b, decoder);
     blobs.put(keyPlusName, aBlob);
     return aBlob;
   }
+
   static String INVALID_JAR_MSG = "Invalid jar from {0} , expected sha512 hash : {1} , actual : {2}";
 
   private ByteBuffer fetchBlobAndVerify(String key, String url, String sha512) {
@@ -193,7 +195,7 @@ public class BlobRepository {
 
 
   /**
-   *  Package local for unit tests only please do not use elsewhere
+   * Package local for unit tests only please do not use elsewhere
    */
   ByteBuffer fetchBlob(String key) {
     Replica replica = getSystemCollReplica();
@@ -234,9 +236,11 @@ public class BlobRepository {
     ZkStateReader zkStateReader = this.coreContainer.getZkController().getZkStateReader();
     ClusterState cs = zkStateReader.getClusterState();
     DocCollection coll = cs.getCollectionOrNull(CollectionAdminParams.SYSTEM_COLL);
-    if (coll == null) throw new SolrException(SERVICE_UNAVAILABLE, CollectionAdminParams.SYSTEM_COLL + " collection not available");
+    if (coll == null)
+      throw new SolrException(SERVICE_UNAVAILABLE, CollectionAdminParams.SYSTEM_COLL + " collection not available");
     ArrayList<Slice> slices = new ArrayList<>(coll.getActiveSlices());
-    if (slices.isEmpty()) throw new SolrException(SERVICE_UNAVAILABLE, "No active slices for " + CollectionAdminParams.SYSTEM_COLL + " collection");
+    if (slices.isEmpty())
+      throw new SolrException(SERVICE_UNAVAILABLE, "No active slices for " + CollectionAdminParams.SYSTEM_COLL + " collection");
     Collections.shuffle(slices, RANDOM); //do load balancing
 
     Replica replica = null;
@@ -245,7 +249,7 @@ public class BlobRepository {
       Collections.shuffle(replicas, RANDOM);
       for (Replica r : replicas) {
         if (r.getState() == Replica.State.ACTIVE) {
-          if(zkStateReader.getClusterState().getLiveNodes().contains(r.get(ZkStateReader.NODE_NAME_PROP))){
+          if (zkStateReader.getClusterState().getLiveNodes().contains(r.get(ZkStateReader.NODE_NAME_PROP))) {
             replica = r;
             break;
           } else {
@@ -291,12 +295,12 @@ public class BlobRepository {
     @SuppressWarnings("unchecked")
     public BlobContent(String key, ByteBuffer buffer) {
       this.key = key;
-      this.content = (T) buffer; 
+      this.content = (T) buffer;
     }
 
     /**
-     * Get the cached object. 
-     * 
+     * Get the cached object.
+     *
      * @return the object representing the content that is cached.
      */
     public T get() {
@@ -310,14 +314,16 @@ public class BlobRepository {
     /**
      * A name by which to distinguish this decoding. This only needs to be implemented if you want to support
      * decoding the same blob content with more than one decoder.
-     * 
+     *
      * @return The name of the decoding, defaults to empty string.
      */
-    default String getName() { return ""; }
+    default String getName() {
+      return "";
+    }
 
     /**
      * A routine that knows how to convert the stream of bytes from the blob into a Java object.
-     * 
+     *
      * @param inputStream the bytes from a blob
      * @return A Java object of the specified type.
      */
diff --git a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
index 8b8c740..24f5a23 100644
--- a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
@@ -44,9 +44,8 @@ import org.slf4j.LoggerFactory;
  * A {@link DirectoryFactory} impl base class for caching Directory instances
  * per path. Most DirectoryFactory implementations will want to extend this
  * class and simply implement {@link DirectoryFactory#create(String, LockFactory, DirContext)}.
- * 
+ * <p>
  * This is an expert class and these API's are subject to change.
- * 
  */
 public abstract class CachingDirectoryFactory extends DirectoryFactory {
   protected static class CacheValue {
@@ -56,7 +55,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
     //final Exception originTrace;
     // use the setter!
     private boolean deleteOnClose = false;
-    
+
     public CacheValue(String path, Directory directory) {
       this.path = path;
       this.directory = directory;
@@ -64,6 +63,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       // for debug
       // this.originTrace = new RuntimeException("Originated from:");
     }
+
     public int refCnt = 1;
     // has doneWithDirectory(Directory) been called on this?
     public boolean closeCacheValueCalled = false;
@@ -79,21 +79,21 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       this.deleteOnClose = deleteOnClose;
       this.deleteAfterCoreClose = deleteAfterCoreClose;
     }
-    
+
     @Override
     public String toString() {
       return "CachedDir<<" + "refCount=" + refCnt + ";path=" + path + ";done=" + doneWithDir + ">>";
     }
   }
-  
+
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  
-  protected Map<String,CacheValue> byPathCache = new HashMap<>();
-  
-  protected Map<Directory,CacheValue> byDirectoryCache = new IdentityHashMap<>();
-  
-  protected Map<Directory,List<CloseListener>> closeListeners = new HashMap<>();
-  
+
+  protected Map<String, CacheValue> byPathCache = new HashMap<>();
+
+  protected Map<Directory, CacheValue> byDirectoryCache = new IdentityHashMap<>();
+
+  protected Map<Directory, List<CloseListener>> closeListeners = new HashMap<>();
+
   protected Set<CacheValue> removeEntries = new HashSet<>();
 
   private Double maxWriteMBPerSecFlush;
@@ -105,13 +105,13 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
   private Double maxWriteMBPerSecDefault;
 
   private boolean closed;
-  
+
   public interface CloseListener {
     public void postClose();
 
     public void preClose();
   }
-  
+
   @Override
   public void addCloseListener(Directory dir, CloseListener closeListener) {
     synchronized (this) {
@@ -125,11 +125,11 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
         closeListeners.put(dir, listeners);
       }
       listeners.add(closeListener);
-      
+
       closeListeners.put(dir, listeners);
     }
   }
-  
+
   @Override
   public void doneWithDirectory(Directory directory) throws IOException {
     synchronized (this) {
@@ -148,10 +148,10 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       }
     }
   }
-  
+
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see org.apache.solr.core.DirectoryFactory#close()
    */
   @Override
@@ -161,15 +161,15 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       this.closed = true;
       Collection<CacheValue> values = byDirectoryCache.values();
       for (CacheValue val : values) {
-        log.debug("Closing {} - currently tracking: {}", 
-                  this.getClass().getSimpleName(), val);
+        log.debug("Closing {} - currently tracking: {}",
+            this.getClass().getSimpleName(), val);
         try {
           // if there are still refs out, we have to wait for them
           assert val.refCnt > -1 : val.refCnt;
           int cnt = 0;
-          while(val.refCnt != 0) {
+          while (val.refCnt != 0) {
             wait(100);
-            
+
             if (cnt++ >= 120) {
               String msg = "Timeout waiting for all directory ref counts to be released - gave up waiting on " + val;
               log.error(msg);
@@ -183,7 +183,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
           SolrException.log(log, "Error closing directory", e);
         }
       }
-      
+
       values = byDirectoryCache.values();
       Set<CacheValue> closedDirs = new HashSet<>();
       for (CacheValue val : values) {
@@ -209,7 +209,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
           SolrException.log(log, "Error removing directory", e);
         }
       }
-      
+
       for (CacheValue v : closedDirs) {
         removeFromCache(v);
       }
@@ -240,7 +240,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
     if (cacheValue.deleteOnClose) {
       // see if we are a subpath
       Collection<CacheValue> values = byPathCache.values();
-      
+
       Collection<CacheValue> cacheValues = new ArrayList<>(values);
       cacheValues.remove(cacheValue);
       for (CacheValue otherCacheValue : cacheValues) {
@@ -279,7 +279,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
         removeEntries.add(val);
       }
     }
-    
+
     if (listeners != null) {
       for (CloseListener listener : listeners) {
         try {
@@ -311,38 +311,38 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
   private boolean isSubPath(CacheValue cacheValue, CacheValue otherCacheValue) {
     int one = cacheValue.path.lastIndexOf('/');
     int two = otherCacheValue.path.lastIndexOf('/');
-    
+
     return otherCacheValue.path.startsWith(cacheValue.path + "/") && two > one;
   }
-  
+
   @Override
   public boolean exists(String path) throws IOException {
     // back compat behavior
     File dirFile = new File(path);
     return dirFile.canRead() && dirFile.list().length > 0;
   }
-  
+
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see org.apache.solr.core.DirectoryFactory#get(java.lang.String,
    * java.lang.String, boolean)
    */
   @Override
-  public final Directory get(String path,  DirContext dirContext, String rawLockType)
+  public final Directory get(String path, DirContext dirContext, String rawLockType)
       throws IOException {
     String fullPath = normalize(path);
     synchronized (this) {
       if (closed) {
         throw new AlreadyClosedException("Already closed");
       }
-      
+
       final CacheValue cacheValue = byPathCache.get(fullPath);
       Directory directory = null;
       if (cacheValue != null) {
         directory = cacheValue.directory;
       }
-      
+
       if (directory == null) {
         directory = create(fullPath, createLockFactory(rawLockType), dirContext);
         assert ObjectReleaseTracker.track(directory);
@@ -362,14 +362,14 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
         cacheValue.refCnt++;
         log.debug("Reusing cached directory: {}", cacheValue);
       }
-      
+
       return directory;
     }
   }
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see
    * org.apache.solr.core.DirectoryFactory#incRef(org.apache.lucene.store.Directory
    * )
@@ -384,12 +384,12 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       if (cacheValue == null) {
         throw new IllegalArgumentException("Unknown directory: " + directory);
       }
-      
+
       cacheValue.refCnt++;
       log.debug("incRef'ed: {}", cacheValue);
     }
   }
-  
+
   @Override
   public void init(NamedList args) {
     maxWriteMBPerSecFlush = (Double) args.get("maxWriteMBPerSecFlush");
@@ -405,10 +405,10 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       log.info(SolrXmlConfig.SOLR_DATA_HOME + "=" + dataHomePath);
     }
   }
-  
+
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see
    * org.apache.solr.core.DirectoryFactory#release(org.apache.lucene.store.Directory
    * )
@@ -421,7 +421,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
     synchronized (this) {
       // don't check if already closed here - we need to able to release
       // while #close() waits.
-      
+
       CacheValue cacheValue = byDirectoryCache.get(directory);
       if (cacheValue == null) {
         throw new IllegalArgumentException("Unknown directory: " + directory
@@ -430,7 +430,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       log.debug("Releasing directory: " + cacheValue.path + " " + (cacheValue.refCnt - 1) + " " + cacheValue.doneWithDir);
 
       cacheValue.refCnt--;
-      
+
       assert cacheValue.refCnt >= 0 : cacheValue.refCnt;
 
       if (cacheValue.refCnt == 0 && cacheValue.doneWithDir && !closed) {
@@ -441,17 +441,17 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       }
     }
   }
-  
+
   @Override
   public void remove(String path) throws IOException {
     remove(path, false);
   }
-  
+
   @Override
   public void remove(Directory dir) throws IOException {
     remove(dir, false);
   }
-  
+
   @Override
   public void remove(String path, boolean deleteAfterCoreClose) throws IOException {
     synchronized (this) {
@@ -462,7 +462,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       val.setDeleteOnClose(true, deleteAfterCoreClose);
     }
   }
-  
+
   @Override
   public void remove(Directory dir, boolean deleteAfterCoreClose) throws IOException {
     synchronized (this) {
@@ -473,28 +473,28 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
       val.setDeleteOnClose(true, deleteAfterCoreClose);
     }
   }
-  
+
   protected synchronized void removeDirectory(CacheValue cacheValue) throws IOException {
-     // this page intentionally left blank
+    // this page intentionally left blank
   }
-  
+
   @Override
   public String normalize(String path) throws IOException {
     path = stripTrailingSlash(path);
     return path;
   }
-  
+
   protected String stripTrailingSlash(String path) {
     if (path.endsWith("/")) {
       path = path.substring(0, path.length() - 1);
     }
     return path;
   }
-  
+
   /**
    * Method for inspecting the cache
-   * @return paths in the cache which have not been marked "done"
    *
+   * @return paths in the cache which have not been marked "done"
    * @see #doneWithDirectory
    */
   public synchronized Set<String> getLivePaths() {
@@ -506,7 +506,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
     }
     return livePaths;
   }
-  
+
   @Override
   protected boolean deleteOldIndexDirectory(String oldDirPath) throws IOException {
     Set<String> livePaths = getLivePaths();
@@ -517,7 +517,7 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
 
     return super.deleteOldIndexDirectory(oldDirPath);
   }
-  
+
   protected synchronized String getPath(Directory directory) {
     return byDirectoryCache.get(directory).path;
   }
diff --git a/solr/core/src/java/org/apache/solr/core/CloudConfig.java b/solr/core/src/java/org/apache/solr/core/CloudConfig.java
index 15ccf3c..4d0f410 100644
--- a/solr/core/src/java/org/apache/solr/core/CloudConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/CloudConfig.java
@@ -41,12 +41,12 @@ public class CloudConfig {
   private final String zkCredentialsProviderClass;
 
   private final String zkACLProviderClass;
-  
+
   private final int createCollectionWaitTimeTillActive;
-  
+
   private final boolean createCollectionCheckLeaderActive;
 
-  CloudConfig(String zkHost, int zkClientTimeout, int hostPort, String hostName, String hostContext, boolean useGenericCoreNames, 
+  CloudConfig(String zkHost, int zkClientTimeout, int hostPort, String hostName, String hostContext, boolean useGenericCoreNames,
               int leaderVoteWait, int leaderConflictResolveWait, int autoReplicaFailoverWaitAfterExpiration,
               String zkCredentialsProviderClass, String zkACLProviderClass, int createCollectionWaitTimeTillActive,
               boolean createCollectionCheckLeaderActive) {
@@ -128,8 +128,8 @@ public class CloudConfig {
     private static final int DEFAULT_LEADER_VOTE_WAIT = 180000;  // 3 minutes
     private static final int DEFAULT_LEADER_CONFLICT_RESOLVE_WAIT = 180000;
     private static final int DEFAULT_CREATE_COLLECTION_ACTIVE_WAIT = 45;  // 45 seconds
-    private static final boolean DEFAULT_CREATE_COLLECTION_CHECK_LEADER_ACTIVE = false; 
- 
+    private static final boolean DEFAULT_CREATE_COLLECTION_CHECK_LEADER_ACTIVE = false;
+
     private static final int DEFAULT_AUTO_REPLICA_FAILOVER_WAIT_AFTER_EXPIRATION = 120000;
 
     private String zkHost = System.getProperty("zkHost");
@@ -200,16 +200,16 @@ public class CloudConfig {
       this.createCollectionWaitTimeTillActive = createCollectionWaitTimeTillActive;
       return this;
     }
-    
+
     public CloudConfigBuilder setCreateCollectionCheckLeaderActive(boolean createCollectionCheckLeaderActive) {
       this.createCollectionCheckLeaderActive = createCollectionCheckLeaderActive;
       return this;
     }
-    
+
     public CloudConfig build() {
-      return new CloudConfig(zkHost, zkClientTimeout, hostPort, hostName, hostContext, useGenericCoreNames, leaderVoteWait, 
-                             leaderConflictResolveWait, autoReplicaFailoverWaitAfterExpiration, zkCredentialsProviderClass, zkACLProviderClass, createCollectionWaitTimeTillActive,
-                             createCollectionCheckLeaderActive);
+      return new CloudConfig(zkHost, zkClientTimeout, hostPort, hostName, hostContext, useGenericCoreNames, leaderVoteWait,
+          leaderConflictResolveWait, autoReplicaFailoverWaitAfterExpiration, zkCredentialsProviderClass, zkACLProviderClass, createCollectionWaitTimeTillActive,
+          createCollectionCheckLeaderActive);
     }
   }
 }
diff --git a/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java b/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java
index 3ecffe1..703fc09 100644
--- a/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java
+++ b/solr/core/src/java/org/apache/solr/core/ConfigSetProperties.java
@@ -42,7 +42,7 @@ public class ConfigSetProperties {
    * Return the properties associated with the ConfigSet (e.g. immutable)
    *
    * @param loader the resource loader
-   * @param name the name of the config set properties file
+   * @param name   the name of the config set properties file
    * @return the properties in a NamedList
    */
   public static NamedList readFromResourceLoader(SolrResourceLoader loader, String name) {
@@ -70,7 +70,7 @@ public class ConfigSetProperties {
         final String objectClass = object == null ? "null" : object.getClass().getName();
         throw new SolrException(ErrorCode.SERVER_ERROR, "Invalid JSON type " + objectClass + ", expected Map");
       }
-      return new NamedList((Map)object);
+      return new NamedList((Map) object);
     } catch (Exception ex) {
       throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to load ConfigSet properties", ex);
     } finally {
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 625fbac..3552343 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -134,7 +134,6 @@ import static org.apache.solr.core.CorePropertiesLocator.PROPERTIES_FILENAME;
 import static org.apache.solr.security.AuthenticationPlugin.AUTHENTICATION_PLUGIN_PROP;
 
 /**
- *
  * @since solr 1.3
  */
 public class CoreContainer {
@@ -175,7 +174,7 @@ public class CoreContainer {
   private volatile UpdateShardHandler updateShardHandler;
 
   private volatile ExecutorService coreContainerWorkExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(
-      new DefaultSolrThreadFactory("coreContainerWorkExecutor") );
+      new DefaultSolrThreadFactory("coreContainerWorkExecutor"));
 
   private final OrderedExecutor replayUpdatesExecutor;
 
@@ -204,7 +203,7 @@ public class CoreContainer {
   private volatile SecurityPluginHolder<AuthenticationPlugin> authenticationPlugin;
 
   private SecurityPluginHolder<AuditLoggerPlugin> auditloggerPlugin;
-  
+
   private volatile BackupRepositoryFactory backupRepoFactory;
 
   protected volatile SolrMetricManager metricManager;
@@ -230,7 +229,7 @@ public class CoreContainer {
 
   private ExecutorService coreContainerAsyncTaskExecutor = ExecutorUtil.newMDCAwareCachedThreadPool("Core Container Async Task");
 
-  private enum CoreInitFailedAction { fromleader, none }
+  private enum CoreInitFailedAction {fromleader, none}
 
   /**
    * This method instantiates a new instance of {@linkplain BackupRepository}.
@@ -268,6 +267,7 @@ public class CoreContainer {
   /**
    * Create a new CoreContainer using system properties to detect the solr home
    * directory.  The container's cores are not loaded.
+   *
    * @see #load()
    */
   public CoreContainer() {
@@ -277,6 +277,7 @@ public class CoreContainer {
   /**
    * Create a new CoreContainer using the given SolrResourceLoader.  The container's
    * cores are not loaded.
+   *
    * @param loader the SolrResourceLoader
    * @see #load()
    */
@@ -287,6 +288,7 @@ public class CoreContainer {
   /**
    * Create a new CoreContainer using the given solr home directory.  The container's
    * cores are not loaded.
+   *
    * @param solrHome a String containing the path to the solr home directory
    * @see #load()
    */
@@ -298,6 +300,7 @@ public class CoreContainer {
    * Create a new CoreContainer using the given SolrResourceLoader,
    * configuration and CoresLocator.  The container's cores are
    * not loaded.
+   *
    * @param config a ConfigSolr representation of this container's configuration
    * @see #load()
    */
@@ -399,10 +402,10 @@ public class CoreContainer {
       } catch (Exception e) {
         log.error("Exception while attempting to close old auditlogger plugin", e);
       }
-    }    
+    }
   }
 
-  
+
   private synchronized void initializeAuthenticationPlugin(Map<String, Object> authenticationConfig) {
     authenticationConfig = Utils.getDeepCopy(authenticationConfig, 4);
     int newVersion = readVersion(authenticationConfig);
@@ -416,7 +419,7 @@ public class CoreContainer {
     }
 
     if (pluginClassName != null) {
-      log.debug("Authentication plugin class obtained from security.json: "+pluginClassName);
+      log.debug("Authentication plugin class obtained from security.json: " + pluginClassName);
     } else if (System.getProperty(AUTHENTICATION_PLUGIN_PROP) != null) {
       pluginClassName = System.getProperty(AUTHENTICATION_PLUGIN_PROP);
       log.debug("Authentication plugin class obtained from system property '" +
@@ -529,7 +532,8 @@ public class CoreContainer {
 
   /**
    * Create a new CoreContainer and load its cores
-   * @param solrHome the solr home directory
+   *
+   * @param solrHome   the solr home directory
    * @param configFile the file containing this container's configuration
    * @return a loaded CoreContainer
    */
@@ -576,7 +580,7 @@ public class CoreContainer {
   /**
    * Load the cores defined for this CoreContainer
    */
-  public void load()  {
+  public void load() {
     log.debug("Loading cores into CoreContainer [instanceDir={}]", loader.getInstancePath());
 
     // add the sharedLib to the shared resource loader before initializing cfg based plugins
@@ -617,7 +621,7 @@ public class CoreContainer {
     hostName = cfg.getNodeName();
 
     zkSys.initZooKeeper(this, solrHome, cfg.getCloudConfig());
-    if(isZooKeeperAware())  {
+    if (isZooKeeperAware()) {
       pkiAuthenticationPlugin = new PKIAuthenticationPlugin(this, zkSys.getZkController().getNodeName(),
           (PublicKeyHandler) containerHandlers.get(PublicKeyHandler.PATH));
       TracerConfigurator.loadTracer(loader, cfg.getTracerConfiguratorPluginInfo(), getZkController().getZkStateReader());
@@ -632,8 +636,8 @@ public class CoreContainer {
     createHandler(ZK_PATH, ZookeeperInfoHandler.class.getName(), ZookeeperInfoHandler.class);
     createHandler(ZK_STATUS_PATH, ZookeeperStatusHandler.class.getName(), ZookeeperStatusHandler.class);
     collectionsHandler = createHandler(COLLECTIONS_HANDLER_PATH, cfg.getCollectionsHandlerClass(), CollectionsHandler.class);
-    infoHandler        = createHandler(INFO_HANDLER_PATH, cfg.getInfoHandlerClass(), InfoHandler.class);
-    coreAdminHandler   = createHandler(CORES_HANDLER_PATH, cfg.getCoreAdminHandlerClass(), CoreAdminHandler.class);
+    infoHandler = createHandler(INFO_HANDLER_PATH, cfg.getInfoHandlerClass(), InfoHandler.class);
+    coreAdminHandler = createHandler(CORES_HANDLER_PATH, cfg.getCoreAdminHandlerClass(), CoreAdminHandler.class);
     configSetsHandler = createHandler(CONFIGSETS_HANDLER_PATH, cfg.getConfigSetsHandlerClass(), ConfigSetsHandler.class);
 
     // metricsHistoryHandler uses metricsHandler, so create it first
@@ -667,18 +671,18 @@ public class CoreContainer {
     String registryName = SolrMetricManager.getRegistryName(SolrInfoBean.Group.node);
     String metricTag = Integer.toHexString(hashCode());
     metricManager.registerGauge(null, registryName, () -> solrCores.getCores().size(),
-        metricTag,true, "loaded", SolrInfoBean.Category.CONTAINER.toString(), "cores");
+        metricTag, true, "loaded", SolrInfoBean.Category.CONTAINER.toString(), "cores");
     metricManager.registerGauge(null, registryName, () -> solrCores.getLoadedCoreNames().size() - solrCores.getCores().size(),
-        metricTag,true, "lazy", SolrInfoBean.Category.CONTAINER.toString(), "cores");
+        metricTag, true, "lazy", SolrInfoBean.Category.CONTAINER.toString(), "cores");
     metricManager.registerGauge(null, registryName, () -> solrCores.getAllCoreNames().size() - solrCores.getLoadedCoreNames().size(),
-        metricTag,true, "unloaded", SolrInfoBean.Category.CONTAINER.toString(), "cores");
+        metricTag, true, "unloaded", SolrInfoBean.Category.CONTAINER.toString(), "cores");
     Path dataHome = cfg.getSolrDataHome() != null ? cfg.getSolrDataHome() : cfg.getCoreRootDirectory();
     metricManager.registerGauge(null, registryName, () -> dataHome.toFile().getTotalSpace(),
-        metricTag,true, "totalSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
+        metricTag, true, "totalSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     metricManager.registerGauge(null, registryName, () -> dataHome.toFile().getUsableSpace(),
-        metricTag,true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
+        metricTag, true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     metricManager.registerGauge(null, registryName, () -> dataHome.toAbsolutePath().toString(),
-        metricTag,true, "path", SolrInfoBean.Category.CONTAINER.toString(), "fs");
+        metricTag, true, "path", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     metricManager.registerGauge(null, registryName, () -> {
           try {
             return org.apache.lucene.util.IOUtils.spins(dataHome.toAbsolutePath());
@@ -687,13 +691,13 @@ public class CoreContainer {
             return true;
           }
         },
-        metricTag,true, "spins", SolrInfoBean.Category.CONTAINER.toString(), "fs");
+        metricTag, true, "spins", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     metricManager.registerGauge(null, registryName, () -> cfg.getCoreRootDirectory().toFile().getTotalSpace(),
-        metricTag,true, "totalSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
+        metricTag, true, "totalSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     metricManager.registerGauge(null, registryName, () -> cfg.getCoreRootDirectory().toFile().getUsableSpace(),
-        metricTag,true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
+        metricTag, true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     metricManager.registerGauge(null, registryName, () -> cfg.getCoreRootDirectory().toAbsolutePath().toString(),
-        metricTag,true, "path", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
+        metricTag, true, "path", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     metricManager.registerGauge(null, registryName, () -> {
           try {
             return org.apache.lucene.util.IOUtils.spins(cfg.getCoreRootDirectory().toAbsolutePath());
@@ -702,12 +706,12 @@ public class CoreContainer {
             return true;
           }
         },
-        metricTag,true, "spins", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
+        metricTag, true, "spins", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     // add version information
     metricManager.registerGauge(null, registryName, () -> this.getClass().getPackage().getSpecificationVersion(),
-        metricTag,true, "specification", SolrInfoBean.Category.CONTAINER.toString(), "version");
+        metricTag, true, "specification", SolrInfoBean.Category.CONTAINER.toString(), "version");
     metricManager.registerGauge(null, registryName, () -> this.getClass().getPackage().getImplementationVersion(),
-        metricTag,true, "implementation", SolrInfoBean.Category.CONTAINER.toString(), "version");
+        metricTag, true, "implementation", SolrInfoBean.Category.CONTAINER.toString(), "version");
 
     SolrFieldCacheBean fieldCacheBean = new SolrFieldCacheBean();
     fieldCacheBean.initializeMetrics(metricManager, registryName, metricTag, null);
@@ -1054,8 +1058,8 @@ public class CoreContainer {
   }
 
   protected SolrCore registerCore(CoreDescriptor cd, SolrCore core, boolean registerInZk, boolean skipRecovery) {
-    if( core == null ) {
-      throw new RuntimeException( "Can not register a null core." );
+    if (core == null) {
+      throw new RuntimeException("Can not register a null core.");
     }
 
     if (isShutDown) {
@@ -1063,24 +1067,23 @@ public class CoreContainer {
       throw new IllegalStateException("This CoreContainer has been closed");
     }
     SolrCore old = solrCores.putCore(cd, core);
-      /*
-      * set both the name of the descriptor and the name of the
-      * core, since the descriptors name is used for persisting.
-      */
+    /*
+     * set both the name of the descriptor and the name of the
+     * core, since the descriptors name is used for persisting.
+     */
 
     core.setName(cd.getName());
 
     coreInitFailures.remove(cd.getName());
 
-    if( old == null || old == core) {
-      log.debug( "registering core: " + cd.getName() );
+    if (old == null || old == core) {
+      log.debug("registering core: " + cd.getName());
       if (registerInZk) {
         zkSys.registerInZk(core, false, skipRecovery);
       }
       return null;
-    }
-    else {
-      log.debug( "replacing core: " + cd.getName() );
+    } else {
+      log.debug("replacing core: " + cd.getName());
       old.close();
       if (registerInZk) {
         zkSys.registerInZk(core, false, skipRecovery);
@@ -1091,7 +1094,8 @@ public class CoreContainer {
 
   /**
    * Creates a new core, publishing the core state to the cluster
-   * @param coreName the core name
+   *
+   * @param coreName   the core name
    * @param parameters the core parameters
    * @return the newly created core
    */
@@ -1101,9 +1105,10 @@ public class CoreContainer {
 
   /**
    * Creates a new core in a specified instance directory, publishing the core state to the cluster
-   * @param coreName the core name
+   *
+   * @param coreName     the core name
    * @param instancePath the instance directory
-   * @param parameters the core parameters
+   * @param parameters   the core parameters
    * @return the newly created core
    */
   public SolrCore create(String coreName, Path instancePath, Map<String, String> parameters, boolean newCollection) {
@@ -1185,27 +1190,26 @@ public class CoreContainer {
    *
    * @param dcore        a core descriptor
    * @param publishState publish core state to the cluster if true
+   *                     <p>
+   *                     WARNING: Any call to this method should be surrounded by a try/finally block
+   *                     that calls solrCores.waitAddPendingCoreOps(...) and solrCores.removeFromPendingOps(...)
    *
-   * WARNING: Any call to this method should be surrounded by a try/finally block
-   *          that calls solrCores.waitAddPendingCoreOps(...) and solrCores.removeFromPendingOps(...)
-   *
-   *  <pre>
-   *   <code>
-   *   try {
-   *      solrCores.waitAddPendingCoreOps(dcore.getName());
-   *      createFromDescriptor(...);
-   *   } finally {
-   *      solrCores.removeFromPendingOps(dcore.getName());
-   *   }
-   *   </code>
-   * </pre>
-   *
-   *  Trying to put the waitAddPending... in this method results in Bad Things Happening due to race conditions.
-   *  getCore() depends on getting the core returned _if_ it's in the pending list due to some other thread opening it.
-   *  If the core is not in the pending list and not loaded, then getCore() calls this method. Anything that called
-   *  to check if the core was loaded _or_ in pending ops and, based on the return called createFromDescriptor would
-   *  introduce a race condition, see getCore() for the place it would be a problem
-   *
+   *                     <pre>
+   *                                           <code>
+   *                                           try {
+   *                                              solrCores.waitAddPendingCoreOps(dcore.getName());
+   *                                              createFromDescriptor(...);
+   *                                           } finally {
+   *                                              solrCores.removeFromPendingOps(dcore.getName());
+   *                                           }
+   *                                           </code>
+   *                                         </pre>
+   *                     <p>
+   *                     Trying to put the waitAddPending... in this method results in Bad Things Happening due to race conditions.
+   *                     getCore() depends on getting the core returned _if_ it's in the pending list due to some other thread opening it.
+   *                     If the core is not in the pending list and not loaded, then getCore() calls this method. Anything that called
+   *                     to check if the core was loaded _or_ in pending ops and, based on the return called createFromDescriptor would
+   *                     introduce a race condition, see getCore() for the place it would be a problem
    * @return the newly created core
    */
   @SuppressWarnings("resource")
@@ -1249,14 +1253,14 @@ public class CoreContainer {
       }
       solrCores.removeCoreDescriptor(dcore);
       final SolrException solrException = new SolrException(ErrorCode.SERVER_ERROR, "Unable to create core [" + dcore.getName() + "]", e);
-      if(core != null && !core.isClosed())
+      if (core != null && !core.isClosed())
         IOUtils.closeQuietly(core);
       throw solrException;
     } catch (Throwable t) {
       SolrException e = new SolrException(ErrorCode.SERVER_ERROR, "JVM Error creating core [" + dcore.getName() + "]: " + t.getMessage(), t);
       coreInitFailures.put(dcore.getName(), new CoreLoadFailure(dcore, e));
       solrCores.removeCoreDescriptor(dcore);
-      if(core != null && !core.isClosed())
+      if (core != null && !core.isClosed())
         IOUtils.closeQuietly(core);
       throw t;
     } finally {
@@ -1283,18 +1287,13 @@ public class CoreContainer {
    * Take action when we failed to create a SolrCore. If error is due to corrupt index, try to recover. Various recovery
    * strategies can be specified via system properties "-DCoreInitFailedAction={fromleader, none}"
    *
-   * @see CoreInitFailedAction
-   *
-   * @param original
-   *          the problem seen when loading the core the first time.
-   * @param dcore
-   *          core descriptor for the core to create
-   * @param coreConfig
-   *          core config for the core to create
+   * @param original   the problem seen when loading the core the first time.
+   * @param dcore      core descriptor for the core to create
+   * @param coreConfig core config for the core to create
    * @return if possible
-   * @throws SolrException
-   *           rethrows the original exception if we will not attempt to recover, throws a new SolrException with the
-   *           original exception as a suppressed exception if there is a second problem creating the solr core.
+   * @throws SolrException rethrows the original exception if we will not attempt to recover, throws a new SolrException with the
+   *                       original exception as a suppressed exception if there is a second problem creating the solr core.
+   * @see CoreInitFailedAction
    */
   private SolrCore processCoreCreateException(SolrException original, CoreDescriptor dcore, ConfigSet coreConfig) {
     // Traverse full chain since CIE may not be root exception
@@ -1382,16 +1381,16 @@ public class CoreContainer {
    * Gets the cores that are currently loaded, i.e. cores that have
    * 1: loadOnStartup=true and are either not-transient or, if transient, have been loaded and have not been aged out
    * 2: loadOnStartup=false and have been loaded but are either non-transient or have not been aged out.
-   *
+   * <p>
    * Put another way, this will not return any names of cores that are lazily loaded but have not been called for yet
    * or are transient and either not loaded or have been swapped out.
-   *
    */
   public Collection<String> getLoadedCoreNames() {
     return solrCores.getLoadedCoreNames();
   }
 
-  /** This method is currently experimental.
+  /**
+   * This method is currently experimental.
    *
    * @return a Collection of the names that a specific core object is mapped to, there are more than one.
    */
@@ -1401,8 +1400,8 @@ public class CoreContainer {
 
   /**
    * get a list of all the cores that are currently known, whether currently loaded or not
-   * @return a list of all the available core names in either permanent or transient cores
    *
+   * @return a list of all the available core names in either permanent or transient cores
    */
   public Collection<String> getAllCoreNames() {
     return solrCores.getAllCoreNames();
@@ -1420,11 +1419,11 @@ public class CoreContainer {
    * can be changed as various SolrCore operations are performed:
    * </p>
    * <ul>
-   *  <li>Failed attempts to create new SolrCores will add new Exceptions.</li>
-   *  <li>Failed attempts to re-create a SolrCore using a name already contained in this Map will replace the Exception.</li>
-   *  <li>Failed attempts to reload a SolrCore will cause an Exception to be added to this list -- even though the existing SolrCore with that name will continue to be available.</li>
-   *  <li>Successful attempts to re-created a SolrCore using a name already contained in this Map will remove the Exception.</li>
-   *  <li>Registering an existing SolrCore with a name already contained in this Map (ie: ALIAS or SWAP) will remove the Exception.</li>
+   * <li>Failed attempts to create new SolrCores will add new Exceptions.</li>
+   * <li>Failed attempts to re-create a SolrCore using a name already contained in this Map will replace the Exception.</li>
+   * <li>Failed attempts to reload a SolrCore will cause an Exception to be added to this list -- even though the existing SolrCore with that name will continue to be available.</li>
+   * <li>Successful attempts to re-created a SolrCore using a name already contained in this Map will remove the Exception.</li>
+   * <li>Registering an existing SolrCore with a name already contained in this Map (ie: ALIAS or SWAP) will remove the Exception.</li>
    * </ul>
    */
   public Map<String, CoreLoadFailure> getCoreInitFailures() {
@@ -1564,8 +1563,8 @@ public class CoreContainer {
    * Swaps two SolrCore descriptors.
    */
   public void swap(String n0, String n1) {
-    if( n0 == null || n1 == null ) {
-      throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, "Can not swap unnamed cores." );
+    if (n0 == null || n1 == null) {
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Can not swap unnamed cores.");
     }
     solrCores.swap(n0, n1);
 
@@ -1576,6 +1575,7 @@ public class CoreContainer {
 
   /**
    * Unload a core from this container, leaving all files on disk
+   *
    * @param name the name of the core to unload
    */
   public void unload(String name) {
@@ -1585,9 +1585,9 @@ public class CoreContainer {
   /**
    * Unload a core from this container, optionally removing the core's data and configuration
    *
-   * @param name the name of the core to unload
-   * @param deleteIndexDir if true, delete the core's index on close
-   * @param deleteDataDir if true, delete the core's data directory on close
+   * @param name              the name of the core to unload
+   * @param deleteIndexDir    if true, delete the core's index on close
+   * @param deleteDataDir     if true, delete the core's data directory on close
    * @param deleteInstanceDir if true, delete the core's instance directory on close
    */
   public void unload(String name, boolean deleteIndexDir, boolean deleteDataDir, boolean deleteInstanceDir) {
@@ -1680,6 +1680,7 @@ public class CoreContainer {
 
   /**
    * Get the CoreDescriptors for all cores managed by this container
+   *
    * @return a List of CoreDescriptors
    */
   public List<CoreDescriptor> getCoreDescriptors() {
@@ -1697,10 +1698,10 @@ public class CoreContainer {
   /**
    * Gets a core by name and increase its refcount.
    *
-   * @see SolrCore#close()
    * @param name the core name
    * @return the core if found, null if a SolrCore by this name does not exist
-   * @exception SolrCoreInitializationException if a SolrCore with this name failed to be initialized
+   * @throws SolrCoreInitializationException if a SolrCore with this name failed to be initialized
+   * @see SolrCore#close()
    */
   public SolrCore getCore(String name) {
 
@@ -1742,15 +1743,14 @@ public class CoreContainer {
         core = createFromDescriptor(desc, true, false); // This should throw an error if it fails.
       }
       core.open();
-    }
-    finally {
+    } finally {
       solrCores.removeFromPendingOps(name);
     }
 
     return core;
   }
 
-  public BlobRepository getBlobRepository(){
+  public BlobRepository getBlobRepository() {
     return blobRepository;
   }
 
@@ -1771,12 +1771,12 @@ public class CoreContainer {
   // ---------------- CoreContainer request handlers --------------
 
   protected <T> T createHandler(String path, String handlerClass, Class<T> clazz) {
-    T handler = loader.newInstance(handlerClass, clazz, null, new Class[] { CoreContainer.class }, new Object[] { this });
+    T handler = loader.newInstance(handlerClass, clazz, null, new Class[]{CoreContainer.class}, new Object[]{this});
     if (handler instanceof SolrRequestHandler) {
-      containerHandlers.put(path, (SolrRequestHandler)handler);
+      containerHandlers.put(path, (SolrRequestHandler) handler);
     }
     if (handler instanceof SolrMetricProducer) {
-      ((SolrMetricProducer)handler).initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, path);
+      ((SolrMetricProducer) handler).initializeMetrics(metricManager, SolrInfoBean.Group.node.toString(), metricTag, path);
     }
     return handler;
   }
@@ -1789,7 +1789,9 @@ public class CoreContainer {
     return collectionsHandler;
   }
 
-  public HealthCheckHandler getHealthCheckHandler() { return healthCheckHandler; }
+  public HealthCheckHandler getHealthCheckHandler() {
+    return healthCheckHandler;
+  }
 
   public InfoHandler getInfoHandler() {
     return infoHandler;
@@ -1820,7 +1822,6 @@ public class CoreContainer {
 
   /**
    * Determines whether the core is already loaded or not but does NOT load the core
-   *
    */
   public boolean isLoaded(String name) {
     return solrCores.isLoaded(name);
@@ -1834,6 +1835,7 @@ public class CoreContainer {
   public void queueCoreToClose(SolrCore coreToClose) {
     solrCores.queueCoreToClose(coreToClose);
   }
+
   /**
    * Gets a solr core descriptor for a core that is not loaded. Note that if the caller calls this on a
    * loaded core, the unloaded descriptor will be returned.
@@ -1861,7 +1863,9 @@ public class CoreContainer {
     return cfg;
   }
 
-  /** The default ShardHandlerFactory used to communicate with other solr instances */
+  /**
+   * The default ShardHandlerFactory used to communicate with other solr instances
+   */
   public ShardHandlerFactory getShardHandlerFactory() {
     return shardHandlerFactory;
   }
@@ -1905,11 +1909,10 @@ public class CoreContainer {
 
 
   /**
-   *
-   * @param cd CoreDescriptor, presumably a deficient one
+   * @param cd   CoreDescriptor, presumably a deficient one
    * @param prop The property that needs to be repaired.
    * @return true if we were able to successfuly perisist the repaired coreDescriptor, false otherwise.
-   *
+   * <p>
    * See SOLR-11503, This can be removed when there's no chance we'll need to upgrade a
    * Solr installation created with legacyCloud=true from 6.6.1 through 7.1
    */
@@ -1919,7 +1922,7 @@ public class CoreContainer {
 
     if (CoreDescriptor.CORE_NODE_NAME.equals(prop) == false) {
       throw new SolrException(ErrorCode.SERVER_ERROR,
-          String.format(Locale.ROOT,"The only supported property for repair is currently [%s]",
+          String.format(Locale.ROOT, "The only supported property for repair is currently [%s]",
               CoreDescriptor.CORE_NODE_NAME));
     }
 
@@ -1930,7 +1933,7 @@ public class CoreContainer {
     for (Replica rep : coll.getReplicas()) {
       if (coreName.equals(rep.getCoreName())) {
         log.warn("Core properties file for node {} found with no coreNodeName, attempting to repair with value {}. See SOLR-11503. " +
-            "This message should only appear if upgrading from collections created Solr 6.6.1 through 7.1.",
+                "This message should only appear if upgrading from collections created Solr 6.6.1 through 7.1.",
             rep.getCoreName(), rep.getName());
         cd.getCloudDescriptor().setCoreNodeName(rep.getName());
         coresLocator.persist(this, cd);
@@ -2012,7 +2015,7 @@ class CloserThread extends Thread {
   // essentially create a single-threaded process anyway.
   @Override
   public void run() {
-    while (! container.isShutDown()) {
+    while (!container.isShutDown()) {
       synchronized (solrCores.getModifyLock()) { // need this so we can wait and be awoken.
         try {
           solrCores.getModifyLock().wait();
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index d314fc5..b730f3e 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -182,7 +182,7 @@ import static org.apache.solr.common.params.CommonParams.PATH;
  */
 public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeable {
 
-  public static final String version="1.0";
+  public static final String version = "1.0";
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private static final Logger requestLog = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass().getName() + ".Request");
@@ -209,7 +209,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   private final RequestHandlers reqHandlers;
   private final PluginBag<SearchComponent> searchComponents = new PluginBag<>(SearchComponent.class, this);
   private final PluginBag<UpdateRequestProcessorFactory> updateProcessors = new PluginBag<>(UpdateRequestProcessorFactory.class, this, true);
-  private final Map<String,UpdateRequestProcessorChain> updateProcessorChains;
+  private final Map<String, UpdateRequestProcessorChain> updateProcessorChains;
   private final SolrCoreMetricManager coreMetricManager;
   private final Map<String, SolrInfoBean> infoRegistry = new ConcurrentHashMap<>();
   private final IndexDeletionPolicyWrapper solrDelPolicy;
@@ -243,7 +243,9 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     return metricNames;
   }
 
-  public Date getStartTimeStamp() { return startTime; }
+  public Date getStartTimeStamp() {
+    return startTime;
+  }
 
   private final Map<IndexReader.CacheKey, IndexFingerprint> perSegmentFingerprintCache = new MapMaker().weakKeys().makeMap();
 
@@ -267,6 +269,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   /**
    * The SolrResourceLoader used to load all resources for this core.
+   *
    * @since solr 1.3
    */
   public SolrResourceLoader getResourceLoader() {
@@ -275,6 +278,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   /**
    * Gets the configuration resource name used by this core instance.
+   *
    * @since solr 1.3
    */
   public String getConfigResource() {
@@ -290,25 +294,27 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   /**
    * Gets the schema resource name used by this core instance.
+   *
    * @since solr 1.3
    */
   public String getSchemaResource() {
     return getLatestSchema().getResourceName();
   }
-  
-  /** 
-   * @return the latest snapshot of the schema used by this core instance. 
-   * @see #setLatestSchema 
+
+  /**
+   * @return the latest snapshot of the schema used by this core instance.
+   * @see #setLatestSchema
    */
   public IndexSchema getLatestSchema() {
     return schema;
   }
-  
-  /** 
-   * Sets the latest schema snapshot to be used by this core instance. 
-   * If the specified <code>replacementSchema</code> uses a {@link SimilarityFactory} which is 
-   * {@link SolrCoreAware} then this method will {@link SolrCoreAware#inform} that factory about 
+
+  /**
+   * Sets the latest schema snapshot to be used by this core instance.
+   * If the specified <code>replacementSchema</code> uses a {@link SimilarityFactory} which is
+   * {@link SolrCoreAware} then this method will {@link SolrCoreAware#inform} that factory about
    * this SolrCore prior to using the <code>replacementSchema</code>
+   *
    * @see #getLatestSchema
    */
   public void setLatestSchema(IndexSchema replacementSchema) {
@@ -325,7 +331,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     }
     this.schema = replacementSchema;
   }
-  
+
   public NamedList getConfigSetProperties() {
     return configSetProperties;
   }
@@ -355,7 +361,6 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    * and indexwriters. Use the getIndexDir() method to know the active index directory
    *
    * @return the indexdir as given in index.properties
-   *
    * @throws SolrException if for any reason the a reasonable index directory cannot be determined.
    */
   public String getNewIndexDir() {
@@ -430,7 +435,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   public IndexReaderFactory getIndexReaderFactory() {
     return indexReaderFactory;
   }
-  
+
   public long getIndexSize() {
     Directory dir;
     long size = 0;
@@ -456,14 +461,13 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   public void setName(String v) {
     this.name = v;
-    this.logid = (v==null)?"":("["+v+"] ");
+    this.logid = (v == null) ? "" : ("[" + v + "] ");
     if (coreMetricManager != null) {
       coreMetricManager.afterCoreSetName();
     }
   }
 
-  public String getLogId()
-  {
+  public String getLogId() {
     return this.logid;
   }
 
@@ -492,7 +496,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     if (delPolicyWrapper != null) {
       return delPolicyWrapper;
     }
-    
+
     final PluginInfo info = solrConfig.getPluginInfo(IndexDeletionPolicy.class.getName());
     final IndexDeletionPolicy delPolicy;
     if (info != null) {
@@ -511,7 +515,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     try {
       String dirName = getDataDir() + SolrSnapshotMetaDataManager.SNAPSHOT_METADATA_DIR + "/";
       Directory snapshotDir = directoryFactory.get(dirName, DirContext.DEFAULT,
-           getSolrConfig().indexConfig.lockType);
+          getSolrConfig().indexConfig.lockType);
       return new SolrSnapshotMetaDataManager(this, snapshotDir);
     } catch (IOException e) {
       throw new IllegalStateException(e);
@@ -622,9 +626,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    *
    * @see SolrCoreAware
    */
-  public void registerFirstSearcherListener( SolrEventListener listener )
-  {
-    firstSearcherListeners.add( listener );
+  public void registerFirstSearcherListener(SolrEventListener listener) {
+    firstSearcherListeners.add(listener);
   }
 
   /**
@@ -634,9 +637,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    *
    * @see SolrCoreAware
    */
-  public void registerNewSearcherListener( SolrEventListener listener )
-  {
-    newSearcherListeners.add( listener );
+  public void registerNewSearcherListener(SolrEventListener listener) {
+    newSearcherListeners.add(listener);
   }
 
   /**
@@ -646,7 +648,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    *
    * @see SolrCoreAware
    */
-  public QueryResponseWriter registerResponseWriter( String name, QueryResponseWriter responseWriter ){
+  public QueryResponseWriter registerResponseWriter(String name, QueryResponseWriter responseWriter) {
     return responseWriters.put(name, responseWriter);
   }
 
@@ -670,10 +672,10 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
         core = new SolrCore(coreContainer, getName(), getDataDir(), coreConfig.getSolrConfig(),
             coreConfig.getIndexSchema(), coreConfig.getProperties(),
             cd, updateHandler, solrDelPolicy, currentCore, true);
-        
+
         // we open a new IndexWriter to pick up the latest config
         core.getUpdateHandler().getSolrCoreState().newIndexWriter(core, false);
-        
+
         core.getSearcher(true, false, null, true);
         success = true;
         return core;
@@ -724,10 +726,11 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   /**
    * Returns <code>true</code> iff the index in the named directory is
    * currently locked.
+   *
    * @param directory the directory to check for a lock
    * @throws IOException if there is a low-level IO error
    * @deprecated Use of this method can only lead to race conditions. Try
-   *             to actually obtain a lock instead.
+   * to actually obtain a lock instead.
    */
   @Deprecated
   private static boolean isWriterLocked(Directory directory) throws IOException {
@@ -772,12 +775,12 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       log.debug("{}Solr index directory '{}' doesn't exist. Creating new index...", logid, indexDir);
       SolrIndexWriter writer = null;
       try {
-       writer = SolrIndexWriter.create(this, "SolrCore.initIndex", indexDir, getDirectoryFactory(), true,
-          getLatestSchema(), solrConfig.indexConfig, solrDelPolicy, codec);
+        writer = SolrIndexWriter.create(this, "SolrCore.initIndex", indexDir, getDirectoryFactory(), true,
+            getLatestSchema(), solrConfig.indexConfig, solrDelPolicy, codec);
       } finally {
         IOUtils.closeQuietly(writer);
       }
-   
+
     }
 
     cleanupOldIndexDirectories(reload);
@@ -828,17 +831,17 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     Class<? extends UpdateHandler> clazz = null;
     if (msg == null) msg = "SolrCore Object";
     try {
-        clazz = getResourceLoader().findClass(className, UpdateHandler.class);
-        //most of the classes do not have constructors which takes SolrCore argument. It is recommended to obtain SolrCore by implementing SolrCoreAware.
-        // So invariably always it will cause a  NoSuchMethodException. So iterate though the list of available constructors
-        Constructor<?>[] cons =  clazz.getConstructors();
-        for (Constructor<?> con : cons) {
-          Class<?>[] types = con.getParameterTypes();
-          if(types.length == 2 && types[0] == SolrCore.class && types[1] == UpdateHandler.class){
-            return UpdateHandler.class.cast(con.newInstance(this, updateHandler));
-          }
+      clazz = getResourceLoader().findClass(className, UpdateHandler.class);
+      //most of the classes do not have constructors which takes SolrCore argument. It is recommended to obtain SolrCore by implementing SolrCoreAware.
+      // So invariably always it will cause a  NoSuchMethodException. So iterate though the list of available constructors
+      Constructor<?>[] cons = clazz.getConstructors();
+      for (Constructor<?> con : cons) {
+        Class<?>[] types = con.getParameterTypes();
+        if (types.length == 2 && types[0] == SolrCore.class && types[1] == UpdateHandler.class) {
+          return UpdateHandler.class.cast(con.newInstance(this, updateHandler));
         }
-        throw new SolrException(ErrorCode.SERVER_ERROR,"Error Instantiating "+msg+", "+className+ " could not find proper constructor for " + UpdateHandler.class.getName());
+      }
+      throw new SolrException(ErrorCode.SERVER_ERROR, "Error Instantiating " + msg + ", " + className + " could not find proper constructor for " + UpdateHandler.class.getName());
     } catch (SolrException e) {
       throw e;
     } catch (Exception e) {
@@ -849,19 +852,19 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
         throw inner;
       }
 
-      throw new SolrException(ErrorCode.SERVER_ERROR,"Error Instantiating "+msg+", "+className+ " failed to instantiate " + UpdateHandler.class.getName(), e);
+      throw new SolrException(ErrorCode.SERVER_ERROR, "Error Instantiating " + msg + ", " + className + " failed to instantiate " + UpdateHandler.class.getName(), e);
     }
   }
 
-  public <T extends Object> T createInitInstance(PluginInfo info,Class<T> cast, String msg, String defClassName){
-    if(info == null) return null;
-    T o = createInstance(info.className == null ? defClassName : info.className ,cast, msg,this, getResourceLoader());
+  public <T extends Object> T createInitInstance(PluginInfo info, Class<T> cast, String msg, String defClassName) {
+    if (info == null) return null;
+    T o = createInstance(info.className == null ? defClassName : info.className, cast, msg, this, getResourceLoader());
     if (o instanceof PluginInfoInitialized) {
       ((PluginInfoInitialized) o).init(info);
     } else if (o instanceof NamedListInitializedPlugin) {
       ((NamedListInitializedPlugin) o).init(info.initArgs);
     }
-    if(o instanceof SearchComponent) {
+    if (o instanceof SearchComponent) {
       ((SearchComponent) o).setName(info.name);
     }
     return o;
@@ -889,19 +892,15 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    * Creates a new core and register it in the list of cores. If a core with the
    * same name already exists, it will be stopped and replaced by this one.
    *
-   * @param dataDir
-   *          the index directory
-   * @param config
-   *          a solr config instance
-   * @param schema
-   *          a solr schema instance
-   *
+   * @param dataDir the index directory
+   * @param config  a solr config instance
+   * @param schema  a solr schema instance
    * @since solr 1.3
    */
   public SolrCore(CoreContainer coreContainer, String name, String dataDir, SolrConfig config,
                   IndexSchema schema, NamedList configSetProperties,
                   CoreDescriptor coreDescriptor, UpdateHandler updateHandler,
-      IndexDeletionPolicyWrapper delPolicy, SolrCore prev, boolean reload) {
+                  IndexDeletionPolicyWrapper delPolicy, SolrCore prev, boolean reload) {
 
     assert ObjectReleaseTracker.track(searcherExecutor); // ensure that in unclean shutdown tests we still close this
 
@@ -1078,9 +1077,11 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     }
   }
 
-  /** Set UpdateLog to buffer updates if the slice is in construction. */
+  /**
+   * Set UpdateLog to buffer updates if the slice is in construction.
+   */
   private void bufferUpdatesIfConstructing(CoreDescriptor coreDescriptor) {
-    
+
     if (coreContainer != null && coreContainer.isZooKeeperAware()) {
       if (reqHandlers.get("/get") == null) {
         log.warn("WARNING: RealTimeGetHandler is not registered at /get. " +
@@ -1133,15 +1134,16 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       newUpdateHandler = createUpdateHandler(updateHandlerClass, updateHandler);
     }
     if (newUpdateHandler instanceof SolrMetricProducer) {
-      coreMetricManager.registerMetricProducer("updateHandler", (SolrMetricProducer)newUpdateHandler);
+      coreMetricManager.registerMetricProducer("updateHandler", (SolrMetricProducer) newUpdateHandler);
     }
     infoRegistry.put("updateHandler", newUpdateHandler);
     return newUpdateHandler;
   }
-  
+
   /**
-   * Initializes the "Latest Schema" for this SolrCore using either the provided <code>schema</code> 
+   * Initializes the "Latest Schema" for this SolrCore using either the provided <code>schema</code>
    * if non-null, or a new instance build via the factory identified in the specified <code>config</code>
+   *
    * @see IndexSchemaFactory
    * @see #setLatestSchema
    */
@@ -1235,8 +1237,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
         VersionInfo.getAndCheckVersionField(schema);
       } catch (SolrException e) {
         throw new SolrException(ErrorCode.SERVER_ERROR,
-                                "Schema will not work with SolrCloud mode: " +
-                                e.getMessage(), e);
+            "Schema will not work with SolrCloud mode: " +
+                e.getMessage(), e);
       }
     }
   }
@@ -1248,18 +1250,13 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   /**
    * Locate the data directory for a given config and core descriptor.
    *
-   * @param directoryFactory
-   *          The directory factory to use if necessary to calculate an absolute path. Should be the same as what will
-   *          be used to open the data directory later.
-   * @param dataDir
-   *          An optional hint to the data directory location. Will be normalized and used if not null.
-   * @param config
-   *          A solr config to retrieve the default data directory location, if used.
-   * @param coreDescriptor
-   *          descriptor to load the actual data dir from, if not using the defualt.
+   * @param directoryFactory The directory factory to use if necessary to calculate an absolute path. Should be the same as what will
+   *                         be used to open the data directory later.
+   * @param dataDir          An optional hint to the data directory location. Will be normalized and used if not null.
+   * @param config           A solr config to retrieve the default data directory location, if used.
+   * @param coreDescriptor   descriptor to load the actual data dir from, if not using the defualt.
    * @return a normalized data directory name
-   * @throws SolrException
-   *           if the data directory cannot be loaded from the core descriptor
+   * @throws SolrException if the data directory cannot be loaded from the core descriptor
    */
   static String findDataDir(DirectoryFactory directoryFactory, String dataDir, SolrConfig config, CoreDescriptor coreDescriptor) {
     if (dataDir == null) {
@@ -1284,7 +1281,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   public boolean modifyIndexProps(String tmpIdxDirName) {
     return SolrCore.modifyIndexProps(getDirectoryFactory(), getDataDir(), getSolrConfig(), tmpIdxDirName);
   }
-  
+
   /**
    * Update the index.properties file with the new index sub directory name
    */
@@ -1310,11 +1307,12 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       }
     }
   }
-  
+
   /**
    * Write the index.properties file with the new index sub directory name
-   * @param dir a data directory (containing an index.properties file)
-   * @param tmpFileName the file name to write the new index.properties to
+   *
+   * @param dir           a data directory (containing an index.properties file)
+   * @param tmpFileName   the file name to write the new index.properties to
    * @param tmpIdxDirName new index directory name
    */
   private static void writeNewIndexProps(Directory dir, String tmpFileName, String tmpIdxDirName) {
@@ -1322,7 +1320,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       tmpFileName = IndexFetcher.INDEX_PROPERTIES;
     }
     final Properties p = new Properties();
-    
+
     // Read existing properties
     try {
       final IndexInput input = dir.openInput(IndexFetcher.INDEX_PROPERTIES, DirectoryFactory.IOCONTEXT_NO_CACHE);
@@ -1337,7 +1335,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     } catch (IOException e) {
       // ignore; file does not exist
     }
-    
+
     p.put("index", tmpIdxDirName);
 
     // Write new properties
@@ -1364,8 +1362,9 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   /**
    * Close the core, if it is still in use waits until is no longer in use.
-   * @see #close() 
-   * @see #isClosed() 
+   *
+   * @see #close()
+   * @see #isClosed()
    */
   public void closeAndWait() {
     close();
@@ -1382,7 +1381,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       }
     }
   }
-  
+
   private Codec initCodec(SolrConfig solrConfig, final IndexSchema schema) {
     final PluginInfo info = solrConfig.getPluginInfo(CodecFactory.class.getName());
     final CodecFactory factory;
@@ -1400,7 +1399,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     if (factory instanceof SolrCoreAware) {
       // CodecFactory needs SolrCore before inform() is called on all registered
       // SolrCoreAware listeners, at the end of the SolrCore constructor
-      ((SolrCoreAware)factory).inform(this);
+      ((SolrCoreAware) factory).inform(this);
     } else {
       for (FieldType ft : schema.getFieldTypes().values()) {
         if (null != ft.getPostingsFormat()) {
@@ -1442,19 +1441,19 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   /**
    * Load the request processors
    */
-  private Map<String,UpdateRequestProcessorChain> loadUpdateProcessorChains() {
+  private Map<String, UpdateRequestProcessorChain> loadUpdateProcessorChains() {
     Map<String, UpdateRequestProcessorChain> map = new HashMap<>();
-    UpdateRequestProcessorChain def = initPlugins(map,UpdateRequestProcessorChain.class, UpdateRequestProcessorChain.class.getName());
-    if(def == null){
+    UpdateRequestProcessorChain def = initPlugins(map, UpdateRequestProcessorChain.class, UpdateRequestProcessorChain.class.getName());
+    if (def == null) {
       def = map.get(null);
     }
     if (def == null) {
       log.debug("no updateRequestProcessorChain defined as default, creating implicit default");
       // construct the default chain
       UpdateRequestProcessorFactory[] factories = new UpdateRequestProcessorFactory[]{
-              new LogUpdateProcessorFactory(),
-              new DistributedUpdateProcessorFactory(),
-              new RunUpdateProcessorFactory()
+          new LogUpdateProcessorFactory(),
+          new DistributedUpdateProcessorFactory(),
+          new RunUpdateProcessorFactory()
       };
       def = new UpdateRequestProcessorChain(Arrays.asList(factories), this);
     }
@@ -1474,12 +1473,11 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   /**
    * @return an update processor registered to the given name.  Throw an exception if this chain is undefined
    */
-  public UpdateRequestProcessorChain getUpdateProcessingChain( final String name )
-  {
-    UpdateRequestProcessorChain chain = updateProcessorChains.get( name );
-    if( chain == null ) {
-      throw new SolrException( ErrorCode.BAD_REQUEST,
-          "unknown UpdateRequestProcessorChain: "+name );
+  public UpdateRequestProcessorChain getUpdateProcessingChain(final String name) {
+    UpdateRequestProcessorChain chain = updateProcessorChains.get(name);
+    if (chain == null) {
+      throw new SolrException(ErrorCode.BAD_REQUEST,
+          "unknown UpdateRequestProcessorChain: " + name);
     }
     return chain;
   }
@@ -1499,7 +1497,9 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   // this core current usage count
   private final AtomicInteger refCount = new AtomicInteger(1);
 
-  /** expert: increments the core reference count */
+  /**
+   * expert: increments the core reference count
+   */
   public void open() {
     refCount.incrementAndGet();
   }
@@ -1507,25 +1507,26 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   /**
    * Close all resources allocated by the core if it is no longer in use...
    * <ul>
-   *   <li>searcher</li>
-   *   <li>updateHandler</li>
-   *   <li>all CloseHooks will be notified</li>
-   *   <li>All MBeans will be unregistered from MBeanServer if JMX was enabled
-   *       </li>
+   * <li>searcher</li>
+   * <li>updateHandler</li>
+   * <li>all CloseHooks will be notified</li>
+   * <li>All MBeans will be unregistered from MBeanServer if JMX was enabled
+   * </li>
    * </ul>
    * <p>
    * The behavior of this method is determined by the result of decrementing
    * the core's reference count (A core is created with a reference count of 1)...
    * </p>
    * <ul>
-   *   <li>If reference count is &gt; 0, the usage count is decreased by 1 and no
-   *       resources are released.
-   *   </li>
-   *   <li>If reference count is == 0, the resources are released.
-   *   <li>If reference count is &lt; 0, and error is logged and no further action
-   *       is taken.
-   *   </li>
+   * <li>If reference count is &gt; 0, the usage count is decreased by 1 and no
+   * resources are released.
+   * </li>
+   * <li>If reference count is == 0, the resources are released.
+   * <li>If reference count is &lt; 0, and error is logged and no further action
+   * is taken.
+   * </li>
    * </ul>
+   *
    * @see #isClosed()
    */
   @Override
@@ -1533,7 +1534,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     int count = refCount.decrementAndGet();
     if (count > 0) return; // close is called often, and only actually closes if nothing is using it.
     if (count < 0) {
-      log.error("Too many close [count:{}] on {}. Please report this exception to solr-user@lucene.apache.org", count, this );
+      log.error("Too many close [count:{}] on {}. Please report this exception to solr-user@lucene.apache.org", count, this);
       assert false : "Too many closes on SolrCore";
       return;
     }
@@ -1546,25 +1547,25 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       coreMetricManager.close();
     } catch (Throwable e) {
       SolrException.log(log, e);
-      if (e instanceof  Error) {
+      if (e instanceof Error) {
         throw (Error) e;
       }
     }
 
-    if( closeHooks != null ) {
-       for( CloseHook hook : closeHooks ) {
-         try {
-           hook.preClose( this );
-         } catch (Throwable e) {
-           SolrException.log(log, e);
-           if (e instanceof Error) {
-             throw (Error) e;
-           }
-         }
+    if (closeHooks != null) {
+      for (CloseHook hook : closeHooks) {
+        try {
+          hook.preClose(this);
+        } catch (Throwable e) {
+          SolrException.log(log, e);
+          if (e instanceof Error) {
+            throw (Error) e;
+          }
+        }
       }
     }
 
-    if(reqHandlers != null) reqHandlers.close();
+    if (reqHandlers != null) reqHandlers.close();
     responseWriters.close();
     searchComponents.close();
     qParserPlugins.close();
@@ -1584,7 +1585,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
         updateHandler.close();
       }
     } catch (Throwable e) {
-      SolrException.log(log,e);
+      SolrException.log(log, e);
       if (e instanceof Error) {
         throw (Error) e;
       }
@@ -1626,12 +1627,12 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       // tries to use it, and the exception handling code should close it.
       closeSearcher();
     } catch (Throwable e) {
-      SolrException.log(log,e);
+      SolrException.log(log, e);
       if (e instanceof Error) {
         throw (Error) e;
       }
     }
-    
+
     if (coreStateClosed) {
       try {
         cleanupOldIndexDirectories(false);
@@ -1653,15 +1654,15 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     Directory snapshotsDir = snapshotMgr.getSnapshotsDir();
     try {
       this.directoryFactory.release(snapshotsDir);
-    }  catch (Throwable e) {
-      SolrException.log(log,e);
+    } catch (Throwable e) {
+      SolrException.log(log, e);
       if (e instanceof Error) {
         throw (Error) e;
       }
     }
 
     if (coreStateClosed) {
-      
+
       try {
         directoryFactory.close();
       } catch (Throwable e) {
@@ -1672,48 +1673,53 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       }
     }
 
-    if( closeHooks != null ) {
-       for( CloseHook hook : closeHooks ) {
-         try {
-           hook.postClose( this );
-         } catch (Throwable e) {
-           SolrException.log(log, e);
-           if (e instanceof Error) {
-             throw (Error) e;
-           }
-         }
+    if (closeHooks != null) {
+      for (CloseHook hook : closeHooks) {
+        try {
+          hook.postClose(this);
+        } catch (Throwable e) {
+          SolrException.log(log, e);
+          if (e instanceof Error) {
+            throw (Error) e;
+          }
+        }
       }
     }
-    
+
     assert ObjectReleaseTracker.release(this);
   }
 
-  /** Current core usage count. */
+  /**
+   * Current core usage count.
+   */
   public int getOpenCount() {
     return refCount.get();
   }
 
-  /** Whether this core is closed. */
+  /**
+   * Whether this core is closed.
+   */
   public boolean isClosed() {
-      return refCount.get() <= 0;
+    return refCount.get() <= 0;
   }
 
   private Collection<CloseHook> closeHooks = null;
 
-   /**
-    * Add a close callback hook
-    */
-   public void addCloseHook( CloseHook hook )
-   {
-     if( closeHooks == null ) {
-       closeHooks = new ArrayList<>();
-     }
-     closeHooks.add( hook );
-   }
-
-  /** @lucene.internal
-   *  Debugging aid only.  No non-test code should be released with uncommented verbose() calls.  */
-  public static boolean VERBOSE = Boolean.parseBoolean(System.getProperty("tests.verbose","false"));
+  /**
+   * Add a close callback hook
+   */
+  public void addCloseHook(CloseHook hook) {
+    if (closeHooks == null) {
+      closeHooks = new ArrayList<>();
+    }
+    closeHooks.add(hook);
+  }
+
+  /**
+   * @lucene.internal Debugging aid only.  No non-test code should be released with uncommented verbose() calls.
+   */
+  public static boolean VERBOSE = Boolean.parseBoolean(System.getProperty("tests.verbose", "false"));
+
   public static void verbose(Object... args) {
     if (!VERBOSE) return;
     StringBuilder sb = new StringBuilder("VERBOSE:");
@@ -1721,7 +1727,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 //    sb.append(':');
     for (Object o : args) {
       sb.append(' ');
-      sb.append(o==null ? "(null)" : o.toString());
+      sb.append(o == null ? "(null)" : o.toString());
     }
     // System.out.println(sb.toString());
     log.info(sb.toString());
@@ -1734,7 +1740,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   /**
    * Get the request handler registered to a given name.
-   *
+   * <p>
    * This function is thread safe.
    */
   public SolrRequestHandler getRequestHandler(String handlerName) {
@@ -1752,30 +1758,29 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   /**
    * Registers a handler at the specified location.  If one exists there, it will be replaced.
    * To remove a handler, register <code>null</code> at its path
-   *
+   * <p>
    * Once registered the handler can be accessed through:
    * <pre>
    *   http://${host}:${port}/${context}/${handlerName}
    * or:
    *   http://${host}:${port}/${context}/select?qt=${handlerName}
    * </pre>
-   *
+   * <p>
    * Handlers <em>must</em> be initialized before getting registered.  Registered
    * handlers can immediately accept requests.
-   *
+   * <p>
    * This call is thread safe.
    *
    * @return the previous <code>SolrRequestHandler</code> registered to this name <code>null</code> if none.
    */
   public SolrRequestHandler registerRequestHandler(String handlerName, SolrRequestHandler handler) {
-    return reqHandlers.register(handlerName,handler);
+    return reqHandlers.register(handlerName, handler);
   }
 
   /**
    * Register the default search components
    */
-  private void loadSearchComponents()
-  {
+  private void loadSearchComponents() {
     Map<String, SearchComponent> instances = createInstances(SearchComponent.standard_components);
     for (Map.Entry<String, SearchComponent> e : instances.entrySet()) e.getValue().setName(e.getKey());
     searchComponents.init(instances, this);
@@ -1789,6 +1794,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       }
     }
   }
+
   /**
    * @return a Search Component registered to a given name.  Throw an exception if the component is undefined
    */
@@ -1798,6 +1804,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   /**
    * Accessor for all the Search Components
+   *
    * @return An unmodifiable Map of Search Components
    */
   public PluginBag<SearchComponent> getSearchComponents() {
@@ -1864,14 +1871,15 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    * {@link org.apache.solr.request.SolrQueryRequest#getSearcher()} instead.
    * If you still think you need to call this, consider {@link #withSearcher(IOFunction)} instead which is easier to
    * use.
+   *
    * @see SolrQueryRequest#getSearcher()
    * @see #withSearcher(IOFunction)
    */
   public RefCounted<SolrIndexSearcher> getSearcher() {
-    if ( searchEnabled ) {
-      return getSearcher(false,true,null);
+    if (searchEnabled) {
+      return getSearcher(false, true, null);
     }
-    throw new SolrException( SolrException.ErrorCode.SERVICE_UNAVAILABLE, "Search is temporarily disabled");
+    throw new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE, "Search is temporarily disabled");
   }
 
   /**
@@ -1885,7 +1893,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    * be closed soon after this method returns; it really depends.
    */
   @SuppressWarnings("unchecked")
-  public <R> R withSearcher(IOFunction<SolrIndexSearcher,R> lambda) throws IOException {
+  public <R> R withSearcher(IOFunction<SolrIndexSearcher, R> lambda) throws IOException {
     final RefCounted<SolrIndexSearcher> refCounted = getSearcher();
     try {
       return lambda.apply(refCounted.get());
@@ -1912,7 +1920,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       log.debug("Cannot cache IndexFingerprint as reader does not support caching. searcher:{} reader:{} readerHash:{} maxVersion:{}", searcher, ctx.reader(), ctx.reader().hashCode(), maxVersion);
       return IndexFingerprint.getFingerprint(searcher, ctx, maxVersion);
     }
-    
+
     IndexFingerprint f = null;
     f = perSegmentFingerprintCache.get(cacheHelper.getKey());
     // fingerprint is either not cached or
@@ -1936,8 +1944,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
   /**
-  * Returns the current registered searcher with its reference count incremented, or null if none are registered.
-  */
+   * Returns the current registered searcher with its reference count incremented, or null if none are registered.
+   */
   public RefCounted<SolrIndexSearcher> getRegisteredSearcher() {
     synchronized (searcherLock) {
       if (_searcher != null) {
@@ -1965,7 +1973,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     return openNew ? getRealtimeSearcher() : null;
   }
 
-  /** Gets the latest real-time searcher w/o forcing open a new searcher if one already exists.
+  /**
+   * Gets the latest real-time searcher w/o forcing open a new searcher if one already exists.
    * The reference count will be incremented.
    */
   public RefCounted<SolrIndexSearcher> getRealtimeSearcher() {
@@ -2001,18 +2010,19 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
 
-  /** Opens a new searcher and returns a RefCounted&lt;SolrIndexSearcher&gt; with its reference incremented.
-   *
+  /**
+   * Opens a new searcher and returns a RefCounted&lt;SolrIndexSearcher&gt; with its reference incremented.
+   * <p>
    * "realtime" means that we need to open quickly for a realtime view of the index, hence don't do any
    * autowarming and add to the _realtimeSearchers queue rather than the _searchers queue (so it won't
    * be used for autowarming by a future normal searcher).  A "realtime" searcher will currently never
    * become "registered" (since it currently lacks caching).
-   *
+   * <p>
    * realtimeSearcher is updated to the latest opened searcher, regardless of the value of "realtime".
-   *
+   * <p>
    * This method acquires openSearcherLock - do not call with searchLock held!
    */
-  public RefCounted<SolrIndexSearcher>  openNewSearcher(boolean updateHandlerReopens, boolean realtime) {
+  public RefCounted<SolrIndexSearcher> openNewSearcher(boolean updateHandlerReopens, boolean realtime) {
     if (isClosed()) { // catch some errors quicker
       throw new SolrCoreState.CoreIsClosedException();
     }
@@ -2088,7 +2098,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
         final boolean useCaches = !realtime;
         final String newName = realtime ? "realtime" : "main";
         tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(), newName,
-                                    newReader, true, useCaches, true, directoryFactory);
+            newReader, true, useCaches, true, directoryFactory);
 
       } else {
         // newestSearcher == null at this point
@@ -2099,8 +2109,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
           // in time on a core reload
           DirectoryReader newReader = newReaderCreator.call();
           tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(),
-              (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
-        } else  {
+              (realtime ? "realtime" : "main"), newReader, true, !realtime, true, directoryFactory);
+        } else {
           RefCounted<IndexWriter> writer = getSolrCoreState().getIndexWriter(this);
           DirectoryReader newReader = null;
           try {
@@ -2109,7 +2119,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
             writer.decref();
           }
           tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(),
-              (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
+              (realtime ? "realtime" : "main"), newReader, true, !realtime, true, directoryFactory);
         }
       }
 
@@ -2141,8 +2151,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
     } catch (Exception e) {
       throw new SolrException(ErrorCode.SERVER_ERROR, "Error opening new searcher", e);
-    }
-    finally {
+    } finally {
       openSearcherLock.unlock();
       if (newestSearcher != null) {
         newestSearcher.decref();
@@ -2165,14 +2174,14 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    *
    * <p>
    * If <tt>forceNew==true</tt> then
-   *  A new searcher will be opened and registered regardless of whether there is already
-   *    a registered searcher or other searchers in the process of being created.
+   * A new searcher will be opened and registered regardless of whether there is already
+   * a registered searcher or other searchers in the process of being created.
    * <p>
    * If <tt>forceNew==false</tt> then:<ul>
-   *   <li>If a searcher is already registered, that searcher will be returned</li>
-   *   <li>If no searcher is currently registered, but at least one is in the process of being created, then
+   * <li>If a searcher is already registered, that searcher will be returned</li>
+   * <li>If no searcher is currently registered, but at least one is in the process of being created, then
    * this call will block until the first searcher is registered</li>
-   *   <li>If no searcher is currently registered, and no searchers in the process of being registered, a new
+   * <li>If no searcher is currently registered, and no searchers in the process of being registered, a new
    * searcher will be created.</li>
    * </ul>
    * <p>
@@ -2184,6 +2193,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
    * <tt>null</tt> in which case the SolrIndexSearcher created has already been registered at the time
    * this method returned.
    * <p>
+   *
    * @param forceNew             if true, force the open of a new index searcher regardless if there is already one open.
    * @param returnSearcher       if true, returns a {@link SolrIndexSearcher} holder with the refcount already incremented.
    * @param waitSearcher         if non-null, will be filled in with a {@link Future} that will return after the new searcher is registered.
@@ -2195,7 +2205,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     // if it isn't necessary.
 
     synchronized (searcherLock) {
-      for(;;) { // this loop is so w can retry in the event that we exceed maxWarmingSearchers
+      for (; ; ) { // this loop is so w can retry in the event that we exceed maxWarmingSearchers
         // see if we can return the current searcher
         if (_searcher != null && !forceNew) {
           if (returnSearcher) {
@@ -2252,7 +2262,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     }
 
     // a signal to decrement onDeckSearchers if something goes wrong.
-    final boolean[] decrementOnDeckCount=new boolean[]{true};
+    final boolean[] decrementOnDeckCount = new boolean[]{true};
     RefCounted<SolrIndexSearcher> currSearcherHolder = null;     // searcher we are autowarming from
     RefCounted<SolrIndexSearcher> searchHolder = null;
     boolean success = false;
@@ -2261,8 +2271,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     Timer.Context timerContext = newSearcherTimer.time();
     try {
       searchHolder = openNewSearcher(updateHandlerReopens, false);
-       // the searchHolder will be incremented once already (and it will eventually be assigned to _searcher when registered)
-       // increment it again if we are going to return it to the caller.
+      // the searchHolder will be incremented once already (and it will eventually be assigned to _searcher when registered)
+      // increment it again if we are going to return it to the caller.
       if (returnSearcher) {
         searchHolder.incref();
       }
@@ -2279,20 +2289,20 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
           // want to register this one before warming is complete instead of waiting.
           if (solrConfig.useColdSearcher) {
             registerSearcher(newSearchHolder);
-            decrementOnDeckCount[0]=false;
-            alreadyRegistered=true;
+            decrementOnDeckCount[0] = false;
+            alreadyRegistered = true;
           }
         } else {
           // get a reference to the current searcher for purposes of autowarming.
-          currSearcherHolder=_searcher;
+          currSearcherHolder = _searcher;
           currSearcherHolder.incref();
         }
       }
 
 
-      final SolrIndexSearcher currSearcher = currSearcherHolder==null ? null : currSearcherHolder.get();
+      final SolrIndexSearcher currSearcher = currSearcherHolder == null ? null : currSearcherHolder.get();
 
-      Future future=null;
+      Future future = null;
 
       // if the underlying searcher has not changed, no warming is needed
       if (newSearcher != currSearcher) {
@@ -2369,7 +2379,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
               } finally {
                 // we are all done with the old searcher we used
                 // for warming...
-                if (currSearcherHolderF!=null) currSearcherHolderF.decref();
+                if (currSearcherHolderF != null) currSearcherHolderF.decref();
               }
               return null;
             }
@@ -2387,21 +2397,22 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       return returnSearcher ? newSearchHolder : null;
 
     } catch (Exception e) {
-      if (e instanceof RuntimeException) throw (RuntimeException)e;
+      if (e instanceof RuntimeException) throw (RuntimeException) e;
       throw new SolrException(ErrorCode.SERVER_ERROR, e);
     } finally {
 
       timerContext.close();
 
       if (!success) {
-        newSearcherOtherErrorsCounter.inc();;
+        newSearcherOtherErrorsCounter.inc();
+        ;
         synchronized (searcherLock) {
           onDeckSearchers--;
 
           if (onDeckSearchers < 0) {
             // sanity check... should never happen
             log.error("{}ERROR!!! onDeckSearchers after decrement={}", logid, onDeckSearchers);
-            onDeckSearchers=0; // try and recover
+            onDeckSearchers = 0; // try and recover
           }
           // if we failed, we need to wake up at least one waiter to continue the process
           searcherLock.notify();
@@ -2433,7 +2444,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
       @Override
       public void close() {
         try {
-          synchronized(searcherLock) {
+          synchronized (searcherLock) {
             // it's possible for someone to get a reference via the _searchers queue
             // and increment the refcount while RefCounted.close() is being called.
             // we check the refcount again to see if this has happened and abort the close.
@@ -2477,23 +2488,23 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
         if (_searcher != null) {
           _searcher.decref();   // dec refcount for this._searcher
-          _searcher=null;
+          _searcher = null;
         }
 
         _searcher = newSearcherHolder;
         SolrIndexSearcher newSearcher = newSearcherHolder.get();
 
         /***
-        // a searcher may have been warming asynchronously while the core was being closed.
-        // if this happens, just close the searcher.
-        if (isClosed()) {
-          // NOTE: this should not happen now - see close() for details.
-          // *BUT* if we left it enabled, this could still happen before
-          // close() stopped the executor - so disable this test for now.
-          log.error("Ignoring searcher register on closed core:" + newSearcher);
-          _searcher.decref();
-        }
-        ***/
+         // a searcher may have been warming asynchronously while the core was being closed.
+         // if this happens, just close the searcher.
+         if (isClosed()) {
+         // NOTE: this should not happen now - see close() for details.
+         // *BUT* if we left it enabled, this could still happen before
+         // close() stopped the executor - so disable this test for now.
+         log.error("Ignoring searcher register on closed core:" + newSearcher);
+         _searcher.decref();
+         }
+         ***/
 
         newSearcher.register(); // register subitems (caches)
         log.info("{}Registered new searcher {}", logid, newSearcher);
@@ -2512,7 +2523,6 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
 
-
   public void closeSearcher() {
     log.debug("{}Closing main searcher on request.", logid);
     synchronized (searcherLock) {
@@ -2528,9 +2538,9 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
   public void execute(SolrRequestHandler handler, SolrQueryRequest req, SolrQueryResponse rsp) {
-    if (handler==null) {
+    if (handler == null) {
       String msg = "Null Request Handler '" +
-        req.getParams().get(CommonParams.QT) + "'";
+          req.getParams().get(CommonParams.QT) + "'";
 
       log.warn("{}{}:{}", logid, msg, req);
 
@@ -2554,7 +2564,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     // if (req.getParams().getBool(ShardParams.IS_SHARD,false) && !(handler instanceof SearchHandler))
     //   throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,"isShard is only acceptable with search handlers");
 
-    handler.handleRequest(req,rsp);
+    handler.handleRequest(req, rsp);
     postDecorateResponse(handler, req, rsp);
 
     if (rsp.getToLog().size() > 0) {
@@ -2616,51 +2626,53 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     }
   }
 
-  /** Put status, QTime, and possibly request handler and params, in the response header */
+  /**
+   * Put status, QTime, and possibly request handler and params, in the response header
+   */
   public static void postDecorateResponse
-      (SolrRequestHandler handler, SolrQueryRequest req, SolrQueryResponse rsp) {
+  (SolrRequestHandler handler, SolrQueryRequest req, SolrQueryResponse rsp) {
     // TODO should check that responseHeader has not been replaced by handler
     NamedList<Object> responseHeader = rsp.getResponseHeader();
-    final int qtime=(int)(req.getRequestTimer().getTime());
+    final int qtime = (int) (req.getRequestTimer().getTime());
     int status = 0;
     Exception exception = rsp.getException();
-    if( exception != null ){
-      if( exception instanceof SolrException )
-        status = ((SolrException)exception).code();
+    if (exception != null) {
+      if (exception instanceof SolrException)
+        status = ((SolrException) exception).code();
       else
         status = 500;
     }
-    responseHeader.add("status",status);
-    responseHeader.add("QTime",qtime);
+    responseHeader.add("status", status);
+    responseHeader.add("QTime", qtime);
 
     if (rsp.getToLog().size() > 0) {
-      rsp.getToLog().add("status",status);
-      rsp.getToLog().add("QTime",qtime);
+      rsp.getToLog().add("status", status);
+      rsp.getToLog().add("QTime", qtime);
     }
 
     SolrParams params = req.getParams();
-    if( null != handler && params.getBool(CommonParams.HEADER_ECHO_HANDLER, false) ) {
-      responseHeader.add("handler", handler.getName() );
+    if (null != handler && params.getBool(CommonParams.HEADER_ECHO_HANDLER, false)) {
+      responseHeader.add("handler", handler.getName());
     }
 
     // Values for echoParams... false/true/all or false/explicit/all ???
-    String ep = params.get( CommonParams.HEADER_ECHO_PARAMS, null );
-    if( ep != null ) {
-      EchoParamStyle echoParams = EchoParamStyle.get( ep );
-      if( echoParams == null ) {
+    String ep = params.get(CommonParams.HEADER_ECHO_PARAMS, null);
+    if (ep != null) {
+      EchoParamStyle echoParams = EchoParamStyle.get(ep);
+      if (echoParams == null) {
         throw new SolrException(ErrorCode.BAD_REQUEST, "Invalid value '" + ep + "' for " + CommonParams.HEADER_ECHO_PARAMS
-            + " parameter, use '" + EchoParamStyle.EXPLICIT + "' or '" + EchoParamStyle.ALL + "'" );
+            + " parameter, use '" + EchoParamStyle.EXPLICIT + "' or '" + EchoParamStyle.ALL + "'");
       }
-      if( echoParams == EchoParamStyle.EXPLICIT ) {
+      if (echoParams == EchoParamStyle.EXPLICIT) {
         responseHeader.add("params", req.getOriginalParams().toNamedList());
-      } else if( echoParams == EchoParamStyle.ALL ) {
+      } else if (echoParams == EchoParamStyle.ALL) {
         responseHeader.add("params", req.getParams().toNamedList());
       }
     }
   }
 
   final public static void log(Throwable e) {
-    SolrException.log(log,null,e);
+    SolrException.log(log, null, e);
   }
 
   public PluginBag<QueryResponseWriter> getResponseWriters() {
@@ -2668,9 +2680,10 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
   private final PluginBag<QueryResponseWriter> responseWriters = new PluginBag<>(QueryResponseWriter.class, this);
-  public static final Map<String ,QueryResponseWriter> DEFAULT_RESPONSE_WRITERS ;
-  static{
-    HashMap<String, QueryResponseWriter> m= new HashMap<>(15, 1);
+  public static final Map<String, QueryResponseWriter> DEFAULT_RESPONSE_WRITERS;
+
+  static {
+    HashMap<String, QueryResponseWriter> m = new HashMap<>(15, 1);
     m.put("xml", new XMLResponseWriter());
     m.put(CommonParams.JSON, new JSONResponseWriter());
     m.put("standard", m.get(CommonParams.JSON));
@@ -2696,7 +2709,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
   private static BinaryResponseWriter getFileStreamWriter() {
-    return new BinaryResponseWriter(){
+    return new BinaryResponseWriter() {
       @Override
       public void write(OutputStream out, SolrQueryRequest req, SolrQueryResponse response) throws IOException {
         RawWriter rawWriter = (RawWriter) response.getValues().get(ReplicationHandler.FILE_STREAM);
@@ -2727,11 +2740,14 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     default String getContentType() {
       return BinaryResponseParser.BINARY_CONTENT_TYPE;
     }
-    void write(OutputStream os) throws IOException ;
+
+    void write(OutputStream os) throws IOException;
   }
 
-  /** Configure the query response writers. There will always be a default writer; additional
-   * writers may also be configured. */
+  /**
+   * Configure the query response writers. There will always be a default writer; additional
+   * writers may also be configured.
+   */
   private void initWriters() {
     responseWriters.init(DEFAULT_RESPONSE_WRITERS, this);
     // configure the default response writer; this one should never be null
@@ -2739,12 +2755,15 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
 
-  /** Finds a writer by name, or returns the default writer if not found. */
+  /**
+   * Finds a writer by name, or returns the default writer if not found.
+   */
   public final QueryResponseWriter getQueryResponseWriter(String writerName) {
     return responseWriters.get(writerName, true);
   }
 
-  /** Returns the appropriate writer for a request. If the request specifies a writer via the
+  /**
+   * Returns the appropriate writer for a request. If the request specifies a writer via the
    * 'wt' parameter, attempts to find that one; otherwise return the default writer.
    */
   public final QueryResponseWriter getQueryResponseWriter(SolrQueryRequest request) {
@@ -2780,14 +2799,14 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     return transformerFactories.get(name);
   }
 
-  public void addTransformerFactory(String name, TransformerFactory factory){
+  public void addTransformerFactory(String name, TransformerFactory factory) {
     transformerFactories.put(name, factory);
   }
 
 
   /**
-   * @param registry The map to which the instance should be added to. The key is the name attribute
-   * @param type the class or interface that the instance should extend or implement.
+   * @param registry     The map to which the instance should be added to. The key is the name attribute
+   * @param type         the class or interface that the instance should extend or implement.
    * @param defClassName If PluginInfo does not have a classname, use this as the classname
    * @return The default instance . The one with (default=true)
    */
@@ -2798,12 +2817,12 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   public <T> T initPlugins(List<PluginInfo> pluginInfos, Map<String, T> registry, Class<T> type, String defClassName) {
     T def = null;
     for (PluginInfo info : pluginInfos) {
-      T o = createInitInstance(info,type, type.getSimpleName(), defClassName);
+      T o = createInitInstance(info, type, type.getSimpleName(), defClassName);
       registry.put(info.name, o);
       if (o instanceof SolrMetricProducer) {
-        coreMetricManager.registerMetricProducer(type.getSimpleName() + "." + info.name, (SolrMetricProducer)o);
+        coreMetricManager.registerMetricProducer(type.getSimpleName() + "." + info.name, (SolrMetricProducer) o);
       }
-      if(info.isDefault()){
+      if (info.isDefault()) {
         def = o;
       }
     }
@@ -2812,26 +2831,27 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
 
   public void initDefaultPlugin(Object plugin, Class type) {
     if (plugin instanceof SolrMetricProducer) {
-      coreMetricManager.registerMetricProducer(type.getSimpleName() + ".default", (SolrMetricProducer)plugin);
+      coreMetricManager.registerMetricProducer(type.getSimpleName() + ".default", (SolrMetricProducer) plugin);
     }
   }
 
-  /**For a given List of PluginInfo return the instances as a List
+  /**
+   * For a given List of PluginInfo return the instances as a List
+   *
    * @param defClassName The default classname if PluginInfo#className == null
    * @return The instances initialized
    */
   public <T> List<T> initPlugins(List<PluginInfo> pluginInfos, Class<T> type, String defClassName) {
-    if(pluginInfos.isEmpty()) return Collections.emptyList();
+    if (pluginInfos.isEmpty()) return Collections.emptyList();
     List<T> result = new ArrayList<>(pluginInfos.size());
-    for (PluginInfo info : pluginInfos) result.add(createInitInstance(info,type, type.getSimpleName(), defClassName));
+    for (PluginInfo info : pluginInfos) result.add(createInitInstance(info, type, type.getSimpleName(), defClassName));
     return result;
   }
 
   /**
-   *
    * @param registry The map to which the instance should be added to. The key is the name attribute
-   * @param type The type of the Plugin. These should be standard ones registered by type.getName() in SolrConfig
-   * @return     The default if any
+   * @param type     The type of the Plugin. These should be standard ones registered by type.getName() in SolrConfig
+   * @return The default if any
    */
   public <T> T initPlugins(Map<String, T> registry, Class<T> type) {
     return initPlugins(registry, type, null);
@@ -2882,13 +2902,13 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     return coreContainer.getCoreDescriptor(name);
   }
 
-  public IndexDeletionPolicyWrapper getDeletionPolicy(){
+  public IndexDeletionPolicyWrapper getDeletionPolicy() {
     return solrDelPolicy;
   }
 
   /**
    * @return A reference of {@linkplain SolrSnapshotMetaDataManager}
-   *         managing the persistent snapshots for this Solr core.
+   * managing the persistent snapshots for this Solr core.
    */
   public SolrSnapshotMetaDataManager getSnapshotMetaDataManager() {
     return snapshotMgr;
@@ -2977,7 +2997,8 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
 
-  /**Register to notify for any file change in the conf directory.
+  /**
+   * Register to notify for any file change in the conf directory.
    * If the file change results in a core reload , then the listener
    * is not fired
    */
@@ -2985,13 +3006,15 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     confListeners.add(runnable);
   }
 
-  /**Remove a listener
-   * */
+  /**
+   * Remove a listener
+   */
   public boolean removeConfListener(Runnable runnable) {
     return confListeners.remove(runnable);
   }
 
-  /**This registers one listener for the entire conf directory. In zookeeper
+  /**
+   * This registers one listener for the entire conf directory. In zookeeper
    * there is no event fired when children are modified. So , we expect everyone
    * to 'touch' the /conf directory by setting some data  so that events are triggered.
    */
@@ -3040,9 +3063,9 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
           checkStale(zkClient, solrConfigPath, overlayVersion) ||
           checkStale(zkClient, managedSchmaResourcePath, managedSchemaVersion)) {
         log.info("core reload {}", coreName);
-        SolrConfigHandler configHandler = ((SolrConfigHandler)core.getRequestHandler("/config"));
-        if (configHandler.getReloadLock().tryLock()){
-          
+        SolrConfigHandler configHandler = ((SolrConfigHandler) core.getRequestHandler("/config"));
+        if (configHandler.getReloadLock().tryLock()) {
+
           try {
             cc.reload(coreName);
           } catch (SolrCoreState.CoreIsClosedException e) {
@@ -3050,7 +3073,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
           } finally {
             configHandler.getReloadLock().unlock();
           }
-        
+
         } else {
           log.info("Another reload is in progress. Not doing anything.");
         }
@@ -3080,20 +3103,20 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
     }
   }
 
-  private static boolean checkStale(SolrZkClient zkClient,  String zkPath, int currentVersion)  {
-    if(zkPath == null) return false;
+  private static boolean checkStale(SolrZkClient zkClient, String zkPath, int currentVersion) {
+    if (zkPath == null) return false;
     try {
       Stat stat = zkClient.exists(zkPath, null, true);
-      if(stat == null){
-        if(currentVersion > -1) return true;
+      if (stat == null) {
+        if (currentVersion > -1) return true;
         return false;
       }
-      if (stat.getVersion() >  currentVersion) {
-        log.debug("{} is stale will need an update from {} to {}", zkPath, currentVersion,stat.getVersion());
+      if (stat.getVersion() > currentVersion) {
+        log.debug("{} is stale will need an update from {} to {}", zkPath, currentVersion, stat.getVersion());
         return true;
       }
       return false;
-    } catch (KeeperException.NoNodeException nne){
+    } catch (KeeperException.NoNodeException nne) {
       //no problem
     } catch (KeeperException e) {
       log.error("error refreshing solrconfig ", e);
@@ -3116,7 +3139,7 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
         } catch (Exception exc) {
           log.error("Failed to cleanup old index directories for core {}", coreName, exc);
         }
-      }, "OldIndexDirectoryCleanupThreadForCore-"+coreName);
+      }, "OldIndexDirectoryCleanupThreadForCore-" + coreName);
       cleanupThread.setDaemon(true);
       cleanupThread.start();
     }
@@ -3137,14 +3160,14 @@ public final class SolrCore implements SolrInfoBean, SolrMetricProducer, Closeab
   }
 
   /**
-   * Convenience method to load a blob. This method minimizes the degree to which component and other code needs 
-   * to depend on the structure of solr's object graph and ensures that a proper close hook is registered. This method 
+   * Convenience method to load a blob. This method minimizes the degree to which component and other code needs
+   * to depend on the structure of solr's object graph and ensures that a proper close hook is registered. This method
    * should normally be called in {@link SolrCoreAware#inform(SolrCore)}, and should never be called during request
-   * processing. The Decoder will only run on the first invocations, subsequent invocations will return the 
-   * cached object. 
-   * 
-   * @param key A key in the format of name/version for a blob stored in the
-   *            {@link CollectionAdminParams#SYSTEM_COLL} blob store via the Blob Store API
+   * processing. The Decoder will only run on the first invocations, subsequent invocations will return the
+   * cached object.
+   *
+   * @param key     A key in the format of name/version for a blob stored in the
+   *                {@link CollectionAdminParams#SYSTEM_COLL} blob store via the Blob Store API
    * @param decoder a decoder with which to convert the blob into a Java Object representation (first time only)
    * @return a reference to the blob that has already cached the decoded version.
    */
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 2306916..c3bfda2 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -168,7 +168,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   protected final CoreContainer coreContainer;
-  private final CollectionHandlerApi v2Handler ;
+  private final CollectionHandlerApi v2Handler;
 
   public CollectionsHandler() {
     super();
@@ -228,11 +228,11 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
     CoreContainer cores = getCoreContainer();
     if (cores == null) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
-              "Core container instance missing");
+          "Core container instance missing");
     }
 
     // Make sure that the core is ZKAware
-    if(!cores.isZooKeeperAware()) {
+    if (!cores.isZooKeeperAware()) {
       throw new SolrException(ErrorCode.BAD_REQUEST,
           "Solr instance is not running in SolrCloud mode.");
     }
@@ -306,7 +306,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
    */
   private static final boolean CHECK_ASYNC_ID_BACK_COMPAT_LOCATIONS = true;
 
-  public static long DEFAULT_COLLECTION_OP_TIMEOUT = 180*1000;
+  public static long DEFAULT_COLLECTION_OP_TIMEOUT = 180 * 1000;
 
   public SolrResponse sendToOCPQueue(ZkNodeProps m) throws KeeperException, InterruptedException {
     return sendToOCPQueue(m, DEFAULT_COLLECTION_OP_TIMEOUT);
@@ -319,44 +319,44 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
     }
     if (m.get(ASYNC) != null) {
 
-       String asyncId = m.getStr(ASYNC);
-
-       if (asyncId.equals("-1")) {
-         throw new SolrException(ErrorCode.BAD_REQUEST, "requestid can not be -1. It is reserved for cleanup purposes.");
-       }
-
-       NamedList<String> r = new NamedList<>();
-
-       if (CHECK_ASYNC_ID_BACK_COMPAT_LOCATIONS && (
-           coreContainer.getZkController().getOverseerCompletedMap().contains(asyncId) ||
-           coreContainer.getZkController().getOverseerFailureMap().contains(asyncId) ||
-           coreContainer.getZkController().getOverseerRunningMap().contains(asyncId) ||
-           overseerCollectionQueueContains(asyncId))) {
-         // for back compatibility, check in the old places. This can be removed in Solr 9
-         r.add("error", "Task with the same requestid already exists.");
-       } else {
-         if (coreContainer.getZkController().claimAsyncId(asyncId)) {
-           boolean success = false;
-           try {
-             coreContainer.getZkController().getOverseerCollectionQueue()
-             .offer(Utils.toJSON(m));
-             success = true;
-           } finally {
-             if (!success) {
-               try {
-                 coreContainer.getZkController().clearAsyncId(asyncId);
-               } catch (Exception e) {
-                 // let the original exception bubble up
-                 log.error("Unable to release async ID={}", asyncId, e);
-                 SolrZkClient.checkInterrupted(e);
-               }
-             }
-           }
-         } else {
-           r.add("error", "Task with the same requestid already exists.");
-         }
-       }
-       r.add(CoreAdminParams.REQUESTID, (String) m.get(ASYNC));
+      String asyncId = m.getStr(ASYNC);
+
+      if (asyncId.equals("-1")) {
+        throw new SolrException(ErrorCode.BAD_REQUEST, "requestid can not be -1. It is reserved for cleanup purposes.");
+      }
+
+      NamedList<String> r = new NamedList<>();
+
+      if (CHECK_ASYNC_ID_BACK_COMPAT_LOCATIONS && (
+          coreContainer.getZkController().getOverseerCompletedMap().contains(asyncId) ||
+              coreContainer.getZkController().getOverseerFailureMap().contains(asyncId) ||
+              coreContainer.getZkController().getOverseerRunningMap().contains(asyncId) ||
+              overseerCollectionQueueContains(asyncId))) {
+        // for back compatibility, check in the old places. This can be removed in Solr 9
+        r.add("error", "Task with the same requestid already exists.");
+      } else {
+        if (coreContainer.getZkController().claimAsyncId(asyncId)) {
+          boolean success = false;
+          try {
+            coreContainer.getZkController().getOverseerCollectionQueue()
+                .offer(Utils.toJSON(m));
+            success = true;
+          } finally {
+            if (!success) {
+              try {
+                coreContainer.getZkController().clearAsyncId(asyncId);
+              } catch (Exception e) {
+                // let the original exception bubble up
+                log.error("Unable to release async ID={}", asyncId, e);
+                SolrZkClient.checkInterrupted(e);
+              }
+            }
+          }
+        } else {
+          r.add("error", "Task with the same requestid already exists.");
+        }
+      }
+      r.add(CoreAdminParams.REQUESTID, (String) m.get(ASYNC));
 
       return new OverseerSolrResponse(r);
     }
@@ -393,12 +393,12 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
    * Copy prefixed params into a map.  There must only be one value for these parameters.
    *
    * @param params The source of params from which copies should be made
-   * @param props The map into which param names and values should be copied as keys and values respectively
+   * @param props  The map into which param names and values should be copied as keys and values respectively
    * @param prefix The prefix to select.
    * @return the map supplied in the props parameter, modified to contain the prefixed params.
    */
   private static Map<String, Object> copyPropertiesWithPrefix(SolrParams params, Map<String, Object> props, String prefix) {
-    Iterator<String> iter =  params.getParameterNamesIterator();
+    Iterator<String> iter = params.getParameterNamesIterator();
     while (iter.hasNext()) {
       String param = iter.next();
       if (param.startsWith(prefix)) {
@@ -665,7 +665,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       }
       if (createCollParams.get(COLL_CONF) == null) {
         throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
-            "We require an explicit " + COLL_CONF );
+            "We require an explicit " + COLL_CONF);
       }
       // note: could insist on a config name here as well.... or wait to throw at overseer
       createCollParams.add(NAME, "TMP_name_TMP_name_TMP"); // just to pass validation
@@ -699,7 +699,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         // the aliases themselves...
         rsp.getValues().add("aliases", aliases.getCollectionAliasMap());
         // Any properties for the above aliases.
-        Map<String,Map<String,String>> meta = new LinkedHashMap<>();
+        Map<String, Map<String, String>> meta = new LinkedHashMap<>();
         for (String alias : aliases.getCollectionAliasListMap().keySet()) {
           Map<String, String> collectionAliasProperties = aliases.getCollectionAliasProperties(alias);
           if (!collectionAliasProperties.isEmpty()) {
@@ -792,8 +792,8 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
           DELETE_DATA_DIR,
           DELETE_INSTANCE_DIR,
           DELETE_METRICS_HISTORY,
-              COUNT_PROP, REPLICA_PROP,
-              SHARD_ID_PROP,
+          COUNT_PROP, REPLICA_PROP,
+          SHARD_ID_PROP,
           ONLY_IF_DOWN);
     }),
     MIGRATE_OP(MIGRATE, (req, rsp, h) -> {
@@ -877,11 +877,11 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         if (flush) {
           Collection<String> completed = zkController.getOverseerCompletedMap().keys();
           Collection<String> failed = zkController.getOverseerFailureMap().keys();
-          for (String asyncId:completed) {
+          for (String asyncId : completed) {
             zkController.getOverseerCompletedMap().remove(asyncId);
             zkController.clearAsyncId(asyncId);
           }
-          for (String asyncId:failed) {
+          for (String asyncId : failed) {
             zkController.getOverseerFailureMap().remove(asyncId);
             zkController.clearAsyncId(asyncId);
           }
@@ -1013,7 +1013,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
     MODIFYCOLLECTION_OP(MODIFYCOLLECTION, (req, rsp, h) -> {
       Map<String, Object> m = copy(req.getParams(), null, CollectionAdminRequest.MODIFIABLE_COLLECTION_PROPERTIES);
       copyPropertiesWithPrefix(req.getParams(), m, COLL_PROP_PREFIX);
-      if (m.isEmpty())  {
+      if (m.isEmpty()) {
         throw new SolrException(ErrorCode.BAD_REQUEST,
             formatString("no supported values provided {0}", CollectionAdminRequest.MODIFIABLE_COLLECTION_PROPERTIES.toString()));
       }
@@ -1021,7 +1021,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       addMapObject(m, RULE);
       addMapObject(m, SNITCH);
       for (String prop : m.keySet()) {
-        if ("".equals(m.get(prop)))  {
+        if ("".equals(m.get(prop))) {
           // set to an empty string is equivalent to removing the property, see SOLR-12507
           m.put(prop, null);
         }
@@ -1224,17 +1224,17 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
      * all prefixed properties as the value. The sub-map keys have the prefix removed.
      *
      * @param params The solr params from which to extract prefixed properties.
-     * @param sink The map to add the properties too.
+     * @param sink   The map to add the properties too.
      * @param prefix The prefix to identify properties to be extracted
      * @return The sink map, or a new map if the sink map was null
      */
     private static Map<String, Object> convertPrefixToMap(SolrParams params, Map<String, Object> sink, String prefix) {
-      Map<String,Object> result = new LinkedHashMap<>();
-      Iterator<String> iter =  params.getParameterNamesIterator();
+      Map<String, Object> result = new LinkedHashMap<>();
+      Iterator<String> iter = params.getParameterNamesIterator();
       while (iter.hasNext()) {
         String param = iter.next();
         if (param.startsWith(prefix)) {
-          result.put(param.substring(prefix.length()+1), params.get(param));
+          result.put(param.substring(prefix.length() + 1), params.get(param));
         }
       }
       if (sink == null) {
@@ -1396,7 +1396,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       });
     } catch (TimeoutException | InterruptedException e) {
 
-      String  error = "Timeout waiting for active collection " + collectionName + " with timeout=" + seconds;
+      String error = "Timeout waiting for active collection " + collectionName + " with timeout=" + seconds;
       throw new NotInClusterStateException(ErrorCode.SERVER_ERROR, error);
     }
 
@@ -1462,7 +1462,9 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
   // These "copy" methods were once SolrParams.getAll but were moved here as there is no universal way that
   //  a SolrParams can be represented in a Map; there are various choices.
 
-  /**Copy all params to the given map or if the given map is null create a new one */
+  /**
+   * Copy all params to the given map or if the given map is null create a new one
+   */
   static Map<String, Object> copy(SolrParams source, Map<String, Object> sink, Collection<String> paramNames) {
     if (sink == null) sink = new LinkedHashMap<>();
     for (String param : paramNames) {
@@ -1478,8 +1480,10 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
     return sink;
   }
 
-  /**Copy all params to the given map or if the given map is null create a new one */
-  static Map<String, Object> copy(SolrParams source, Map<String, Object> sink, String... paramNames){
+  /**
+   * Copy all params to the given map or if the given map is null create a new one
+   */
+  static Map<String, Object> copy(SolrParams source, Map<String, Object> sink, String... paramNames) {
     return copy(source, sink, paramNames == null ? Collections.emptyList() : Arrays.asList(paramNames));
   }
 
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index cd72203..88b67ff 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -87,7 +87,9 @@ public class ZkStateReader implements SolrCloseable {
   public static final String STATE_PROP = "state";
   // if this flag equals to false and the replica does not exist in cluster state, set state op become no op (default is true)
   public static final String FORCE_SET_STATE_PROP = "force_set_state";
-  /**  SolrCore name. */
+  /**
+   * SolrCore name.
+   */
   public static final String CORE_NAME_PROP = "core";
   public static final String COLLECTION_PROP = "collection";
   public static final String ELECTION_NODE_PROP = "election_node";
@@ -132,7 +134,7 @@ public class ZkStateReader implements SolrCloseable {
   public static final String ROLES = "/roles.json";
 
   public static final String CONFIGS_ZKNODE = "/configs";
-  public final static String CONFIGNAME_PROP="configName";
+  public final static String CONFIGNAME_PROP = "configName";
 
   public static final String LEGACY_CLOUD = "legacyCloud";
   public static final String SAMPLE_PERCENTAGE = "samplePercentage";
@@ -147,33 +149,48 @@ public class ZkStateReader implements SolrCloseable {
 
   public static final String REPLICA_TYPE = "type";
 
-  /** A view of the current state of all collections; combines all the different state sources into a single view. */
+  /**
+   * A view of the current state of all collections; combines all the different state sources into a single view.
+   */
   protected volatile ClusterState clusterState;
 
   private static final int GET_LEADER_RETRY_INTERVAL_MS = 50;
-  private static final int GET_LEADER_RETRY_DEFAULT_TIMEOUT = Integer.parseInt(System.getProperty("zkReaderGetLeaderRetryTimeoutMs", "4000"));;
+  private static final int GET_LEADER_RETRY_DEFAULT_TIMEOUT = Integer.parseInt(System.getProperty("zkReaderGetLeaderRetryTimeoutMs", "4000"));
+  ;
 
   public static final String LEADER_ELECT_ZKNODE = "leader_elect";
 
   public static final String SHARD_LEADERS_ZKNODE = "leaders";
   public static final String ELECTION_NODE = "election";
 
-  /** Collections tracked in the legacy (shared) state format, reflects the contents of clusterstate.json. */
+  /**
+   * Collections tracked in the legacy (shared) state format, reflects the contents of clusterstate.json.
+   */
   private Map<String, ClusterState.CollectionRef> legacyCollectionStates = emptyMap();
 
-  /** Last seen ZK version of clusterstate.json. */
+  /**
+   * Last seen ZK version of clusterstate.json.
+   */
   private int legacyClusterStateVersion = 0;
 
-  /** Collections with format2 state.json, "interesting" and actively watched. */
+  /**
+   * Collections with format2 state.json, "interesting" and actively watched.
+   */
   private final ConcurrentHashMap<String, DocCollection> watchedCollectionStates = new ConcurrentHashMap<>();
 
-  /** Collections with format2 state.json, not "interesting" and not actively watched. */
+  /**
+   * Collections with format2 state.json, not "interesting" and not actively watched.
+   */
   private final ConcurrentHashMap<String, LazyCollectionRef> lazyCollectionStates = new ConcurrentHashMap<>();
 
-  /** Collection properties being actively watched */
+  /**
+   * Collection properties being actively watched
+   */
   private final ConcurrentHashMap<String, VersionedCollectionProps> watchedCollectionProps = new ConcurrentHashMap<>();
 
-  /** Collection properties being actively watched */
+  /**
+   * Collection properties being actively watched
+   */
   private final ConcurrentHashMap<String, PropsWatcher> collectionPropsWatchers = new ConcurrentHashMap<>();
 
   private volatile SortedSet<String> liveNodes = emptySortedSet();
@@ -199,7 +216,9 @@ public class ZkStateReader implements SolrCloseable {
 
   private Set<ClusterPropertiesListener> clusterPropertiesListeners = ConcurrentHashMap.newKeySet();
 
-  /** Used to submit notifications to Collection Properties watchers in order **/
+  /**
+   * Used to submit notifications to Collection Properties watchers in order
+   **/
   private final ExecutorService collectionPropsNotifications = ExecutorUtil.newMDCAwareSingleThreadExecutor(new SolrjNamedThreadFactory("collectionPropsNotifications"));
 
   private static final long LAZY_CACHE_TIME = TimeUnit.NANOSECONDS.convert(STATE_UPDATE_DELAY, TimeUnit.MILLISECONDS);
@@ -208,6 +227,7 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Get current {@link AutoScalingConfig}.
+   *
    * @return current configuration from <code>autoscaling.json</code>. NOTE:
    * this data is retrieved from ZK on each call.
    */
@@ -217,6 +237,7 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Get current {@link AutoScalingConfig}.
+   *
    * @param watcher optional {@link Watcher} to set on a znode to watch for config changes.
    * @return current configuration from <code>autoscaling.json</code>. NOTE:
    * this data is retrieved from ZK on each call.
@@ -237,7 +258,7 @@ public class ZkStateReader implements SolrCloseable {
     return new AutoScalingConfig(map);
   }
 
-  private static class CollectionWatch <T> {
+  private static class CollectionWatch<T> {
 
     int coreRefCount = 0;
     Set<T> stateWatchers = ConcurrentHashMap.newKeySet();
@@ -359,7 +380,7 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Forcibly refresh cluster state from ZK. Do this only to avoid race conditions because it's expensive.
-   *
+   * <p>
    * It is cheaper to call {@link #forceUpdateCollection(String)} on a single collection if you must.
    *
    * @lucene.internal
@@ -438,7 +459,9 @@ public class ZkStateReader implements SolrCloseable {
 
   }
 
-  /** Refresh the set of live nodes. */
+  /**
+   * Refresh the set of live nodes.
+   */
   public void updateLiveNodes() throws KeeperException, InterruptedException {
     refreshLiveNodes(null);
   }
@@ -449,7 +472,7 @@ public class ZkStateReader implements SolrCloseable {
     if (collection.getZNodeVersion() < version) {
       log.debug("Server older than client {}<{}", collection.getZNodeVersion(), version);
       DocCollection nu = getCollectionLive(this, coll);
-      if (nu == null) return -1 ;
+      if (nu == null) return -1;
       if (nu.getZNodeVersion() > collection.getZNodeVersion()) {
         if (updateWatchedCollection(coll, nu)) {
           synchronized (getUpdateLock()) {
@@ -478,7 +501,7 @@ public class ZkStateReader implements SolrCloseable {
     // Sanity check ZK structure.
     if (!zkClient.exists(CLUSTER_STATE, true)) {
       throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE,
-              "Cannot connect to cluster at " + zkClient.getZkServerAddress() + ": cluster not found/not ready");
+          "Cannot connect to cluster at " + zkClient.getZkServerAddress() + ": cluster not found/not ready");
     }
 
     // on reconnect of SolrZkClient force refresh and re-add watches.
@@ -652,7 +675,7 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Search for any lazy-loadable state format2 collections.
-   *
+   * <p>
    * A stateFormat=1 collection which is not interesting to us can also
    * be put into the {@link #lazyCollectionStates} map here. But that is okay
    * because {@link #constructState(Set)} will give priority to collections in the
@@ -761,7 +784,8 @@ public class ZkStateReader implements SolrCloseable {
           Stat exists = null;
           try {
             exists = zkClient.exists(getCollectionPath(collName), null, true);
-          } catch (Exception e) {}
+          } catch (Exception e) {
+          }
           if (exists != null && exists.getVersion() == cachedDocCollection.getZNodeVersion()) {
             shouldFetch = false;
           }
@@ -873,11 +897,13 @@ public class ZkStateReader implements SolrCloseable {
   }
 
   public void close() {
-    this.closed  = true;
+    this.closed = true;
 
     notifications.shutdownNow();
 
-    waitLatches.parallelStream().forEach(c -> { c.countDown(); });
+    waitLatches.parallelStream().forEach(c -> {
+      c.countDown();
+    });
 
     ExecutorUtil.shutdownAndAwaitTermination(notifications);
     ExecutorUtil.shutdownAndAwaitTermination(collectionPropsNotifications);
@@ -904,6 +930,7 @@ public class ZkStateReader implements SolrCloseable {
     }
     return null;
   }
+
   public Replica getLeader(String collection, String shard) {
     if (clusterState != null) {
       DocCollection docCollection = clusterState.getCollectionOrNull(collection);
@@ -961,7 +988,7 @@ public class ZkStateReader implements SolrCloseable {
    */
   public static String getShardLeadersElectPath(String collection, String shardId) {
     return COLLECTIONS_ZKNODE + "/" + collection + "/"
-        + LEADER_ELECT_ZKNODE  + (shardId != null ? ("/" + shardId + "/" + ELECTION_NODE)
+        + LEADER_ELECT_ZKNODE + (shardId != null ? ("/" + shardId + "/" + ELECTION_NODE)
         : "");
   }
 
@@ -971,18 +998,18 @@ public class ZkStateReader implements SolrCloseable {
   }
 
   public List<ZkCoreNodeProps> getReplicaProps(String collection, String shardId, String thisCoreNodeName,
-      Replica.State mustMatchStateFilter) {
+                                               Replica.State mustMatchStateFilter) {
     return getReplicaProps(collection, shardId, thisCoreNodeName, mustMatchStateFilter, null);
   }
 
   public List<ZkCoreNodeProps> getReplicaProps(String collection, String shardId, String thisCoreNodeName,
-      Replica.State mustMatchStateFilter, Replica.State mustNotMatchStateFilter) {
+                                               Replica.State mustMatchStateFilter, Replica.State mustNotMatchStateFilter) {
     //TODO: We don't need all these getReplicaProps method overloading. Also, it's odd that the default is to return replicas of type TLOG and NRT only
-    return getReplicaProps(collection, shardId, thisCoreNodeName, mustMatchStateFilter, null, EnumSet.of(Replica.Type.TLOG,  Replica.Type.NRT));
+    return getReplicaProps(collection, shardId, thisCoreNodeName, mustMatchStateFilter, null, EnumSet.of(Replica.Type.TLOG, Replica.Type.NRT));
   }
 
   public List<ZkCoreNodeProps> getReplicaProps(String collection, String shardId, String thisCoreNodeName,
-      Replica.State mustMatchStateFilter, Replica.State mustNotMatchStateFilter, final EnumSet<Replica.Type> acceptReplicaType) {
+                                               Replica.State mustMatchStateFilter, Replica.State mustNotMatchStateFilter, final EnumSet<Replica.Type> acceptReplicaType) {
     assert thisCoreNodeName != null;
     ClusterState clusterState = this.clusterState;
     if (clusterState == null) {
@@ -994,15 +1021,15 @@ public class ZkStateReader implements SolrCloseable {
           "Could not find collection in zk: " + collection);
     }
 
-    Map<String,Slice> slices = docCollection.getSlicesMap();
+    Map<String, Slice> slices = docCollection.getSlicesMap();
     Slice replicas = slices.get(shardId);
     if (replicas == null) {
       throw new ZooKeeperException(ErrorCode.BAD_REQUEST, "Could not find shardId in zk: " + shardId);
     }
 
-    Map<String,Replica> shardMap = replicas.getReplicasMap();
+    Map<String, Replica> shardMap = replicas.getReplicasMap();
     List<ZkCoreNodeProps> nodes = new ArrayList<>(shardMap.size());
-    for (Entry<String,Replica> entry : shardMap.entrySet().stream().filter((e)->acceptReplicaType.contains(e.getValue().getType())).collect(Collectors.toList())) {
+    for (Entry<String, Replica> entry : shardMap.entrySet().stream().filter((e) -> acceptReplicaType.contains(e.getValue().getType())).collect(Collectors.toList())) {
       ZkCoreNodeProps nodeProps = new ZkCoreNodeProps(entry.getValue());
 
       String coreNodeName = entry.getValue().getName();
@@ -1029,32 +1056,33 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Get a cluster property
-   *
+   * <p>
    * N.B. Cluster properties are updated via ZK watchers, and so may not necessarily
    * be completely up-to-date.  If you need to get the latest version, then use a
    * {@link ClusterProperties} instance.
    *
-   * @param key           the property to read
-   * @param defaultValue  a default value to use if no such property exists
-   * @param <T>           the type of the property
+   * @param key          the property to read
+   * @param defaultValue a default value to use if no such property exists
+   * @param <T>          the type of the property
    * @return the cluster property, or a default if the property is not set
    */
   @SuppressWarnings("unchecked")
   public <T> T getClusterProperty(String key, T defaultValue) {
-    T value = (T) Utils.getObjectByPath( clusterProperties, false, key);
+    T value = (T) Utils.getObjectByPath(clusterProperties, false, key);
     if (value == null)
       return defaultValue;
     return value;
   }
 
-  /**Same as the above but allows a full json path as a list of parts
+  /**
+   * Same as the above but allows a full json path as a list of parts
    *
-   * @param keyPath path to the property example ["collectionDefauls", "numShards"]
+   * @param keyPath      path to the property example ["collectionDefauls", "numShards"]
    * @param defaultValue a default value to use if no such property exists
    * @return the cluster property, or a default if the property is not set
    */
   public <T> T getClusterProperty(List<String> keyPath, T defaultValue) {
-    T value = (T) Utils.getObjectByPath( clusterProperties, false, keyPath);
+    T value = (T) Utils.getObjectByPath(clusterProperties, false, keyPath);
     if (value == null)
       return defaultValue;
     return value;
@@ -1062,7 +1090,7 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Get all cluster properties for this cluster
-   *
+   * <p>
    * N.B. Cluster properties are updated via ZK watchers, and so may not necessarily
    * be completely up-to-date.  If you need to get the latest version, then use a
    * {@link ClusterProperties} instance.
@@ -1090,7 +1118,7 @@ public class ZkStateReader implements SolrCloseable {
           this.clusterProperties = ClusterProperties.convertCollectionDefaultsToNestedFormat((Map<String, Object>) Utils.fromJSON(data));
           log.debug("Loaded cluster properties: {}", this.clusterProperties);
 
-          for (ClusterPropertiesListener listener: clusterPropertiesListeners) {
+          for (ClusterPropertiesListener listener : clusterPropertiesListeners) {
             listener.onChange(getClusterProperties());
           }
           return;
@@ -1116,7 +1144,7 @@ public class ZkStateReader implements SolrCloseable {
    * @return a map representing the key/value properties for the collection.
    */
   public Map<String, String> getCollectionProperties(final String collection) {
-    return getCollectionProperties(collection,0);
+    return getCollectionProperties(collection, 0);
   }
 
   /**
@@ -1126,7 +1154,7 @@ public class ZkStateReader implements SolrCloseable {
    * This version of {@code getCollectionProperties} should be used when properties need to be consulted
    * frequently in the absence of an active {@link CollectionPropsWatcher}.
    *
-   * @param collection The collection for which properties are desired
+   * @param collection     The collection for which properties are desired
    * @param cacheForMillis The minimum number of milliseconds to maintain a cache for the specified collection's
    *                       properties. Setting a {@code CollectionPropsWatcher} will override this value and retain
    *                       the cache for the life of the watcher. A lack of changes in zookeeper may allow the
@@ -1156,7 +1184,7 @@ public class ZkStateReader implements SolrCloseable {
           properties = vcp.props;
           if (cacheForMillis > 0) {
             vcp.cacheUntilNs = untilNs;
-            watchedCollectionProps.put(collection,vcp);
+            watchedCollectionProps.put(collection, vcp);
           } else {
             // we're synchronized on watchedCollectionProps and we can only get here if we have found an expired
             // vprops above, so it is safe to remove the cached value and let the GC free up some mem a bit sooner.
@@ -1174,7 +1202,7 @@ public class ZkStateReader implements SolrCloseable {
 
   private class VersionedCollectionProps {
     int zkVersion;
-    Map<String,String> props;
+    Map<String, String> props;
     long cacheUntilNs = 0;
 
     VersionedCollectionProps(int zkVersion, Map<String, String> props) {
@@ -1202,7 +1230,7 @@ public class ZkStateReader implements SolrCloseable {
       try {
         Stat stat = new Stat();
         byte[] data = zkClient.getData(znodePath, watcher, stat, true);
-        return new VersionedCollectionProps(stat.getVersion(),(Map<String, String>) Utils.fromJSON(data));
+        return new VersionedCollectionProps(stat.getVersion(), (Map<String, String>) Utils.fromJSON(data));
       } catch (ClassCastException e) {
         throw new SolrException(ErrorCode.SERVER_ERROR, "Unable to parse collection properties for collection " + collection, e);
       } catch (KeeperException.NoNodeException e) {
@@ -1226,12 +1254,12 @@ public class ZkStateReader implements SolrCloseable {
    */
   public ConfigData getSecurityProps(boolean getFresh) {
     if (!getFresh) {
-      if (securityData == null) return new ConfigData(EMPTY_MAP,-1);
+      if (securityData == null) return new ConfigData(EMPTY_MAP, -1);
       return new ConfigData(securityData.data, securityData.version);
     }
     try {
       Stat stat = new Stat();
-      if(getZkClient().exists(SOLR_SECURITY_CONF_PATH, true)) {
+      if (getZkClient().exists(SOLR_SECURITY_CONF_PATH, true)) {
         final byte[] data = getZkClient().getData(ZkStateReader.SOLR_SECURITY_CONF_PATH, null, stat, true);
         return data != null && data.length > 0 ?
             new ConfigData((Map<String, Object>) Utils.fromJSON(data), stat.getVersion()) :
@@ -1239,9 +1267,9 @@ public class ZkStateReader implements SolrCloseable {
       }
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
-      throw new SolrException(ErrorCode.SERVER_ERROR,"Error reading security properties", e) ;
+      throw new SolrException(ErrorCode.SERVER_ERROR, "Error reading security properties", e);
     } catch (KeeperException e) {
-      throw new SolrException(ErrorCode.SERVER_ERROR,"Error reading security properties", e) ;
+      throw new SolrException(ErrorCode.SERVER_ERROR, "Error reading security properties", e);
     }
     return null;
   }
@@ -1250,13 +1278,16 @@ public class ZkStateReader implements SolrCloseable {
    * Returns the baseURL corresponding to a given node's nodeName --
    * NOTE: does not (currently) imply that the nodeName (or resulting
    * baseURL) exists in the cluster.
+   *
    * @lucene.experimental
    */
   public String getBaseUrlForNodeName(final String nodeName) {
     return Utils.getBaseUrlForNodeName(nodeName, getClusterProperty(URL_SCHEME, "http"));
   }
 
-  /** Watches a single collection's format2 state.json. */
+  /**
+   * Watches a single collection's format2 state.json.
+   */
   class StateWatcher implements Watcher {
     private final String coll;
 
@@ -1279,7 +1310,7 @@ public class ZkStateReader implements SolrCloseable {
 
       Set<String> liveNodes = ZkStateReader.this.liveNodes;
       log.info("A cluster state change: [{}] for collection [{}] has occurred - updating... (live nodes size: [{}])",
-              event, coll, liveNodes.size());
+          event, coll, liveNodes.size());
 
       refreshAndWatch();
 
@@ -1310,7 +1341,9 @@ public class ZkStateReader implements SolrCloseable {
     }
   }
 
-  /** Watches the legacy clusterstate.json. */
+  /**
+   * Watches the legacy clusterstate.json.
+   */
   class LegacyClusterStateWatcher implements Watcher {
 
     @Override
@@ -1324,13 +1357,15 @@ public class ZkStateReader implements SolrCloseable {
       refreshAndWatch();
     }
 
-    /** Must hold {@link #getUpdateLock()} before calling this method. */
+    /**
+     * Must hold {@link #getUpdateLock()} before calling this method.
+     */
     public void refreshAndWatch() {
       try {
         refreshLegacyClusterState(this);
       } catch (KeeperException.NoNodeException e) {
         throw new SolrException(ErrorCode.SERVICE_UNAVAILABLE,
-                "Cannot connect to cluster at " + zkClient.getZkServerAddress() + ": cluster not found/not ready");
+            "Cannot connect to cluster at " + zkClient.getZkServerAddress() + ": cluster not found/not ready");
       } catch (KeeperException.SessionExpiredException | KeeperException.ConnectionLossException e) {
         log.warn("ZooKeeper watch triggered, but Solr cannot talk to ZK: [{}]", e.getMessage());
       } catch (KeeperException e) {
@@ -1344,7 +1379,9 @@ public class ZkStateReader implements SolrCloseable {
     }
   }
 
-  /** Watches collection properties */
+  /**
+   * Watches collection properties
+   */
   class PropsWatcher implements Watcher {
     private final String coll;
     private long watchUntilNs;
@@ -1356,11 +1393,11 @@ public class ZkStateReader implements SolrCloseable {
 
     PropsWatcher(String coll, long forMillis) {
       this.coll = coll;
-      watchUntilNs = System.nanoTime() + TimeUnit.NANOSECONDS.convert(forMillis,TimeUnit.MILLISECONDS);
+      watchUntilNs = System.nanoTime() + TimeUnit.NANOSECONDS.convert(forMillis, TimeUnit.MILLISECONDS);
     }
 
     public PropsWatcher renew(long forMillis) {
-      watchUntilNs = System.nanoTime() + TimeUnit.NANOSECONDS.convert(forMillis,TimeUnit.MILLISECONDS);
+      watchUntilNs = System.nanoTime() + TimeUnit.NANOSECONDS.convert(forMillis, TimeUnit.MILLISECONDS);
       return this;
     }
 
@@ -1428,7 +1465,9 @@ public class ZkStateReader implements SolrCloseable {
     }
   }
 
-  /** Watches /collections children . */
+  /**
+   * Watches /collections children .
+   */
   class CollectionsChildWatcher implements Watcher {
 
     @Override
@@ -1448,7 +1487,9 @@ public class ZkStateReader implements SolrCloseable {
       }
     }
 
-    /** Must hold {@link #getUpdateLock()} before calling this method. */
+    /**
+     * Must hold {@link #getUpdateLock()} before calling this method.
+     */
     public void refreshAndWatch() {
       try {
         refreshCollectionList(this);
@@ -1465,7 +1506,9 @@ public class ZkStateReader implements SolrCloseable {
     }
   }
 
-  /** Watches the live_nodes and syncs changes. */
+  /**
+   * Watches the live_nodes and syncs changes.
+   */
   class LiveNodeWatcher implements Watcher {
 
     @Override
@@ -1531,7 +1574,7 @@ public class ZkStateReader implements SolrCloseable {
   }
 
   public static String getCollectionPathRoot(String coll) {
-    return COLLECTIONS_ZKNODE+"/"+coll;
+    return COLLECTIONS_ZKNODE + "/" + coll;
   }
 
   public static String getCollectionPath(String coll) {
@@ -1541,14 +1584,13 @@ public class ZkStateReader implements SolrCloseable {
   /**
    * Notify this reader that a local Core is a member of a collection, and so that collection
    * state should be watched.
-   *
+   * <p>
    * Not a public API.  This method should only be called from ZkController.
-   *
+   * <p>
    * The number of cores per-collection is tracked, and adding multiple cores from the same
    * collection does not increase the number of watches.
    *
    * @param collection the collection that the core is a member of
-   *
    * @see ZkStateReader#unregisterCore(String)
    */
   public void registerCore(String collection) {
@@ -1568,9 +1610,9 @@ public class ZkStateReader implements SolrCloseable {
 
   /**
    * Notify this reader that a local core that is a member of a collection has been closed.
-   *
+   * <p>
    * Not a public API.  This method should only be called from ZkController.
-   *
+   * <p>
    * If no cores are registered for a collection, and there are no {@link CollectionStateWatcher}s
    * for that collection either, the collection watch will be removed.
    *
@@ -1599,18 +1641,18 @@ public class ZkStateReader implements SolrCloseable {
   }
 
   /**
-   * Register a CollectionStateWatcher to be called when the state of a collection changes 
+   * Register a CollectionStateWatcher to be called when the state of a collection changes
    * <em>or</em> the set of live nodes changes.
    *
    * <p>
-   * The Watcher will automatically be removed when it's 
+   * The Watcher will automatically be removed when it's
    * <code>onStateChanged</code> returns <code>true</code>
    * </p>
    *
    * <p>
-   * This is method is just syntactic sugar for registering both a {@link DocCollectionWatcher} and 
-   * a {@link LiveNodesListener}.  Callers that only care about one or the other (but not both) are 
-   * encouraged to use the more specific methods register methods as it may reduce the number of 
+   * This is method is just syntactic sugar for registering both a {@link DocCollectionWatcher} and
+   * a {@link LiveNodesListener}.  Callers that only care about one or the other (but not both) are
+   * encouraged to use the more specific methods register methods as it may reduce the number of
    * ZooKeeper watchers needed, and reduce the amount of network/cpu used.
    * </p>
    *
@@ -1619,8 +1661,8 @@ public class ZkStateReader implements SolrCloseable {
    */
   public void registerCollectionStateWatcher(String collection, CollectionStateWatcher stateWatcher) {
     final DocCollectionAndLiveNodesWatcherWrapper wrapper
-      = new DocCollectionAndLiveNodesWatcherWrapper(collection, stateWatcher);
-    
+        = new DocCollectionAndLiveNodesWatcherWrapper(collection, stateWatcher);
+
     registerDocCollectionWatcher(collection, wrapper);
     registerLiveNodesListener(wrapper);
 
@@ -1634,7 +1676,7 @@ public class ZkStateReader implements SolrCloseable {
    * Register a DocCollectionWatcher to be called when the state of a collection changes
    *
    * <p>
-   * The Watcher will automatically be removed when it's 
+   * The Watcher will automatically be removed when it's
    * <code>onStateChanged</code> returns <code>true</code>
    * </p>
    */
@@ -1668,19 +1710,19 @@ public class ZkStateReader implements SolrCloseable {
    * </p>
    *
    * <p>
-   * This implementation utilizes {@link CollectionStateWatcher} internally. 
-   * Callers that don't care about liveNodes are encouraged to use a {@link DocCollection} {@link Predicate} 
+   * This implementation utilizes {@link CollectionStateWatcher} internally.
+   * Callers that don't care about liveNodes are encouraged to use a {@link DocCollection} {@link Predicate}
    * instead
    * </p>
-   * 
-   * @see #waitForState(String, long, TimeUnit, Predicate)
-   * @see #registerCollectionStateWatcher
+   *
    * @param collection the collection to watch
    * @param wait       how long to wait
    * @param unit       the units of the wait parameter
    * @param predicate  the predicate to call on state changes
    * @throws InterruptedException on interrupt
-   * @throws TimeoutException on timeout
+   * @throws TimeoutException     on timeout
+   * @see #waitForState(String, long, TimeUnit, Predicate)
+   * @see #registerCollectionStateWatcher
    */
   public void waitForState(final String collection, long wait, TimeUnit unit, CollectionStatePredicate predicate)
       throws InterruptedException, TimeoutException {
@@ -1707,13 +1749,12 @@ public class ZkStateReader implements SolrCloseable {
       if (!latch.await(wait, unit))
         throw new TimeoutException("Timeout waiting to see state for collection=" + collection + " :" + docCollection.get());
 
-    }
-    finally {
+    } finally {
       removeCollectionStateWatcher(collection, watcher);
       waitLatches.remove(latch);
     }
   }
-  
+
   /**
    * Block until a Predicate returns true, or the wait times out
    *
@@ -1727,7 +1768,7 @@ public class ZkStateReader implements SolrCloseable {
    * @param unit       the units of the wait parameter
    * @param predicate  the predicate to call on state changes
    * @throws InterruptedException on interrupt
-   * @throws TimeoutException on timeout
+   * @throws TimeoutException     on timeout
    */
   public void waitForState(final String collection, long wait, TimeUnit unit, Predicate<DocCollection> predicate)
       throws InterruptedException, TimeoutException {
@@ -1754,8 +1795,7 @@ public class ZkStateReader implements SolrCloseable {
       if (!latch.await(wait, unit))
         throw new TimeoutException("Timeout waiting to see state for collection=" + collection + " :" + docCollection.get());
 
-    }
-    finally {
+    } finally {
       removeDocCollectionWatcher(collection, watcher);
       waitLatches.remove(latch);
     }
@@ -1767,11 +1807,12 @@ public class ZkStateReader implements SolrCloseable {
    * Note that the predicate may be called again even after it has returned true, so
    * implementors should avoid changing state within the predicate call itself.
    * </p>
-   * @param wait       how long to wait
-   * @param unit       the units of the wait parameter
-   * @param predicate  the predicate to call on state changes
+   *
+   * @param wait      how long to wait
+   * @param unit      the units of the wait parameter
+   * @param predicate the predicate to call on state changes
    * @throws InterruptedException on interrupt
-   * @throws TimeoutException on timeout
+   * @throws TimeoutException     on timeout
    */
   public void waitForLiveNodes(long wait, TimeUnit unit, LiveNodesPredicate predicate)
       throws InterruptedException, TimeoutException {
@@ -1798,8 +1839,7 @@ public class ZkStateReader implements SolrCloseable {
       if (!latch.await(wait, unit))
         throw new TimeoutException("Timeout waiting for live nodes, currently they are: " + getClusterState().getLiveNodes());
 
-    }
-    finally {
+    } finally {
       removeLiveNodesListener(listener);
       waitLatches.remove(latch);
     }
@@ -1813,18 +1853,18 @@ public class ZkStateReader implements SolrCloseable {
    * collection.
    * </p>
    *
-   * @see #registerCollectionStateWatcher
    * @param collection the collection
    * @param watcher    the watcher
+   * @see #registerCollectionStateWatcher
    */
   public void removeCollectionStateWatcher(String collection, CollectionStateWatcher watcher) {
     final DocCollectionAndLiveNodesWatcherWrapper wrapper
-      = new DocCollectionAndLiveNodesWatcherWrapper(collection, watcher);
+        = new DocCollectionAndLiveNodesWatcherWrapper(collection, watcher);
 
     removeDocCollectionWatcher(collection, wrapper);
     removeLiveNodesListener(wrapper);
   }
-  
+
   /**
    * Remove a watcher from a collection's watch list.
    * <p>
@@ -1832,9 +1872,9 @@ public class ZkStateReader implements SolrCloseable {
    * collection.
    * </p>
    *
-   * @see #registerDocCollectionWatcher
    * @param collection the collection
    * @param watcher    the watcher
+   * @see #registerDocCollectionWatcher
    */
   public void removeDocCollectionWatcher(String collection, DocCollectionWatcher watcher) {
     AtomicBoolean reconstructState = new AtomicBoolean(false);
@@ -1967,8 +2007,7 @@ public class ZkStateReader implements SolrCloseable {
     }
     try {
       notifications.submit(new Notification(collection, collectionState));
-    }
-    catch (RejectedExecutionException e) {
+    } catch (RejectedExecutionException e) {
       if (closed == false) {
         log.error("Couldn't run collection notifications for {}", collection, e);
       }
@@ -2011,7 +2050,9 @@ public class ZkStateReader implements SolrCloseable {
   //  Aliases related
   //
 
-  /** Access to the {@link Aliases}. */
+  /**
+   * Access to the {@link Aliases}.
+   */
   public final AliasesManager aliasesManager = new AliasesManager();
 
   /**
@@ -2039,7 +2080,7 @@ public class ZkStateReader implements SolrCloseable {
    * per instance of ZkStateReader. Normally it will not be useful to create a new instance since
    * this watcher automatically re-registers itself every time it is updated.
    */
-  public class AliasesManager implements Watcher  { // the holder is a Zk watcher
+  public class AliasesManager implements Watcher { // the holder is a Zk watcher
     // note: as of this writing, this class if very generic. Is it useful to use for other ZK managed things?
     private final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -2232,8 +2273,8 @@ public class ZkStateReader implements SolrCloseable {
     }
   }
 
-  /** 
-   * Helper class that acts as both a {@link DocCollectionWatcher} and a {@link LiveNodesListener} 
+  /**
+   * Helper class that acts as both a {@link DocCollectionWatcher} and a {@link LiveNodesListener}
    * while wraping and delegating to a {@link CollectionStateWatcher}
    */
   private final class DocCollectionAndLiveNodesWatcherWrapper implements DocCollectionWatcher, LiveNodesListener {
@@ -2243,34 +2284,34 @@ public class ZkStateReader implements SolrCloseable {
     public int hashCode() {
       return collectionName.hashCode() * delegate.hashCode();
     }
-    
+
     public boolean equals(Object other) {
       if (other instanceof DocCollectionAndLiveNodesWatcherWrapper) {
         DocCollectionAndLiveNodesWatcherWrapper that
-          = (DocCollectionAndLiveNodesWatcherWrapper) other;
+            = (DocCollectionAndLiveNodesWatcherWrapper) other;
         return this.collectionName.equals(that.collectionName)
-          && this.delegate.equals(that.delegate);
+            && this.delegate.equals(that.delegate);
       }
       return false;
     }
-    
+
     public DocCollectionAndLiveNodesWatcherWrapper(final String collectionName,
                                                    final CollectionStateWatcher delegate) {
       this.collectionName = collectionName;
       this.delegate = delegate;
     }
-    
+
     @Override
     public boolean onStateChanged(DocCollection collectionState) {
       final boolean result = delegate.onStateChanged(ZkStateReader.this.liveNodes,
-                                                     collectionState);
+          collectionState);
       if (result) {
         // it might be a while before live nodes changes, so proactively remove ourselves
         removeLiveNodesListener(this);
       }
       return result;
     }
-    
+
     @Override
     public boolean onChange(SortedSet<String> oldLiveNodes, SortedSet<String> newLiveNodes) {
       final DocCollection collection = ZkStateReader.this.clusterState.getCollectionOrNull(collectionName);