You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2020/04/16 17:29:52 UTC

[lucene-solr] branch jira/solr-14275 updated (d86e010 -> 26479c2)

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

ab pushed a change to branch jira/solr-14275
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.


    from d86e010  Merge branch 'master' into jira/solr-14275
     add 46d0116  LUCENE-9170: Use HTTPS when downloading wagon-ssh artifacts
     add 1f5705f  SOLR-14363: Separate /get requests into their own type designation (#1379)
     add 9ed71a6  LUCENE-9074: Slice Allocation Control Plane For Concurrent Searches (#1294)
     add d6cef4f  Update CHANGES.txt
     add f779bc6  SOLR-14307: User defined "<cache/>" entries in solrconfig.xml now support enabled="true|false" just like core searcher caches.
     add 927587d  fix typo (#1302)
     add e25ab42  LUCENE-9266 remove gradle wrapper jar from source
     add e609079  Specify java 11 for gradle wrapper downloader
     add 28dea8d  SOLR-14356: PeerSync should not fail with SocketTimeoutException from hanging nodes
     add ac2837c  SOLR-14378: Factor a FilterFeatureScorer class out from (contrib/ltr) OriginalScoreScorer.
     add b5c5ebe  LUCENE-9300: Fix field infos update on doc values update (#1394)
     add 9b29c2a  Support running gradlew from subdir
     add 234e783  SOLR-14359: Admin UI collection/core drop-downs had wrong placeholder text (#1400)
     add d749469  SOLR-14359: Remove apache header from MIT licensed js file
     add 7b3980c  SOLR-14364: LTR SolrFeature fq improvements   Mostly general code improvements, though it should support postFilters now Add QueryUtils.combineQueryAndFilter
     add 1aeefc2  SOLR-14351: Fix/improve MDCLoggingContext usage * Some set/clear were not balanced. * Harden clear() in case of imbalance. * Sometimes coreContainger.getCore was called unnecessarily; just need a descriptor * SolrCore.open/close now calls MDCLoggerContext.setCore/clear * no need to clear MDC in HttpSolrCall
     add d32858b  LUCENE-9301: add manifest entries to JARs (gradle build).
     add e1e2085  SOLR-14386: Update Jetty to 9.4.27 and dropwizard-metrics version to 4.1.5
     add e916056  SOLR-14386: Update Jetty to 9.4.27 and dropwizard-metrics version to 4.1.5, fix precommit
     add 9322a7b  SOLR-12067: Remove support for autoReplicaFailoverWaitAfterExpiration
     add 9b6e072  SOLR-12720: Use the right Jira issue in change log
     add f018c4c  LUCENE-9244: In 2D, a point can be shared by four leaves (#1279)
     add f2114b9  SOLR-14210: Include replica health in healtcheck handler (#1387)
     add 82692e7  LUCENE-9271: Move BufferedIndexInput to the ByteBuffer API.
     add 3363e1a  LUCENE-9271: Fix bad assertion.
     add 529042e  LUCENE-9271: Complete fix for setBufferSize.
     add de62339  LUCENE-8050: PerFieldDocValuesFormat should not get the DocValuesFormat on a field that has no doc values. Closes #1408
     add 5bfbdc5  SOLR-14376: optimize SolrIndexSearcher.getDocSet when matches everything * getProcessedFilter now returns null filter if it's all docs more reliably * getProcessedFilter now documented clearly as an internal method * getDocSet detects all-docs and exits early with getLiveDocs * small refactoring to getDocSetBits/makeDocSetBits Closes #1399
     add 013898d  CHANGES.txt: move entry to Optimizations
     add 793a3be  LUCENE-9266: correct windows gradle wrapper download script - wrong placement of the quote.
     add dbb4be1  LUCENE-9310: workaround for IntelliJ gradle import
     add 4f92cd4  LUCENE-9278: Use -linkoffline instead of relative paths to make links to other projects (#1388)
     add 6bba35a  LUCENE-9286: FST.Arc.BitTable reads directly FST bytes. Arc is lightweight again and FSTEnum traversal faster.
     add c7cac57  LUCENE-9077: make git always keep .gradle files with LF EOLs.
     add 2437f3f  LUCENE-9311: detect intellij reimport and modify sourceset to exclude solr-ref-guide/tools (#1422)
     add ffdd29e  Fix typo in SolrRequestHandler's javadocs.
     add adbd714  SOLR-14365: CollapsingQParser - Avoiding always allocate int[] and float[] with size equals to number of unique values (WIP) (#1395)
     add 2935186  LUCENE-9298: Improve RAM accounting in BufferedUpdates when deleted doc IDs and terms are cleared (#1389)
     add e376582  LUCENE-9309: Wait for #addIndexes merges when aborting merges (#1418)
     add 71d335f  SOLR-14365: Automatically grow size of groupHeadValues
     add 36b280b  SOLR-11775: return long val for facet count in json facet
     add 527e651  LUCENE-9298: Fix TestBufferedUpdates
     add d52c102  SOLR-14402: Avoid creating new exceptions for every request made to MDCAwareThreadPoolExecutor by distributed search.
     add 2602269  LUCENE-9304: Refactor DWPTPool to pool DWPT directly (#1397)
     add 8c1f981  LUCENE-9309: ensure stopMerges is set under IW lock
     add fea1ce0  LUCENE-9278: move declaration calling getTemporaryDir inside the execution block closure so that gradlew clean renderJavadoc doesn't wipe out the temporary directory before the task has a chance to run.
     add 9244558  LUCENE-9201: remove javadoc task remnants. Make javadoc depend on renderJavadoc and skip the default gradle's implementation.
     add 7279190  LUCENE-9316: Incorporate all :precommit tasks into :check
     add f865c8a  LUCENE-9077: add a :solr:packaging:dev task that assembles a 'development' image of Solr from which nothing is removed upon consecutive rebuild.
     add 04f4439  SOLR-14396: TaggerRequestHandler should not error on empty index Fixes #1421
     add 4dece1a  CHANGES.txt move SOLR-14396 oops!
     add 13f19f6  SOLR-9906: SolrjNamedThreadFactory is deprecated in favor of SolrNamedThreadFactory. DefaultSolrThreadFactory is removed from solr-core in favor of SolrNamedThreadFactory in solrj package and all solr-core classes now use SolrNamedThreadFactory
     add 6b78330  SOLR-9909: Add the right Jira issue to CHANGES.txt
     add 4df81f1  SOLR-9909: The deprecated SolrjNamedThreadFactory has been removed. Use SolrNamedThreadFactory instead.
     add 3e0f7b1  SOLR-9909: Actually delete SolrjNamedThreadFactory.java
     add 616ec98  Do a bit count on 8 bytes from a long directly instead of reading 8 bytes from the reader. Byte order doesn't matter here. (#1426)
     add f5457b8  Suppress Direct postings for TestIndexWriterThreadsToSegments to prevent OOM on Nightly
     add 3236d38  Avoid using a raw Arc type. (#1429)
     add e15b02c  SOLR-14359: Use correct placeholder-text-single option for anguar-chosen
     add 60545a8  SOLR-14210: Add javadocs and refguide docs
     add ceeb55c  SOLR-14210: Fix precommit for javadocs
     add 18af632  LUCENE-9304: Fix IW#getMaxCompletedSequenceNumber()  (#1427)
     add 47bc184  Move DWPT private deletes out of FrozenBufferedUpdates (#1431)
     add 1fc4a54  Solr: Use QueryUtils.combineQueryAndFilter more  and check MatchAllDocsQuery (minor & cheap optimization)  Closes #1407
     add aa605b3  LUCENE-9307: Remove the ability to set the buffer size dynamically on BufferedIndexInput (#1415)
     add 0aa4ba7  LUCENE-9260: Verify checksums of CFS files. (#1311)
     add d5720d6  add version 8.5.1 to doap files
     add 8a88ab0  Add bugfix version 8.5.1
     add b7b85f3  Move bugfix entries to version 8.5.1
     add 9340e56  Add back-compat indices for 8.5.1
     add b24b028  SOLR-14291: fix regexps to handle dotted fields in Old Analytics params.
     new 81986e8  Merge branch 'master' into jira/solr-14275
     new 26479c2  SOLR-14275: Merge Noble's changes.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitattributes                                     |   3 +
 .github/workflows/gradle-precommit.yml             |   2 +
 .github/workflows/gradle-wrapper-validation.yml    |  11 -
 build.gradle                                       |  23 +-
 .../apache/lucene/gradle/WrapperDownloader.java    | 129 ++++++
 dev-tools/doap/lucene.rdf                          |   7 +
 dev-tools/doap/solr.rdf                            |   7 +
 gradle/defaults-javadoc.gradle                     |  77 ----
 .../intellij-idea.gradle}                          |  24 ++
 gradle/jar-manifest.gradle                         |  82 ++++
 gradle/render-javadoc.gradle                       | 287 ++++++++-----
 gradle/testing/randomization.gradle                |   9 -
 gradle/validation/forbidden-apis/defaults.all.txt  |   2 +-
 gradle/validation/git-status.gradle                |  39 +-
 gradle/validation/jar-checks.gradle                |   2 +-
 gradle/validation/missing-docs-check.gradle        |   4 +-
 gradle/validation/precommit.gradle                 |   4 +
 gradle/wrapper/gradle-wrapper.jar                  | Bin 55616 -> 58702 bytes
 gradle/wrapper/gradle-wrapper.jar.sha256           |   1 +
 gradle/wrapper/gradle-wrapper.jar.version          |   1 +
 gradlew                                            |  10 +-
 gradlew.bat                                        |   9 +-
 help/ant.txt                                       |   2 +-
 lucene/CHANGES.txt                                 |  38 ++
 .../lucene/index/TestBackwardsCompatibility.java   |   7 +-
 .../org/apache/lucene/index/index.8.5.1-cfs.zip    | Bin 0 -> 15880 bytes
 .../org/apache/lucene/index/index.8.5.1-nocfs.zip  | Bin 0 -> 15872 bytes
 .../test/org/apache/lucene/index/sorted.8.5.1.zip  | Bin 0 -> 394412 bytes
 .../simpletext/SimpleTextCompoundFormat.java       |  31 +-
 .../simpletext/TestSimpleTextCompoundFormat.java   |   5 +
 lucene/common-build.xml                            |   9 +-
 .../apache/lucene/codecs/CompoundDirectory.java    |  83 ++++
 .../org/apache/lucene/codecs/CompoundFormat.java   |   4 +-
 .../lucene/codecs/MultiLevelSkipListReader.java    |   8 +-
 .../codecs/lucene50/Lucene50CompoundFormat.java    |   3 +-
 .../codecs/lucene50/Lucene50CompoundReader.java    |  49 +--
 .../codecs/perfield/PerFieldDocValuesFormat.java   |   3 +
 .../org/apache/lucene/index/BufferedUpdates.java   |  35 +-
 .../org/apache/lucene/index/DocumentsWriter.java   | 191 ++++-----
 .../lucene/index/DocumentsWriterDeleteQueue.java   |  87 +++-
 .../lucene/index/DocumentsWriterFlushControl.java  | 438 ++++++++-----------
 .../lucene/index/DocumentsWriterPerThread.java     | 115 ++++-
 .../lucene/index/DocumentsWriterPerThreadPool.java | 290 +++++--------
 .../lucene/index/DocumentsWriterStallControl.java  |   5 +-
 .../lucene/index/FlushByRamOrCountsPolicy.java     |  26 +-
 .../java/org/apache/lucene/index/FlushPolicy.java  |  38 +-
 .../apache/lucene/index/FrozenBufferedUpdates.java |   4 +-
 .../java/org/apache/lucene/index/IndexWriter.java  |  59 +--
 .../org/apache/lucene/index/IndexWriterConfig.java |  22 -
 .../apache/lucene/index/LiveIndexWriterConfig.java |  16 -
 .../org/apache/lucene/index/ReadersAndUpdates.java |  44 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |   3 +-
 .../org/apache/lucene/index/SegmentMerger.java     |   2 +-
 .../org/apache/lucene/index/SegmentReader.java     |   8 +
 .../search/ControlledRealTimeReopenThread.java     |  18 +-
 .../org/apache/lucene/search/IndexSearcher.java    |  58 +--
 .../lucene/search/QueueSizeBasedExecutor.java      |  60 +++
 .../org/apache/lucene/search/SliceExecutor.java    |  80 ++++
 .../apache/lucene/store/BufferedIndexInput.java    | 226 ++++------
 .../org/apache/lucene/store/NIOFSDirectory.java    |  34 +-
 .../src/java/org/apache/lucene/util/BitUtil.java   | 128 +-----
 .../src/java/org/apache/lucene/util/Version.java   |   7 +
 .../org/apache/lucene/util/fst/BitTableUtil.java   | 172 ++++++++
 .../src/java/org/apache/lucene/util/fst/FST.java   | 353 ++++++---------
 .../java/org/apache/lucene/util/fst/FSTEnum.java   |  17 +-
 .../java/org/apache/lucene/util/fst/NodeHash.java  |   2 +-
 .../src/java/org/apache/lucene/util/fst/Util.java  |  19 +-
 .../codecs/lucene60/TestLucene60PointsFormat.java  |  11 +-
 .../perfield/TestPerFieldDocValuesFormat.java      |  40 +-
 .../apache/lucene/index/TestBufferedUpdates.java   |  57 +++
 .../org/apache/lucene/index/TestFieldsReader.java  |   6 +-
 .../lucene/index/TestFlushByRamOrCountsPolicy.java |  82 ++--
 .../org/apache/lucene/index/TestIndexWriter.java   | 212 +++++++--
 .../apache/lucene/index/TestIndexWriterConfig.java |   1 -
 .../apache/lucene/index/TestIndexWriterDelete.java |   4 +-
 .../lucene/index/TestIndexWriterOnDiskFull.java    |   4 +-
 .../index/TestIndexWriterThreadsToSegments.java    |   2 +-
 .../lucene/index/TestIndexWriterWithThreads.java   |   2 +-
 .../lucene/index/TestNumericDocValuesUpdates.java  | 155 +++++++
 .../search/TestControlledRealTimeReopenThread.java |   8 +-
 .../apache/lucene/search/TestIndexSearcher.java    |  94 +++-
 .../lucene/store/TestBufferedIndexInput.java       | 114 +----
 .../test/org/apache/lucene/util/TestBitUtil.java   |  87 ----
 .../apache/lucene/util/fst/TestBitTableUtil.java   | 138 ++++++
 .../lucene/util/fst/TestFSTDirectAddressing.java   |  85 +++-
 lucene/ivy-versions.properties                     |   4 +-
 .../jetty-continuation-9.4.24.v20191120.jar.sha1   |   1 -
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |   1 +
 .../licenses/jetty-http-9.4.24.v20191120.jar.sha1  |   1 -
 .../licenses/jetty-http-9.4.27.v20200227.jar.sha1  |   1 +
 lucene/licenses/jetty-io-9.4.24.v20191120.jar.sha1 |   1 -
 lucene/licenses/jetty-io-9.4.27.v20200227.jar.sha1 |   1 +
 .../jetty-server-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-server-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-servlet-9.4.24.v20191120.jar.sha1        |   1 -
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |   1 +
 .../licenses/jetty-util-9.4.24.v20191120.jar.sha1  |   1 -
 .../licenses/jetty-util-9.4.27.v20200227.jar.sha1  |   1 +
 .../java/org/apache/lucene/store/RAFDirectory.java |  18 +-
 .../org/apache/lucene/store/WindowsDirectory.java  |   5 +-
 .../lucene/codecs/cranky/CrankyCompoundFormat.java |   3 +-
 .../lucene/index/BaseCompoundFormatTestCase.java   |  42 ++
 .../lucene/index/BaseIndexFileFormatTestCase.java  |  18 +-
 .../org/apache/lucene/index/RandomIndexWriter.java |   4 +-
 .../apache/lucene/store/MockDirectoryWrapper.java  |  18 +-
 lucene/tools/forbiddenApis/base.txt                |   2 +-
 solr/CHANGES.txt                                   |  45 +-
 solr/build.xml                                     |   2 +-
 .../apache/solr/analytics/facet/QueryFacet.java    |   8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |   8 +-
 .../stream/AnalyticsShardRequestManager.java       |   4 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |  34 +-
 .../util/OldAnalyticsRequestConverter.java         |   4 +-
 .../analytics/legacy/facetWithDottedFields.txt     |  16 +
 .../solr/collection1/conf/schema-analytics.xml     |   2 +
 .../util/OldAnalyticsRequestConverterUnitTest.java |  64 +++
 .../java/org/apache/solr/ltr/feature/Feature.java  |  41 ++
 .../solr/ltr/feature/OriginalScoreFeature.java     |  23 +-
 .../org/apache/solr/ltr/feature/SolrFeature.java   | 201 +++------
 ...stOriginalScoreScorer.java => TestFeature.java} |  21 +-
 .../collector/SchedulerMetricsCollector.java       |   4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |   6 +-
 .../prometheus/scraper/SolrCloudScraperTest.java   |   4 +-
 .../scraper/SolrStandaloneScraperTest.java         |   4 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |  20 +-
 .../client/solrj/embedded/JettySolrRunner.java     |   4 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   2 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   4 -
 .../java/org/apache/solr/cloud/SyncStrategy.java   |  34 +-
 .../java/org/apache/solr/cloud/ZkController.java   |  59 ++-
 .../OverseerCollectionMessageHandler.java          |   4 +-
 .../cloud/autoscaling/OverseerTriggerThread.java   |   9 +-
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |   6 +-
 .../cloud/autoscaling/sim/SimCloudManager.java     |  13 +-
 .../autoscaling/sim/SimDistribStateManager.java    |   4 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |  25 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  11 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   7 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |   4 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |   3 -
 .../src/java/org/apache/solr/core/ZkContainer.java |  20 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |   4 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |   6 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |   4 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |   4 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |   4 +-
 .../apache/solr/handler/ReplicationHandler.java    |   6 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |   4 +-
 .../org/apache/solr/handler/StreamHandler.java     |  14 +-
 .../solr/handler/admin/CoreAdminHandler.java       |   4 +-
 .../solr/handler/admin/HealthCheckHandler.java     |  76 +++-
 .../solr/handler/admin/MetricsHistoryHandler.java  |   4 +-
 .../solr/handler/component/ExpandComponent.java    |  13 +-
 .../handler/component/HttpShardHandlerFactory.java |  20 +-
 .../handler/component/IterativeMergeStrategy.java  |   4 +-
 .../solr/handler/tagger/TaggerRequestHandler.java  | 111 +++--
 .../org/apache/solr/logging/MDCLoggingContext.java |  78 ++--
 .../org/apache/solr/metrics/SolrMetricManager.java |   5 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |   4 +-
 .../java/org/apache/solr/pkg/PackageListeners.java |   5 +-
 .../java/org/apache/solr/request/SimpleFacets.java |  15 +-
 .../apache/solr/request/SolrRequestHandler.java    |   2 +-
 .../org/apache/solr/schema/ManagedIndexSchema.java |   4 +-
 .../java/org/apache/solr/search/CacheConfig.java   |   8 +-
 .../solr/search/CollapsingQParserPlugin.java       | 477 +++++++++------------
 .../java/org/apache/solr/search/DocSetUtil.java    |   8 +-
 .../src/java/org/apache/solr/search/Grouping.java  |  11 +-
 .../java/org/apache/solr/search/QueryUtils.java    |  32 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  | 115 ++---
 .../apache/solr/search/facet/AggValueSource.java   |   2 +-
 .../java/org/apache/solr/search/facet/AvgAgg.java  |   2 +-
 .../org/apache/solr/search/facet/CountAgg.java     |   2 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |   2 +-
 .../solr/search/facet/FacetFieldProcessor.java     |  16 +-
 .../search/facet/FacetFieldProcessorByHashDV.java  |  24 +-
 .../apache/solr/search/facet/FacetProcessor.java   |  14 +-
 .../org/apache/solr/search/facet/FacetRange.java   |   2 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |   2 +-
 .../org/apache/solr/search/facet/MinMaxAgg.java    |   2 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |   2 +-
 .../apache/solr/search/facet/PercentileAgg.java    |   2 +-
 .../apache/solr/search/facet/RelatednessAgg.java   |   2 +-
 .../java/org/apache/solr/search/facet/SlotAcc.java |  19 +-
 .../org/apache/solr/search/facet/StddevAgg.java    |   2 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |   2 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |   2 +-
 .../apache/solr/search/facet/UnInvertedField.java  |   2 +-
 .../org/apache/solr/search/facet/UniqueAgg.java    |   2 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |   2 +-
 .../solr/search/facet/UniqueBlockFieldAgg.java     |   2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |   2 +-
 .../org/apache/solr/search/facet/VarianceAgg.java  |   2 +-
 .../solr/search/grouping/CommandHandler.java       |  10 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |   4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |   3 -
 .../java/org/apache/solr/update/CommitTracker.java |   4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   7 +-
 .../org/apache/solr/update/PeerSyncWithLeader.java |   3 -
 .../src/java/org/apache/solr/update/UpdateLog.java |   4 +-
 .../org/apache/solr/update/UpdateShardHandler.java |   6 +-
 .../DocExpirationUpdateProcessorFactory.java       |   4 +-
 .../src/java/org/apache/solr/util/DynamicMap.java  |  55 +++
 .../src/java/org/apache/solr/util/ExportTool.java  |   5 +-
 .../CountAgg.java => util/FloatConsumer.java}      |  32 +-
 .../org/apache/solr/util/IntFloatDynamicMap.java   | 118 +++++
 .../org/apache/solr/util/IntIntDynamicMap.java     | 120 ++++++
 .../org/apache/solr/util/IntLongDynamicMap.java    | 120 ++++++
 .../java/org/apache/solr/util/SolrLogPostTool.java |  19 +-
 .../conf/solrconfig-cache-enable-disable.xml       |  10 +
 solr/core/src/test-files/solr/solr-jmxreporter.xml |   1 -
 .../core/src/test-files/solr/solr-solrreporter.xml |   1 -
 .../test-files/solr/solr-trackingshardhandler.xml  |   1 -
 solr/core/src/test-files/solr/solr.xml             |   1 -
 .../apache/solr/cloud/BasicDistributedZkTest.java  |   4 +-
 .../apache/solr/cloud/ConnectionManagerTest.java   |   4 +-
 .../apache/solr/cloud/DistributedQueueTest.java    |   4 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |   4 +-
 .../test/org/apache/solr/cloud/OverseerTest.java   |   9 +-
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |   4 +-
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |   4 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |   4 +-
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |   4 +-
 .../apache/solr/cloud/UnloadDistributedZkTest.java |   6 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |   9 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |   4 +-
 .../AutoAddReplicasIntegrationTest.java            |   6 +
 .../autoscaling/sim/TestSimDistributedQueue.java   |   4 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |   4 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |   6 +-
 .../src/test/org/apache/solr/core/TestConfig.java  |  26 +-
 .../admin}/HealthCheckHandlerTest.java             |  58 ++-
 .../org/apache/solr/handler/tagger/TaggerTest.java |  18 +
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |  94 ++--
 .../apache/solr/schema/TestSortableTextField.java  |   6 +-
 .../solr/search/CurrencyRangeFacetCloudTest.java   |  64 ++-
 .../org/apache/solr/search/facet/DebugAgg.java     |  10 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |  14 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |  14 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |  58 +++
 .../solr/search/facet/TestJsonRangeFacets.java     |  38 ++
 .../solr/security/AuditLoggerIntegrationTest.java  |   6 +-
 .../org/apache/solr/update/AddBlockUpdateTest.java |   6 +-
 .../solr/update/TestInPlaceUpdatesDistrib.java     |  18 +-
 .../processor/RoutedAliasUpdateProcessorTest.java  |   4 +-
 .../processor/TestDocBasedVersionConstraints.java  |   4 +-
 .../test/org/apache/solr/util/DynamicMapsTest.java |  90 ++++
 .../org/apache/solr/util/SolrLogPostToolTest.java  |  20 +
 .../http2-client-9.4.24.v20191120.jar.sha1         |   1 -
 .../http2-client-9.4.27.v20200227.jar.sha1         |   1 +
 .../http2-common-9.4.24.v20191120.jar.sha1         |   1 -
 .../http2-common-9.4.27.v20200227.jar.sha1         |   1 +
 .../licenses/http2-hpack-9.4.24.v20191120.jar.sha1 |   1 -
 .../licenses/http2-hpack-9.4.27.v20200227.jar.sha1 |   1 +
 ...http-client-transport-9.4.24.v20191120.jar.sha1 |   1 -
 ...http-client-transport-9.4.27.v20200227.jar.sha1 |   1 +
 .../http2-server-9.4.24.v20191120.jar.sha1         |   1 -
 .../http2-server-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-alpn-client-9.4.24.v20191120.jar.sha1    |   1 -
 .../jetty-alpn-client-9.4.27.v20200227.jar.sha1    |   1 +
 ...etty-alpn-java-client-9.4.24.v20191120.jar.sha1 |   1 -
 ...etty-alpn-java-client-9.4.27.v20200227.jar.sha1 |   1 +
 ...etty-alpn-java-server-9.4.24.v20191120.jar.sha1 |   1 -
 ...etty-alpn-java-server-9.4.27.v20200227.jar.sha1 |   1 +
 .../jetty-alpn-server-9.4.24.v20191120.jar.sha1    |   1 -
 .../jetty-alpn-server-9.4.27.v20200227.jar.sha1    |   1 +
 .../jetty-client-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-client-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-continuation-9.4.24.v20191120.jar.sha1   |   1 -
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |   1 +
 .../jetty-deploy-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-deploy-9.4.27.v20200227.jar.sha1         |   1 +
 solr/licenses/jetty-http-9.4.24.v20191120.jar.sha1 |   1 -
 solr/licenses/jetty-http-9.4.27.v20200227.jar.sha1 |   1 +
 solr/licenses/jetty-io-9.4.24.v20191120.jar.sha1   |   1 -
 solr/licenses/jetty-io-9.4.27.v20200227.jar.sha1   |   1 +
 solr/licenses/jetty-jmx-9.4.24.v20191120.jar.sha1  |   1 -
 solr/licenses/jetty-jmx-9.4.27.v20200227.jar.sha1  |   1 +
 .../jetty-rewrite-9.4.24.v20191120.jar.sha1        |   1 -
 .../jetty-rewrite-9.4.27.v20200227.jar.sha1        |   1 +
 .../jetty-security-9.4.24.v20191120.jar.sha1       |   1 -
 .../jetty-security-9.4.27.v20200227.jar.sha1       |   1 +
 .../jetty-server-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-server-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-servlet-9.4.24.v20191120.jar.sha1        |   1 -
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |   1 +
 .../jetty-servlets-9.4.24.v20191120.jar.sha1       |   1 -
 .../jetty-servlets-9.4.27.v20200227.jar.sha1       |   1 +
 .../jetty-start-9.4.24.v20191120-shaded.jar.sha1   |   1 -
 .../jetty-start-9.4.27.v20200227-shaded.jar.sha1   |   1 +
 solr/licenses/jetty-util-9.4.24.v20191120.jar.sha1 |   1 -
 solr/licenses/jetty-util-9.4.27.v20200227.jar.sha1 |   1 +
 .../jetty-webapp-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-webapp-9.4.27.v20200227.jar.sha1         |   1 +
 solr/licenses/jetty-xml-9.4.24.v20191120.jar.sha1  |   1 -
 solr/licenses/jetty-xml-9.4.27.v20200227.jar.sha1  |   1 +
 solr/licenses/metrics-core-4.1.2.jar.sha1          |   1 -
 solr/licenses/metrics-core-4.1.5.jar.sha1          |   1 +
 solr/licenses/metrics-graphite-4.1.2.jar.sha1      |   1 -
 solr/licenses/metrics-graphite-4.1.5.jar.sha1      |   1 +
 solr/licenses/metrics-jetty9-4.1.2.jar.sha1        |   1 -
 solr/licenses/metrics-jetty9-4.1.5.jar.sha1        |   1 +
 solr/licenses/metrics-jmx-4.1.2.jar.sha1           |   1 -
 solr/licenses/metrics-jmx-4.1.5.jar.sha1           |   1 +
 solr/licenses/metrics-jvm-4.1.2.jar.sha1           |   1 -
 solr/licenses/metrics-jvm-4.1.5.jar.sha1           |   1 +
 solr/licenses/start.jar.sha1                       |   2 +-
 solr/packaging/build.gradle                        |   9 +
 .../src/implicit-requesthandlers.adoc              |   2 +
 .../src/major-changes-in-solr-9.adoc               |   5 +
 .../src/solrcloud-autoscaling-triggers.adoc        |  25 +-
 .../cloud/autoscaling/AddReplicaSuggester.java     |   2 +-
 .../client/solrj/cloud/autoscaling/Clause.java     |  30 +-
 .../solrj/cloud/autoscaling/FreeDiskVariable.java  |   7 +
 .../solrj/cloud/autoscaling/PerClauseData.java     | 188 ++++++++
 .../client/solrj/cloud/autoscaling/Policy.java     |  10 +-
 .../solrj/cloud/autoscaling/ReplicaCount.java      |  17 +
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |  57 ++-
 .../solr/client/solrj/cloud/autoscaling/Row.java   |  47 ++
 .../client/solrj/cloud/autoscaling/Violation.java  |   9 +-
 .../client/solrj/impl/BaseCloudSolrClient.java     |   4 +-
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |   4 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |   4 +-
 .../solr/client/solrj/impl/Http2SolrClient.java    |   4 +-
 .../solr/client/solrj/impl/HttpSolrClient.java     |   4 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   4 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |   4 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |   4 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |   4 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |   4 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |   4 +-
 .../client/solrj/io/stream/ExecutorStream.java     |   4 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |   4 +-
 .../client/solrj/io/stream/ParallelListStream.java |   4 +-
 .../solrj/io/stream/SignificantTermsStream.java    |   4 +-
 .../client/solrj/io/stream/TextLogitStream.java    |   4 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |   4 +-
 .../org/apache/solr/common/cloud/SolrZkClient.java |   6 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   4 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |   2 +-
 .../solr/common/util/SolrNamedThreadFactory.java}  |  23 +-
 .../solr/common/util/SolrjNamedThreadFactory.java  |  49 ---
 .../solrj/solr/autoscaling/emptydiagnostics.json   |  20 +
 .../solrj/cloud/autoscaling/TestPolicy2.java       |  67 +++
 .../impl/ConcurrentUpdateHttp2SolrClientTest.java  |   6 +-
 .../solrj/impl/ConcurrentUpdateSolrClientTest.java |   6 +-
 .../solrj/impl/HttpSolrClientConPoolTest.java      |   4 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |   7 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |  45 ++
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   4 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |  10 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |   6 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   6 +-
 solr/webapp/web/index.html                         |   4 +-
 solr/webapp/web/libs/angular-chosen.min.js         |   4 +-
 versions.lock                                      |  58 +--
 versions.props                                     |   6 +-
 357 files changed, 5337 insertions(+), 3329 deletions(-)
 delete mode 100644 .github/workflows/gradle-wrapper-validation.yml
 create mode 100644 buildSrc/src/main/java/org/apache/lucene/gradle/WrapperDownloader.java
 delete mode 100644 gradle/defaults-javadoc.gradle
 rename gradle/{defaults-idea.gradle => ide/intellij-idea.gradle} (61%)
 create mode 100644 gradle/jar-manifest.gradle
 create mode 100644 gradle/wrapper/gradle-wrapper.jar.sha256
 create mode 100644 gradle/wrapper/gradle-wrapper.jar.version
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.8.5.1-cfs.zip
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.8.5.1-nocfs.zip
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/sorted.8.5.1.zip
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/CompoundDirectory.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/search/QueueSizeBasedExecutor.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/search/SliceExecutor.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/fst/BitTableUtil.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/index/TestBufferedUpdates.java
 delete mode 100644 lucene/core/src/test/org/apache/lucene/util/TestBitUtil.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/util/fst/TestBitTableUtil.java
 delete mode 100644 lucene/licenses/jetty-continuation-9.4.24.v20191120.jar.sha1
 create mode 100644 lucene/licenses/jetty-continuation-9.4.27.v20200227.jar.sha1
 delete mode 100644 lucene/licenses/jetty-http-9.4.24.v20191120.jar.sha1
 create mode 100644 lucene/licenses/jetty-http-9.4.27.v20200227.jar.sha1
 delete mode 100644 lucene/licenses/jetty-io-9.4.24.v20191120.jar.sha1
 create mode 100644 lucene/licenses/jetty-io-9.4.27.v20200227.jar.sha1
 delete mode 100644 lucene/licenses/jetty-server-9.4.24.v20191120.jar.sha1
 create mode 100644 lucene/licenses/jetty-server-9.4.27.v20200227.jar.sha1
 delete mode 100644 lucene/licenses/jetty-servlet-9.4.24.v20191120.jar.sha1
 create mode 100644 lucene/licenses/jetty-servlet-9.4.27.v20200227.jar.sha1
 delete mode 100644 lucene/licenses/jetty-util-9.4.24.v20191120.jar.sha1
 create mode 100644 lucene/licenses/jetty-util-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/contrib/analytics/src/test-files/solr/analytics/legacy/facetWithDottedFields.txt
 create mode 100644 solr/contrib/analytics/src/test/org/apache/solr/analytics/util/OldAnalyticsRequestConverterUnitTest.java
 rename solr/contrib/ltr/src/test/org/apache/solr/ltr/feature/{TestOriginalScoreScorer.java => TestFeature.java} (71%)
 create mode 100644 solr/core/src/java/org/apache/solr/util/DynamicMap.java
 copy solr/core/src/java/org/apache/solr/{search/facet/CountAgg.java => util/FloatConsumer.java} (58%)
 create mode 100644 solr/core/src/java/org/apache/solr/util/IntFloatDynamicMap.java
 create mode 100644 solr/core/src/java/org/apache/solr/util/IntIntDynamicMap.java
 create mode 100644 solr/core/src/java/org/apache/solr/util/IntLongDynamicMap.java
 rename solr/core/src/test/org/apache/solr/{cloud => handler/admin}/HealthCheckHandlerTest.java (74%)
 create mode 100644 solr/core/src/test/org/apache/solr/util/DynamicMapsTest.java
 delete mode 100644 solr/licenses/http2-client-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/http2-client-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/http2-common-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/http2-common-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/http2-hpack-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/http2-hpack-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/http2-http-client-transport-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/http2-http-client-transport-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/http2-server-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/http2-server-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-client-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-client-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-java-client-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-java-client-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-java-server-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-java-server-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-server-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-server-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-client-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-client-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-continuation-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-continuation-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-deploy-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-deploy-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-http-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-http-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-io-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-io-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-jmx-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-jmx-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-rewrite-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-rewrite-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-security-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-security-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-server-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-server-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-servlet-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-servlet-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-servlets-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-servlets-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-start-9.4.24.v20191120-shaded.jar.sha1
 create mode 100644 solr/licenses/jetty-start-9.4.27.v20200227-shaded.jar.sha1
 delete mode 100644 solr/licenses/jetty-util-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-util-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-webapp-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-webapp-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/jetty-xml-9.4.24.v20191120.jar.sha1
 create mode 100644 solr/licenses/jetty-xml-9.4.27.v20200227.jar.sha1
 delete mode 100644 solr/licenses/metrics-core-4.1.2.jar.sha1
 create mode 100644 solr/licenses/metrics-core-4.1.5.jar.sha1
 delete mode 100644 solr/licenses/metrics-graphite-4.1.2.jar.sha1
 create mode 100644 solr/licenses/metrics-graphite-4.1.5.jar.sha1
 delete mode 100644 solr/licenses/metrics-jetty9-4.1.2.jar.sha1
 create mode 100644 solr/licenses/metrics-jetty9-4.1.5.jar.sha1
 delete mode 100644 solr/licenses/metrics-jmx-4.1.2.jar.sha1
 create mode 100644 solr/licenses/metrics-jmx-4.1.5.jar.sha1
 delete mode 100644 solr/licenses/metrics-jvm-4.1.2.jar.sha1
 create mode 100644 solr/licenses/metrics-jvm-4.1.5.jar.sha1
 create mode 100644 solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PerClauseData.java
 rename solr/{core/src/java/org/apache/solr/util/DefaultSolrThreadFactory.java => solrj/src/java/org/apache/solr/common/util/SolrNamedThreadFactory.java} (77%)
 delete mode 100644 solr/solrj/src/java/org/apache/solr/common/util/SolrjNamedThreadFactory.java
 create mode 100644 solr/solrj/src/test-files/solrj/solr/autoscaling/emptydiagnostics.json


[lucene-solr] 01/02: Merge branch 'master' into jira/solr-14275

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 81986e85be8b3c3e04476c77f7a6f1fcf3890702
Merge: d86e010 b24b028
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Apr 16 15:28:08 2020 +0200

    Merge branch 'master' into jira/solr-14275

 .gitattributes                                     |   3 +
 .github/workflows/gradle-precommit.yml             |   2 +
 .github/workflows/gradle-wrapper-validation.yml    |  11 -
 build.gradle                                       |  23 +-
 .../apache/lucene/gradle/WrapperDownloader.java    | 129 ++++++
 dev-tools/doap/lucene.rdf                          |   7 +
 dev-tools/doap/solr.rdf                            |   7 +
 gradle/defaults-javadoc.gradle                     |  77 ----
 .../intellij-idea.gradle}                          |  24 ++
 gradle/jar-manifest.gradle                         |  82 ++++
 gradle/render-javadoc.gradle                       | 287 ++++++++-----
 gradle/testing/randomization.gradle                |   9 -
 gradle/validation/forbidden-apis/defaults.all.txt  |   2 +-
 gradle/validation/git-status.gradle                |  39 +-
 gradle/validation/jar-checks.gradle                |   2 +-
 gradle/validation/missing-docs-check.gradle        |   4 +-
 gradle/validation/precommit.gradle                 |   4 +
 gradle/wrapper/gradle-wrapper.jar                  | Bin 55616 -> 58702 bytes
 gradle/wrapper/gradle-wrapper.jar.sha256           |   1 +
 gradle/wrapper/gradle-wrapper.jar.version          |   1 +
 gradlew                                            |  10 +-
 gradlew.bat                                        |   9 +-
 help/ant.txt                                       |   2 +-
 lucene/CHANGES.txt                                 |  38 ++
 .../lucene/index/TestBackwardsCompatibility.java   |   7 +-
 .../org/apache/lucene/index/index.8.5.1-cfs.zip    | Bin 0 -> 15880 bytes
 .../org/apache/lucene/index/index.8.5.1-nocfs.zip  | Bin 0 -> 15872 bytes
 .../test/org/apache/lucene/index/sorted.8.5.1.zip  | Bin 0 -> 394412 bytes
 .../simpletext/SimpleTextCompoundFormat.java       |  31 +-
 .../simpletext/TestSimpleTextCompoundFormat.java   |   5 +
 lucene/common-build.xml                            |   9 +-
 .../apache/lucene/codecs/CompoundDirectory.java    |  83 ++++
 .../org/apache/lucene/codecs/CompoundFormat.java   |   4 +-
 .../lucene/codecs/MultiLevelSkipListReader.java    |   8 +-
 .../codecs/lucene50/Lucene50CompoundFormat.java    |   3 +-
 .../codecs/lucene50/Lucene50CompoundReader.java    |  49 +--
 .../codecs/perfield/PerFieldDocValuesFormat.java   |   3 +
 .../org/apache/lucene/index/BufferedUpdates.java   |  35 +-
 .../org/apache/lucene/index/DocumentsWriter.java   | 191 ++++-----
 .../lucene/index/DocumentsWriterDeleteQueue.java   |  87 +++-
 .../lucene/index/DocumentsWriterFlushControl.java  | 438 ++++++++-----------
 .../lucene/index/DocumentsWriterPerThread.java     | 115 ++++-
 .../lucene/index/DocumentsWriterPerThreadPool.java | 290 +++++--------
 .../lucene/index/DocumentsWriterStallControl.java  |   5 +-
 .../lucene/index/FlushByRamOrCountsPolicy.java     |  26 +-
 .../java/org/apache/lucene/index/FlushPolicy.java  |  38 +-
 .../apache/lucene/index/FrozenBufferedUpdates.java |   4 +-
 .../java/org/apache/lucene/index/IndexWriter.java  |  59 +--
 .../org/apache/lucene/index/IndexWriterConfig.java |  22 -
 .../apache/lucene/index/LiveIndexWriterConfig.java |  16 -
 .../org/apache/lucene/index/ReadersAndUpdates.java |  44 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |   3 +-
 .../org/apache/lucene/index/SegmentMerger.java     |   2 +-
 .../org/apache/lucene/index/SegmentReader.java     |   8 +
 .../search/ControlledRealTimeReopenThread.java     |  18 +-
 .../org/apache/lucene/search/IndexSearcher.java    |  58 +--
 .../lucene/search/QueueSizeBasedExecutor.java      |  60 +++
 .../org/apache/lucene/search/SliceExecutor.java    |  80 ++++
 .../apache/lucene/store/BufferedIndexInput.java    | 226 ++++------
 .../org/apache/lucene/store/NIOFSDirectory.java    |  34 +-
 .../src/java/org/apache/lucene/util/BitUtil.java   | 128 +-----
 .../src/java/org/apache/lucene/util/Version.java   |   7 +
 .../org/apache/lucene/util/fst/BitTableUtil.java   | 172 ++++++++
 .../src/java/org/apache/lucene/util/fst/FST.java   | 353 ++++++---------
 .../java/org/apache/lucene/util/fst/FSTEnum.java   |  17 +-
 .../java/org/apache/lucene/util/fst/NodeHash.java  |   2 +-
 .../src/java/org/apache/lucene/util/fst/Util.java  |  19 +-
 .../codecs/lucene60/TestLucene60PointsFormat.java  |  11 +-
 .../perfield/TestPerFieldDocValuesFormat.java      |  40 +-
 .../apache/lucene/index/TestBufferedUpdates.java   |  57 +++
 .../org/apache/lucene/index/TestFieldsReader.java  |   6 +-
 .../lucene/index/TestFlushByRamOrCountsPolicy.java |  82 ++--
 .../org/apache/lucene/index/TestIndexWriter.java   | 212 +++++++--
 .../apache/lucene/index/TestIndexWriterConfig.java |   1 -
 .../apache/lucene/index/TestIndexWriterDelete.java |   4 +-
 .../lucene/index/TestIndexWriterOnDiskFull.java    |   4 +-
 .../index/TestIndexWriterThreadsToSegments.java    |   2 +-
 .../lucene/index/TestIndexWriterWithThreads.java   |   2 +-
 .../lucene/index/TestNumericDocValuesUpdates.java  | 155 +++++++
 .../search/TestControlledRealTimeReopenThread.java |   8 +-
 .../apache/lucene/search/TestIndexSearcher.java    |  94 +++-
 .../lucene/store/TestBufferedIndexInput.java       | 114 +----
 .../test/org/apache/lucene/util/TestBitUtil.java   |  87 ----
 .../apache/lucene/util/fst/TestBitTableUtil.java   | 138 ++++++
 .../lucene/util/fst/TestFSTDirectAddressing.java   |  85 +++-
 lucene/ivy-versions.properties                     |   4 +-
 .../jetty-continuation-9.4.24.v20191120.jar.sha1   |   1 -
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |   1 +
 .../licenses/jetty-http-9.4.24.v20191120.jar.sha1  |   1 -
 .../licenses/jetty-http-9.4.27.v20200227.jar.sha1  |   1 +
 lucene/licenses/jetty-io-9.4.24.v20191120.jar.sha1 |   1 -
 lucene/licenses/jetty-io-9.4.27.v20200227.jar.sha1 |   1 +
 .../jetty-server-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-server-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-servlet-9.4.24.v20191120.jar.sha1        |   1 -
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |   1 +
 .../licenses/jetty-util-9.4.24.v20191120.jar.sha1  |   1 -
 .../licenses/jetty-util-9.4.27.v20200227.jar.sha1  |   1 +
 .../java/org/apache/lucene/store/RAFDirectory.java |  18 +-
 .../org/apache/lucene/store/WindowsDirectory.java  |   5 +-
 .../lucene/codecs/cranky/CrankyCompoundFormat.java |   3 +-
 .../lucene/index/BaseCompoundFormatTestCase.java   |  42 ++
 .../lucene/index/BaseIndexFileFormatTestCase.java  |  18 +-
 .../org/apache/lucene/index/RandomIndexWriter.java |   4 +-
 .../apache/lucene/store/MockDirectoryWrapper.java  |  18 +-
 lucene/tools/forbiddenApis/base.txt                |   2 +-
 solr/CHANGES.txt                                   |  45 +-
 solr/build.xml                                     |   2 +-
 .../apache/solr/analytics/facet/QueryFacet.java    |   8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |   8 +-
 .../stream/AnalyticsShardRequestManager.java       |   4 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |  34 +-
 .../util/OldAnalyticsRequestConverter.java         |   4 +-
 .../analytics/legacy/facetWithDottedFields.txt     |  16 +
 .../solr/collection1/conf/schema-analytics.xml     |   2 +
 .../util/OldAnalyticsRequestConverterUnitTest.java |  64 +++
 .../java/org/apache/solr/ltr/feature/Feature.java  |  41 ++
 .../solr/ltr/feature/OriginalScoreFeature.java     |  23 +-
 .../org/apache/solr/ltr/feature/SolrFeature.java   | 201 +++------
 ...stOriginalScoreScorer.java => TestFeature.java} |  21 +-
 .../collector/SchedulerMetricsCollector.java       |   4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |   6 +-
 .../prometheus/scraper/SolrCloudScraperTest.java   |   4 +-
 .../scraper/SolrStandaloneScraperTest.java         |   4 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |  20 +-
 .../client/solrj/embedded/JettySolrRunner.java     |   4 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   2 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   4 -
 .../java/org/apache/solr/cloud/SyncStrategy.java   |  34 +-
 .../java/org/apache/solr/cloud/ZkController.java   |  59 ++-
 .../OverseerCollectionMessageHandler.java          |   4 +-
 .../cloud/autoscaling/OverseerTriggerThread.java   |   9 +-
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |   6 +-
 .../cloud/autoscaling/sim/SimCloudManager.java     |  13 +-
 .../autoscaling/sim/SimDistribStateManager.java    |   4 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |  25 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  11 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   7 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |   4 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |   3 -
 .../src/java/org/apache/solr/core/ZkContainer.java |  20 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |   4 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |   6 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |   4 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |   4 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |   4 +-
 .../apache/solr/handler/ReplicationHandler.java    |   6 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |   4 +-
 .../org/apache/solr/handler/StreamHandler.java     |  14 +-
 .../solr/handler/admin/CoreAdminHandler.java       |   4 +-
 .../solr/handler/admin/HealthCheckHandler.java     |  76 +++-
 .../solr/handler/admin/MetricsHistoryHandler.java  |   4 +-
 .../solr/handler/component/ExpandComponent.java    |  13 +-
 .../handler/component/HttpShardHandlerFactory.java |  20 +-
 .../handler/component/IterativeMergeStrategy.java  |   4 +-
 .../solr/handler/tagger/TaggerRequestHandler.java  | 111 +++--
 .../org/apache/solr/logging/MDCLoggingContext.java |  78 ++--
 .../org/apache/solr/metrics/SolrMetricManager.java |   5 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |   4 +-
 .../java/org/apache/solr/pkg/PackageListeners.java |   5 +-
 .../java/org/apache/solr/request/SimpleFacets.java |  15 +-
 .../apache/solr/request/SolrRequestHandler.java    |   2 +-
 .../org/apache/solr/schema/ManagedIndexSchema.java |   4 +-
 .../java/org/apache/solr/search/CacheConfig.java   |   8 +-
 .../solr/search/CollapsingQParserPlugin.java       | 477 +++++++++------------
 .../java/org/apache/solr/search/DocSetUtil.java    |   8 +-
 .../src/java/org/apache/solr/search/Grouping.java  |  11 +-
 .../java/org/apache/solr/search/QueryUtils.java    |  32 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  | 115 ++---
 .../apache/solr/search/facet/AggValueSource.java   |   2 +-
 .../java/org/apache/solr/search/facet/AvgAgg.java  |   2 +-
 .../org/apache/solr/search/facet/CountAgg.java     |   2 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |   2 +-
 .../solr/search/facet/FacetFieldProcessor.java     |  16 +-
 .../search/facet/FacetFieldProcessorByHashDV.java  |  24 +-
 .../apache/solr/search/facet/FacetProcessor.java   |  14 +-
 .../org/apache/solr/search/facet/FacetRange.java   |   2 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |   2 +-
 .../org/apache/solr/search/facet/MinMaxAgg.java    |   2 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |   2 +-
 .../apache/solr/search/facet/PercentileAgg.java    |   2 +-
 .../apache/solr/search/facet/RelatednessAgg.java   |   2 +-
 .../java/org/apache/solr/search/facet/SlotAcc.java |  19 +-
 .../org/apache/solr/search/facet/StddevAgg.java    |   2 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |   2 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |   2 +-
 .../apache/solr/search/facet/UnInvertedField.java  |   2 +-
 .../org/apache/solr/search/facet/UniqueAgg.java    |   2 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |   2 +-
 .../solr/search/facet/UniqueBlockFieldAgg.java     |   2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |   2 +-
 .../org/apache/solr/search/facet/VarianceAgg.java  |   2 +-
 .../solr/search/grouping/CommandHandler.java       |  10 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |   4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |   3 -
 .../java/org/apache/solr/update/CommitTracker.java |   4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   7 +-
 .../org/apache/solr/update/PeerSyncWithLeader.java |   3 -
 .../src/java/org/apache/solr/update/UpdateLog.java |   4 +-
 .../org/apache/solr/update/UpdateShardHandler.java |   6 +-
 .../DocExpirationUpdateProcessorFactory.java       |   4 +-
 .../src/java/org/apache/solr/util/DynamicMap.java  |  55 +++
 .../src/java/org/apache/solr/util/ExportTool.java  |   5 +-
 .../CountAgg.java => util/FloatConsumer.java}      |  32 +-
 .../org/apache/solr/util/IntFloatDynamicMap.java   | 118 +++++
 .../org/apache/solr/util/IntIntDynamicMap.java     | 120 ++++++
 .../org/apache/solr/util/IntLongDynamicMap.java    | 120 ++++++
 .../java/org/apache/solr/util/SolrLogPostTool.java |  19 +-
 .../conf/solrconfig-cache-enable-disable.xml       |  10 +
 solr/core/src/test-files/solr/solr-jmxreporter.xml |   1 -
 .../core/src/test-files/solr/solr-solrreporter.xml |   1 -
 .../test-files/solr/solr-trackingshardhandler.xml  |   1 -
 solr/core/src/test-files/solr/solr.xml             |   1 -
 .../apache/solr/cloud/BasicDistributedZkTest.java  |   4 +-
 .../apache/solr/cloud/ConnectionManagerTest.java   |   4 +-
 .../apache/solr/cloud/DistributedQueueTest.java    |   4 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |   4 +-
 .../test/org/apache/solr/cloud/OverseerTest.java   |   9 +-
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |   4 +-
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |   4 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |   4 +-
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |   4 +-
 .../apache/solr/cloud/UnloadDistributedZkTest.java |   6 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |   9 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |   4 +-
 .../AutoAddReplicasIntegrationTest.java            |   6 +
 .../autoscaling/sim/TestSimDistributedQueue.java   |   4 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |   4 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |   6 +-
 .../src/test/org/apache/solr/core/TestConfig.java  |  26 +-
 .../admin}/HealthCheckHandlerTest.java             |  58 ++-
 .../org/apache/solr/handler/tagger/TaggerTest.java |  18 +
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |  94 ++--
 .../apache/solr/schema/TestSortableTextField.java  |   6 +-
 .../solr/search/CurrencyRangeFacetCloudTest.java   |  64 ++-
 .../org/apache/solr/search/facet/DebugAgg.java     |  10 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |  14 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |  14 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |  58 +++
 .../solr/search/facet/TestJsonRangeFacets.java     |  38 ++
 .../solr/security/AuditLoggerIntegrationTest.java  |   6 +-
 .../org/apache/solr/update/AddBlockUpdateTest.java |   6 +-
 .../solr/update/TestInPlaceUpdatesDistrib.java     |  18 +-
 .../processor/RoutedAliasUpdateProcessorTest.java  |   4 +-
 .../processor/TestDocBasedVersionConstraints.java  |   4 +-
 .../test/org/apache/solr/util/DynamicMapsTest.java |  90 ++++
 .../org/apache/solr/util/SolrLogPostToolTest.java  |  20 +
 .../http2-client-9.4.24.v20191120.jar.sha1         |   1 -
 .../http2-client-9.4.27.v20200227.jar.sha1         |   1 +
 .../http2-common-9.4.24.v20191120.jar.sha1         |   1 -
 .../http2-common-9.4.27.v20200227.jar.sha1         |   1 +
 .../licenses/http2-hpack-9.4.24.v20191120.jar.sha1 |   1 -
 .../licenses/http2-hpack-9.4.27.v20200227.jar.sha1 |   1 +
 ...http-client-transport-9.4.24.v20191120.jar.sha1 |   1 -
 ...http-client-transport-9.4.27.v20200227.jar.sha1 |   1 +
 .../http2-server-9.4.24.v20191120.jar.sha1         |   1 -
 .../http2-server-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-alpn-client-9.4.24.v20191120.jar.sha1    |   1 -
 .../jetty-alpn-client-9.4.27.v20200227.jar.sha1    |   1 +
 ...etty-alpn-java-client-9.4.24.v20191120.jar.sha1 |   1 -
 ...etty-alpn-java-client-9.4.27.v20200227.jar.sha1 |   1 +
 ...etty-alpn-java-server-9.4.24.v20191120.jar.sha1 |   1 -
 ...etty-alpn-java-server-9.4.27.v20200227.jar.sha1 |   1 +
 .../jetty-alpn-server-9.4.24.v20191120.jar.sha1    |   1 -
 .../jetty-alpn-server-9.4.27.v20200227.jar.sha1    |   1 +
 .../jetty-client-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-client-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-continuation-9.4.24.v20191120.jar.sha1   |   1 -
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |   1 +
 .../jetty-deploy-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-deploy-9.4.27.v20200227.jar.sha1         |   1 +
 solr/licenses/jetty-http-9.4.24.v20191120.jar.sha1 |   1 -
 solr/licenses/jetty-http-9.4.27.v20200227.jar.sha1 |   1 +
 solr/licenses/jetty-io-9.4.24.v20191120.jar.sha1   |   1 -
 solr/licenses/jetty-io-9.4.27.v20200227.jar.sha1   |   1 +
 solr/licenses/jetty-jmx-9.4.24.v20191120.jar.sha1  |   1 -
 solr/licenses/jetty-jmx-9.4.27.v20200227.jar.sha1  |   1 +
 .../jetty-rewrite-9.4.24.v20191120.jar.sha1        |   1 -
 .../jetty-rewrite-9.4.27.v20200227.jar.sha1        |   1 +
 .../jetty-security-9.4.24.v20191120.jar.sha1       |   1 -
 .../jetty-security-9.4.27.v20200227.jar.sha1       |   1 +
 .../jetty-server-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-server-9.4.27.v20200227.jar.sha1         |   1 +
 .../jetty-servlet-9.4.24.v20191120.jar.sha1        |   1 -
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |   1 +
 .../jetty-servlets-9.4.24.v20191120.jar.sha1       |   1 -
 .../jetty-servlets-9.4.27.v20200227.jar.sha1       |   1 +
 .../jetty-start-9.4.24.v20191120-shaded.jar.sha1   |   1 -
 .../jetty-start-9.4.27.v20200227-shaded.jar.sha1   |   1 +
 solr/licenses/jetty-util-9.4.24.v20191120.jar.sha1 |   1 -
 solr/licenses/jetty-util-9.4.27.v20200227.jar.sha1 |   1 +
 .../jetty-webapp-9.4.24.v20191120.jar.sha1         |   1 -
 .../jetty-webapp-9.4.27.v20200227.jar.sha1         |   1 +
 solr/licenses/jetty-xml-9.4.24.v20191120.jar.sha1  |   1 -
 solr/licenses/jetty-xml-9.4.27.v20200227.jar.sha1  |   1 +
 solr/licenses/metrics-core-4.1.2.jar.sha1          |   1 -
 solr/licenses/metrics-core-4.1.5.jar.sha1          |   1 +
 solr/licenses/metrics-graphite-4.1.2.jar.sha1      |   1 -
 solr/licenses/metrics-graphite-4.1.5.jar.sha1      |   1 +
 solr/licenses/metrics-jetty9-4.1.2.jar.sha1        |   1 -
 solr/licenses/metrics-jetty9-4.1.5.jar.sha1        |   1 +
 solr/licenses/metrics-jmx-4.1.2.jar.sha1           |   1 -
 solr/licenses/metrics-jmx-4.1.5.jar.sha1           |   1 +
 solr/licenses/metrics-jvm-4.1.2.jar.sha1           |   1 -
 solr/licenses/metrics-jvm-4.1.5.jar.sha1           |   1 +
 solr/licenses/start.jar.sha1                       |   2 +-
 solr/packaging/build.gradle                        |   9 +
 .../src/implicit-requesthandlers.adoc              |   2 +
 .../src/major-changes-in-solr-9.adoc               |   5 +
 .../src/solrcloud-autoscaling-triggers.adoc        |  25 +-
 .../client/solrj/impl/BaseCloudSolrClient.java     |   4 +-
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |   4 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |   4 +-
 .../solr/client/solrj/impl/Http2SolrClient.java    |   4 +-
 .../solr/client/solrj/impl/HttpSolrClient.java     |   4 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   4 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |   4 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |   4 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |   4 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |   4 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |   4 +-
 .../client/solrj/io/stream/ExecutorStream.java     |   4 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |   4 +-
 .../client/solrj/io/stream/ParallelListStream.java |   4 +-
 .../solrj/io/stream/SignificantTermsStream.java    |   4 +-
 .../client/solrj/io/stream/TextLogitStream.java    |   4 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |   4 +-
 .../org/apache/solr/common/cloud/SolrZkClient.java |   6 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   4 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |   2 +-
 .../solr/common/util/SolrNamedThreadFactory.java}  |  23 +-
 .../solr/common/util/SolrjNamedThreadFactory.java  |  49 ---
 .../impl/ConcurrentUpdateHttp2SolrClientTest.java  |   6 +-
 .../solrj/impl/ConcurrentUpdateSolrClientTest.java |   6 +-
 .../solrj/impl/HttpSolrClientConPoolTest.java      |   4 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |   7 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |  45 ++
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   4 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |  10 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |   6 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   6 +-
 solr/webapp/web/index.html                         |   4 +-
 solr/webapp/web/libs/angular-chosen.min.js         |   4 +-
 versions.lock                                      |  58 +--
 versions.props                                     |   6 +-
 346 files changed, 4928 insertions(+), 3284 deletions(-)



[lucene-solr] 02/02: SOLR-14275: Merge Noble's changes.

Posted by ab...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 26479c212b64432893bf40693e314f224274f3e1
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Thu Apr 16 16:07:16 2020 +0200

    SOLR-14275: Merge Noble's changes.
---
 .../cloud/autoscaling/AddReplicaSuggester.java     |   2 +-
 .../client/solrj/cloud/autoscaling/Clause.java     |  30 +++-
 .../solrj/cloud/autoscaling/FreeDiskVariable.java  |   7 +
 .../solrj/cloud/autoscaling/PerClauseData.java     | 188 +++++++++++++++++++++
 .../client/solrj/cloud/autoscaling/Policy.java     |  10 +-
 .../solrj/cloud/autoscaling/ReplicaCount.java      |  17 ++
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |  57 +++----
 .../solr/client/solrj/cloud/autoscaling/Row.java   |  47 ++++++
 .../client/solrj/cloud/autoscaling/Violation.java  |   9 +-
 .../solrj/solr/autoscaling/emptydiagnostics.json   |  20 +++
 .../solrj/cloud/autoscaling/TestPolicy2.java       |  67 ++++++++
 11 files changed, 409 insertions(+), 45 deletions(-)

diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AddReplicaSuggester.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AddReplicaSuggester.java
index 09ce72f..56d2584 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AddReplicaSuggester.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AddReplicaSuggester.java
@@ -55,7 +55,7 @@ class AddReplicaSuggester extends Suggester {
       // nocommit
       // possible optimization? for large clusters compare only up to
       // that many eligible rows from the top
-      int limitTopRows = getMatrix().size() > 100 ? 10 : getMatrix().size();
+      int limitTopRows = getMatrix().size() > 100 ? 3 : getMatrix().size();
 
       for (int i = getMatrix().size() - 1; i >= 0; i--) {
         Row row = getMatrix().get(i);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Clause.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Clause.java
index d986b11..4bf153a 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Clause.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Clause.java
@@ -70,6 +70,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
   final Replica.Type type;
   final Put put;
   final boolean strict;
+  final DataGrouping dataGrouping;
 
   protected Clause(Clause clause, Function<Condition, Object> computedValueEvaluator) {
     this.original = clause.original;
@@ -85,10 +86,11 @@ public class Clause implements MapWriter, Comparable<Clause> {
     this.hasComputedValue = clause.hasComputedValue;
     this.strict = clause.strict;
     derivedFrom = clause.derivedFrom;
+    this.dataGrouping =clause.dataGrouping;
   }
 
   // internal use only
-  Clause(Map<String, Object> original, Condition tag, Condition globalTag, boolean isStrict, Put put, boolean nodeSetPresent) {
+  Clause(Map<String, Object> original, Condition tag, Condition globalTag, boolean isStrict, Put put, boolean nodeSetPresent, DataGrouping dataGrouping) {
     this.hashCode = original.hashCode();
     this.original = original;
     this.tag = tag;
@@ -103,6 +105,7 @@ public class Clause implements MapWriter, Comparable<Clause> {
     this.collection = null;
     this.shard = null;
     this.replica = null;
+    this.dataGrouping = null;
   }
 
   private Clause(Map<String, Object> m) {
@@ -156,6 +159,15 @@ public class Clause implements MapWriter, Comparable<Clause> {
     }
     doPostValidate(collection, shard, replica, tag, globalTag);
     hasComputedValue = hasComputedValue();
+
+    if(globalTag != null || tag.name.equals("node")){
+      dataGrouping = DataGrouping.NODE;
+    } else if(shard.val.toString().equals(ANY)){
+      dataGrouping = DataGrouping.COLL;
+    } else {
+      dataGrouping = DataGrouping.SHARD;
+    }
+
   }
 
   private boolean parseNodeset(Map<String, Object> m) {
@@ -680,17 +692,23 @@ public class Clause implements MapWriter, Comparable<Clause> {
   public List<Violation> test(Policy.Session session, Row changedRow, double[] deviations) {
     if (isPerCollectiontag()) {
       if(nodeSetPresent) {
-        if(put == Put.ON_EACH){
+        if(put == Put.ON_EACH) {
           return testPerNode(session, changedRow, deviations) ;
         } else {
-          return testGroupNodes(session, changedRow, deviations);
+          return session.perClauseData.computeViolations(session, this);
+          //return testGroupNodes(session, deviations);
         }
       }
 
+      if(tag.varType == Type.NODE){
+        return session.perClauseData.computeViolations(session, this);
+      }
+
+
       return tag.varType == Type.NODE ||
           (tag.varType.meta.isNodeSpecificVal() && replica.computedType == null) ?
           testPerNode(session, changedRow, deviations) :
-          testGroupNodes(session, changedRow, deviations);
+         testGroupNodes(session, changedRow, deviations);
     } else {
       ComputedValueEvaluator computedValueEvaluator = new ComputedValueEvaluator(session);
       Violation.Ctx ctx = new Violation.Ctx(this, session.matrix, computedValueEvaluator);
@@ -847,4 +865,8 @@ public class Clause implements MapWriter, Comparable<Clause> {
     }
   }
 
+  enum DataGrouping {
+    COLL, SHARD, NODE,GLOBAL;
+  }
+
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/FreeDiskVariable.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/FreeDiskVariable.java
index c61d7ee..3f6c02b 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/FreeDiskVariable.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/FreeDiskVariable.java
@@ -174,6 +174,13 @@ public class FreeDiskVariable extends VariableBase {
   @Override
   public void projectAddReplica(Cell cell, ReplicaInfo ri, Consumer<Row.OperationInfo> ops, boolean strictMode) {
     //go through other replicas of this shard and copy the index size value into this
+    if(cell.getRow().session.perClauseData != null){
+      PerClauseData.ShardDetails sd = cell.getRow().session.perClauseData.getShardDetails(ri.getCollection(), ri.getShard());
+      if(sd.indexSize == null) return;
+      Double currFreeDisk = cell.val == null ? 0.0d : (Double) cell.val;
+      cell.val = currFreeDisk - sd.indexSize;
+      return;
+    }
     IndexSizeGetter getter = new IndexSizeGetter(ri.getCollection(), ri.getShard());
     for (Row row : cell.getRow().session.matrix) {
       if (row.isEmpty() || !row.isLive() || !row.hasColl(ri.getCollection())) {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PerClauseData.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PerClauseData.java
new file mode 100644
index 0000000..cc815ba
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/PerClauseData.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj.cloud.autoscaling;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+
+import org.apache.solr.common.annotation.JsonProperty;
+import org.apache.solr.common.util.ReflectMapWriter;
+import org.apache.solr.common.util.Utils;
+
+public class PerClauseData implements ReflectMapWriter, Cloneable {
+  @JsonProperty
+  public Map<String, CollectionDetails> collections = new HashMap<>();
+
+  static Function<String, ReplicaCount> NEW_CLAUSEVAL_FUN = c -> new ReplicaCount();
+
+  ReplicaCount getClauseValue(String coll, String shard, Clause clause, String key) {
+    Map<String, ReplicaCount> countMap = getCountsForClause(coll, shard, clause);
+    return countMap.computeIfAbsent(key,NEW_CLAUSEVAL_FUN);
+  }
+
+  private Map<String, ReplicaCount> getCountsForClause(String coll, String shard, Clause clause) {
+    CollectionDetails cd = collections.get(coll);
+    if (cd == null) collections.put(coll, cd = new CollectionDetails(coll));
+    ShardDetails psd = null;
+    if (shard != null && clause.dataGrouping == Clause.DataGrouping.SHARD) {
+      psd = cd.shards.get(shard);
+      if (psd == null) cd.shards.put(shard, psd = new ShardDetails(coll, shard));
+    }
+
+    Map<Clause, Map<String, ReplicaCount>> map = (psd == null ? cd.clauseValues : psd.values);
+
+    return (Map<String, ReplicaCount>) map.computeIfAbsent(clause, Utils.NEW_HASHMAP_FUN);
+  }
+
+  PerClauseData copy() {
+    PerClauseData result = new PerClauseData();
+    collections.forEach((s, v) -> result.collections.put(s, v.copy()));
+    return result;
+  }
+
+
+
+  ShardDetails getShardDetails(String c, String s) {
+    CollectionDetails cd = collections.get(c);
+    if (cd == null) collections.put(c, cd = new CollectionDetails(c));
+    ShardDetails sd = cd.shards.get(s);
+    if (sd == null) cd.shards.put(c, sd = new ShardDetails(c, s));
+    return sd;
+  }
+
+
+  public static class CollectionDetails implements ReflectMapWriter, Cloneable {
+
+    final String coll;
+    Map<String, ShardDetails> shards = new HashMap<>();
+
+    Map<Clause, Map<String, ReplicaCount>> clauseValues = new HashMap<>();
+
+    CollectionDetails copy() {
+      CollectionDetails result = new CollectionDetails(coll);
+      shards.forEach((k, shardDetails) -> result.shards.put(k, shardDetails.copy()));
+      return result;
+    }
+
+    CollectionDetails(String coll) {
+      this.coll = coll;
+    }
+  }
+
+  public static class ShardDetails implements ReflectMapWriter, Cloneable {
+    final String coll;
+    final String shard;
+    Double indexSize;
+    ReplicaCount replicas = new ReplicaCount();
+
+    public Map<Clause, Map<String, ReplicaCount>> values = new HashMap<>();
+
+    ShardDetails(String coll, String shard) {
+      this.coll = coll;
+      this.shard = shard;
+    }
+
+
+    ShardDetails copy() {
+      ShardDetails result = new ShardDetails(coll, shard);
+      values.forEach((clause, clauseVal) -> {
+        HashMap<String,ReplicaCount> m = new HashMap(clauseVal);
+        for (Map.Entry<String, ReplicaCount> e : m.entrySet()) e.setValue(e.getValue().copy());
+        result.values.put(clause, m);
+      });
+      return result;
+    }
+  }
+
+  static class LazyViolation extends Violation {
+    private Policy.Session session;
+
+    LazyViolation(SealedClause clause, String coll, String shard, String node, Object actualVal, Double replicaCountDelta, Object tagKey, Policy.Session session) {
+      super(clause, coll, shard, node, actualVal, replicaCountDelta, tagKey);
+      super.replicaInfoAndErrs = null;
+      this.session = session;
+    }
+
+    @Override
+    public List<ReplicaInfoAndErr> getViolatingReplicas() {
+      if(replicaInfoAndErrs == null){
+        populateReplicas();
+      }
+      return replicaInfoAndErrs;
+    }
+
+    private void populateReplicas() {
+      replicaInfoAndErrs = new ArrayList<>();
+      for (Row row : session.matrix) {
+        if(getClause().getThirdTag().isPass(row)) {
+            row.forEachReplica(coll, ri -> {
+              if(shard == null || Objects.equals(shard, ri.getShard()))
+              replicaInfoAndErrs.add(new ReplicaInfoAndErr(ri));
+            });
+
+        }
+      }
+    }
+  }
+
+  void getViolations( Map<Clause, Map<String, ReplicaCount>> vals ,
+                      List<Violation> violations,
+                      Clause.ComputedValueEvaluator evaluator,
+                      Clause clause){
+
+    Map<String, ReplicaCount> cv = vals.get(clause);
+    if (cv == null || cv.isEmpty()) return;
+    SealedClause sc = clause.getSealedClause(evaluator);
+    cv.forEach((s, replicaCount) -> {
+      if (!sc.replica.isPass(replicaCount)) {
+        Violation v = new LazyViolation(
+            sc,
+            evaluator.collName,
+            evaluator.shardName,
+            null,
+            replicaCount,
+            sc.getReplica().replicaCountDelta(replicaCount),
+            s,
+            evaluator.session);
+        violations.add(v);
+      }
+    });
+
+  }
+
+  List<Violation> computeViolations(Policy.Session session, Clause clause) {
+    Clause.ComputedValueEvaluator evaluator = new Clause.ComputedValueEvaluator(session);
+    List<Violation> result = new ArrayList<>();
+    collections.forEach((coll, cd) -> {
+      evaluator.collName = coll;
+      evaluator.shardName = null;
+      if (clause.dataGrouping == Clause.DataGrouping.COLL) {
+        getViolations(cd.clauseValues, result, evaluator, clause);
+      } else if (clause.dataGrouping == Clause.DataGrouping.SHARD) {
+        cd.shards.forEach((shard, sd) -> {
+          evaluator.shardName = shard;
+          getViolations(sd.values, result, evaluator, clause);
+        });
+      }
+    });
+    return result;
+  }}
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java
index d35fcb8..77cbc53 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java
@@ -523,6 +523,7 @@ public class Policy implements MapWriter {
     private final Policy policy;
     List<Clause> expandedClauses;
     List<Violation> violations = new ArrayList<>();
+    PerClauseData perClauseData = new PerClauseData();
     Transaction transaction;
 
     private Session(Policy policy, List<String> nodes, SolrCloudManager cloudManager,
@@ -573,7 +574,7 @@ public class Policy implements MapWriter {
           if (!withCollMap.isEmpty()) {
             Clause withCollClause = new Clause((Map<String,Object>)Utils.fromJSONString("{withCollection:'*' , node: '#ANY'}") ,
                 new Condition(NODE.tagName, "#ANY", Operand.EQUAL, null, null),
-                new Condition(WITH_COLLECTION.tagName,"*" , Operand.EQUAL, null, null), true, null, false
+                new Condition(WITH_COLLECTION.tagName,"*" , Operand.EQUAL, null, null), true, null, false, Clause.DataGrouping.NODE
             );
             expandedClauses.add(withCollClause);
           }
@@ -598,7 +599,7 @@ public class Policy implements MapWriter {
 
     private Session(List<String> nodes, SolrCloudManager cloudManager,
                    List<Row> matrix, List<Clause> expandedClauses, int znodeVersion,
-                   NodeStateProvider nodeStateProvider, Policy policy, Transaction transaction) {
+                   NodeStateProvider nodeStateProvider, Policy policy, Transaction transaction,  PerClauseData perClauseData) {
       this.transaction = transaction;
       this.policy = policy;
       this.nodes = nodes;
@@ -607,6 +608,7 @@ public class Policy implements MapWriter {
       this.expandedClauses = expandedClauses;
       this.znodeVersion = znodeVersion;
       this.nodeStateProvider = nodeStateProvider;
+      this.perClauseData = perClauseData;
       for (Row row : matrix) row.session = this;
     }
 
@@ -627,11 +629,11 @@ public class Policy implements MapWriter {
     }
 
     Session copy() {
-      return new Session(policy, nodes, cloudManager, getMatrixCopy(), expandedClauses, znodeVersion, nodeStateProvider, transaction);
+      return new Session(nodes, cloudManager, getMatrixCopy(), expandedClauses, znodeVersion, nodeStateProvider, policy, transaction, perClauseData.copy());
     }
 
     Session shallowCopy() {
-      return new Session(policy, nodes, cloudManager, new ArrayList<>(matrix), expandedClauses, znodeVersion, nodeStateProvider, transaction);
+      return new Session(nodes, cloudManager, new ArrayList<>(matrix), expandedClauses, znodeVersion, nodeStateProvider, policy, transaction, perClauseData.copy());
     }
 
     public Row getNode(String node) {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java
index f5c61b2..d42ff31 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java
@@ -83,6 +83,23 @@ class ReplicaCount  implements MapWriter {
     tlog += count.tlog;
   }
 
+  void incr(ReplicaInfo ri, int delta){
+    switch (ri.getType()) {
+      case NRT:
+        nrt+=delta;
+        break;
+      case PULL:
+        pull+=delta;
+        break;
+      case TLOG:
+        tlog+=delta;
+        break;
+      default:
+        nrt+=delta;
+    }
+
+  }
+
 
   public void increment(Replica.Type type) {
     _change(type, 1);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaVariable.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaVariable.java
index 4b13eba..a52625f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaVariable.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaVariable.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.function.Consumer;
 
 import org.apache.solr.common.util.StrUtils;
 
@@ -31,45 +30,39 @@ class ReplicaVariable extends VariableBase {
     super(type);
   }
 
-  public static final String REPLICASCOUNT = "relevantReplicas";
-
-
-  private static final class ReplicaCounter implements Consumer<ReplicaInfo> {
-    final String collection, shard;
-    final Clause clause;
-    final int[] result = new int[1];
+  static int getRelevantReplicasCount(Policy.Session session, Condition cv, String collection, String shard) {
+    PerClauseData.CollectionDetails cd = session.perClauseData.collections.get(collection);
+    if (cd != null) {
+      if (shard != null) {
+        PerClauseData.ShardDetails sd = cd.shards.get(shard);
+        if (sd != null) return sd.replicas.getVal(cv.clause.type).intValue();
 
-    ReplicaCounter(String collection, String shard, Clause clause) {
-      this.collection = collection;
-      this.shard = shard;
-      this.clause = clause;
-    }
+      } else {
+        int totalReplicasOfInterest = 0;
 
-    @Override
-    public void accept(ReplicaInfo replicaInfo) {
-      if (clause.isMatch(replicaInfo, collection, shard)) {
-        result[0]++;
+        for (PerClauseData.ShardDetails sd : cd.shards.values()) {
+          totalReplicasOfInterest += sd.replicas.getVal(cv.clause.type).intValue();
+        }
+        return totalReplicasOfInterest;
       }
-    }
 
-    Integer calculate(Row row) {
-      result[0] = 0;
-      row.forEachReplica(collection, this);
-      return result[0];
     }
-  }
-
-  static int getRelevantReplicasCount(Policy.Session session, Condition cv, String collection, String shard) {
-    int totalReplicasOfInterest = 0;
-    Clause clause = cv.getClause();
-    ReplicaCounter counter = new ReplicaCounter(collection, shard, clause);
-    for (int i = 0; i < session.matrix.size(); i++) {
-      Row row = session.matrix.get(i);
-      Integer perShardCount = row.computeCacheIfAbsent(collection, shard, REPLICASCOUNT, cv.clause, o -> counter.calculate(row));
+    return 0;
+
+   /* Clause clause = cv.getClause();
+    for (Row row : session.matrix) {
+      Integer perShardCount = row.computeCacheIfAbsent(collection, shard, REPLICASCOUNT, cv.clause, o -> {
+        int[] result = new int[1];
+        row.forEachReplica(collection, replicaInfo -> {
+          if (clause.isMatch(replicaInfo, collection, shard))
+            result[0]++;
+        });
+        return result[0];
+      });
       if (perShardCount != null)
         totalReplicasOfInterest += perShardCount;
     }
-    return totalReplicasOfInterest;
+    return totalReplicasOfInterest;*/
   }
 
   @Override
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Row.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Row.java
index a187203..1c3dff5 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Row.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Row.java
@@ -40,6 +40,7 @@ import org.apache.solr.common.util.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.solr.client.solrj.cloud.autoscaling.Variable.Type.CORE_IDX;
 import static org.apache.solr.common.params.CoreAdminParams.NODE;
 
 /**
@@ -87,6 +88,7 @@ public class Row implements MapWriter {
     _initReplicaCounts();
 
     isAlreadyCopied = true;
+    initPerClauseData();
   }
 
   private void _initReplicaCounts() {
@@ -331,6 +333,8 @@ public class Row implements MapWriter {
       }
     }
 
+    modifyPerClauseCount(ri, 1);
+
     return row;
   }
 
@@ -433,6 +437,7 @@ public class Row implements MapWriter {
     for (Cell cell : row.cells) {
       cell.type.projectRemoveReplica(cell, removed, opCollector);
     }
+    modifyPerClauseCount(removed, -1);
     return row;
 
   }
@@ -466,4 +471,46 @@ public class Row implements MapWriter {
       }
     }
   }
+
+  void modifyPerClauseCount(ReplicaInfo ri, int delta) {
+    if (session == null || session.perClauseData == null || ri == null) return;
+    session.perClauseData.getShardDetails(ri.getCollection(),ri.getShard()).replicas.incr(ri, delta);
+    for (Clause clause : session.expandedClauses) {
+      if (clause.put == Clause.Put.ON_EACH) continue;
+      if (clause.dataGrouping == Clause.DataGrouping.SHARD || clause.dataGrouping == Clause.DataGrouping.COLL) {
+        if (clause.tag.isPass(this)) {
+          session.perClauseData.getClauseValue(
+              ri.getCollection(),
+              ri.getShard(),
+              clause,
+              String.valueOf(this.getVal(clause.tag.name))).incr(ri, delta);
+        }
+      }
+    }
+  }
+
+  void initPerClauseData() {
+    if(session== null || session.perClauseData == null) return;
+    forEachReplica(it -> {
+      PerClauseData.ShardDetails shardDetails = session.perClauseData.getShardDetails(it.getCollection(), it.getShard());
+      shardDetails.replicas.increment(it.getType());
+      Number idxSize = (Number) it.getVariable(CORE_IDX.tagName);
+      if(idxSize != null){
+        shardDetails.indexSize = idxSize.doubleValue();
+      }
+    });
+    for (Clause clause : session.expandedClauses) {
+      if(clause.put == Clause.Put.ON_EACH) continue;
+      if(clause.dataGrouping == Clause.DataGrouping.SHARD || clause.dataGrouping == Clause.DataGrouping.COLL) {
+        if(clause.tag.isPass(this)) {
+          forEachReplica(it -> session.perClauseData.getClauseValue(
+              it.getCollection(),
+              it.getShard(),
+              clause, String.valueOf(this.getVal(clause.tag.name))
+
+          ).incr(it, 1));
+        }
+      }
+    }
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Violation.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Violation.java
index e0d2048..64efc2c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Violation.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Violation.java
@@ -19,6 +19,7 @@ package org.apache.solr.client.solrj.cloud.autoscaling;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -36,7 +37,7 @@ public class Violation implements MapWriter {
   final Object tagKey;
   private final int hash;
   private final Clause clause;
-  private List<ReplicaInfoAndErr> replicaInfoAndErrs = new ArrayList<>();
+  protected List<ReplicaInfoAndErr> replicaInfoAndErrs = new ArrayList<>();
 
   Violation(SealedClause clause, String coll, String shard, String node, Object actualVal, Double replicaCountDelta, Object tagKey) {
     this.clause = clause;
@@ -55,7 +56,7 @@ public class Violation implements MapWriter {
   }
 
   public List<ReplicaInfoAndErr> getViolatingReplicas() {
-    return replicaInfoAndErrs;
+    return replicaInfoAndErrs == null ? Collections.EMPTY_LIST : replicaInfoAndErrs;
   }
 
   public Clause getClause() {
@@ -108,7 +109,7 @@ public class Violation implements MapWriter {
     return false;
   }
 
-  static class ReplicaInfoAndErr implements MapWriter{
+  static class ReplicaInfoAndErr implements MapWriter {
     final ReplicaInfo replicaInfo;
     Double delta;
 
@@ -145,7 +146,7 @@ public class Violation implements MapWriter {
       ew1.putIfNotNull("delta", replicaCountDelta);
     });
     ew.put("clause", getClause());
-    if (!replicaInfoAndErrs.isEmpty()) {
+    if (!getViolatingReplicas().isEmpty()) {
       ew.put("violatingReplicas", (IteratorWriter) iw -> {
         for (ReplicaInfoAndErr replicaInfoAndErr : replicaInfoAndErrs) {
           iw.add(replicaInfoAndErr.replicaInfo);
diff --git a/solr/solrj/src/test-files/solrj/solr/autoscaling/emptydiagnostics.json b/solr/solrj/src/test-files/solrj/solr/autoscaling/emptydiagnostics.json
new file mode 100644
index 0000000..f284054
--- /dev/null
+++ b/solr/solrj/src/test-files/solrj/solr/autoscaling/emptydiagnostics.json
@@ -0,0 +1,20 @@
+{
+  "diagnostics": {
+    "sortedNodes": [
+      {
+        "node": "10.0.0.80:8983_solr",
+        "isLive": true,
+        "cores" : 0,
+        "freedisk": 680,
+        "totaldisk": 1037,
+        "replicas": {}
+      }
+    ],
+    "cluster": {
+      "collections": {},
+      "live_nodes": [
+
+      ]
+    }
+  }
+}
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java b/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java
index 63b7da4..95ab6a3 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/cloud/autoscaling/TestPolicy2.java
@@ -36,12 +36,15 @@ import java.util.stream.Collectors;
 
 import com.google.common.collect.ImmutableSet;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.cloud.NodeStateProvider;
 import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.impl.ClusterStateProvider;
 import org.apache.solr.client.solrj.impl.SolrClientNodeStateProvider;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.ReplicaPosition;
+import org.apache.solr.common.params.CollectionParams;
+import org.apache.solr.common.util.Pair;
 import org.apache.solr.common.util.Utils;
 import org.junit.Ignore;
 import org.slf4j.Logger;
@@ -502,4 +505,68 @@ public class TestPolicy2 extends SolrTestCaseJ4 {
     }
   }
 
+  public void test1000Nodes() throws Exception {
+    String collName = "go";
+    int shards = 300;
+    int repFactor = 4;
+    int numNodes = 1000;
+    long start = System.currentTimeMillis();
+
+    Map<String, Object> m = (Map<String, Object>) loadFromResource("emptydiagnostics.json");
+    List<Map> nodes = (List<Map>) Utils.getObjectByPath(m, false, "diagnostics/sortedNodes");
+    List<String> liveNodes = (List<String>) Utils.getObjectByPath(m, false, "diagnostics/cluster/live_nodes");
+    Map aNode = nodes.remove(0);
+    String nodeName = (String) aNode.get("node");
+    for (int i = 0; i < numNodes; i++) {
+      Map copy = Utils.getDeepCopy(aNode, 2);
+      String nodeNameTmp = nodeName + "_" + i;
+      copy.put("node", nodeNameTmp);
+      nodes.add(copy);
+      liveNodes.add(nodeNameTmp);
+
+    }
+
+    SolrCloudManager cloudManagerFromDiagnostics = createCloudManagerFromDiagnostics(m);
+    AutoScalingConfig autoScalingConfig = new AutoScalingConfig((Map<String, Object>) Utils.fromJSONString("{\n" +
+        "  'cluster-preferences': [\n" +
+        "    {\n" +
+        "      'minimize': 'cores',\n" +
+        "      'precision': 5\n" +
+        "    },\n" +
+        "    {\n" +
+        "      'maximize': 'freedisk',\n" +
+        "      'precision': 10\n" +
+        "    },\n" +
+        "    \n" +
+        "  ],\n" +
+        "  'cluster-policy': [\n" +
+        "    {\n" +
+        "      'replica': '<2',\n" +
+        "      'shard': '#EACH',\n" +
+        "      'node': '#ANY',\n" +
+        "    },\n" +
+        "    {\n" +
+        "      'replica': '#EQUAL',\n" +
+        "      'node': '#ANY',\n" +
+        "    }\n" +
+        "  ]\n" +
+        "}"
+    ));
+
+
+    Policy.Session session = autoScalingConfig.getPolicy().createSession(cloudManagerFromDiagnostics);
+
+    for (int i = 0; i < shards; i++) {
+      for (int j = 0; j < repFactor; j++) {
+        Suggester suggester = session.getSuggester(CollectionParams.CollectionAction.ADDREPLICA);
+        suggester.hint(Suggester.Hint.COLL_SHARD, new Pair<>(collName, "shards_" + i));
+        SolrRequest op = suggester.getSuggestion();
+        session = suggester.getSession();
+        assertNotNull(op);
+      }
+    }
+    System.out.println("Time taken : "+ (System.currentTimeMillis() -start));
+  }
+
+
 }