You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/09/16 18:33:20 UTC

[lucene-solr] branch reference_impl_dev updated: @835 Cleanup.

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

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


The following commit(s) were added to refs/heads/reference_impl_dev by this push:
     new 7bb5485  @835 Cleanup.
7bb5485 is described below

commit 7bb5485544d27dae5533a087232ef2b2f3e79da8
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Wed Sep 16 13:32:46 2020 -0500

    @835 Cleanup.
---
 .../client/solrj/embedded/JettySolrRunner.java     |  2 +-
 .../org/apache/solr/cloud/ReplicateFromLeader.java |  2 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |  2 +-
 .../org/apache/solr/cloud/ZkCollectionTerms.java   |  2 +-
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |  2 +-
 .../OverseerCollectionMessageHandler.java          |  2 +-
 .../cloud/autoscaling/OverseerTriggerThread.java   |  2 +-
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |  2 +-
 .../cloud/autoscaling/sim/SimCloudManager.java     |  4 ++--
 .../java/org/apache/solr/schema/IndexSchema.java   |  6 +++---
 .../java/org/apache/solr/update/CommitTracker.java |  2 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |  2 +-
 .../java/org/apache/solr/update/UpdateHandler.java |  2 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |  2 +-
 .../client/solrj/impl/CloudHttp2SolrClient.java    |  2 +-
 .../solr/client/solrj/impl/CloudSolrClient.java    |  2 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |  5 +++--
 .../solr/client/solrj/impl/Http2SolrClient.java    | 10 +++++----
 .../solrj/impl/HttpClusterStateProvider.java       |  2 +-
 .../solr/client/solrj/impl/LBHttpSolrClient.java   |  4 ++--
 .../org/apache/solr/common/cloud/SolrZkClient.java |  2 +-
 .../solr/common/params/DefaultSolrParams.java      |  2 +-
 .../org/apache/solr/common/params/SolrParams.java  |  2 +-
 .../solr/common/util/ObjectReleaseTracker.java     | 24 +++++++++++++++++++---
 .../apache/solr/common/util/ValidatingJsonMap.java |  2 +-
 solr/solrj/src/java/org/noggit/JSONParser.java     |  4 ++--
 .../solrj/impl/CloudHttp2SolrClientTest.java       | 14 +++++--------
 .../impl/Http2SolrClientCompatibilityTest.java     |  1 +
 .../solrj/io/stream/StreamDecoratorTest.java       |  1 +
 solr/solrj/src/test/org/noggit/TestJSONParser.java |  2 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |  2 +-
 .../java/org/apache/solr/cloud/ZkTestServer.java   |  6 +++---
 32 files changed, 70 insertions(+), 51 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
