You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by md...@apache.org on 2021/08/17 05:00:33 UTC

[lucene-solr] branch branch_8x updated: SOLR-15583 Backport bugs from error-prone 2.8.1

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

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


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 5bc5191  SOLR-15583 Backport bugs from error-prone 2.8.1
5bc5191 is described below

commit 5bc519194ecba018294d4ee9d9c6fb5826bf2ee0
Author: Mike Drob <md...@apache.org>
AuthorDate: Mon Aug 16 12:38:32 2021 -0500

    SOLR-15583 Backport bugs from error-prone 2.8.1
---
 .../solr/analytics/value/ConstantValueTest.java    |  2 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |  5 ++-
 .../apache/solr/cloud/overseer/NodeMutator.java    |  2 +-
 .../solr/core/IndexDeletionPolicyWrapper.java      |  2 +-
 .../java/org/apache/solr/handler/BlobHandler.java  |  4 +-
 .../solr/handler/admin/CollectionsHandler.java     |  2 +-
 .../org/apache/solr/handler/sql/SolrRules.java     |  6 +--
 .../java/org/apache/solr/pkg/PackageLoader.java    |  1 +
 .../java/org/apache/solr/schema/BinaryField.java   |  4 +-
 .../src/java/org/apache/solr/schema/RankField.java |  2 +-
 .../apache/solr/search/facet/RelatednessAgg.java   | 12 +++---
 .../solr/search/join/CrossCollectionJoinQuery.java |  2 +-
 .../apache/solr/search/join/HashRangeQuery.java    |  4 +-
 .../update/processor/TolerantUpdateProcessor.java  |  5 +--
 .../src/java/org/apache/solr/util/CryptoKeys.java  |  2 +-
 .../java/org/apache/solr/util/SimplePostTool.java  |  5 ++-
 .../api/collections/TestReplicaProperties.java     | 12 +++---
 .../component/DistributedFacetPivotLargeTest.java  |  8 ++--
 .../component/DistributedFacetPivotSmallTest.java  |  2 +-
 .../handler/component/TestPivotHelperCode.java     |  1 +
 .../src/test/org/apache/solr/pkg/TestPackages.java |  5 ++-
 .../solr/response/TestBinaryResponseWriter.java    |  2 +-
 .../solr/search/function/TestFunctionQuery.java    | 13 +++---
 .../apache/solr/update/MaxSizeAutoCommitTest.java  | 12 ++++--
 .../ParsingFieldUpdateProcessorsTest.java          |  4 +-
 .../solr/client/solrj/embedded/SSLConfig.java      | 10 ++---
 .../client/solrj/io/eval/RawValueEvaluator.java    |  2 +-
 .../solr/client/solrj/request/UpdateRequest.java   |  5 ++-
 .../apache/solr/client/solrj/util/ClientUtils.java |  2 +-
 .../java/org/apache/solr/common/SolrException.java |  6 +--
 .../org/apache/solr/common/util/JavaBinCodec.java  |  2 +-
 .../solrj/embedded/SolrExampleStreamingTest.java   |  2 +-
 .../apache/solr/client/solrj/io/sql/JdbcTest.java  | 48 +++++++++++-----------
 33 files changed, 101 insertions(+), 95 deletions(-)