index cf4c75f..361bd76 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
@@ -339,7 +339,7 @@ public class JettySolrRunner implements Closeable {
 
           HTTP2ServerConnectionFactory http2ConnectionFactory = new HTTP2ServerConnectionFactory(configuration);
 
-          http2ConnectionFactory.setMaxConcurrentStreams(16);
+          http2ConnectionFactory.setMaxConcurrentStreams(64);
           http2ConnectionFactory.setInputBufferSize(4096);
 
           ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory(
diff --git a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
index 44308df..78be024 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ReplicateFromLeader.java
@@ -50,7 +50,7 @@ public class ReplicateFromLeader implements Closeable {
   private volatile long lastVersion = 0;
 
   public ReplicateFromLeader(CoreContainer cc, String coreName) {
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     this.cc = cc;
     this.coreName = coreName;
   }
diff --git a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java
index 6fa82f2..8144e56 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ShardLeaderElectionContext.java
@@ -73,7 +73,7 @@ final class ShardLeaderElectionContext extends ShardLeaderElectionContextBase {
                     + "/leader_elect/" + shardId,  ZkStateReader.getShardLeadersPath(
             collection, shardId), props,
             zkController.getZkClient());
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     this.cc = cc;
     this.syncStrategy = new SyncStrategy(cc);
     this.shardId = shardId;
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java
index 52f36fe..d90b062 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkCollectionTerms.java
@@ -38,7 +38,7 @@ class ZkCollectionTerms implements AutoCloseable {
     this.collection = collection;
     this.terms = new HashMap<>();
     this.zkClient = client;
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
index 2d2bc6b..99ac563 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -105,7 +105,7 @@ public class ZkShardTerms implements AutoCloseable{
     this.shard = shard;
     this.zkClient = zkClient;
     registerWatcher();
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   /**
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
index cc1ce56..d6cb547 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
@@ -194,7 +194,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
                                         Stats stats,
                                         Overseer overseer,
                                         OverseerNodePrioritizer overseerPrioritizer) {
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     this.zkStateReader = zkStateReader;
     this.shardHandlerFactory = shardHandlerFactory;
     this.adminPath = adminPath;
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
index b552218..42b68d3 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
@@ -92,7 +92,7 @@ public class OverseerTriggerThread implements Runnable, SolrCloseable {
     this.cloudManager = cloudManager;
     scheduledTriggers = new ScheduledTriggers(loader, cloudManager);
     triggerFactory = new AutoScaling.TriggerFactoryImpl(loader, cloudManager);
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
index 4afa3dd..3a4e6bf 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
@@ -153,7 +153,7 @@ public class ScheduledTriggers implements Closeable {
     listeners = new TriggerListeners();
     // initialize cooldown timer
     cooldownStart.set(cloudManager.getTimeSource().getTimeNs() - cooldownPeriod.get());
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   /**
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
index 2b1dee1..5d3c8ff 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
@@ -177,7 +177,7 @@ public class SimCloudManager implements SolrCloudManager {
   }
 
   SimCloudManager(TimeSource timeSource, SimDistribStateManager distribStateManager) throws Exception {
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     this.loader = new SolrResourceLoader();
     if (distribStateManager == null) {
       this.stateManager =  new SimDistribStateManager(SimDistribStateManager.createNewRootNode());
@@ -272,7 +272,7 @@ public class SimCloudManager implements SolrCloudManager {
     triggerThread = new Overseer.OverseerThread(triggerThreadGroup, trigger, "Simulated OverseerAutoScalingTriggerThread");
     triggerThread.start();
 
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   // ---------- simulator setup methods -----------
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 1304640..40590ad 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -240,10 +240,10 @@ public class IndexSchema {
   protected final SolrResourceLoader loader;
   protected final Properties substitutableProperties;
 
-  // some code will add fields after construction, needs to be thread safe
-  protected volatile Map<String,SchemaField> fields = new ConcurrentHashMap<>(16);
+  // some code will add fields after construction, needs to be thread safe (unless we get the schema lock fully correct)
+  protected volatile Map<String,SchemaField> fields = new ConcurrentHashMap<>(32);
 
-  protected volatile Map<String,FieldType> fieldTypes = new ConcurrentHashMap<>(64);
+  protected volatile Map<String,FieldType> fieldTypes = new ConcurrentHashMap<>(32);
 
   protected volatile Set<SchemaField> fieldsWithDefaultValue = ConcurrentHashMap.newKeySet(16);
   protected volatile Collection<SchemaField> requiredFields = ConcurrentHashMap.newKeySet(16);
diff --git a/solr/core/src/java/org/apache/solr/update/CommitTracker.java b/solr/core/src/java/org/apache/solr/update/CommitTracker.java
index 944b1a0..0184184 100644
--- a/solr/core/src/java/org/apache/solr/update/CommitTracker.java
+++ b/solr/core/src/java/org/apache/solr/update/CommitTracker.java
@@ -95,7 +95,7 @@ public final class CommitTracker implements Runnable, Closeable {
     this.openSearcher = openSearcher;
 
     log.info("{} AutoCommit: {}", name, this);
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   public boolean getOpenSearcher() {
diff --git a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
index 5ed024a..742c838 100644
--- a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
+++ b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
@@ -141,7 +141,7 @@ public class DirectUpdateHandler2 extends UpdateHandler implements SolrCoreState
       commitWithinSoftCommit = false;
       commitTracker.setOpenSearcher(true);
     }
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
   
   public DirectUpdateHandler2(SolrCore core, UpdateHandler updateHandler) {
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateHandler.java b/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
index 0baa28e..2143f8f 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateHandler.java
@@ -128,7 +128,7 @@ UpdateHandler implements SolrInfoBean, Closeable {
   
   public UpdateHandler(SolrCore core, UpdateLog updateLog)  {
     UpdateLog ourUpdateLog = null;
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     try {
       this.core = core;
       CoreDescriptor cd = core.getCoreDescriptor();
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index a75bbc2..a838423 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -379,7 +379,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
     if (dataDir != null) {
       ObjectReleaseTracker.release(this);
     }
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     try {
       dataDir = core.getUlogDir();
 
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java
index 014b1bd..87bf8f7 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudHttp2SolrClient.java
@@ -104,7 +104,7 @@ public class CloudHttp2SolrClient  extends BaseCloudSolrClient {
     }
     this.myClient = (builder.httpClient == null) ? new Http2SolrClient.Builder().withHeaders(builder.headers).build() : builder.httpClient;
     this.lbClient = new LBHttp2SolrClient(myClient);
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   // called to clean-up objects created by super if there are errors during initialization
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
index 76514ff..e457074 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
@@ -118,7 +118,7 @@ public class CloudSolrClient extends BaseCloudSolrClient {
     this.myClient = (builder.httpClient == null) ? HttpClientUtil.createClient(null) : builder.httpClient;
     if (builder.loadBalancedSolrClient == null) builder.loadBalancedSolrClient = createLBHttpSolrClient(builder, myClient);
     this.lbClient = builder.loadBalancedSolrClient;
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   // called to clean-up objects created by super if there are errors during initialization
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
index 936c27b..061b652 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
@@ -53,6 +53,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.params.UpdateParams;
 import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.common.util.FastOutputStream;
 import org.apache.solr.common.util.IOUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
@@ -256,8 +257,8 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
           EntityTemplate template = new EntityTemplate(new ContentProducer() {
             
             @Override
-            public void writeTo(OutputStream out) throws IOException {
-
+            public void writeTo(OutputStream outputStream) throws IOException {
+              FastOutputStream out = FastOutputStream.wrap(outputStream);
               if (isXml) {
                 out.write("<stream>".getBytes(StandardCharsets.UTF_8)); // can be anything
               }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index b02cf0f..81863b9 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -199,11 +199,13 @@ public class Http2SolrClient extends SolrClient {
   private HttpClient createHttpClient(Builder builder) {
     HttpClient httpClient;
 
-    SslContextFactory.Client sslContextFactory;
-    boolean ssl;
+    SslContextFactory.Client sslContextFactory = null;
+    boolean ssl = false;
     if (builder.sslConfig == null) {
-      sslContextFactory = getDefaultSslContextFactory();
-      ssl = sslContextFactory.getTrustStore() != null || sslContextFactory.getTrustStorePath() != null;
+      if (System.getProperty("javax.net.ssl.trustStore") != null || System.getProperty("javax.net.ssl.keyStore") != null) {
+        sslContextFactory = getDefaultSslContextFactory();
+        ssl = sslContextFactory.getTrustStore() != null || sslContextFactory.getTrustStorePath() != null;
+      }
     } else {
       sslContextFactory = builder.sslConfig.createClientContextFactory();
       ssl = true;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClusterStateProvider.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClusterStateProvider.java
index 0f7f886..102d269 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClusterStateProvider.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClusterStateProvider.java
@@ -30,7 +30,7 @@ public class HttpClusterStateProvider extends BaseHttpClusterStateProvider {
   private final boolean clientIsInternal;
 
   public HttpClusterStateProvider(List<String> solrUrls, HttpClient httpClient) throws Exception {
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     if (httpClient == null) {
       this.clientIsInternal = true;
       this.httpClient = HttpClientUtil.createClient(null);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
index 9f69d0c..3d9a36d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
@@ -136,7 +136,7 @@ public class LBHttpSolrClient extends LBSolrClient {
   // nocommit
   public LBHttpSolrClient(Http2SolrClient solrClient) {
     super(Collections.emptyList());
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     this.solrClient = solrClient;
     this.httpSolrClientBuilder = null;
     this.http2SolrClientBuilder = null;
@@ -147,7 +147,7 @@ public class LBHttpSolrClient extends LBSolrClient {
 
   protected LBHttpSolrClient(Builder builder) {
     super(builder.baseSolrUrls);
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     this.solrClient = null;
 
     this.httpSolrClientBuilder = builder.httpSolrClientBuilder;
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index 86ad75c..f8f6cc4 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -141,7 +141,7 @@ public class SolrZkClient implements Closeable {
   }
 
   public SolrZkClient(String zkServerAddress, int zkClientTimeout, int clientConnectTimeout, final OnReconnect onReconnect, BeforeReconnect beforeReconnect, ZkACLProvider zkACLProvider, IsClosed higherLevelIsClosed) {
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
     log.info("Creating new {} instance {}", SolrZkClient.class.getSimpleName(), this);
     closeTracker = new CloseTracker();
     this.zkServerAddress = zkServerAddress;
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/DefaultSolrParams.java b/solr/solrj/src/java/org/apache/solr/common/params/DefaultSolrParams.java
index c8bc3b0..8ca270d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/DefaultSolrParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/DefaultSolrParams.java
@@ -50,7 +50,7 @@ public class DefaultSolrParams extends SolrParams {
     // We need to compute the set of all param names in advance 
     // So we don't wind up with an iterator that returns the same
     // String more then once (SOLR-6780)
-    LinkedHashSet<String> allKeys = new LinkedHashSet<>();
+    LinkedHashSet<String> allKeys = new LinkedHashSet<>(32);
     for (SolrParams p : new SolrParams [] {params, defaults}) {
       Iterator<String> localKeys = p.getParameterNamesIterator();
       while (localKeys.hasNext()) {
diff --git a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java b/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
index c77791c..318401c 100644
--- a/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
+++ b/solr/solrj/src/java/org/apache/solr/common/params/SolrParams.java
@@ -448,7 +448,7 @@ public abstract class SolrParams implements Serializable, MapWriter, Iterable<Ma
       return defaults;
     if (defaults == null)
       return params;
-    return new DefaultSolrParams(params,defaults);
+    return new DefaultSolrParams(params, defaults);
   }
 
   public static SolrParams wrapAppended(SolrParams params, SolrParams defaults) {
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java b/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
index 610351f..c9228d7 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ObjectReleaseTracker.java
@@ -35,12 +35,30 @@ import java.util.concurrent.ConcurrentHashMap;
 public class ObjectReleaseTracker {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   public static Map<Object,String> OBJECTS = new ConcurrentHashMap<>(256, 0.75f, 32);
-  
+
+
+  protected final static ThreadLocal<StringBuilder> THREAD_LOCAL_SB = new ThreadLocal<>();
+
+  public static StringBuilder getThreadLocalStringBuilder() {
+    StringBuilder sw = THREAD_LOCAL_SB.get();
+    if (sw == null) {
+      sw = new StringBuilder(1024);
+      THREAD_LOCAL_SB.set(sw);
+    }
+    return sw;
+  }
+
   public static boolean track(Object object) {
-    StringBuilderWriter sw = new StringBuilderWriter(4096);
+    StringBuilder sb = getThreadLocalStringBuilder();
+    sb.setLength(0);
+    StringBuilderWriter sw = new StringBuilderWriter(sb);
     PrintWriter pw = new PrintWriter(sw);
     new ObjectTrackerException(object.getClass().getName()).printStackTrace(pw);
-    OBJECTS.put(object, sw.toString());
+    String stack = sw.toString();
+    OBJECTS.put(object, stack);
+//    if (stack.length() > 8600) {
+//      throw new IllegalStateException("found size:" + stack.length());
+//    }
     return true;
   }
   
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
index 87544a9..bdb6c76 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
@@ -295,7 +295,7 @@ public class ValidatingJsonMap implements Map<String, Object>, NavigableObject {
   public static ValidatingJsonMap getDeepCopy(Map map, int maxDepth, boolean mutable) {
     if (map == null) return null;
     if (maxDepth < 1) return ValidatingJsonMap.wrap(map);
-    ValidatingJsonMap copy = new ValidatingJsonMap(map.size());
+    ValidatingJsonMap copy = new ValidatingJsonMap(map.size() * 2);
     for (Object o : map.entrySet()) {
       Map.Entry<String, Object> e = (Entry<String, Object>) o;
       Object v = e.getValue();
diff --git a/solr/solrj/src/java/org/noggit/JSONParser.java b/solr/solrj/src/java/org/noggit/JSONParser.java
index d1655d1..8fa7102 100644
--- a/solr/solrj/src/java/org/noggit/JSONParser.java
+++ b/solr/solrj/src/java/org/noggit/JSONParser.java
@@ -193,11 +193,11 @@ public class JSONParser {
   }
 
   // temporary output buffer
-  private final CharArr out = new CharArr(64);
+  private final CharArr out = new CharArr(32);
 
   // We need to keep some state in order to (at a minimum) know if
   // we should skip ',' or ':'.
-  private byte[] stack = new byte[16];
+  private byte[] stack = new byte[32];
   private int ptr = 0;     // pointer into the stack of parser states
   private byte state = 0;  // current parser state
 
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
index d5eb26b..dd18f53 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
@@ -71,6 +71,7 @@ import org.apache.solr.handler.admin.CollectionsHandler;
 import org.apache.solr.handler.admin.ConfigSetsHandler;
 import org.apache.solr.handler.admin.CoreAdminHandler;
 import org.junit.After;
+import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
@@ -98,7 +99,7 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
   private static final int TIMEOUT = 30;
   private static final int NODE_COUNT = 3;
 
-  private CloudHttp2SolrClient zkBasedCloudSolrClient = null;
+  private static CloudHttp2SolrClient zkBasedCloudSolrClient = null;
 
   @BeforeClass
   public static void setupCluster() throws Exception {
@@ -106,16 +107,12 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
     configureCluster(NODE_COUNT)
         .addConfig(TEST_CONFIGSET_NAME, getFile("solrj").toPath().resolve("solr").resolve("configsets").resolve("streaming").resolve("conf"))
         .configure();
-  }
-
-  @Before
-  public void initTestClients() {
     zkBasedCloudSolrClient = new CloudHttp2SolrClient.Builder(Collections.singletonList(cluster.getZkServer().getZkAddress()), Optional.empty()).build();
     zkBasedCloudSolrClient.connect();
   }
-  
-  @After 
-  public void tearDown() throws Exception {
+
+  @AfterClass
+  public static void afterCloudHttp2SolrClientTest() throws Exception {
     if (zkBasedCloudSolrClient != null) {
       try {
         zkBasedCloudSolrClient.close();
@@ -125,7 +122,6 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
         zkBasedCloudSolrClient = null;
       }
     }
-    super.tearDown();
   }
 
   private void createTestCollection(String collection) throws IOException, SolrServerException {
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java
index 9849e50..9a6c332 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientCompatibilityTest.java
@@ -87,6 +87,7 @@ public class Http2SolrClientCompatibilityTest extends SolrJettyTestBase {
     }
   }
 
+  @Nightly // oddly slow
   public void testConnectToOldNodesUsingHttp2() throws Exception {
     // if this test some how failure, this mean that Jetty client now be able to switch between HTTP/1
     // and HTTP/2.2 protocol dynamically therefore rolling updates will be easier we should then notify this to users
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamDecoratorTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamDecoratorTest.java
index c19e078..6c0d337 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamDecoratorTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamDecoratorTest.java
@@ -75,6 +75,7 @@ import org.junit.Test;
 @Slow
 @SolrTestCaseJ4.SuppressSSL
 @LuceneTestCase.SuppressCodecs({"Lucene3x", "Lucene40","Lucene41","Lucene42","Lucene45"})
+@LuceneTestCase.Nightly // slow test
 public class StreamDecoratorTest extends SolrCloudTestCase {
 
   private static final String COLLECTIONORALIAS = "collection1";
diff --git a/solr/solrj/src/test/org/noggit/TestJSONParser.java b/solr/solrj/src/test/org/noggit/TestJSONParser.java
index e1a74e6..8b1ceb6 100644
--- a/solr/solrj/src/test/org/noggit/TestJSONParser.java
+++ b/solr/solrj/src/test/org/noggit/TestJSONParser.java
@@ -505,7 +505,7 @@ public class TestJSONParser extends SolrTestCaseJ4 {
     t = "1910151821265210155" + "0";
     parse("["+t+","+"-"+t+"]", new Object[]{a,bn(t),bn("-"+t),A,e});
 
-    for (int i=0; i<1000000; i++) {
+    for (int i=0; i<(TEST_NIGHTLY ? 1000000 : 100); i++) {
       long val = random().nextLong();
       String sval = Long.toString(val);
       JSONParser parser = getParser("["+val+"]");
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
index 789337d..488924d 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
@@ -272,7 +272,7 @@ public class MiniSolrCloudCluster {
    */
    MiniSolrCloudCluster(int numServers, Path baseDir, String solrXml, JettyConfig jettyConfig,
       ZkTestServer zkTestServer, Optional<String> securityJson, boolean trackJettyMetrics, boolean formatZk) throws Exception {
-     ObjectReleaseTracker.track(this);
+     assert ObjectReleaseTracker.track(this);
     try {
       Objects.requireNonNull(securityJson);
       this.baseDir = Objects.requireNonNull(baseDir);
diff --git a/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java b/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java
index f35735d..c4f88cd 100644
--- a/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java
+++ b/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java
@@ -332,7 +332,7 @@ public class ZkTestServer implements Closeable {
      *           If there is a low-level I/O error.
      */
     public void runFromConfig(ServerConfig config) throws IOException {
-      ObjectReleaseTracker.track(this);
+      assert ObjectReleaseTracker.track(this);
       try {
         // ZooKeeper maintains a static collection of AuthenticationProviders, so
         // we make sure the SASL provider is loaded so that it can be used in
@@ -453,7 +453,7 @@ public class ZkTestServer implements Closeable {
     if (zkMonFile != null) {
       zkMonitoringFile = Paths.get(System.getProperty("solr.tests.zkmonfile"));
     }
-    ObjectReleaseTracker.track(this);
+    assert ObjectReleaseTracker.track(this);
   }
 
   private void init(boolean solrFormat) throws Exception {
@@ -579,7 +579,7 @@ public class ZkTestServer implements Closeable {
         }
       };
 
-      ObjectReleaseTracker.track(zooThread);
+      assert ObjectReleaseTracker.track(zooThread);
 
       zooThread.start();