diff --git a/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java b/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java
index c7e6a34..ba1f65b 100644
--- a/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java
+++ b/solr/contrib/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java
@@ -52,7 +52,7 @@ public class ConstantValueTest extends SolrTestCaseJ4 {
     // Double
     uncasted = ConstantValue.creatorFunction.apply("12341234.12341234");
     assertTrue(uncasted instanceof ConstantDoubleValue);
-    assertEquals(12341234.12341234, ((ConstantDoubleValue)uncasted).getDouble(), .000000001);
+    assertEquals(12341234.12341234, ((ConstantDoubleValue)uncasted).getDouble(), 0);
 
     // String
     uncasted = ConstantValue.creatorFunction.apply("'abcdef'");
diff --git a/solr/core/src/java/org/apache/solr/api/ApiBag.java b/solr/core/src/java/org/apache/solr/api/ApiBag.java
index 8b64829..b221fba 100644
--- a/solr/core/src/java/org/apache/solr/api/ApiBag.java
+++ b/solr/core/src/java/org/apache/solr/api/ApiBag.java
@@ -365,8 +365,9 @@ public class ApiBag {
       return errs;
     }
 
-    public String toString() {
-      return super.toString() + ", errors: " + getErrs() + ", ";
+    @Override
+    public String getMessage() {
+      return super.getMessage() + ", errors: " + getErrs() + ", ";
     }
   }
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java
index 377bfe6..0420275 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/NodeMutator.java
@@ -83,7 +83,7 @@ public class NodeMutator {
         }
 
         Slice newSlice = new Slice(slice.getName(), newReplicas, slice.shallowCopy(),collection);
-        slicesCopy.put(slice.getName(), newSlice);
+        sliceEntry.setValue(newSlice);
       }
 
       if (needToUpdateCollection) {
diff --git a/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java b/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java
index b6292de..4546405 100644
--- a/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java
+++ b/solr/core/src/java/org/apache/solr/core/IndexDeletionPolicyWrapper.java
@@ -63,7 +63,7 @@ public final class IndexDeletionPolicyWrapper extends IndexDeletionPolicy {
    * {@link #onCommit} on our {@link #getWrappedDeletionPolicy()}.
    * 
    * <p>
-   * This map is atomically replaced by {@linke #updateKnownCommitPoints}.  
+   * This map is atomically replaced by {@link #updateKnownCommitPoints}.
    * The keys are the {@link IndexCommit#getGeneration} of each commit
    * </p>
    *
diff --git a/solr/core/src/java/org/apache/solr/handler/BlobHandler.java b/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
index 829aa28..434f19a 100644
--- a/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
@@ -114,7 +114,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
           payload = SimplePostTool.inputStreamToByteArray(is, maxSize);
         }
         MessageDigest m = MessageDigest.getInstance("MD5");
-        m.update(payload.array(), payload.position(), payload.limit());
+        m.update(payload.array(), payload.arrayOffset() + payload.position(), payload.limit());
         String md5 = new String(Hex.encodeHex(m.digest()));
 
         int duplicateCount = req.getSearcher().count(new TermQuery(new Term("md5", md5)));
@@ -193,7 +193,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
                   //should never happen unless a user wrote this document directly
                   throw new SolrException(SolrException.ErrorCode.NOT_FOUND, "Invalid document . No field called blob");
                 } else {
-                  os.write(buf.array(), 0, buf.limit());
+                  os.write(buf.array(), buf.arrayOffset(), buf.limit());
                 }
               }
             });
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 2a4d05b..0d2b0ea 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
@@ -1086,7 +1086,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         String prop = entry.getKey();
         if ("".equals(entry.getValue())) {
           // set to an empty string is equivalent to removing the property, see SOLR-12507
-          m.put(prop, null);
+          entry.setValue(null);
         }
         DocCollection.verifyProp(m, prop);
       }
diff --git a/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java b/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
index 8f5f3c5..8b65184 100644
--- a/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
+++ b/solr/core/src/java/org/apache/solr/handler/sql/SolrRules.java
@@ -134,15 +134,15 @@ class SolrRules {
       return result;
     }
 
-    private static final Predicate<RelNode> FILTER_PREDICATE = relNode -> {
+    private static boolean filter(RelNode relNode) {
       List<RexNode> filterOperands = ((RexCall) ((LogicalFilter) relNode).getCondition()).getOperands();
       return isNotFilterByExpr(filterOperands, SolrRules.solrFieldNames(relNode.getRowType()));
-    };
+    }
 
     private static final SolrFilterRule FILTER_RULE = new SolrFilterRule();
 
     private SolrFilterRule() {
-      super(LogicalFilter.class, FILTER_PREDICATE, "SolrFilterRule");
+      super(LogicalFilter.class, SolrFilterRule::filter, "SolrFilterRule");
     }
 
     public RelNode convert(RelNode rel) {
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
index e3ad675..81e8148 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageLoader.java
@@ -362,6 +362,7 @@ public class PackageLoader implements Closeable {
     }
   }
 
+  @SuppressWarnings("CompareToZero") // TODO either document why or fix this
   private static String findBiggest(String lessThan, List<String> sortedList) {
     String latest = null;
     for (String v : sortedList) {
diff --git a/solr/core/src/java/org/apache/solr/schema/BinaryField.java b/solr/core/src/java/org/apache/solr/schema/BinaryField.java
index 8951e9e..caeb0a3 100644
--- a/solr/core/src/java/org/apache/solr/schema/BinaryField.java
+++ b/solr/core/src/java/org/apache/solr/schema/BinaryField.java
@@ -44,7 +44,7 @@ public class BinaryField extends FieldType  {
   }
 
   private String toBase64String(ByteBuffer buf) {
-    return Base64.byteArrayToBase64(buf.array(), buf.position(), buf.limit()-buf.position());
+    return Base64.byteArrayToBase64(buf.array(), buf.arrayOffset() + buf.position(), buf.limit()-buf.position());
   }
 
   @Override
@@ -93,7 +93,7 @@ public class BinaryField extends FieldType  {
     } else if (val instanceof ByteBuffer && ((ByteBuffer)val).hasArray()) {
       ByteBuffer byteBuf = (ByteBuffer) val;
       buf = byteBuf.array();
-      offset = byteBuf.position();
+      offset = byteBuf.arrayOffset() + byteBuf.position();
       len = byteBuf.limit() - byteBuf.position();
     } else {
       String strVal = val.toString();
diff --git a/solr/core/src/java/org/apache/solr/schema/RankField.java b/solr/core/src/java/org/apache/solr/schema/RankField.java
index d11d5ed..e1d8fca 100644
--- a/solr/core/src/java/org/apache/solr/schema/RankField.java
+++ b/solr/core/src/java/org/apache/solr/schema/RankField.java
@@ -70,7 +70,7 @@ public class RankField extends FieldType {
 
   @Override
   public Type getUninversionType(SchemaField sf) {
-    throw null;
+    throw new UnsupportedOperationException();
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java b/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java
index 6d7dcb5..beb4cc0 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/RelatednessAgg.java
@@ -116,7 +116,7 @@ public class RelatednessAgg extends AggValueSource {
     RelatednessAgg that = (RelatednessAgg) o;
     return Objects.equals(fgQ, that.fgQ)
       && Objects.equals(bgQ, that.bgQ)
-      && Objects.equals(min_pop, that.min_pop);
+      && min_pop == that.min_pop;
   }
   
   @Override
@@ -528,11 +528,11 @@ public class RelatednessAgg extends AggValueSource {
       }
       BucketData that = (BucketData)other;
       // we will most certainly be compared to other buckets of the same Agg instance, so compare counts first
-      return Objects.equals(this.implied, that.implied)
-        && Objects.equals(this.fg_count, that.fg_count)
-        && Objects.equals(this.bg_count, that.bg_count)
-        && Objects.equals(this.fg_size, that.fg_size)
-        && Objects.equals(this.bg_size, that.bg_size)
+      return this.implied == that.implied
+        && this.fg_count == that.fg_count
+        && this.bg_count == that.bg_count
+        && this.fg_size == that.fg_size
+        && this.bg_size == that.bg_size
         && Objects.equals(this.agg, that.agg);
     }
 
diff --git a/solr/core/src/java/org/apache/solr/search/join/CrossCollectionJoinQuery.java b/solr/core/src/java/org/apache/solr/search/join/CrossCollectionJoinQuery.java
index 54d81bb..91e7d74 100644
--- a/solr/core/src/java/org/apache/solr/search/join/CrossCollectionJoinQuery.java
+++ b/solr/core/src/java/org/apache/solr/search/join/CrossCollectionJoinQuery.java
@@ -369,7 +369,7 @@ public class CrossCollectionJoinQuery extends Query {
             Objects.equals(collection, other.collection) &&
             Objects.equals(fromField, other.fromField) &&
             Objects.equals(toField, other.toField) &&
-            Objects.equals(routedByJoinKey, other.routedByJoinKey) &&
+            routedByJoinKey == other.routedByJoinKey &&
             Objects.equals(otherParamsString, other.otherParamsString) &&
             TimeUnit.SECONDS.convert(Math.abs(timestamp - other.timestamp), TimeUnit.NANOSECONDS) < Math.min(ttl, other.ttl);
   }
diff --git a/solr/core/src/java/org/apache/solr/search/join/HashRangeQuery.java b/solr/core/src/java/org/apache/solr/search/join/HashRangeQuery.java
index d8a339b..752e161 100644
--- a/solr/core/src/java/org/apache/solr/search/join/HashRangeQuery.java
+++ b/solr/core/src/java/org/apache/solr/search/join/HashRangeQuery.java
@@ -127,9 +127,7 @@ public class HashRangeQuery extends Query {
   }
 
   private boolean equalsTo(HashRangeQuery other) {
-    return Objects.equals(field, other.field) &&
-            Objects.equals(lower, other.lower) &&
-            Objects.equals(upper, other.upper);
+    return lower == other.lower && upper == other.upper && Objects.equals(field, other.field);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
index a1f61d1..d0cc6d7 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
@@ -301,9 +301,8 @@ public class TolerantUpdateProcessor extends UpdateRequestProcessor {
   }
 
   /**
-   * Returns the output of {@link org.apache.solr.schema.FieldType#
-   * indexedToReadable(BytesRef, CharsRefBuilder)} of the field
-   * type of the uniqueKey on the {@link BytesRef} passed as parameter.
+   * Returns the output of {@link org.apache.solr.schema.FieldType#indexedToReadable(BytesRef, CharsRefBuilder)}
+   * of the field type of the uniqueKey on the {@link BytesRef} passed as parameter.
    * <code>ref</code> should be the indexed representation of the id -- if null
    * (possibly because it's missing in the update) this method will return {@link #UNKNOWN_ID}
    */
diff --git a/solr/core/src/java/org/apache/solr/util/CryptoKeys.java b/solr/core/src/java/org/apache/solr/util/CryptoKeys.java
index e1977a3..f48c0b4 100644
--- a/solr/core/src/java/org/apache/solr/util/CryptoKeys.java
+++ b/solr/core/src/java/org/apache/solr/util/CryptoKeys.java
@@ -361,7 +361,7 @@ public final class CryptoKeys {
       try {
         Cipher rsaCipher = Cipher.getInstance("RSA/ECB/nopadding");
         rsaCipher.init(Cipher.ENCRYPT_MODE, privateKey);
-        return rsaCipher.doFinal(buffer.array(),buffer.position(), buffer.limit());
+        return rsaCipher.doFinal(buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.limit());
       } catch (Exception e) {
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,e);
       }
diff --git a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
index bad5959..c2283ee 100644
--- a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
+++ b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
@@ -622,14 +622,15 @@ public class SimplePostTool {
           URL postUrl = new URL(appendParam(solrUrl.toString(), 
               "literal.id="+URLEncoder.encode(u.toString(),"UTF-8") +
               "&literal.url="+URLEncoder.encode(u.toString(),"UTF-8")));
-          boolean success = postData(new ByteArrayInputStream(result.content.array(), result.content.arrayOffset(),result.content.limit() ), null, out, result.contentType, postUrl);
+          ByteBuffer content = result.content;
+          boolean success = postData(new ByteArrayInputStream(content.array(), content.arrayOffset(), content.limit()), null, out, result.contentType, postUrl);
           if (success) {
             info("POSTed web resource "+u+" (depth: "+level+")");
             Thread.sleep(delay * 1000);
             numPages++;
             // Pull links from HTML pages only
             if(recursive > level && result.contentType.equals("text/html")) {
-              Set<URL> children = pageFetcher.getLinksFromWebPage(u, new ByteArrayInputStream(result.content.array(), result.content.arrayOffset(), result.content.limit()), result.contentType, postUrl);
+              Set<URL> children = pageFetcher.getLinksFromWebPage(u, new ByteArrayInputStream(content.array(), content.arrayOffset(), content.limit()), result.contentType, postUrl);
               subStack.addAll(children);
             }
           } else {
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java
index f80edab..2fbb9ca 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/TestReplicaProperties.java
@@ -196,14 +196,14 @@ public class TestReplicaProperties extends ReplicaPropertiesBase {
       lastFailMsg = "";
       ClusterState clusterState = client.getZkStateReader().getClusterState();
       for (Slice slice : clusterState.getCollection(collectionName).getSlices()) {
-        Boolean foundLeader = false;
-        Boolean foundPreferred = false;
+        boolean foundLeader = false;
+        boolean foundPreferred = false;
         for (Replica replica : slice.getReplicas()) {
-          Boolean isLeader = replica.getBool("leader", false);
-          Boolean isPreferred = replica.getBool("property.preferredleader", false);
+          boolean isLeader = replica.getBool("leader", false);
+          boolean isPreferred = replica.getBool("property.preferredleader", false);
           if (isLeader != isPreferred) {
-            lastFailMsg = "Replica should NOT have preferredLeader != leader. Preferred: " + isPreferred.toString() +
-                " leader is " + isLeader.toString();
+            lastFailMsg = "Replica should NOT have preferredLeader != leader. Preferred: " + isPreferred +
+                " leader is " + isLeader;
           }
           if (foundLeader && isLeader) {
             lastFailMsg = "There should only be a single leader in _any_ shard! Replica " + replica.getName() +
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotLargeTest.java b/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotLargeTest.java
index 8276f94..48bc1bc 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotLargeTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotLargeTest.java
@@ -810,7 +810,7 @@ public class DistributedFacetPivotLargeTest extends BaseDistributedSearchTestCas
     assertEquals(257, (long) cardiffStatsInfo.getCount());
     assertEquals(0, (long) cardiffStatsInfo.getMissing());
     assertEquals(347554.0, cardiffStatsInfo.getSum());
-    assertEquals(8.20968772E8, cardiffStatsInfo.getSumOfSquares(), 0.1E-7);
+    assertEquals(820968772, cardiffStatsInfo.getSumOfSquares(), 0);
     assertEquals(1352.35019455253, (double) cardiffStatsInfo.getMean(), 0.1E-7);
     assertEquals(1170.86048165857, cardiffStatsInfo.getStddev(), 0.1E-7);
 
@@ -824,7 +824,7 @@ public class DistributedFacetPivotLargeTest extends BaseDistributedSearchTestCas
     assertEquals(101, (long) bbcCardifftPivotFieldStatsInfo.getCount());
     assertEquals(0, (long) bbcCardifftPivotFieldStatsInfo.getMissing());
     assertEquals(248742.0, bbcCardifftPivotFieldStatsInfo.getSum());
-    assertEquals(6.52422564E8, bbcCardifftPivotFieldStatsInfo.getSumOfSquares(), 0.1E-7);
+    assertEquals(652422564, bbcCardifftPivotFieldStatsInfo.getSumOfSquares(), 0);
     assertEquals(2462.792079208, (double) bbcCardifftPivotFieldStatsInfo.getMean(), 0.1E-7);
     assertEquals(631.0525860312, bbcCardifftPivotFieldStatsInfo.getStddev(), 0.1E-7);
 
@@ -840,7 +840,7 @@ public class DistributedFacetPivotLargeTest extends BaseDistributedSearchTestCas
     assertEquals(6, (long) placeholder0PivotFieldStatsInfo.getCount());
     assertEquals(0, (long) placeholder0PivotFieldStatsInfo.getMissing());
     assertEquals(22700.0, placeholder0PivotFieldStatsInfo.getSum());
-    assertEquals(1.0105E8, placeholder0PivotFieldStatsInfo.getSumOfSquares(), 0.1E-7);
+    assertEquals(1.0105E8, placeholder0PivotFieldStatsInfo.getSumOfSquares(), 0);
     assertEquals(3783.333333333, (double) placeholder0PivotFieldStatsInfo.getMean(), 0.1E-7);
     assertEquals(1741.742422595, placeholder0PivotFieldStatsInfo.getStddev(), 0.1E-7);
 
@@ -855,7 +855,7 @@ public class DistributedFacetPivotLargeTest extends BaseDistributedSearchTestCas
     assertEquals(6, (long) microsoftPlaceholder0PivotFieldStatsInfo.getCount());
     assertEquals(0, (long) microsoftPlaceholder0PivotFieldStatsInfo.getMissing());
     assertEquals(22700.0, microsoftPlaceholder0PivotFieldStatsInfo.getSum());
-    assertEquals(1.0105E8, microsoftPlaceholder0PivotFieldStatsInfo.getSumOfSquares(), 0.1E-7);
+    assertEquals(1.0105E8, microsoftPlaceholder0PivotFieldStatsInfo.getSumOfSquares(), 0);
     assertEquals(3783.333333333, (double) microsoftPlaceholder0PivotFieldStatsInfo.getMean(), 0.1E-7);
     assertEquals(1741.742422595, microsoftPlaceholder0PivotFieldStatsInfo.getStddev(), 0.1E-7);
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java b/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java
index 77ef0bc..54609a8 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java
@@ -1605,7 +1605,7 @@ public class DistributedFacetPivotSmallTest extends BaseDistributedSearchTestCas
         if (getFacetQuery().size() != other.getFacetQuery().size()) return false;
         for (Map.Entry<String,Integer> entry : getFacetQuery().entrySet()) {
           Integer otherQCount = other.getFacetQuery().get(entry.getKey());
-          if (otherQCount == null || otherQCount != entry.getValue()) return false;
+          if (otherQCount == null || !otherQCount.equals(entry.getValue())) return false;
         }
       }
       return true;
diff --git a/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java b/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
index d53d218..89bb830 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
@@ -88,6 +88,7 @@ public class TestPivotHelperCode extends SolrTestCaseJ4{
 
 
   @SuppressForbidden(reason = "Checking object equality for Long instance")
+  @SuppressWarnings("BoxedPrimitiveConstructor")
   public void testCompareWithNullLast() throws Exception {
     Long a = random().nextLong();
     Long b = random().nextLong();
diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
index dc90769..ded3ffa 100644
--- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
+++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
@@ -804,6 +804,7 @@ public class TestPackages extends SolrCloudTestCase {
 
   public static void postFileAndWait(MiniSolrCloudCluster cluster, String fname, String path, String sig) throws Exception {
     ByteBuffer fileContent = getFileContent(fname);
+    @SuppressWarnings("ByteBufferBackingArray") // this is the result of a call to wrap()
     String sha512 = DigestUtils.sha512Hex(fileContent.array());
 
     TestDistribPackageStore.postFile(cluster.getSolrClient(),
@@ -852,7 +853,7 @@ public class TestPackages extends SolrCloudTestCase {
                                       @SuppressWarnings({"rawtypes"}) Class... classes) throws IOException {
     ByteBuffer jar = generateZip(classes);
     try (FileOutputStream fos = new FileOutputStream(loc)) {
-      fos.write(jar.array(), 0, jar.limit());
+      fos.write(jar.array(), jar.arrayOffset(), jar.limit());
       fos.flush();
     }
     return jar;
@@ -867,7 +868,7 @@ public class TestPackages extends SolrCloudTestCase {
         ZipEntry entry = new ZipEntry(path);
         ByteBuffer b = SimplePostTool.inputStreamToByteArray(c.getClassLoader().getResourceAsStream(path));
         zipOut.putNextEntry(entry);
-        zipOut.write(b.array(), 0, b.limit());
+        zipOut.write(b.array(), b.arrayOffset(), b.limit());
         zipOut.closeEntry();
       }
     }
diff --git a/solr/core/src/test/org/apache/solr/response/TestBinaryResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestBinaryResponseWriter.java
index 27f1a74..c5a8f6e 100644
--- a/solr/core/src/test/org/apache/solr/response/TestBinaryResponseWriter.java
+++ b/solr/core/src/test/org/apache/solr/response/TestBinaryResponseWriter.java
@@ -76,7 +76,7 @@ public class TestBinaryResponseWriter extends SolrTestCaseJ4 {
     SimplePostTool.BAOS baos = new SimplePostTool.BAOS();
     new JavaBinCodec(new BinaryResponseWriter.Resolver(null, null)).marshal(nl, baos);
     ByteBuffer byteBuffer = baos.getByteBuffer();
-    nl = (NamedList) new JavaBinCodec().unmarshal(new ByteArrayInputStream(byteBuffer.array(), 0, byteBuffer.limit()));
+    nl = (NamedList) new JavaBinCodec().unmarshal(new ByteArrayInputStream(byteBuffer.array(), byteBuffer.arrayOffset(), byteBuffer.limit()));
     assertEquals(text, nl._get("doc1/desc", null));
 
 
diff --git a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
index 2a3dea8..b38de13 100644
--- a/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
+++ b/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
@@ -87,13 +87,16 @@ public class TestFunctionQuery extends SolrTestCaseJ4 {
 
   // replace \0 with the field name and create a parsable string
   public String func(String field, String template) {
-    StringBuilder sb = new StringBuilder("{!func}");
-    for (char ch : template.toCharArray()) {
-      if (ch=='\0') {
+    int size = 7 + field.length() + template.length();
+    StringBuilder sb = new StringBuilder(size);
+    sb.append("{!func}");
+    for (int i = 0; i < template.length(); i++) {
+      char ch = template.charAt(i);
+      if (ch != '\0') {
+        sb.append(ch);
+      } else {
         sb.append(field);
-        continue;
       }
-      sb.append(ch);
     }
     return sb.toString();
   }
diff --git a/solr/core/src/test/org/apache/solr/update/MaxSizeAutoCommitTest.java b/solr/core/src/test/org/apache/solr/update/MaxSizeAutoCommitTest.java
index 0449224..5a71525 100644
--- a/solr/core/src/test/org/apache/solr/update/MaxSizeAutoCommitTest.java
+++ b/solr/core/src/test/org/apache/solr/update/MaxSizeAutoCommitTest.java
@@ -51,9 +51,13 @@ public class MaxSizeAutoCommitTest extends SolrTestCaseJ4 {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   // Given an ID, returns an XML string for an "add document" request
-  private static final Function<Integer, String> ADD_DOC_FN = (id) -> adoc("id", Integer.toString(id));
+  private static String addDoc(int id) {
+    return adoc("id", Integer.toString(id));
+  }
   // Given an ID, returns an XML string for a "delete document" request
-  private static final Function<Integer, String> DELETE_DOC_FN = (id) -> delI(Integer.toString(id));
+  private static String delDoc(int id) {
+    return delI(Integer.toString(id));
+  }
   // How long to sleep while checking for commits
   private static final int COMMIT_CHECKING_SLEEP_TIME_MS = 50;
   // max TLOG file size
@@ -190,7 +194,7 @@ public class MaxSizeAutoCommitTest extends SolrTestCaseJ4 {
    * @return a SolrQueryRequestBase
    */
   private SolrQueryRequestBase constructBatchAddDocRequest(int startId, int batchSize) {
-    return constructBatchRequestHelper(startId, batchSize, ADD_DOC_FN);
+    return constructBatchRequestHelper(startId, batchSize, MaxSizeAutoCommitTest::addDoc);
   }
 
   /**
@@ -200,7 +204,7 @@ public class MaxSizeAutoCommitTest extends SolrTestCaseJ4 {
    * @return a SolrQueryRequestBase
    */
   private SolrQueryRequestBase constructBatchDeleteDocRequest(int startId, int batchSize) {
-    return constructBatchRequestHelper(startId, batchSize, DELETE_DOC_FN);
+    return constructBatchRequestHelper(startId, batchSize, MaxSizeAutoCommitTest::delDoc);
   }
 
   /**
diff --git a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
index 168db8d..8b04101 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
@@ -985,9 +985,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             .withZone(ZoneId.of("UTC")).parse(inputString, Instant::from).toEpochMilli());
 
     // ensure english locale and root locale return the same date
-    assertEquals(expectTs, DateTimeFormatter.ofPattern(dateFormat, Locale.ENGLISH)
+    assertEquals(expectTs + "", DateTimeFormatter.ofPattern(dateFormat, Locale.ENGLISH)
             .withZone(ZoneId.of("UTC")).parse(inputString, Instant::from).toEpochMilli(),
-        DateTimeFormatter.ofPattern(dateFormat, Locale.ENGLISH)
+        DateTimeFormatter.ofPattern(dateFormat, Locale.ROOT)
             .withZone(ZoneId.of("UTC")).parse(inputString, Instant::from).toEpochMilli());
 
     assertParsedDate(inputString, Date.from(Instant.ofEpochMilli(expectTs)), "parse-date-patterns-default-config");
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java b/solr/solrj/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java
index d77a1db..10066e3 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java
@@ -31,9 +31,9 @@ public class SSLConfig {
   private String trustStore;
   private String trustStorePassword;
 
-  /** NOTE: all other settings are ignored if useSSL is false; trustStore settings are ignored if clientAuth is false */
-  public SSLConfig(boolean useSSL, boolean clientAuth, String keyStore, String keyStorePassword, String trustStore, String trustStorePassword) {
-    this.useSsl = useSSL;
+  /** NOTE: all other settings are ignored if useSsl is false; trustStore settings are ignored if clientAuth is false */
+  public SSLConfig(boolean useSsl, boolean clientAuth, String keyStore, String keyStorePassword, String trustStore, String trustStorePassword) {
+    this.useSsl = useSsl;
     this.clientAuth = clientAuth;
     this.keyStore = keyStore;
     this.keyStorePassword = keyStorePassword;
@@ -41,8 +41,8 @@ public class SSLConfig {
     this.trustStorePassword = trustStorePassword;
   }
   
-  public void setUseSSL(boolean useSSL) {
-    this.useSsl = useSSL;
+  public void setUseSSL(boolean useSsl) {
+    this.useSsl = useSsl;
   }
   
   public void setClientAuth(boolean clientAuth) {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RawValueEvaluator.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RawValueEvaluator.java
index 026f8a2..32cfaf0 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RawValueEvaluator.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/eval/RawValueEvaluator.java
@@ -54,7 +54,7 @@ public class RawValueEvaluator extends SourceEvaluator {
   
   private void init(Object value){
     if(value instanceof Integer){
-      this.value = (Long)value;
+      this.value = ((Integer)value).longValue();
     }
     else if(value instanceof Float){
       this.value = ((Float)value).doubleValue();
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
index 5c07bce..a19fd2d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
@@ -420,8 +420,9 @@ public class UpdateRequest extends AbstractUpdateRequest {
           overwrite = (Boolean) entry.getValue().get(OVERWRITE);
           commitWithin = (Integer) entry.getValue().get(COMMIT_WITHIN);
         }
-        if (overwrite != lastOverwrite || commitWithin != lastCommitWithin
-            || docLists.size() == 0) {
+        if (!Objects.equals(overwrite, lastOverwrite)
+                || !Objects.equals(commitWithin, lastCommitWithin)
+                || docLists.isEmpty()) {
           docList = new LinkedHashMap<>();
           docLists.add(docList);
         }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java b/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
index 887b264..20882df 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/util/ClientUtils.java
@@ -114,7 +114,7 @@ public class ClientUtils
       v = Base64.byteArrayToBase64(bytes, 0, bytes.length);
     } else if (v instanceof ByteBuffer) {
       ByteBuffer bytes = (ByteBuffer) v;
-      v = Base64.byteArrayToBase64(bytes.array(), bytes.position(),bytes.limit() - bytes.position());
+      v = Base64.byteArrayToBase64(bytes.array(), bytes.arrayOffset() + bytes.position(),bytes.limit() - bytes.position());
     }
 
     XML.Writable valWriter = null;
diff --git a/solr/solrj/src/java/org/apache/solr/common/SolrException.java b/solr/solrj/src/java/org/apache/solr/common/SolrException.java
index 9909c2b..107fe19 100644
--- a/solr/solrj/src/java/org/apache/solr/common/SolrException.java
+++ b/solr/solrj/src/java/org/apache/solr/common/SolrException.java
@@ -168,11 +168,7 @@ public class SolrException extends RuntimeException {
     log.error(msg);
   }
 
-  // public String toString() { return toStr(this); }  // oops, inf loop
-  @Override
-  public String toString() { return super.toString(); }
-
-  public static String toStr(Throwable e) {   
+  public static String toStr(Throwable e) {
     CharArrayWriter cw = new CharArrayWriter();
     PrintWriter pw = new PrintWriter(cw);
     e.printStackTrace(pw);
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
index 3af1556..0f6648e 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
@@ -1086,7 +1086,7 @@ public class JavaBinCodec implements PushWriter {
       return true;
     } else if (val instanceof ByteBuffer) {
       ByteBuffer buf = (ByteBuffer) val;
-      writeByteArray(buf.array(),buf.position(),buf.limit() - buf.position());
+      writeByteArray(buf.array(), buf.arrayOffset() + buf.position(),buf.limit() - buf.position());
       return true;
     } else if (val == END_OBJ) {
       writeTag(END);
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
index c1d327a..a31d077 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleStreamingTest.java
@@ -67,7 +67,7 @@ public class SolrExampleStreamingTest extends SolrExampleTests {
 
   public void testWaitOptions() throws Exception {
     // SOLR-3903
-    final List<Throwable> failures = new ArrayList<>();
+    final List<Throwable> failures = new ArrayList<>(); // TODO these failures are not the same as recorded by the client
     final String serverUrl = jetty.getBaseUrl().toString() + "/collection1";
     try (ConcurrentUpdateSolrClient concurrentClient = new FailureRecordingConcurrentUpdateSolrClient.Builder(serverUrl)
         .withQueueSize(2)
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
index 4451778..c50e9e3 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/sql/JdbcTest.java
@@ -772,21 +772,21 @@ public class JdbcTest extends SolrCloudTestCase {
     assertFalse(rs.wasNull());
     assertEquals(10F, rs.getFloat(4), 0);
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getInt("my_float_col"), 0);
+    assertEquals(10, rs.getInt("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getInt(4), 0);
+    assertEquals(10, rs.getInt(4));
     assertFalse(rs.wasNull());
-    assertEquals(10L, rs.getLong("my_float_col"), 0);
+    assertEquals(10L, rs.getLong("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(10L, rs.getLong(4), 0);
+    assertEquals(10L, rs.getLong(4));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getShort("my_float_col"), 0);
+    assertEquals(10, rs.getShort("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getShort(4), 0);
+    assertEquals(10, rs.getShort(4));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getByte("my_float_col"), 0);
+    assertEquals(10, rs.getByte("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getByte(4), 0);
+    assertEquals(10, rs.getByte(4));
     assertFalse(rs.wasNull());
 
     assertEquals(10L, rs.getObject("testnull_i"));
@@ -805,21 +805,21 @@ public class JdbcTest extends SolrCloudTestCase {
     assertFalse(rs.wasNull());
     assertEquals(10F, rs.getFloat(5), 0);
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getInt("testnull_i"), 0);
+    assertEquals(10, rs.getInt("testnull_i"));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getInt(5), 0);
+    assertEquals(10, rs.getInt(5));
     assertFalse(rs.wasNull());
-    assertEquals(10L, rs.getLong("testnull_i"), 0);
+    assertEquals(10L, rs.getLong("testnull_i"));
     assertFalse(rs.wasNull());
-    assertEquals(10L, rs.getLong(5), 0);
+    assertEquals(10L, rs.getLong(5));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getShort("testnull_i"), 0);
+    assertEquals(10, rs.getShort("testnull_i"));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getShort(5), 0);
+    assertEquals(10, rs.getShort(5));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getByte("testnull_i"), 0);
+    assertEquals(10, rs.getByte("testnull_i"));
     assertFalse(rs.wasNull());
-    assertEquals(10, rs.getByte(5), 0);
+    assertEquals(10, rs.getByte(5));
     assertFalse(rs.wasNull());
 
 
@@ -871,21 +871,21 @@ public class JdbcTest extends SolrCloudTestCase {
     assertFalse(rs.wasNull());
     assertEquals(9F, rs.getFloat(4), 0);
     assertFalse(rs.wasNull());
-    assertEquals(9, rs.getInt("my_float_col"), 0);
+    assertEquals(9, rs.getInt("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(9, rs.getInt(4), 0);
+    assertEquals(9, rs.getInt(4));
     assertFalse(rs.wasNull());
-    assertEquals(9L, rs.getLong("my_float_col"), 0);
+    assertEquals(9L, rs.getLong("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(9L, rs.getLong(4), 0);
+    assertEquals(9L, rs.getLong(4));
     assertFalse(rs.wasNull());
-    assertEquals(9, rs.getShort("my_float_col"), 0);
+    assertEquals(9, rs.getShort("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(9, rs.getShort(4), 0);
+    assertEquals(9, rs.getShort(4));
     assertFalse(rs.wasNull());
-    assertEquals(9, rs.getByte("my_float_col"), 0);
+    assertEquals(9, rs.getByte("my_float_col"));
     assertFalse(rs.wasNull());
-    assertEquals(9, rs.getByte(4), 0);
+    assertEquals(9, rs.getByte(4));
     assertFalse(rs.wasNull());
 
     assertEquals(null, rs.getObject("testnull_i"));