You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 10:03:11 UTC

[lucene] branch jira/solr-13350-new created (now 84dec14)

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

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


      at 84dec14  SOLR-13350: Bringing back the assert that was disabled to wordaround tests

This branch includes the following new commits:

     new be9b8b0  SOLR-13350: Collector manager used for multi-threaded search
     new 3477c1f  SOLR-13350: Adding collectors executors to CoreContainer
     new b1bfe2e  SOLR-13350: Fixing query component for multi-threaded case
     new 11465db  SOLR-13350: Fix join queries to make sure multithreading doesn't result in multiple close() calls on fromCore
     new bde29b5  SOLR-13350: GraphQuery shouldn't use multi-threaded search
     new afd6f5a  SOLR-13350: Merging master and updating the PR
     new 590d35c  Revert "SOLR-13350: Merging master and updating the PR"
     new 007d882  SOLR-13350: Updating to master
     new 4b4514b  SOLR-13350: More fixes and review comments
     new 84dec14  SOLR-13350: Bringing back the assert that was disabled to wordaround tests

The 10 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.



[lucene] 08/10: SOLR-13350: Updating to master

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

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

commit 007d88290e625d0388802a8f1e8f18d69173de4f
Merge: 590d35c a003f64
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Sat Aug 15 08:03:23 2020 +0530

    SOLR-13350: Updating to master

 .asf.yaml                                          |     8 +-
 .gitattributes                                     |     3 +
 .github/workflows/gradle-precommit.yml             |     2 +
 .github/workflows/gradle-wrapper-validation.yml    |    11 -
 .gitignore                                         |     8 +-
 README.md                                          |     2 +-
 build.gradle                                       |    50 +-
 .../apache/lucene/gradle/WrapperDownloader.java    |   129 +
 dev-tools/doap/lucene.rdf                          |    35 +
 dev-tools/doap/solr.rdf                            |    35 +
 dev-tools/maven/pom.xml.template                   |     4 +-
 dev-tools/scripts/README.md                        |    12 -
 dev-tools/scripts/SOLR-2452.patch.hack.pl          |     4 +-
 dev-tools/scripts/addBackcompatIndexes.py          |     5 -
 dev-tools/scripts/buildAndPushRelease.py           |     4 +-
 dev-tools/scripts/createPatch.py                   |   143 -
 dev-tools/scripts/create_line_file_docs.py         |   247 +
 dev-tools/scripts/jenkins.build.ref.guide.sh       |    73 -
 dev-tools/scripts/poll-mirrors.py                  |    20 +-
 dev-tools/scripts/prep-solr-ref-guide-rc.sh        |    89 -
 dev-tools/scripts/publish-solr-ref-guide.sh        |    58 -
 dev-tools/scripts/releaseWizard.py                 |   156 +-
 dev-tools/scripts/releaseWizard.yaml               |   401 +-
 dev-tools/scripts/reproduceJenkinsFailures.py      |     5 +-
 dev-tools/scripts/smokeTestRelease.py              |     8 +-
 dev-tools/scripts/svnBranchToGit.py                |   797 --
 gradle/defaults-idea.gradle                        |    29 -
 gradle/defaults-java.gradle                        |    25 +-
 gradle/defaults-javadoc.gradle                     |    77 -
 gradle/documentation/changes-to-html.gradle        |    94 +
 gradle/documentation/documentation.gradle          |    96 +
 gradle/documentation/markdown.gradle               |   204 +
 gradle/documentation/render-javadoc.gradle         |   324 +
 gradle/generate-defaults.gradle                    |     2 +-
 gradle/generation/snowball.gradle                  |     2 +-
 gradle/hacks/findbugs.gradle                       |    46 +
 gradle/help.gradle                                 |     4 +-
 gradle/ide/intellij-idea.gradle                    |    53 +
 gradle/jar-manifest.gradle                         |    89 +
 gradle/testing/alternative-jdk-support.gradle      |    72 +
 gradle/testing/randomization.gradle                |     9 -
 gradle/testing/runtime-jvm-support.gradle          |    52 -
 gradle/validation/check-broken-links.gradle        |    71 +
 gradle/validation/check-environment.gradle         |     2 +-
 gradle/validation/forbidden-apis/defaults.all.txt  |     2 +-
 gradle/validation/git-status.gradle                |    39 +-
 gradle/validation/jar-checks.gradle                |     6 +-
 gradle/validation/missing-docs-check.gradle        |     4 +-
 gradle/validation/precommit.gradle                 |     8 +-
 gradle/validation/rat-sources.gradle               |     1 +
 gradle/validation/validate-log-calls.gradle        |   248 +
 gradle/wrapper/gradle-wrapper.jar                  |   Bin 55616 -> 58910 bytes
 gradle/wrapper/gradle-wrapper.jar.sha256           |     1 +
 gradle/wrapper/gradle-wrapper.jar.version          |     1 +
 gradle/wrapper/gradle-wrapper.properties           |     2 +-
 gradlew                                            |    15 +-
 gradlew.bat                                        |     9 +-
 help/ant.txt                                       |     6 +-
 help/jvms.txt                                      |    18 +
 help/tests.txt                                     |    15 -
 help/validateLogCalls.txt                          |    74 +
 lucene/BUILD.md                                    |    92 +
 lucene/BUILD.txt                                   |    90 -
 lucene/CHANGES.txt                                 |   394 +-
 lucene/JRE_VERSION_MIGRATION.md                    |    39 +
 lucene/JRE_VERSION_MIGRATION.txt                   |    39 -
 lucene/MIGRATE.md                                  |   295 +
 lucene/MIGRATE.txt                                 |   251 -
 lucene/README.md                                   |    23 +
 lucene/README.txt                                  |    23 -
 lucene/SYSTEM_REQUIREMENTS.md                      |    18 +
 lucene/SYSTEM_REQUIREMENTS.txt                     |    18 -
 lucene/analysis/common/build.gradle                |     2 +
 .../ar/ArabicNormalizationFilterFactory.java       |     5 +
 .../analysis/ar/ArabicStemFilterFactory.java       |     5 +
 .../analysis/bg/BulgarianStemFilterFactory.java    |     5 +
 .../bn/BengaliNormalizationFilterFactory.java      |     5 +
 .../analysis/bn/BengaliStemFilterFactory.java      |     5 +
 .../boost/DelimitedBoostTokenFilterFactory.java    |     5 +
 .../analysis/br/BrazilianStemFilterFactory.java    |     5 +
 .../charfilter/HTMLStripCharFilterFactory.java     |     5 +
 .../charfilter/MappingCharFilterFactory.java       |     5 +
 .../analysis/cjk/CJKBigramFilterFactory.java       |     5 +
 .../lucene/analysis/cjk/CJKWidthFilterFactory.java |     5 +
 .../ckb/SoraniNormalizationFilterFactory.java      |     5 +
 .../analysis/ckb/SoraniStemFilterFactory.java      |     5 +
 .../commongrams/CommonGramsFilterFactory.java      |     5 +
 .../commongrams/CommonGramsQueryFilterFactory.java |     5 +
 .../DictionaryCompoundWordTokenFilterFactory.java  |     5 +
 .../HyphenationCompoundWordTokenFilterFactory.java |     5 +
 .../compound/hyphenation/HyphenationTree.java      |     2 +-
 .../analysis/core/DecimalDigitFilterFactory.java   |     5 +
 .../analysis/core/FlattenGraphFilterFactory.java   |     5 +
 .../analysis/core/KeywordTokenizerFactory.java     |     5 +
 .../analysis/core/LetterTokenizerFactory.java      |     5 +
 .../analysis/core/LowerCaseFilterFactory.java      |     5 +
 .../lucene/analysis/core/StopFilterFactory.java    |     5 +
 .../analysis/core/TypeTokenFilterFactory.java      |     5 +
 .../analysis/core/UpperCaseFilterFactory.java      |     5 +
 .../analysis/core/WhitespaceTokenizerFactory.java  |     5 +
 .../lucene/analysis/cz/CzechStemFilterFactory.java |     5 +
 .../analysis/de/GermanLightStemFilterFactory.java  |     5 +
 .../de/GermanMinimalStemFilterFactory.java         |     5 +
 .../de/GermanNormalizationFilterFactory.java       |     5 +
 .../analysis/de/GermanStemFilterFactory.java       |     5 +
 .../analysis/el/GreekLowerCaseFilterFactory.java   |     5 +
 .../lucene/analysis/el/GreekStemFilterFactory.java |     5 +
 .../en/EnglishMinimalStemFilterFactory.java        |     5 +
 .../en/EnglishPossessiveFilterFactory.java         |     5 +
 .../lucene/analysis/en/KStemFilterFactory.java     |     5 +
 .../analysis/en/PorterStemFilterFactory.java       |     5 +
 .../analysis/es/SpanishLightStemFilterFactory.java |     5 +
 .../es/SpanishMinimalStemFilterFactory.java        |     5 +
 .../analysis/fa/PersianCharFilterFactory.java      |     5 +
 .../fa/PersianNormalizationFilterFactory.java      |     5 +
 .../analysis/fi/FinnishLightStemFilterFactory.java |     5 +
 .../analysis/fr/FrenchLightStemFilterFactory.java  |     5 +
 .../fr/FrenchMinimalStemFilterFactory.java         |     5 +
 .../analysis/ga/IrishLowerCaseFilterFactory.java   |     5 +
 .../gl/GalicianMinimalStemFilterFactory.java       |     5 +
 .../analysis/gl/GalicianStemFilterFactory.java     |     5 +
 .../hi/HindiNormalizationFilterFactory.java        |     5 +
 .../lucene/analysis/hi/HindiStemFilterFactory.java |     5 +
 .../hu/HungarianLightStemFilterFactory.java        |     5 +
 .../hunspell/HunspellStemFilterFactory.java        |     5 +
 .../analysis/id/IndonesianStemFilterFactory.java   |     5 +
 .../in/IndicNormalizationFilterFactory.java        |     5 +
 .../analysis/it/ItalianLightStemFilterFactory.java |     5 +
 .../analysis/lv/LatvianStemFilterFactory.java      |     5 +
 .../analysis/minhash/MinHashFilterFactory.java     |     5 +
 .../miscellaneous/ASCIIFoldingFilterFactory.java   |     5 +
 .../miscellaneous/CapitalizationFilterFactory.java |     5 +
 .../miscellaneous/CodepointCountFilterFactory.java |     5 +
 .../ConcatenateGraphFilterFactory.java             |     9 +-
 .../ConditionalTokenFilterFactory.java             |     5 +
 .../miscellaneous/DateRecognizerFilterFactory.java |     5 +
 .../DelimitedTermFrequencyTokenFilterFactory.java  |     5 +
 .../miscellaneous/FingerprintFilterFactory.java    |     5 +
 .../FixBrokenOffsetsFilterFactory.java             |     6 +
 .../HyphenatedWordsFilterFactory.java              |     7 +-
 .../miscellaneous/KeepWordFilterFactory.java       |     5 +
 .../miscellaneous/KeywordMarkerFilterFactory.java  |     5 +
 .../miscellaneous/KeywordRepeatFilterFactory.java  |     5 +
 .../miscellaneous/LengthFilterFactory.java         |     5 +
 .../LimitTokenCountFilterFactory.java              |     5 +
 .../LimitTokenOffsetFilterFactory.java             |     5 +
 .../LimitTokenPositionFilterFactory.java           |     5 +
 .../miscellaneous/ProtectedTermFilterFactory.java  |     5 +
 .../RemoveDuplicatesTokenFilterFactory.java        |     5 +
 .../ScandinavianFoldingFilterFactory.java          |     5 +
 .../ScandinavianNormalizationFilterFactory.java    |     5 +
 .../StemmerOverrideFilterFactory.java              |     5 +
 .../analysis/miscellaneous/TrimFilterFactory.java  |     5 +
 .../miscellaneous/TruncateTokenFilterFactory.java  |     5 +
 .../miscellaneous/TypeAsSynonymFilterFactory.java  |     5 +
 .../miscellaneous/WordDelimiterFilterFactory.java  |    24 +-
 .../WordDelimiterGraphFilterFactory.java           |     5 +
 .../analysis/ngram/EdgeNGramFilterFactory.java     |     5 +
 .../analysis/ngram/EdgeNGramTokenizerFactory.java  |     5 +
 .../lucene/analysis/ngram/NGramFilterFactory.java  |     8 +-
 .../analysis/ngram/NGramTokenizerFactory.java      |     5 +
 .../no/NorwegianLightStemFilterFactory.java        |     5 +
 .../no/NorwegianMinimalStemFilterFactory.java      |     5 +
 .../path/PathHierarchyTokenizerFactory.java        |     7 +-
 .../pattern/PatternCaptureGroupFilterFactory.java  |     6 +
 .../pattern/PatternReplaceCharFilterFactory.java   |     5 +
 .../pattern/PatternReplaceFilterFactory.java       |     5 +
 .../analysis/pattern/PatternTokenizerFactory.java  |     5 +
 .../SimplePatternSplitTokenizerFactory.java        |     5 +
 .../pattern/SimplePatternTokenizerFactory.java     |     5 +
 .../DelimitedPayloadTokenFilterFactory.java        |     5 +
 .../payloads/NumericPayloadTokenFilterFactory.java |     5 +
 .../TokenOffsetPayloadTokenFilterFactory.java      |     5 +
 .../payloads/TypeAsPayloadTokenFilterFactory.java  |     5 +
 .../pt/PortugueseLightStemFilterFactory.java       |     5 +
 .../pt/PortugueseMinimalStemFilterFactory.java     |     5 +
 .../analysis/pt/PortugueseStemFilterFactory.java   |     5 +
 .../reverse/ReverseStringFilterFactory.java        |     5 +
 .../analysis/ru/RussianLightStemFilterFactory.java |     5 +
 .../shingle/FixedShingleFilterFactory.java         |     5 +
 .../analysis/shingle/ShingleFilterFactory.java     |     5 +
 .../snowball/SnowballPorterFilterFactory.java      |     5 +
 .../sr/SerbianNormalizationFilterFactory.java      |     7 +-
 .../analysis/standard/ClassicFilterFactory.java    |     5 +
 .../analysis/standard/ClassicTokenizerFactory.java |     5 +
 .../standard/StandardTokenizerFactory.java         |     5 +
 .../standard/UAX29URLEmailTokenizerFactory.java    |     5 +
 .../analysis/sv/SwedishLightStemFilterFactory.java |     5 +
 .../analysis/synonym/SynonymFilterFactory.java     |     5 +
 .../synonym/SynonymGraphFilterFactory.java         |     5 +
 .../lucene/analysis/th/ThaiTokenizerFactory.java   |     5 +
 .../analysis/tr/ApostropheFilterFactory.java       |     5 +
 .../analysis/tr/TurkishLowerCaseFilterFactory.java |     5 +
 .../analysis/util/AbstractAnalysisFactory.java     |    50 +-
 .../lucene/analysis/util/AnalysisSPILoader.java    |    37 +-
 .../lucene/analysis/util/CharFilterFactory.java    |     7 +-
 .../lucene/analysis/util/ElisionFilterFactory.java |     5 +
 .../lucene/analysis/util/TokenFilterFactory.java   |     7 +-
 .../lucene/analysis/util/TokenizerFactory.java     |     7 +-
 .../wikipedia/WikipediaTokenizerFactory.java       |     5 +
 .../lucene/analysis/snowball/french_stop.txt       |    20 +-
 .../lucene/analysis/core/TestBugInSomething.java   |     1 +
 .../apache/lucene/analysis/core/TestFactories.java |     4 +-
 .../lucene/analysis/core/TestRandomChains.java     |     7 +-
 .../lucene/analysis/custom/TestCustomAnalyzer.java |    13 +-
 .../lucene/analysis/minhash/MinHashFilterTest.java |    13 +-
 .../miscellaneous/TestConcatenateGraphFilter.java  |     3 +
 .../TestConcatenateGraphFilterFactory.java         |     3 +-
 .../miscellaneous/TestFixBrokenOffsetsFilter.java  |     1 +
 .../TestLimitTokenPositionFilter.java              |     1 +
 .../TestRemoveDuplicatesTokenFilter.java           |     4 +-
 .../miscellaneous/TestWordDelimiterFilter.java     |    26 +-
 .../analysis/ngram/EdgeNGramTokenizerTest.java     |     2 +-
 .../lucene/analysis/ngram/NGramTokenizerTest.java  |     2 +-
 .../lucene/analysis/ngram/TestNGramFilters.java    |    28 +
 .../analysis/synonym/TestSolrSynonymParser.java    |     1 +
 .../analysis/synonym/TestSynonymFilterFactory.java |     1 +
 .../analysis/synonym/TestSynonymMapFilter.java     |     1 +
 .../analysis/synonym/TestWordnetSynonymParser.java |     3 +-
 .../analysis/util/TestAbstractAnalysisFactory.java |     6 +-
 .../util/TestFilesystemResourceLoader.java         |     5 +-
 lucene/analysis/icu/build.gradle                   |     2 +
 .../analysis/icu/ICUFoldingFilterFactory.java      |     5 +
 .../icu/ICUNormalizer2CharFilterFactory.java       |     5 +
 .../analysis/icu/ICUNormalizer2FilterFactory.java  |     5 +
 .../lucene/analysis/icu/ICUTransformFilter.java    |     1 +
 .../analysis/icu/ICUTransformFilterFactory.java    |     5 +
 .../icu/segmentation/ICUTokenizerFactory.java      |     5 +
 lucene/analysis/kuromoji/build.gradle              |     2 +
 .../analysis/ja/JapaneseBaseFormFilterFactory.java |     5 +
 .../ja/JapaneseIterationMarkCharFilterFactory.java |     5 +
 .../ja/JapaneseKatakanaStemFilterFactory.java      |     5 +
 .../analysis/ja/JapaneseNumberFilterFactory.java   |     5 +
 .../ja/JapanesePartOfSpeechStopFilterFactory.java  |     5 +
 .../ja/JapaneseReadingFormFilterFactory.java       |     5 +
 .../analysis/ja/JapaneseTokenizerFactory.java      |     5 +
 .../lucene/analysis/ja/dict/ConnectionCosts.java   |    26 +-
 .../analysis/ja/dict/TokenInfoDictionary.java      |     4 +-
 .../analysis/ja/util/BinaryDictionaryWriter.java   |     4 +-
 .../analysis/ja/util/ConnectionCostsWriter.java    |    21 +-
 .../lucene/analysis/ja/util/DictionaryBuilder.java |     7 +-
 .../apache/lucene/analysis/ja/TestFactories.java   |     4 +-
 .../lucene/analysis/ja/TestJapaneseTokenizer.java  |    14 +-
 lucene/analysis/morfologik/build.gradle            |     2 +
 .../morfologik/MorfologikFilterFactory.java        |     5 +
 lucene/analysis/nori/build.gradle                  |     2 +
 .../analysis/ko/KoreanNumberFilterFactory.java     |     5 +
 .../ko/KoreanPartOfSpeechStopFilterFactory.java    |     5 +
 .../ko/KoreanReadingFormFilterFactory.java         |     5 +
 .../apache/lucene/analysis/ko/KoreanTokenizer.java |    55 +-
 .../lucene/analysis/ko/KoreanTokenizerFactory.java |     5 +
 .../lucene/analysis/ko/dict/BinaryDictionary.java  |    15 +-
 .../lucene/analysis/ko/dict/ConnectionCosts.java   |    16 +-
 .../analysis/ko/dict/TokenInfoDictionary.java      |     6 +-
 .../lucene/analysis/ko/dict/UnknownDictionary.java |     9 +
 .../analysis/ko/util/BinaryDictionaryWriter.java   |     4 +-
 .../analysis/ko/util/ConnectionCostsWriter.java    |    21 +-
 .../lucene/analysis/ko/TestKoreanTokenizer.java    |    26 +
 lucene/analysis/opennlp/build.gradle               |     2 +
 .../opennlp/OpenNLPChunkerFilterFactory.java       |     5 +
 .../opennlp/OpenNLPLemmatizerFilterFactory.java    |     5 +
 .../analysis/opennlp/OpenNLPPOSFilterFactory.java  |     5 +
 .../analysis/opennlp/OpenNLPTokenizerFactory.java  |     5 +
 lucene/analysis/phonetic/build.gradle              |     2 +
 .../phonetic/BeiderMorseFilterFactory.java         |     5 +
 .../DaitchMokotoffSoundexFilterFactory.java        |     5 +
 .../phonetic/DoubleMetaphoneFilterFactory.java     |     5 +
 .../analysis/phonetic/PhoneticFilterFactory.java   |     5 +
 lucene/analysis/smartcn/build.gradle               |     2 +
 .../cn/smart/HMMChineseTokenizerFactory.java       |     5 +
 lucene/analysis/stempel/build.gradle               |     2 +
 .../stempel/StempelPolishStemFilterFactory.java    |     5 +
 lucene/backward-codecs/build.gradle                |     2 +
 .../codecs/lucene50/Lucene50PostingsFormat.java    |     9 +-
 .../codecs/lucene60/Lucene60PointsFormat.java      |   110 +
 .../codecs/lucene60/Lucene60PointsReader.java      |   146 +
 .../org/apache/lucene/codecs/lucene60/package.html |    25 +
 .../codecs/lucene70/Lucene70SegmentInfoFormat.java |   281 +
 .../lucene/codecs/lucene70/package-info.java       |    22 +
 .../lucene/codecs/lucene84/Lucene84Codec.java      |   178 +
 .../org/apache/lucene/codecs/lucene84/package.html |    25 +
 .../services/org.apache.lucene.codecs.Codec        |     1 +
 .../codecs/lucene50/TestBlockPostingsFormat.java   |   205 -
 .../codecs/lucene60/Lucene60PointsWriter.java      |   267 +
 .../codecs/lucene60/Lucene60RWPointsFormat.java    |    35 +
 .../codecs/lucene60/TestLucene60PointsFormat.java  |   354 +
 .../lucene70/Lucene70RWSegmentInfoFormat.java      |   204 +
 .../lucene70/TestLucene70SegmentInfoFormat.java    |    42 +
 .../lucene/codecs/lucene84/Lucene84RWCodec.java    |    39 +
 .../lucene/index/TestBackwardsCompatibility.java   |    50 +-
 .../org/apache/lucene/index/index.8.5.0-cfs.zip    |   Bin 0 -> 15909 bytes
 .../org/apache/lucene/index/index.8.5.0-nocfs.zip  |   Bin 0 -> 15901 bytes
 .../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
 .../org/apache/lucene/index/index.8.5.2-cfs.zip    |   Bin 0 -> 15897 bytes
 .../org/apache/lucene/index/index.8.5.2-nocfs.zip  |   Bin 0 -> 15902 bytes
 .../org/apache/lucene/index/index.8.6.0-cfs.zip    |   Bin 0 -> 16442 bytes
 .../org/apache/lucene/index/index.8.6.0-nocfs.zip  |   Bin 0 -> 16428 bytes
 .../test/org/apache/lucene/index/sorted.8.5.0.zip  |   Bin 0 -> 166476 bytes
 .../test/org/apache/lucene/index/sorted.8.5.1.zip  |   Bin 0 -> 394412 bytes
 .../test/org/apache/lucene/index/sorted.8.5.2.zip  |   Bin 0 -> 80768 bytes
 .../test/org/apache/lucene/index/sorted.8.6.0.zip  |   Bin 0 -> 140450 bytes
 .../apache/lucene/index/unsupported.7.7.3-cfs.zip  |   Bin 0 -> 15646 bytes
 .../lucene/index/unsupported.7.7.3-nocfs.zip       |   Bin 0 -> 15643 bytes
 .../lucene/index/unsupported.sorted.7.7.3.zip      |   Bin 0 -> 86356 bytes
 lucene/benchmark/build.gradle                      |   123 +-
 lucene/benchmark/scripts/collation.bm2jira.pl      |    22 +-
 .../benchmark/byTask/tasks/CreateIndexTask.java    |     4 +-
 .../benchmark/byTask/TestPerfTasksLogic.java       |     2 +-
 lucene/build.gradle                                |     2 +
 lucene/build.xml                                   |    10 +-
 lucene/classification/build.gradle                 |     2 +
 .../document/DocumentClassificationTestBase.java   |     2 +-
 lucene/codecs/build.gradle                         |     2 +
 .../blockterms/VariableGapTermsIndexReader.java    |     2 +-
 .../blockterms/VariableGapTermsIndexWriter.java    |     2 +-
 .../blocktreeords/OrdsBlockTreeTermsWriter.java    |     2 +-
 .../codecs/blocktreeords/OrdsFieldReader.java      |     2 +-
 .../lucene/codecs/memory/FSTTermsReader.java       |     2 +-
 .../lucene/codecs/memory/FSTTermsWriter.java       |     2 +-
 .../simpletext/SimpleTextCompoundFormat.java       |    31 +-
 .../simpletext/SimpleTextSegmentInfoFormat.java    |   306 +-
 .../lucene/codecs/uniformsplit/FSTDictionary.java  |    36 +-
 .../lucene/codecs/uniformsplit/FieldMetadata.java  |    23 +-
 .../codecs/uniformsplit/IndexDictionary.java       |     3 +-
 .../uniformsplit/UniformSplitPostingsFormat.java   |    36 +-
 .../codecs/uniformsplit/UniformSplitTerms.java     |     9 -
 .../uniformsplit/UniformSplitTermsReader.java      |    81 +-
 .../uniformsplit/UniformSplitTermsWriter.java      |    17 +-
 .../sharedterms/STUniformSplitPostingsFormat.java  |    23 +-
 .../sharedterms/STUniformSplitTerms.java           |     3 +-
 .../sharedterms/STUniformSplitTermsReader.java     |    29 +-
 .../sharedterms/UnionFieldMetadataBuilder.java     |    14 +-
 .../simpletext/TestSimpleTextCompoundFormat.java   |     5 +
 .../codecs/uniformsplit/TestFSTDictionary.java     |     3 +-
 .../TestUniformSplitPostingFormat.java             |    27 +-
 .../sharedterms/STBlockReaderTest.java             |   360 -
 .../sharedterms/TestSTBlockReader.java             |   360 +
 .../TestSTUniformSplitPostingFormat.java           |    12 +-
 lucene/common-build.xml                            |    11 +-
 lucene/core/build.gradle                           |     3 +-
 .../src/java/org/apache/lucene/codecs/Codec.java   |     2 +-
 .../java/org/apache/lucene/codecs/CodecUtil.java   |    41 +-
 .../apache/lucene/codecs/CompoundDirectory.java    |    83 +
 .../org/apache/lucene/codecs/CompoundFormat.java   |     4 +-
 .../apache/lucene/codecs/DocValuesConsumer.java    |     2 +-
 .../lucene/codecs/MultiLevelSkipListReader.java    |     8 +-
 .../codecs/blocktree/BlockTreeTermsReader.java     |   227 +-
 .../codecs/blocktree/BlockTreeTermsWriter.java     |   134 +-
 .../lucene/codecs/blocktree/FieldReader.java       |    66 +-
 .../codecs/lucene50/Lucene50CompoundFormat.java    |     3 +-
 .../codecs/lucene50/Lucene50CompoundReader.java    |    49 +-
 .../codecs/lucene50/Lucene50FieldInfosFormat.java  |     1 -
 .../codecs/lucene60/Lucene60FieldInfosFormat.java  |     1 -
 .../codecs/lucene60/Lucene60PointsFormat.java      |   110 -
 .../codecs/lucene60/Lucene60PointsReader.java      |   166 -
 .../codecs/lucene60/Lucene60PointsWriter.java      |   263 -
 .../lucene/codecs/lucene60/package-info.java       |     2 +-
 .../codecs/lucene70/Lucene70SegmentInfoFormat.java |   439 -
 .../lucene/codecs/lucene70/package-info.java       |    22 -
 .../lucene/codecs/lucene84/Lucene84Codec.java      |   178 -
 .../codecs/lucene84/Lucene84PostingsFormat.java    |     9 +-
 .../lucene/codecs/lucene84/package-info.java       |   396 +-
 .../lucene/codecs/lucene86/Lucene86Codec.java      |   178 +
 .../codecs/lucene86/Lucene86PointsFormat.java      |    80 +
 .../codecs/lucene86/Lucene86PointsReader.java      |   152 +
 .../codecs/lucene86/Lucene86PointsWriter.java      |   265 +
 .../codecs/lucene86/Lucene86SegmentInfoFormat.java |   217 +
 .../lucene/codecs/lucene86/package-info.java       |   416 +
 .../codecs/perfield/PerFieldDocValuesFormat.java   |     3 +
 .../org/apache/lucene/document/LatLonShape.java    |    37 +-
 .../document/LatLonShapeBoundingBoxQuery.java      |   477 +-
 .../apache/lucene/document/LatLonShapeQuery.java   |   101 +-
 .../org/apache/lucene/document/ShapeField.java     |    34 +
 .../org/apache/lucene/document/ShapeQuery.java     |    15 +-
 .../lucene/document/XYPointDistanceComparator.java |    12 +-
 .../org/apache/lucene/document/XYShapeQuery.java   |   109 +-
 .../src/java/org/apache/lucene/geo/Circle2D.java   |   228 +-
 .../java/org/apache/lucene/geo/Component2D.java    |    89 +-
 .../java/org/apache/lucene/geo/ComponentTree.java  |   101 +-
 .../src/java/org/apache/lucene/geo/Line2D.java     |    84 +-
 .../src/java/org/apache/lucene/geo/Point2D.java    |    45 +-
 .../src/java/org/apache/lucene/geo/Polygon2D.java  |   180 +-
 .../src/java/org/apache/lucene/geo/Rectangle.java  |     7 +-
 .../java/org/apache/lucene/geo/Rectangle2D.java    |   492 +-
 .../java/org/apache/lucene/geo/Tessellator.java    |    30 +-
 .../java/org/apache/lucene/geo/XYRectangle.java    |    22 +-
 .../java/org/apache/lucene/geo/XYRectangle2D.java  |   240 -
 .../apache/lucene/index/BinaryDocValuesWriter.java |    29 +-
 .../org/apache/lucene/index/BufferedUpdates.java   |    35 +-
 .../apache/lucene/index/BufferedUpdatesStream.java |     5 +-
 .../org/apache/lucene/index/ByteSliceWriter.java   |     1 -
 .../java/org/apache/lucene/index/CheckIndex.java   |     7 +-
 .../lucene/index/ConcurrentMergeScheduler.java     |   103 +-
 .../apache/lucene/index/DefaultIndexingChain.java  |   284 +-
 .../org/apache/lucene/index/DirectoryReader.java   |    29 +-
 .../java/org/apache/lucene/index/DocConsumer.java  |     2 +-
 .../java/org/apache/lucene/index/DocValues.java    |     4 +-
 .../apache/lucene/index/DocValuesLeafReader.java   |    89 +
 .../org/apache/lucene/index/DocValuesWriter.java   |     8 +-
 .../org/apache/lucene/index/DocumentsWriter.java   |   242 +-
 .../lucene/index/DocumentsWriterDeleteQueue.java   |    87 +-
 .../lucene/index/DocumentsWriterFlushControl.java  |   473 +-
 .../lucene/index/DocumentsWriterPerThread.java     |   320 +-
 .../lucene/index/DocumentsWriterPerThreadPool.java |   290 +-
 .../lucene/index/DocumentsWriterStallControl.java  |     5 +-
 .../java/org/apache/lucene/index/FieldInfo.java    |    16 +-
 .../org/apache/lucene/index/FilterMergePolicy.java |     5 +
 .../lucene/index/FlushByRamOrCountsPolicy.java     |    26 +-
 .../java/org/apache/lucene/index/FlushPolicy.java  |    38 +-
 .../org/apache/lucene/index/FreqProxFields.java    |    19 +-
 .../apache/lucene/index/FreqProxTermsWriter.java   |     6 +-
 .../lucene/index/FreqProxTermsWriterPerField.java  |    57 +-
 .../apache/lucene/index/FrozenBufferedUpdates.java |   297 +-
 .../org/apache/lucene/index/IndexFileDeleter.java  |     4 +-
 .../java/org/apache/lucene/index/IndexSorter.java  |   448 +
 .../java/org/apache/lucene/index/IndexWriter.java  |  1059 +-
 .../org/apache/lucene/index/IndexWriterConfig.java |    67 +-
 .../apache/lucene/index/LiveIndexWriterConfig.java |    41 +-
 .../java/org/apache/lucene/index/MergePolicy.java  |   184 +-
 .../org/apache/lucene/index/MergeScheduler.java    |    42 +-
 .../java/org/apache/lucene/index/MergeTrigger.java |     7 +-
 .../org/apache/lucene/index/MultiDocValues.java    |     2 +-
 .../java/org/apache/lucene/index/MultiSorter.java  |   144 +-
 .../org/apache/lucene/index/NoMergePolicy.java     |     3 +
 .../org/apache/lucene/index/NoMergeScheduler.java  |     2 +-
 .../lucene/index/NumericDocValuesWriter.java       |    33 +-
 .../lucene/index/OneMergeWrappingMergePolicy.java  |     5 +
 .../apache/lucene/index/ParallelPostingsArray.java |    10 +-
 .../java/org/apache/lucene/index/ReaderPool.java   |     8 +-
 .../org/apache/lucene/index/ReadersAndUpdates.java |    76 +-
 .../org/apache/lucene/index/SegmentCommitInfo.java |    40 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |     8 +-
 .../org/apache/lucene/index/SegmentDocValues.java  |     3 +-
 .../java/org/apache/lucene/index/SegmentInfos.java |   240 +-
 .../org/apache/lucene/index/SegmentMerger.java     |     5 +-
 .../org/apache/lucene/index/SegmentReadState.java  |    26 +-
 .../org/apache/lucene/index/SegmentReader.java     |    13 +-
 .../apache/lucene/index/SerialMergeScheduler.java  |     6 +-
 .../org/apache/lucene/index/SortFieldProvider.java |   118 +
 .../apache/lucene/index/SortedDocValuesWriter.java |    50 +-
 .../lucene/index/SortedNumericDocValuesWriter.java |    33 +-
 .../lucene/index/SortedSetDocValuesWriter.java     |    45 +-
 .../src/java/org/apache/lucene/index/Sorter.java   |   238 +-
 .../lucene/index/StandardDirectoryReader.java      |    25 +-
 .../apache/lucene/index/TermVectorsConsumer.java   |    10 +-
 .../lucene/index/TermVectorsConsumerPerField.java  |    58 +-
 .../java/org/apache/lucene/index/TermsHash.java    |    12 +-
 .../org/apache/lucene/index/TermsHashPerField.java |   243 +-
 .../org/apache/lucene/search/BooleanQuery.java     |    12 +-
 .../apache/lucene/search/ConstantScoreQuery.java   |     2 +-
 .../search/ControlledRealTimeReopenThread.java     |    18 +-
 .../lucene/search/DisjunctionMatchesIterator.java  |     3 +-
 .../lucene/search/DocValuesRewriteMethod.java      |     2 +-
 .../apache/lucene/search/DoubleValuesSource.java   |    36 +-
 .../org/apache/lucene/search/FieldComparator.java  |    16 +-
 .../apache/lucene/search/FieldValueHitQueue.java   |    29 +-
 .../lucene/search/FilteringFieldComparator.java    |    93 +
 .../search/FilteringLeafFieldComparator.java       |    39 +
 .../lucene/search/FilteringNumericComparator.java  |    52 +
 .../search/FilteringNumericLeafComparator.java     |   336 +
 .../lucene/search/FuzzyAutomatonBuilder.java       |    88 +
 .../java/org/apache/lucene/search/FuzzyQuery.java  |    64 +-
 .../org/apache/lucene/search/FuzzyTermsEnum.java   |   151 +-
 .../org/apache/lucene/search/IndexSearcher.java    |    76 +-
 .../org/apache/lucene/search/LeafCollector.java    |    12 +
 .../apache/lucene/search/MatchAllDocsQuery.java    |     2 +-
 .../org/apache/lucene/search/MultiCollector.java   |   111 +-
 .../org/apache/lucene/search/MultiTermQuery.java   |     6 +-
 .../search/MultiTermQueryConstantScoreWrapper.java |     3 -
 .../org/apache/lucene/search/QueryVisitor.java     |     5 +-
 .../lucene/search/QueueSizeBasedExecutor.java      |    60 +
 .../java/org/apache/lucene/search/RegexpQuery.java |    38 +-
 .../java/org/apache/lucene/search/ScoreMode.java   |    54 +-
 .../org/apache/lucene/search/SliceExecutor.java    |    80 +
 .../java/org/apache/lucene/search/SortField.java   |   139 +
 .../lucene/search/SortedNumericSortField.java      |   106 +
 .../apache/lucene/search/SortedSetSortField.java   |    69 +-
 .../org/apache/lucene/search/SynonymQuery.java     |     2 +-
 .../org/apache/lucene/search/TermInSetQuery.java   |    22 +-
 .../java/org/apache/lucene/search/TermQuery.java   |     3 -
 .../apache/lucene/search/TopFieldCollector.java    |    73 +-
 .../apache/lucene/search/TopScoreDocCollector.java |     4 +-
 .../search/UsageTrackingQueryCachingPolicy.java    |     5 +
 .../src/java/org/apache/lucene/search/Weight.java  |    18 +-
 .../org/apache/lucene/store/BufferedChecksum.java  |     4 +-
 .../apache/lucene/store/BufferedIndexInput.java    |   226 +-
 .../lucene/store/ByteBuffersIndexOutput.java       |    18 +-
 .../java/org/apache/lucene/store/FSDirectory.java  |    17 +-
 .../org/apache/lucene/store/LockStressTest.java    |     2 +-
 .../org/apache/lucene/store/NIOFSDirectory.java    |    47 +-
 .../org/apache/lucene/store/SimpleFSDirectory.java |   200 -
 .../org/apache/lucene/util/AttributeSource.java    |     2 +
 .../src/java/org/apache/lucene/util/BitUtil.java   |   128 +-
 .../org/apache/lucene/util/ClassLoaderUtils.java   |    48 +
 .../src/java/org/apache/lucene/util/IOUtils.java   |    10 +
 .../java/org/apache/lucene/util/IntBlockPool.java  |     2 +-
 .../org/apache/lucene/util/NamedSPILoader.java     |    29 +-
 .../org/apache/lucene/util/SPIClassIterator.java   |   168 -
 .../src/java/org/apache/lucene/util/Version.java   |    21 +
 .../lucene/util/automaton/ByteRunAutomaton.java    |     2 +-
 .../util/automaton/CharacterRunAutomaton.java      |     4 +-
 .../lucene/util/automaton/CompiledAutomaton.java   |     4 +-
 .../org/apache/lucene/util/automaton/RegExp.java   |   486 +-
 .../apache/lucene/util/automaton/RunAutomaton.java |    17 +-
 .../java/org/apache/lucene/util/bkd/BKDReader.java |   252 +-
 .../java/org/apache/lucene/util/bkd/BKDWriter.java |   514 +-
 .../org/apache/lucene/util/fst/BitTableUtil.java   |   172 +
 .../src/java/org/apache/lucene/util/fst/FST.java   |   400 +-
 .../java/org/apache/lucene/util/fst/FSTEnum.java   |    17 +-
 .../java/org/apache/lucene/util/fst/NodeHash.java  |     2 +-
 .../apache/lucene/util/fst/PositiveIntOutputs.java |     1 +
 .../src/java/org/apache/lucene/util/fst/Util.java  |    19 +-
 .../org/apache/lucene/util/fst/package-info.java   |    18 +-
 .../lucene/util/packed/Packed64SingleBlock.java    |     3 +
 lucene/core/src/java/overview.html                 |     2 +-
 .../services/org.apache.lucene.codecs.Codec        |     2 +-
 .../org.apache.lucene.index.SortFieldProvider      |    20 +
 .../apache/lucene/TestMergeSchedulerExternal.java  |    20 +-
 .../apache/lucene/analysis/TestCharArraySet.java   |     8 +-
 .../org/apache/lucene/codecs/TestCodecUtil.java    |    57 +-
 ...tLucene50StoredFieldsFormatHighCompression.java |    11 +-
 .../codecs/lucene60/TestLucene60PointsFormat.java  |   400 -
 .../lucene70/TestLucene70SegmentInfoFormat.java    |    35 -
 .../lucene/codecs/lucene80/TestIndexedDISI.java    |    46 +-
 .../codecs/lucene80/TestLucene80NormsFormat.java   |     4 +-
 .../lucene84/TestLucene84PostingsFormat.java       |   210 +-
 .../codecs/lucene86/TestLucene86PointsFormat.java  |   393 +
 .../lucene86/TestLucene86SegmentInfoFormat.java    |    37 +
 .../perfield/TestPerFieldDocValuesFormat.java      |    40 +-
 .../lucene/document/BaseLatLonShapeTestCase.java   |    45 +
 .../lucene/document/BaseShapeEncodingTestCase.java |   119 +-
 .../apache/lucene/document/BaseShapeTestCase.java  |    95 +
 .../lucene/document/BaseXYShapeTestCase.java       |     4 +-
 .../org/apache/lucene/document/TestDocument.java   |    12 +-
 .../document/TestLatLonLineShapeQueries.java       |    62 +-
 .../TestLatLonMultiPolygonShapeQueries.java        |    21 +-
 .../document/TestLatLonPointShapeQueries.java      |    14 +-
 .../document/TestLatLonPolygonShapeQueries.java    |    75 +-
 .../apache/lucene/document/TestLatLonShape.java    |   133 +-
 .../lucene/document/TestXYLineShapeQueries.java    |    30 +-
 .../lucene/document/TestXYPointShapeQueries.java   |    16 +-
 .../lucene/document/TestXYPolygonShapeQueries.java |    42 +-
 .../test/org/apache/lucene/geo/TestCircle2D.java   |    35 +-
 .../src/test/org/apache/lucene/geo/TestLine2D.java |    22 +-
 .../test/org/apache/lucene/geo/TestPoint2D.java    |    23 +-
 .../test/org/apache/lucene/geo/TestPolygon2D.java  |    38 +-
 .../org/apache/lucene/geo/TestRectangle2D.java     |   220 +-
 .../org/apache/lucene/geo/TestTessellator.java     |    34 +
 .../test/org/apache/lucene/geo/TestXYPoint.java    |     2 +-
 .../org/apache/lucene/geo/TestXYRectangle.java     |    53 +
 .../org/apache/lucene/geo/TestXYRectangle2D.java   |    91 -
 .../org/apache/lucene/index/TestAddIndexes.java    |     2 +-
 .../lucene/index/TestAllFilesDetectBitFlips.java   |   141 +
 .../lucene/index/TestAllFilesDetectTruncation.java |     4 +-
 .../apache/lucene/index/TestBufferedUpdates.java   |    57 +
 .../test/org/apache/lucene/index/TestCodecs.java   |     4 +-
 .../lucene/index/TestConcurrentMergeScheduler.java |   120 +-
 .../lucene/index/TestDemoParallelLeafReader.java   |     7 +-
 .../src/test/org/apache/lucene/index/TestDoc.java  |     8 +-
 .../apache/lucene/index/TestDocumentWriter.java    |     9 +-
 .../org/apache/lucene/index/TestFieldsReader.java  |     6 +-
 .../lucene/index/TestFlushByRamOrCountsPolicy.java |    90 +-
 .../apache/lucene/index/TestForTooMuchCloning.java |     5 +-
 .../apache/lucene/index/TestForceMergeForever.java |     4 +-
 .../apache/lucene/index/TestIndexFileDeleter.java  |     4 +-
 .../org/apache/lucene/index/TestIndexSorting.java  |     5 +-
 .../org/apache/lucene/index/TestIndexWriter.java   |   654 +-
 .../apache/lucene/index/TestIndexWriterConfig.java |     1 -
 .../apache/lucene/index/TestIndexWriterDelete.java |    10 +-
 .../lucene/index/TestIndexWriterExceptions.java    |     6 +-
 .../lucene/index/TestIndexWriterExceptions2.java   |     6 +-
 .../lucene/index/TestIndexWriterMaxDocs.java       |     2 +-
 .../lucene/index/TestIndexWriterMergePolicy.java   |   242 +-
 .../lucene/index/TestIndexWriterMerging.java       |     6 +-
 .../lucene/index/TestIndexWriterOnDiskFull.java    |     6 +-
 .../apache/lucene/index/TestIndexWriterReader.java |    15 +-
 .../index/TestIndexWriterThreadsToSegments.java    |     7 +-
 .../lucene/index/TestIndexWriterWithThreads.java   |     8 +-
 .../org/apache/lucene/index/TestMergePolicy.java   |   158 +
 .../lucene/index/TestNRTReaderWithThreads.java     |     4 +-
 .../apache/lucene/index/TestNoMergeScheduler.java  |     2 +-
 .../lucene/index/TestNumericDocValuesUpdates.java  |   155 +
 .../index/TestOneMergeWrappingMergePolicy.java     |     2 +-
 .../apache/lucene/index/TestPendingDeletes.java    |     6 +-
 .../lucene/index/TestPendingSoftDeletes.java       |     2 +-
 .../apache/lucene/index/TestPerSegmentDeletes.java |    10 +-
 .../org/apache/lucene/index/TestPointValues.java   |     4 +-
 .../org/apache/lucene/index/TestReaderPool.java    |    12 +-
 .../org/apache/lucene/index/TestSegmentInfos.java  |   104 +-
 .../org/apache/lucene/index/TestSegmentMerger.java |    12 +-
 .../org/apache/lucene/index/TestSegmentReader.java |     3 +-
 .../apache/lucene/index/TestSegmentTermDocs.java   |     7 +-
 .../index/TestSoftDeletesRetentionMergePolicy.java |    14 +-
 .../apache/lucene/index/TestTermsHashPerField.java |   209 +
 .../apache/lucene/index/TestTieredMergePolicy.java |     6 +-
 .../index/TestTragicIndexWriterDeadlock.java       |     8 +-
 .../apache/lucene/search/MultiCollectorTest.java   |   172 +
 .../apache/lucene/search/TermInSetQueryTest.java   |    42 +
 .../apache/lucene/search/TestAutomatonQuery.java   |     3 +-
 .../org/apache/lucene/search/TestBoolean2.java     |     8 +-
 .../apache/lucene/search/TestBooleanRewrites.java  |    18 +-
 .../search/TestControlledRealTimeReopenThread.java |     8 +-
 .../lucene/search/TestDoubleValuesSource.java      |    12 +-
 .../search/TestFieldSortOptimizationSkipping.java  |   294 +
 .../org/apache/lucene/search/TestFuzzyQuery.java   |   130 +-
 .../apache/lucene/search/TestIndexSearcher.java    |    94 +-
 .../apache/lucene/search/TestLRUQueryCache.java    |    17 +-
 .../apache/lucene/search/TestMatchesIterator.java  |    93 +-
 .../lucene/search/TestMultiTermConstantScore.java  |     3 +-
 .../org/apache/lucene/search/TestPointQueries.java |     8 +-
 .../org/apache/lucene/search/TestRegexpQuery.java  |    48 +-
 .../lucene/search/TestSameScoresWithThreads.java   |     1 +
 .../org/apache/lucene/search/TestSearchAfter.java  |     2 +-
 .../apache/lucene/search/TestSearcherManager.java  |     5 +-
 .../org/apache/lucene/search/TestTermQuery.java    |     7 +-
 .../apache/lucene/search/TestTopDocsCollector.java |    59 +-
 .../lucene/search/TestTopFieldCollector.java       |    58 +-
 .../TestUsageTrackingFilterCachingPolicy.java      |     9 +
 .../lucene/store/TestBufferedIndexInput.java       |   114 +-
 .../lucene/store/TestByteBuffersDataInput.java     |     2 +-
 .../lucene/store/TestByteBuffersDataOutput.java    |     8 +-
 .../org/apache/lucene/store/TestDirectory.java     |     5 +-
 .../lucene/store/TestFileSwitchDirectory.java      |     6 +-
 .../apache/lucene/store/TestNIOFSDirectory.java    |    35 +
 .../apache/lucene/store/TestSimpleFSDirectory.java |    85 -
 .../test/org/apache/lucene/util/TestBitUtil.java   |    87 -
 .../test/org/apache/lucene/util/TestCharsRef.java  |     2 +
 .../apache/lucene/util/TestClassLoaderUtils.java   |    38 +
 .../org/apache/lucene/util/TestOfflineSorter.java  |    26 +-
 .../org/apache/lucene/util/TestPagedBytes.java     |    14 +-
 .../apache/lucene/util/TestSPIClassIterator.java   |    38 -
 .../test/org/apache/lucene/util/TestVersion.java   |     1 +
 .../util/automaton/TestDeterminizeLexicon.java     |    11 +-
 .../apache/lucene/util/automaton/TestRegExp.java   |   184 +
 .../apache/lucene/util/bkd/Test2BBKDPoints.java    |    12 +-
 .../test/org/apache/lucene/util/bkd/TestBKD.java   |    92 +-
 .../test/org/apache/lucene/util/fst/Test2BFST.java |    16 +-
 .../apache/lucene/util/fst/TestBitTableUtil.java   |   138 +
 .../lucene/util/fst/TestFSTDirectAddressing.java   |    87 +-
 .../test/org/apache/lucene/util/fst/TestFSTs.java  |    26 +-
 .../apache/lucene/util/packed/TestPackedInts.java  |     4 +-
 lucene/default-nested-ivy-settings.xml             |     2 +-
 lucene/demo/build.gradle                           |     2 +
 .../lucene/demo/facet/DistanceFacetsExample.java   |     5 +-
 .../facet/ExpressionAggregationFacetsExample.java  |     6 +-
 lucene/expressions/build.gradle                    |     2 +
 .../expressions/CachingExpressionValueSource.java  |    75 +
 .../expressions/ExpressionFunctionValues.java      |    14 +-
 .../lucene/expressions/ExpressionValueSource.java  |    12 +-
 .../apache/lucene/expressions/SimpleBindings.java  |    97 +-
 .../lucene/expressions/TestDemoExpressions.java    |    37 +-
 .../lucene/expressions/TestExpressionRescorer.java |     6 +-
 .../expressions/TestExpressionSortField.java       |    21 +-
 .../lucene/expressions/TestExpressionSorts.java    |    20 +-
 .../expressions/TestExpressionValidation.java      |    14 +-
 .../expressions/TestExpressionValueSource.java     |   104 +-
 lucene/facet/build.gradle                          |     1 +
 .../org/apache/lucene/facet/DrillSideways.java     |     3 +-
 .../java/org/apache/lucene/facet/FacetsConfig.java |    11 +-
 .../facet/taxonomy/DocValuesOrdinalsReader.java    |    15 +-
 .../lucene/facet/taxonomy/TaxonomyReader.java      |     2 +-
 .../taxonomy/writercache/TestCharBlockArray.java   |     7 +-
 lucene/grouping/build.gradle                       |     2 +
 .../search/grouping/BlockGroupingCollector.java    |     4 +
 .../apache/lucene/search/grouping/DoubleRange.java |    59 +
 .../lucene/search/grouping/DoubleRangeFactory.java |    67 +
 .../search/grouping/DoubleRangeGroupSelector.java  |   100 +
 .../grouping/FirstPassGroupingCollector.java       |     1 +
 .../lucene/search/grouping/GroupSelector.java      |    10 +-
 .../lucene/search/grouping/GroupingSearch.java     |    10 +-
 .../apache/lucene/search/grouping/LongRange.java   |    58 +
 .../lucene/search/grouping/LongRangeFactory.java   |    67 +
 .../search/grouping/LongRangeGroupSelector.java    |   101 +
 .../grouping/SecondPassGroupingCollector.java      |     1 +
 .../lucene/search/grouping/TermGroupSelector.java  |     4 +
 .../search/grouping/ValueSourceGroupSelector.java  |    10 +-
 .../lucene/search/grouping/package-info.java       |    23 +-
 .../search/grouping/AbstractGroupingTestCase.java  |    45 +
 .../search/grouping/BaseGroupSelectorTestCase.java |   365 +
 .../lucene/search/grouping/BlockGroupingTest.java  |   225 +
 .../grouping/DoubleRangeGroupSelectorTest.java     |    59 +
 .../grouping/LongRangeGroupSelectorTest.java       |    59 +
 .../search/grouping/TermGroupSelectorTest.java     |    60 +
 .../search/grouping/TestDoubleRangeFactory.java    |    39 +
 .../lucene/search/grouping/TestGrouping.java       |     2 +
 .../search/grouping/TestLongRangeFactory.java      |    39 +
 .../grouping/ValueSourceGroupSelectorTest.java     |    51 +
 lucene/highlighter/build.gradle                    |     2 +
 .../search/uhighlight/MultiTermHighlighting.java   |     5 +-
 .../search/uhighlight/UnifiedHighlighter.java      |     5 +-
 .../lucene/search/highlight/HighlighterTest.java   |    27 +-
 .../lucene/search/highlight/TokenSourcesTest.java  |     2 +
 .../highlight/custom/HighlightCustomQueryTest.java |    23 +-
 .../uhighlight/TestUnifiedHighlighterMTQ.java      |    11 +-
 .../uhighlight/TestUnifiedHighlighterTermVec.java  |     1 +
 lucene/ivy-versions.properties                     |    36 +-
 lucene/join/build.gradle                           |     2 +
 .../search/join/ToParentBlockJoinSortField.java    |    12 +-
 .../lucene/search/join/TestBlockJoinSelector.java  |     9 +-
 lucene/licenses/hamcrest-2.2.jar.sha1              |     1 +
 .../licenses/hamcrest-LICENSE-BSD.txt              |     0
 .../licenses/hamcrest-NOTICE.txt                   |     0
 lucene/licenses/hamcrest-core-1.3.jar.sha1         |     1 -
 lucene/licenses/hppc-0.8.1.jar.sha1                |     1 -
 lucene/licenses/hppc-0.8.2.jar.sha1                |     1 +
 .../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 +
 lucene/licenses/log4j-api-2.11.2.jar.sha1          |     1 -
 lucene/licenses/log4j-api-2.13.2.jar.sha1          |     1 +
 lucene/licenses/log4j-core-2.11.2.jar.sha1         |     1 -
 lucene/licenses/log4j-core-2.13.2.jar.sha1         |     1 +
 .../morfologik-ukrainian-search-3.9.0.jar.sha1     |     1 -
 .../morfologik-ukrainian-search-4.9.1.jar.sha1     |     1 +
 lucene/luke/build.gradle                           |   134 +-
 lucene/luke/src/distribution/README.txt            |     6 +
 .../apache/lucene/luke/app/AbstractHandler.java    |     4 +-
 .../org/apache/lucene/luke/app/IndexHandler.java   |     2 +-
 .../dialog/documents/AddDocumentDialogFactory.java |     6 +-
 .../dialog/menubar/CheckIndexDialogFactory.java    |     2 +-
 .../dialog/menubar/ExportTermsDialogFactory.java   |     4 +-
 .../dialog/menubar/OpenIndexDialogFactory.java     |     2 +-
 .../luke/app/desktop/util/ExceptionHandler.java    |     4 +-
 .../luke/models/documents/DocumentsImpl.java       |     4 +-
 .../apache/lucene/luke/models/util/IndexUtils.java |    22 +-
 .../util/twentynewsgroups/MessageFilesParser.java  |     2 +-
 .../luke/util/reflection/SubtypeCollector.java     |     2 +-
 .../luke/models/overview/OverviewImplTest.java     |     2 +-
 lucene/memory/build.gradle                         |     2 +
 lucene/misc/build.gradle                           |     2 +
 .../org/apache/lucene/index/IndexSplitter.java     |     2 +-
 .../java/org/apache/lucene/store/RAFDirectory.java |    20 +-
 .../org/apache/lucene/store/WindowsDirectory.java  |     5 +-
 .../lucene/util/fst/UpToTwoPositiveIntOutputs.java |     3 +-
 .../similarity/TestLegacyBM25Similarity.java       |     1 +
 .../store/TestHardLinkCopyDirectoryWrapper.java    |     4 +-
 lucene/monitor/build.gradle                        |     2 +
 .../org/apache/lucene/monitor/DocumentBatch.java   |    12 +-
 .../org/apache/lucene/monitor/MatchingQueries.java |     2 +-
 .../lucene/monitor/MultiMatchingQueries.java       |     2 +-
 .../lucene/monitor/TermFilteredPresearcher.java    |     7 +-
 .../lucene/monitor/TestConcurrentQueryLoader.java  |     6 +-
 .../apache/lucene/monitor/TestDocumentBatch.java   |    58 +
 .../org/apache/lucene/monitor/TestMonitor.java     |     2 +
 .../apache/lucene/monitor/TestTermPresearcher.java |     2 +
 lucene/queries/build.gradle                        |     2 +
 .../lucene/queries/function/FunctionQuery.java     |     2 +-
 .../queries/function/FunctionRangeQuery.java       |     3 +-
 .../queries/function/FunctionScoreQuery.java       |     8 +-
 .../lucene/queries/function/FunctionValues.java    |    14 +
 .../lucene/queries/function/ValueSource.java       |    28 +-
 .../lucene/queries/function/ValueSourceScorer.java |    18 +-
 .../function/docvalues/DocTermsIndexDocValues.java |    26 +-
 .../function/valuesource/BytesRefFieldSource.java  |     2 +-
 .../valuesource/ComparisonBoolFunction.java        |     4 +-
 .../function/valuesource/ConstValueSource.java     |     2 +-
 .../queries/function/valuesource/DefFunction.java  |     2 +-
 .../function/valuesource/DocFreqValueSource.java   |   181 +-
 .../valuesource/DoubleConstValueSource.java        |     2 +-
 .../function/valuesource/DoubleFieldSource.java    |     4 +-
 .../function/valuesource/DualFloatFunction.java    |     4 +-
 .../function/valuesource/EnumFieldSource.java      |     2 +-
 .../function/valuesource/FloatFieldSource.java     |     4 +-
 .../function/valuesource/IDFValueSource.java       |     4 +-
 .../queries/function/valuesource/IfFunction.java   |     4 +-
 .../function/valuesource/IntFieldSource.java       |     4 +-
 .../valuesource/JoinDocFreqValueSource.java        |     2 +-
 .../function/valuesource/LinearFloatFunction.java  |     4 +-
 .../function/valuesource/LiteralValueSource.java   |     2 +-
 .../function/valuesource/LongFieldSource.java      |     4 +-
 .../function/valuesource/MaxDocValueSource.java    |     8 +-
 .../function/valuesource/MultiBoolFunction.java    |     4 +-
 .../function/valuesource/MultiFloatFunction.java   |     4 +-
 .../function/valuesource/MultiFunction.java        |     4 +-
 .../valuesource/MultiValuedDoubleFieldSource.java  |     2 +-
 .../valuesource/MultiValuedFloatFieldSource.java   |     2 +-
 .../valuesource/MultiValuedIntFieldSource.java     |     2 +-
 .../valuesource/MultiValuedLongFieldSource.java    |     2 +-
 .../function/valuesource/NormValueSource.java      |     4 +-
 .../function/valuesource/NumDocsValueSource.java   |     4 +-
 .../function/valuesource/QueryValueSource.java     |   129 +-
 .../valuesource/RangeMapFloatFunction.java         |     4 +-
 .../valuesource/ReciprocalFloatFunction.java       |     4 +-
 .../function/valuesource/ScaleFloatFunction.java   |     6 +-
 .../function/valuesource/SimpleBoolFunction.java   |     4 +-
 .../function/valuesource/SimpleFloatFunction.java  |     2 +-
 .../function/valuesource/SingleFunction.java       |     2 +-
 .../function/valuesource/SortedSetFieldSource.java |     4 +-
 .../valuesource/SumTotalTermFreqValueSource.java   |     4 +-
 .../function/valuesource/TFValueSource.java        |     2 +-
 .../function/valuesource/TermFreqValueSource.java  |     2 +-
 .../valuesource/TotalTermFreqValueSource.java      |     4 +-
 .../function/valuesource/VectorValueSource.java    |     4 +-
 .../lucene/queries/intervals/IntervalMatches.java  |     1 +
 .../queries/intervals/OrderedIntervalsSource.java  |     4 +-
 .../queries/function/TestFunctionRangeQuery.java   |    15 +
 .../queries/function/TestFunctionScoreQuery.java   |    32 +
 .../queries/function/TestSortedSetFieldSource.java |    15 +-
 .../lucene/queries/function/TestValueSources.java  |    27 +-
 .../queries/intervals/TestIntervalQuery.java       |    10 +-
 .../lucene/queries/intervals/TestIntervals.java    |    15 +-
 lucene/queryparser/build.gradle                    |     2 +
 .../queryparser/docs/xml/LuceneCoreQuery.dtd.html  |     2 +-
 .../docs/xml/LuceneCoreQuery.dtd.org.html          |     2 +-
 .../lucene/queryparser/classic/FastCharStream.java |     9 +-
 .../flexible/core/nodes/QueryNodeImpl.java         |     2 +-
 .../flexible/standard/parser/FastCharStream.java   |    11 +-
 .../surround/parser/FastCharStream.java            |    11 +-
 .../lucene/queryparser/xml/LuceneCoreQuery.dtd     |     2 +-
 lucene/replicator/build.gradle                     |     2 +
 .../apache/lucene/replicator/nrt/PrimaryNode.java  |     2 +-
 .../nrt/SegmentInfosSearcherManager.java           |     5 +-
 .../lucene/replicator/ReplicatorTestCase.java      |     2 +
 .../apache/lucene/replicator/nrt/SimpleServer.java |     1 +
 .../lucene/replicator/nrt/TestNRTReplication.java  |    17 +-
 .../replicator/nrt/TestStressNRTReplication.java   |     6 +-
 lucene/sandbox/build.gradle                        |     2 +
 .../idversion/VersionBlockTreeTermsWriter.java     |     2 +-
 .../codecs/idversion/VersionFieldReader.java       |     2 +-
 .../lucene/search/LatLonPointPrototypeQueries.java |     4 +-
 .../apache/lucene/search/PhraseWildcardQuery.java  |     2 +-
 .../idversion/TestIDVersionPostingsFormat.java     |     2 +-
 .../document/TestFloatPointNearestNeighbor.java    |     2 +-
 .../test/org/apache/lucene/search/TestNearest.java |     2 +-
 .../lucene/search/TestPhraseWildcardQuery.java     |    10 +-
 .../lucene/search/TestTermAutomatonQuery.java      |     3 +-
 lucene/site/changes/changes2html.pl                |     2 +-
 lucene/site/xsl/index.template.md                  |    50 +
 lucene/site/xsl/index.xsl                          |     6 +-
 lucene/spatial-extras/build.gradle                 |     2 +
 .../org/apache/lucene/spatial/SpatialStrategy.java |     4 +-
 .../lucene/spatial/bbox/BBoxValueSource.java       |     2 +-
 .../lucene/spatial/prefix/HeatmapFacetCounter.java |     4 +-
 .../spatial/prefix/WithinPrefixTreeQuery.java      |     6 +-
 .../spatial/prefix/tree/PackedQuadPrefixTree.java  |     8 +-
 .../lucene/spatial/prefix/tree/QuadPrefixTree.java |    10 +-
 .../lucene/spatial/query/SpatialArgsParser.java    |     2 +-
 .../spatial/spatial4j/Geo3dShapeFactory.java       |     2 +
 .../spatial4j/Geo3dSpatialContextFactory.java      |     2 +
 .../lucene/spatial/DistanceStrategyTest.java       |    14 +-
 .../org/apache/lucene/spatial/PortedSolr3Test.java |    72 +-
 .../lucene/spatial/QueryEqualsHashCodeTest.java    |     4 +-
 .../org/apache/lucene/spatial/SpatialExample.java  |    10 +-
 .../org/apache/lucene/spatial/SpatialTestCase.java |     7 +-
 .../apache/lucene/spatial/StrategyTestCase.java    |     2 +-
 .../lucene/spatial/bbox/TestBBoxStrategy.java      |    32 +-
 .../lucene/spatial/prefix/DateNRStrategyTest.java  |     2 +-
 .../spatial/prefix/HeatmapFacetCounterTest.java    |    34 +-
 .../lucene/spatial/prefix/JtsPolygonTest.java      |     6 +-
 .../spatial/prefix/NumberRangeFacetsTest.java      |    11 +-
 .../prefix/RandomSpatialOpFuzzyPrefixTreeTest.java |     2 +-
 .../prefix/RandomSpatialOpStrategyTestCase.java    |     3 +-
 .../prefix/TestRecursivePrefixTreeStrategy.java    |     6 +-
 .../Geo3dShapeSphereModelRectRelationTest.java     |     2 +-
 .../Geo3dShapeWGS84ModelRectRelationTest.java      |     7 +-
 .../spatial/spatial4j/RandomizedShapeTestCase.java |   233 -
 lucene/spatial3d/build.gradle                      |     2 +
 .../lucene/spatial3d/Geo3DDocValuesField.java      |   252 +-
 .../org/apache/lucene/spatial3d/Geo3DPoint.java    |    99 +-
 .../spatial3d/Geo3DPointDistanceComparator.java    |    18 +-
 .../Geo3DPointOutsideDistanceComparator.java       |    18 +-
 .../spatial3d/Geo3DPointOutsideSortField.java      |     7 +-
 .../lucene/spatial3d/Geo3DPointSortField.java      |     7 +-
 .../org/apache/lucene/spatial3d/Geo3DUtil.java     |   128 +-
 .../lucene/spatial3d/PointInGeo3DShapeQuery.java   |     9 -
 .../spatial3d/PointInShapeIntersectVisitor.java    |    35 +-
 .../lucene/spatial3d/geom/GeoComplexPolygon.java   |    26 +-
 .../lucene/spatial3d/geom/GeoExactCircle.java      |     2 +-
 .../org/apache/lucene/spatial3d/geom/GeoWorld.java |     2 +-
 .../org/apache/lucene/spatial3d/geom/Plane.java    |   332 +-
 .../apache/lucene/spatial3d/geom/PlanetModel.java  |   490 +-
 .../org/apache/lucene/spatial3d/geom/Vector.java   |     4 +-
 .../lucene/spatial3d/TestGeo3DDocValues.java       |    20 +-
 .../apache/lucene/spatial3d/TestGeo3DPoint.java    |   305 +-
 .../apache/lucene/spatial3d/geom/Geo3DUtil.java    |   245 -
 .../lucene/spatial3d/geom/GeoCircleTest.java       |     6 +-
 .../lucene/spatial3d/geom/GeoExactCircleTest.java  |     6 +-
 .../apache/lucene/spatial3d/geom/GeoPathTest.java  |     2 +-
 .../lucene/spatial3d/geom/GeoPolygonTest.java      |    22 +-
 lucene/suggest/build.gradle                        |     2 +
 .../search/spell/LuceneLevenshteinDistance.java    |    24 +-
 .../apache/lucene/search/spell/SuggestWord.java    |     5 +
 .../suggest/analyzing/AnalyzingSuggester.java      |     4 +-
 .../suggest/analyzing/FreeTextSuggester.java       |     8 +-
 .../analyzing/SuggestStopFilterFactory.java        |     5 +
 .../search/suggest/document/NRTSuggester.java      |     4 +-
 .../suggest/document/NRTSuggesterBuilder.java      |     2 +-
 .../search/suggest/fst/FSTCompletionLookup.java    |     4 +-
 .../search/suggest/fst/WFSTCompletionLookup.java   |     4 +-
 .../search/suggest/jaspell/JaspellLookup.java      |     4 +-
 .../search/spell/TestWordBreakSpellChecker.java    |     3 +-
 .../lucene/search/suggest/LookupBenchmarkTest.java |     2 +-
 .../lucene/search/suggest/PersistenceTest.java     |     3 +-
 .../suggest/analyzing/TestFreeTextSuggester.java   |     1 +
 .../suggest/analyzing/TestSuggestStopFilter.java   |     9 -
 .../search/suggest/document/TestSuggestField.java  |    13 +-
 lucene/test-framework/build.gradle                 |    12 +-
 lucene/test-framework/ivy.xml                      |     2 +-
 .../codecs/cheapbastard/CheapBastardCodec.java     |     3 +-
 .../lucene/codecs/cranky/CrankyCompoundFormat.java |     3 +-
 .../mockrandom/MockRandomPostingsFormat.java       |     3 +-
 .../UniformSplitRot13PostingsFormat.java           |    23 +-
 .../STUniformSplitRot13PostingsFormat.java         |    11 +-
 .../apache/lucene/geo/BaseGeoPointTestCase.java    |    10 +-
 .../org/apache/lucene/geo/BaseXYPointTestCase.java |    10 +-
 .../java/org/apache/lucene/geo/GeoTestUtil.java    |    29 +
 .../lucene/index/BaseCompoundFormatTestCase.java   |    42 +
 .../lucene/index/BaseIndexFileFormatTestCase.java  |    58 +-
 .../lucene/index/BaseLiveDocsFormatTestCase.java   |     4 +-
 .../lucene/index/BaseMergePolicyTestCase.java      |    12 +-
 .../apache/lucene/index/MockRandomMergePolicy.java |    32 +
 .../java/org/apache/lucene/index/RandomCodec.java  |    20 +-
 .../org/apache/lucene/index/RandomIndexWriter.java |    58 +-
 .../apache/lucene/index/RandomPostingsTester.java  |     2 +-
 .../index/SuppressingConcurrentMergeScheduler.java |     6 +-
 .../ThreadedIndexingAndSearchingTestCase.java      |    19 +-
 .../lucene/search/AssertingLeafCollector.java      |     6 +-
 .../java/org/apache/lucene/search/CheckHits.java   |    75 +-
 .../java/org/apache/lucene/search/QueryUtils.java  |    26 +-
 .../lucene/search/ShardSearchingTestBase.java      |     3 +-
 .../search/similarities/AssertingSimilarity.java   |     2 +-
 .../apache/lucene/store/MockDirectoryWrapper.java  |    18 +-
 .../java/org/apache/lucene/util/LineFileDocs.java  |   110 +-
 .../org/apache/lucene/util/LuceneTestCase.java     |    34 +-
 .../util/TestRuleSetupAndRestoreClassEnv.java      |    29 +-
 .../src/java/org/apache/lucene/util/TestUtil.java  |     9 +-
 .../java/org/apache/lucene/util/fst/FSTTester.java |     5 +-
 .../org/apache/lucene/geo/lucene-9251.wkt.gz       |   Bin 0 -> 13405 bytes
 .../org/apache/lucene/geo/lucene-9417.geojson.gz   |   Bin 0 -> 79049 bytes
 .../org/apache/lucene/util/europarl.lines.txt.gz   |   Bin 5730708 -> 9695474 bytes
 .../org/apache/lucene/util/europarl.lines.txt.seek |    19 +
 .../lucene/search/TestBaseExplanationTestCase.java |    12 +-
 .../util/TestExceptionInBeforeClassHooks.java      |     3 +-
 lucene/tools/forbiddenApis/base.txt                |     2 +-
 .../tools/src/groovy/check-source-patterns.groovy  |     4 +-
 solr/CHANGES.txt                                   |   583 +-
 solr/NOTICE.txt                                    |    15 +-
 solr/README.md                                     |   217 +
 solr/README.txt                                    |   189 -
 solr/bin/solr                                      |    47 +-
 solr/bin/solr.cmd                                  |    46 +-
 solr/bin/solr.in.cmd                               |    29 +-
 solr/bin/solr.in.sh                                |    18 +-
 solr/build.gradle                                  |     2 +
 solr/build.xml                                     |    12 +-
 solr/contrib/analysis-extras/README.md             |    26 +
 solr/contrib/analysis-extras/README.txt            |    23 -
 solr/contrib/analysis-extras/build.gradle          |     2 +
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |    13 +-
 solr/contrib/analytics/build.gradle                |     2 +
 .../apache/solr/analytics/ExpressionFactory.java   |    78 +-
 .../apache/solr/analytics/facet/PivotFacet.java    |    77 +-
 .../apache/solr/analytics/facet/QueryFacet.java    |     8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |     8 +-
 .../function/mapping/ComparisonFunction.java       |   320 +-
 .../function/mapping/DateMathFunction.java         |   171 +-
 .../function/mapping/DateParseFunction.java        |   261 +-
 .../mapping/DecimalNumericConversionFunction.java  |   283 +-
 .../analytics/function/mapping/EqualFunction.java  |   301 +-
 .../analytics/function/mapping/ExistsFunction.java |   143 +-
 .../function/mapping/FillMissingFunction.java      |  1283 +-
 .../analytics/function/mapping/FilterFunction.java |  1075 +-
 .../analytics/function/mapping/IfFunction.java     |  1268 +-
 .../analytics/function/mapping/LambdaFunction.java |  4044 +++---
 .../analytics/function/mapping/RemoveFunction.java |  1187 +-
 .../function/mapping/ReplaceFunction.java          |  1521 +--
 .../analytics/function/reduction/MaxFunction.java  |   405 +-
 .../function/reduction/MedianFunction.java         |   237 +-
 .../analytics/function/reduction/MinFunction.java  |   405 +-
 .../function/reduction/OrdinalFunction.java        |   489 +-
 .../function/reduction/PercentileFunction.java     |   453 +-
 .../stream/AnalyticsShardRequestManager.java       |     4 +-
 .../solr/analytics/util/FacetRangeGenerator.java   |   132 +-
 .../solr/analytics/util/MedianCalculator.java      |     6 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |    34 +-
 .../util/OldAnalyticsRequestConverter.java         |     4 +-
 .../solr/analytics/util/OrdinalCalculator.java     |    15 +-
 .../org/apache/solr/handler/AnalyticsHandler.java  |     6 -
 .../solr/handler/component/AnalyticsComponent.java |     2 +-
 .../response/AnalyticsShardResponseWriter.java     |     2 +-
 .../analytics/legacy/facetWithDottedFields.txt     |    16 +
 .../solr/collection1/conf/schema-analytics.xml     |     2 +
 .../analytics/legacy/LegacyNoFacetCloudTest.java   |    32 +-
 .../solr/analytics/legacy/LegacyNoFacetTest.java   |    32 +-
 .../LegacyAbstractAnalyticsFacetCloudTest.java     |     2 +-
 .../facet/LegacyAbstractAnalyticsFacetTest.java    |     4 +-
 .../legacy/facet/LegacyFieldFacetTest.java         |     1 +
 .../util/OldAnalyticsRequestConverterUnitTest.java |    64 +
 solr/contrib/clustering/{README.txt => README.md}  |     0
 solr/contrib/clustering/build.gradle               |     2 +
 .../handler/clustering/ClusteringComponent.java    |    20 +-
 .../clustering/carrot2/CarrotClusteringEngine.java |    20 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |    10 +-
 .../clustering/carrot2/SolrResourceLocator.java    |     8 +-
 solr/contrib/dataimporthandler-extras/build.gradle |     2 +
 .../handler/dataimport/MailEntityProcessor.java    |   101 +-
 .../handler/dataimport/TikaEntityProcessor.java    |    19 +-
 .../src/java/overview.html                         |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimport/TestMailEntityProcessor.java        |    13 +-
 solr/contrib/dataimporthandler/README.md           |    26 +
 solr/contrib/dataimporthandler/README.txt          |    16 -
 solr/contrib/dataimporthandler/build.gradle        |     2 +
 .../solr/handler/dataimport/BinURLDataSource.java  |     6 +-
 .../solr/handler/dataimport/ClobTransformer.java   |     1 +
 .../apache/solr/handler/dataimport/Context.java    |     2 +
 .../solr/handler/dataimport/ContextImpl.java       |     7 +-
 .../solr/handler/dataimport/DataImportHandler.java |    13 +-
 .../solr/handler/dataimport/DataImporter.java      |    10 +-
 .../apache/solr/handler/dataimport/DataSource.java |     3 +-
 .../handler/dataimport/DateFormatTransformer.java  |     1 +
 .../solr/handler/dataimport/DebugLogger.java       |    12 +-
 .../apache/solr/handler/dataimport/DocBuilder.java |    76 +-
 .../solr/handler/dataimport/EntityProcessor.java   |     3 +-
 .../handler/dataimport/EntityProcessorWrapper.java |    26 +-
 .../solr/handler/dataimport/FileDataSource.java    |    12 +-
 .../handler/dataimport/HTMLStripTransformer.java   |     1 +
 .../solr/handler/dataimport/JdbcDataSource.java    |    20 +-
 .../dataimport/NumberFormatTransformer.java        |     1 +
 .../dataimport/PlainTextEntityProcessor.java       |     1 +
 .../solr/handler/dataimport/RegexTransformer.java  |     6 +-
 .../handler/dataimport/SimplePropertiesWriter.java |    10 +-
 .../apache/solr/handler/dataimport/SolrWriter.java |    10 +-
 .../handler/dataimport/SqlEntityProcessor.java     |    10 +-
 .../handler/dataimport/TemplateTransformer.java    |     5 +-
 .../solr/handler/dataimport/URLDataSource.java     |     6 +-
 .../handler/dataimport/XPathEntityProcessor.java   |    21 +-
 .../solr/handler/dataimport/XPathRecordReader.java |     3 +-
 .../handler/dataimport/ZKPropertiesWriter.java     |     4 +-
 .../dataimport/config/DIHConfiguration.java        |     8 +-
 .../dataimporthandler/src/java/overview.html       |     2 +-
 .../collection1/conf/contentstream-solrconfig.xml  |     2 +-
 .../conf/dataimport-nodatasource-solrconfig.xml    |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimporthandler/src/test-files/log4j2.xml    |    42 +
 .../src/test-files/solr/collection1/README         |     1 +
 .../solr/configsets/dihconfigset/conf/README       |     2 +
 .../solr/configsets/dihconfigset/conf/schema.xml   |    70 +
 .../configsets/dihconfigset/conf/solrconfig.xml    |   287 +
 .../dataimporthandler/src/test-files/solr/solr.xml |    27 +
 .../dataimport/AbstractDIHCacheTestCase.java       |     2 +-
 .../AbstractDataImportHandlerTestCase.java         |     9 +-
 .../AbstractSqlEntityProcessorTestCase.java        |    23 +-
 .../dataimport/MockInitialContextFactory.java      |     2 +-
 .../handler/dataimport/TestClobTransformer.java    |     2 +
 .../dataimport/TestContentStreamDataSource.java    |     2 +-
 .../solr/handler/dataimport/TestDataConfig.java    |     1 +
 .../solr/handler/dataimport/TestDocBuilder.java    |    10 +-
 .../solr/handler/dataimport/TestDocBuilder2.java   |    16 +-
 .../handler/dataimport/TestEphemeralCache.java     |     3 +
 .../solr/handler/dataimport/TestErrorHandling.java |     1 +
 .../solr/handler/dataimport/TestFieldReader.java   |     1 +
 .../dataimport/TestFileListEntityProcessor.java    |    14 +-
 .../dataimport/TestJdbcDataSourceConvertType.java  |     2 +-
 .../dataimport/TestLineEntityProcessor.java        |    14 +-
 .../dataimport/TestPlainTextEntityProcessor.java   |     3 +
 .../handler/dataimport/TestRegexTransformer.java   |     5 +
 .../handler/dataimport/TestScriptTransformer.java  |     4 +-
 .../TestSolrEntityProcessorEndToEnd.java           |    16 +-
 .../dataimport/TestSolrEntityProcessorUnit.java    |     3 +-
 .../dataimport/TestSortedMapBackedCache.java       |     6 +-
 .../dataimport/TestSqlEntityProcessorDelta.java    |    12 +-
 .../dataimport/TestTemplateTransformer.java        |     4 +
 .../handler/dataimport/TestVariableResolver.java   |     1 +
 .../solr/handler/dataimport/TestWriterImpl.java    |     2 +
 .../dataimport/TestXPathEntityProcessor.java       |    15 +
 .../handler/dataimport/TestXPathRecordReader.java  |     1 +
 .../handler/dataimport/TestZKPropertiesWriter.java |   207 +-
 solr/contrib/extraction/README.md                  |    17 +
 solr/contrib/extraction/README.txt                 |    16 -
 solr/contrib/extraction/build.gradle               |     2 +
 .../extraction/ExtractingDocumentLoader.java       |     8 +-
 .../extraction/ExtractingRequestHandler.java       |    49 +-
 .../extraction/RegexRulesPasswordProvider.java     |     4 +-
 .../handler/extraction/XLSXResponseWriter.java     |     4 +-
 .../extraction/ExtractingRequestHandlerTest.java   |     3 +
 solr/contrib/jaegertracer-configurator/README.md   |    33 +
 solr/contrib/jaegertracer-configurator/README.txt  |    32 -
 .../contrib/jaegertracer-configurator/build.gradle |     2 +
 .../solr/jaeger/JaegerTracerConfigurator.java      |     2 +-
 .../apache/solr/jaeger/TestJaegerConfigurator.java |     4 +
 solr/contrib/langid/README.md                      |    22 +
 solr/contrib/langid/README.txt                     |    22 -
 solr/contrib/langid/build.gradle                   |     2 +
 .../LanguageIdentifierUpdateProcessor.java         |    48 +-
 .../OpenNLPLangDetectUpdateProcessorFactory.java   |     2 +-
 .../TikaLanguageIdentifierUpdateProcessor.java     |     5 +-
 solr/contrib/ltr/README.md                         |     2 +-
 solr/contrib/ltr/README.txt                        |     1 -
 solr/contrib/ltr/build.gradle                      |     2 +
 .../java/org/apache/solr/ltr/LTRThreadModule.java  |     7 +-
 .../java/org/apache/solr/ltr/feature/Feature.java  |    42 +
 .../solr/ltr/feature/OriginalScoreFeature.java     |    23 +-
 .../org/apache/solr/ltr/feature/SolrFeature.java   |   199 +-
 .../org/apache/solr/ltr/model/LTRScoringModel.java |     1 +
 .../org/apache/solr/ltr/model/LinearModel.java     |     1 +
 .../solr/ltr/model/MultipleAdditiveTreesModel.java |     4 +
 .../apache/solr/ltr/model/NeuralNetworkModel.java  |     4 +
 .../LTRFeatureLoggerTransformerFactory.java        |     1 +
 .../apache/solr/ltr/search/LTRQParserPlugin.java   |     1 +
 .../solr/ltr/store/rest/ManagedModelStore.java     |     5 +-
 .../org/apache/solr/ltr/TestLTROnSolrCloud.java    |    12 +-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  |     6 +-
 .../test/org/apache/solr/ltr/TestRerankBase.java   |    35 +-
 .../org/apache/solr/ltr/feature/TestFeature.java   |    48 +
 .../TestFeatureExtractionFromMultipleSegments.java |     2 +
 .../solr/ltr/feature/TestNoMatchSolrFeature.java   |     4 +
 .../solr/ltr/feature/TestOriginalScoreFeature.java |     6 +
 .../solr/ltr/feature/TestOriginalScoreScorer.java  |    47 -
 .../solr/ltr/model/TestNeuralNetworkModel.java     |     1 +
 .../store/rest/TestModelManagerPersistence.java    |     4 +
 solr/contrib/prometheus-exporter/README.md         |    21 +
 solr/contrib/prometheus-exporter/README.txt        |    21 -
 solr/contrib/prometheus-exporter/build.gradle      |     2 +
 .../conf/solr-exporter-config.xml                  |     8 +-
 .../collector/SchedulerMetricsCollector.java       |     7 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |     1 +
 .../exporter/PrometheusExporterSettings.java       |     4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |    10 +-
 .../org/apache/solr/prometheus/scraper/Async.java  |     1 +
 .../solr/prometheus/scraper/SolrScraper.java       |     4 +-
 ...theus-solr-exporter-integration-test-config.xml |     8 +-
 .../prometheus/PrometheusExporterTestBase.java     |     4 +-
 .../prometheus/scraper/SolrCloudScraperTest.java   |     4 +-
 .../scraper/SolrStandaloneScraperTest.java         |     4 +-
 solr/contrib/velocity/build.gradle                 |     2 +
 .../solr/response/VelocityResponseWriter.java      |    14 +-
 solr/core/build.gradle                             |     7 +-
 solr/core/ivy.xml                                  |     2 +-
 .../solr/analysis/LowerCaseTokenizerFactory.java   |     5 +
 .../analysis/ReversedWildcardFilterFactory.java    |     4 +
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   252 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |    36 +-
 .../apache/solr/api/CustomContainerPlugins.java    |   354 +
 .../src/java/org/apache/solr/api/EndPoint.java     |     2 +-
 .../src/java/org/apache/solr/api/PayloadObj.java   |    35 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |    43 +-
 .../client/solrj/embedded/EmbeddedSolrServer.java  |    17 +-
 .../client/solrj/embedded/JettySolrRunner.java     |    15 +-
 .../apache/solr/cloud/ActiveReplicaWatcher.java    |    19 +-
 .../apache/solr/cloud/CloudConfigSetService.java   |     7 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |    16 +-
 .../solr/cloud/CurrentCoreDescriptorProvider.java  |    28 -
 .../org/apache/solr/cloud/ElectionContext.java     |   707 -
 .../apache/solr/cloud/ExclusiveSliceProperty.java  |    10 +-
 .../java/org/apache/solr/cloud/LeaderElector.java  |     2 +-
 .../src/java/org/apache/solr/cloud/LockTree.java   |    56 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   121 +-
 .../cloud/OverseerConfigSetMessageHandler.java     |    20 +-
 .../apache/solr/cloud/OverseerElectionContext.java |   110 +
 .../apache/solr/cloud/OverseerMessageHandler.java  |     7 +-
 .../apache/solr/cloud/OverseerNodePrioritizer.java |    15 +-
 .../apache/solr/cloud/OverseerSolrResponse.java    |     4 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   230 +-
 .../org/apache/solr/cloud/OverseerTaskQueue.java   |    13 +-
 .../solr/cloud/RecoveringCoreTermWatcher.java      |     4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   109 +-
 .../org/apache/solr/cloud/ReplicateFromLeader.java |    10 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |   493 +
 .../solr/cloud/ShardLeaderElectionContextBase.java |   195 +
 .../java/org/apache/solr/cloud/SolrZkServer.java   |    80 +-
 .../java/org/apache/solr/cloud/SyncStrategy.java   |    64 +-
 .../core/src/java/org/apache/solr/cloud/ZkCLI.java |    21 +-
 .../java/org/apache/solr/cloud/ZkController.java   |   427 +-
 .../org/apache/solr/cloud/ZkDistributedQueue.java  |    17 +-
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |     1 +
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |    34 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |    81 +-
 .../solr/cloud/api/collections/AliasCmd.java       |     1 +
 .../apache/solr/cloud/api/collections/Assign.java  |   236 +-
 .../solr/cloud/api/collections/BackupCmd.java      |    15 +-
 .../cloud/api/collections/CategoryRoutedAlias.java |     4 +-
 .../solr/cloud/api/collections/CreateAliasCmd.java |     2 +-
 .../cloud/api/collections/CreateCollectionCmd.java |   153 +-
 .../solr/cloud/api/collections/CreateShardCmd.java |     3 +-
 .../cloud/api/collections/CreateSnapshotCmd.java   |    28 +-
 .../solr/cloud/api/collections/DeleteAliasCmd.java |     2 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |     3 +-
 .../solr/cloud/api/collections/DeleteNodeCmd.java  |     7 +-
 .../cloud/api/collections/DeleteReplicaCmd.java    |    16 +-
 .../solr/cloud/api/collections/DeleteShardCmd.java |    15 +-
 .../cloud/api/collections/DeleteSnapshotCmd.java   |    14 +-
 .../api/collections/MaintainRoutedAliasCmd.java    |    14 +-
 .../solr/cloud/api/collections/MigrateCmd.java     |    51 +-
 .../solr/cloud/api/collections/MoveReplicaCmd.java |    32 +-
 .../OverseerCollectionMessageHandler.java          |   125 +-
 .../cloud/api/collections/OverseerRoleCmd.java     |     6 +-
 .../cloud/api/collections/OverseerStatusCmd.java   |     7 +-
 .../api/collections/ReindexCollectionCmd.java      |    68 +-
 .../solr/cloud/api/collections/RenameCmd.java      |     2 +-
 .../solr/cloud/api/collections/ReplaceNodeCmd.java |    32 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |   373 +-
 .../solr/cloud/api/collections/RoutedAlias.java    |    11 +-
 .../cloud/api/collections/SetAliasPropCmd.java     |     2 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |   118 +-
 .../cloud/api/collections/TimeRoutedAlias.java     |    12 +-
 .../solr/cloud/api/collections/UtilizeNodeCmd.java |   133 -
 .../solr/cloud/autoscaling/ActionContext.java      |    68 -
 .../autoscaling/AutoAddReplicasPlanAction.java     |    63 -
 .../apache/solr/cloud/autoscaling/AutoScaling.java |   244 -
 .../solr/cloud/autoscaling/AutoScalingHandler.java |   732 -
 .../solr/cloud/autoscaling/ComputePlanAction.java  |   305 -
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |   244 -
 .../cloud/autoscaling/HttpTriggerListener.java     |   164 -
 .../autoscaling/InactiveMarkersPlanAction.java     |   139 -
 .../cloud/autoscaling/InactiveShardPlanAction.java |   152 -
 .../solr/cloud/autoscaling/IndexSizeTrigger.java   |   557 -
 .../solr/cloud/autoscaling/LoggingListener.java    |    38 -
 .../solr/cloud/autoscaling/MetricTrigger.java      |   219 -
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |   244 -
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |   236 -
 .../cloud/autoscaling/OverseerTriggerThread.java   |   397 -
 .../solr/cloud/autoscaling/ScheduledTrigger.java   |   227 -
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |   906 --
 .../solr/cloud/autoscaling/SearchRateTrigger.java  |   797 --
 .../solr/cloud/autoscaling/SystemLogListener.java  |   219 -
 .../solr/cloud/autoscaling/TriggerAction.java      |    51 -
 .../solr/cloud/autoscaling/TriggerActionBase.java  |    87 -
 .../cloud/autoscaling/TriggerActionException.java  |    33 -
 .../apache/solr/cloud/autoscaling/TriggerBase.java |   283 -
 .../solr/cloud/autoscaling/TriggerEvent.java       |   311 -
 .../solr/cloud/autoscaling/TriggerEventQueue.java  |   119 -
 .../solr/cloud/autoscaling/TriggerListener.java    |    65 -
 .../cloud/autoscaling/TriggerListenerBase.java     |    97 -
 .../solr/cloud/autoscaling/TriggerUtils.java       |    87 -
 .../autoscaling/TriggerValidationException.java    |    74 -
 .../solr/cloud/autoscaling/package-info.java       |    21 -
 .../solr/cloud/autoscaling/sim/ActionError.java    |    24 -
 .../cloud/autoscaling/sim/FakeDocIterator.java     |    56 -
 .../autoscaling/sim/GenericDistributedQueue.java   |   599 -
 .../sim/GenericDistributedQueueFactory.java        |    45 -
 .../solr/cloud/autoscaling/sim/LiveNodesSet.java   |   113 -
 .../sim/NoopDistributedQueueFactory.java           |    94 -
 .../cloud/autoscaling/sim/SimCloudManager.java     |  1051 --
 .../autoscaling/sim/SimClusterStateProvider.java   |  2469 ----
 .../autoscaling/sim/SimDistribStateManager.java    |   646 -
 .../sim/SimDistributedQueueFactory.java            |   284 -
 .../autoscaling/sim/SimNodeStateProvider.java      |   347 -
 .../solr/cloud/autoscaling/sim/SimScenario.java    |  1108 --
 .../solr/cloud/autoscaling/sim/SimUtils.java       |   435 -
 .../autoscaling/sim/SnapshotCloudManager.java      |   257 -
 .../sim/SnapshotClusterStateProvider.java          |   130 -
 .../sim/SnapshotDistribStateManager.java           |   222 -
 .../autoscaling/sim/SnapshotNodeStateProvider.java |   200 -
 .../solr/cloud/autoscaling/sim/package-info.java   |    94 -
 .../solr/cloud/overseer/ClusterStateMutator.java   |    21 +-
 .../solr/cloud/overseer/CollectionMutator.java     |     9 +-
 .../apache/solr/cloud/overseer/NodeMutator.java    |     8 +-
 .../apache/solr/cloud/overseer/ReplicaMutator.java |    88 +-
 .../apache/solr/cloud/overseer/SliceMutator.java   |    14 +-
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |    47 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |    15 +-
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |    13 +-
 .../solr/cloud/rule/ServerSnitchContext.java       |     1 +
 .../solr/core/AbstractSolrEventListener.java       |     5 +-
 .../java/org/apache/solr/core/BlobRepository.java  |    17 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |    36 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |    25 +-
 .../java/org/apache/solr/core/CodecFactory.java    |     2 +-
 .../java/org/apache/solr/core/ConfigOverlay.java   |    14 +
 .../src/java/org/apache/solr/core/ConfigSet.java   |    29 +-
 .../org/apache/solr/core/ConfigSetProperties.java  |     6 +-
 .../org/apache/solr/core/ConfigSetService.java     |    17 +-
 .../java/org/apache/solr/core/CoreContainer.java   |   399 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |    10 +-
 .../apache/solr/core/CorePropertiesLocator.java    |    24 +-
 .../src/java/org/apache/solr/core/CoreSorter.java  |    77 +-
 .../src/java/org/apache/solr/core/Diagnostics.java |     2 +-
 .../org/apache/solr/core/DirectoryFactory.java     |    21 +-
 .../org/apache/solr/core/HdfsDirectoryFactory.java |    29 +-
 .../solr/core/IndexDeletionPolicyWrapper.java      |     4 +-
 .../org/apache/solr/core/IndexReaderFactory.java   |     2 +-
 .../src/java/org/apache/solr/core/InitParams.java  |    12 +-
 .../org/apache/solr/core/MMapDirectoryFactory.java |     1 +
 .../java/org/apache/solr/core/MemClassLoader.java  |   200 -
 .../solr/core/NRTCachingDirectoryFactory.java      |     1 +
 .../src/java/org/apache/solr/core/NodeConfig.java  |    86 +-
 .../src/java/org/apache/solr/core/PluginBag.java   |   261 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |    58 +-
 .../org/apache/solr/core/QuerySenderListener.java  |    54 +-
 .../java/org/apache/solr/core/RequestHandlers.java |     6 +-
 .../java/org/apache/solr/core/RequestParams.java   |    65 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |     9 +-
 .../apache/solr/core/SimpleFSDirectoryFactory.java |    42 -
 .../apache/solr/core/SimpleTextCodecFactory.java   |     1 +
 .../java/org/apache/solr/core/SolrClassLoader.java |    29 +
 .../src/java/org/apache/solr/core/SolrConfig.java  |   145 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   236 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |    33 +-
 .../org/apache/solr/core/SolrDeletionPolicy.java   |    14 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   138 +
 .../org/apache/solr/core/SolrResourceLoader.java   |   416 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |    73 +-
 .../apache/solr/core/StandardDirectoryFactory.java |     2 +-
 .../apache/solr/core/TransientSolrCoreCache.java   |    10 -
 .../solr/core/TransientSolrCoreCacheDefault.java   |    29 +-
 .../solr/core/TransientSolrCoreCacheFactory.java   |     6 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |    56 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |   105 +-
 .../org/apache/solr/core/backup/BackupManager.java |     2 +-
 .../backup/repository/HdfsBackupRepository.java    |    14 +-
 .../repository/LocalFileSystemRepository.java      |    13 +-
 .../solr/core/snapshots/SolrSnapshotManager.java   |    12 +-
 .../snapshots/SolrSnapshotMetaDataManager.java     |    10 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java     |    16 +-
 .../apache/solr/filestore/DistribPackageStore.java |    91 +-
 .../org/apache/solr/filestore/PackageStore.java    |     7 +
 .../org/apache/solr/filestore/PackageStoreAPI.java |    74 +-
 .../solr/handler/AnalysisRequestHandlerBase.java   |     3 +
 .../org/apache/solr/handler/AnalyzeEvaluator.java  |     2 +-
 .../java/org/apache/solr/handler/BlobHandler.java  |    16 +-
 .../java/org/apache/solr/handler/CatStream.java    |    92 +-
 .../solr/handler/CdcrBufferStateManager.java       |     8 +-
 .../solr/handler/CdcrLeaderStateManager.java       |     4 +-
 .../solr/handler/CdcrProcessStateManager.java      |     8 +-
 .../org/apache/solr/handler/CdcrReplicator.java    |    13 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |    44 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |    10 +-
 .../apache/solr/handler/CdcrReplicatorState.java   |     2 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |    38 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |    20 +-
 .../solr/handler/ContentStreamHandlerBase.java     |     2 +-
 .../handler/DocumentAnalysisRequestHandler.java    |     8 +-
 .../apache/solr/handler/DumpRequestHandler.java    |    10 +-
 .../org/apache/solr/handler/ExportHandler.java     |    80 +-
 .../solr/handler/FieldAnalysisRequestHandler.java  |     3 +
 .../java/org/apache/solr/handler/GraphHandler.java |    23 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |   217 +-
 .../apache/solr/handler/MoreLikeThisHandler.java   |     5 +-
 .../apache/solr/handler/PingRequestHandler.java    |     2 +-
 .../apache/solr/handler/ReplicationHandler.java    |   343 +-
 .../apache/solr/handler/RequestHandlerBase.java    |     8 +-
 .../java/org/apache/solr/handler/RestoreCore.java  |     3 +-
 .../java/org/apache/solr/handler/SQLHandler.java   |    10 +-
 .../org/apache/solr/handler/SchemaHandler.java     |    62 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |    28 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |    83 +-
 .../org/apache/solr/handler/StreamHandler.java     |   107 +-
 .../apache/solr/handler/UpdateRequestHandler.java  |     4 +-
 .../solr/handler/admin/AdminHandlersProxy.java     |    10 +-
 .../handler/admin/AutoscalingHistoryHandler.java   |   165 -
 .../solr/handler/admin/BaseHandlerApiSupport.java  |     5 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |    34 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |     9 +-
 .../solr/handler/admin/CollectionHandlerApi.java   |     2 +-
 .../solr/handler/admin/CollectionsHandler.java     |    63 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |    16 +-
 .../solr/handler/admin/ContainerPluginsApi.java    |   179 +
 .../solr/handler/admin/CoreAdminHandler.java       |     6 +-
 .../solr/handler/admin/CoreAdminOperation.java     |     9 +-
 .../solr/handler/admin/HealthCheckHandler.java     |    82 +-
 .../solr/handler/admin/IndexSizeEstimator.java     |     7 +-
 .../org/apache/solr/handler/admin/InfoHandler.java |     2 +-
 .../apache/solr/handler/admin/LoggingHandler.java  |     9 +-
 .../solr/handler/admin/LukeRequestHandler.java     |    36 +-
 .../apache/solr/handler/admin/MergeIndexesOp.java  |     8 +-
 .../handler/admin/MetricsCollectorHandler.java     |    10 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |     7 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |    56 +-
 .../apache/solr/handler/admin/PrepRecoveryOp.java  |    22 +-
 .../solr/handler/admin/RebalanceLeaders.java       |    24 +-
 .../solr/handler/admin/RequestSyncShardOp.java     |     8 +-
 .../solr/handler/admin/SecurityConfHandler.java    |     7 +-
 .../handler/admin/SegmentsInfoRequestHandler.java  |    11 +-
 .../solr/handler/admin/ShowFileRequestHandler.java |    16 +-
 .../solr/handler/admin/SolrInfoMBeanHandler.java   |     4 +
 .../org/apache/solr/handler/admin/SplitOp.java     |    14 +-
 .../solr/handler/admin/SystemInfoHandler.java      |    57 +-
 .../solr/handler/admin/ThreadDumpHandler.java      |    54 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |   201 +-
 .../solr/handler/admin/ZookeeperReadAPI.java       |   145 +
 .../solr/handler/admin/ZookeeperStatusHandler.java |    85 +-
 .../solr/handler/component/CloudReplicaSource.java |     2 +
 .../solr/handler/component/DebugComponent.java     |    38 +-
 .../solr/handler/component/ExpandComponent.java    |   119 +-
 .../solr/handler/component/FacetComponent.java     |    22 +-
 .../solr/handler/component/FieldFacetStats.java    |     4 +-
 .../solr/handler/component/HighlightComponent.java |     9 +-
 .../solr/handler/component/HttpShardHandler.java   |   176 +-
 .../handler/component/HttpShardHandlerFactory.java |    93 +-
 .../handler/component/IterativeMergeStrategy.java  |     5 +-
 .../solr/handler/component/MergeStrategy.java      |     1 +
 .../handler/component/MoreLikeThisComponent.java   |    36 +-
 .../component/PhrasesIdentificationComponent.java  |     4 +
 .../component/PivotFacetFieldValueCollection.java  |     3 +-
 .../solr/handler/component/PivotFacetHelper.java   |     5 +
 .../handler/component/PivotFacetProcessor.java     |     4 +-
 .../solr/handler/component/QueryComponent.java     |    41 +-
 .../handler/component/QueryElevationComponent.java |    13 +-
 .../handler/component/RangeFacetProcessor.java     |     1 +
 .../solr/handler/component/RangeFacetRequest.java  |    13 +-
 .../handler/component/RealTimeGetComponent.java    |    56 +-
 .../solr/handler/component/ResponseBuilder.java    |     6 +-
 .../solr/handler/component/SearchComponent.java    |     2 +-
 .../solr/handler/component/SearchHandler.java      |    90 +-
 .../apache/solr/handler/component/ShardDoc.java    |     1 +
 .../component/ShardFieldSortedHitQueue.java        |     6 +-
 .../solr/handler/component/ShardResponse.java      |     4 +-
 .../handler/component/SortedDateStatsValues.java   |     6 +-
 .../component/SortedNumericStatsValues.java        |     6 +-
 .../handler/component/SpatialHeatmapFacets.java    |     4 +-
 .../handler/component/SpellCheckComponent.java     |    62 +-
 .../handler/component/StandaloneReplicaSource.java |     1 +
 .../solr/handler/component/StatsComponent.java     |   113 +-
 .../apache/solr/handler/component/StatsInfo.java   |   108 +
 .../apache/solr/handler/component/StatsValues.java |     2 +-
 .../solr/handler/component/StatsValuesFactory.java |  1385 +-
 .../solr/handler/component/SuggestComponent.java   |    54 +-
 .../handler/component/TermVectorComponent.java     |     6 +-
 .../solr/handler/component/TermsComponent.java     |     4 +-
 .../org/apache/solr/handler/export/DoubleCmp.java  |    43 -
 .../org/apache/solr/handler/export/DoubleComp.java |    45 +
 .../solr/handler/export/DoubleValueSortDoc.java    |     1 +
 .../apache/solr/handler/export/ExportBuffers.java  |   271 +
 .../apache/solr/handler/export/ExportWriter.java   |   306 +-
 .../solr/handler/export/ExportWriterStream.java    |   242 +
 .../org/apache/solr/handler/export/FloatCmp.java   |    44 -
 .../org/apache/solr/handler/export/FloatComp.java  |    44 +
 .../org/apache/solr/handler/export/IntComp.java    |    32 +-
 .../org/apache/solr/handler/export/LongCmp.java    |    45 -
 .../org/apache/solr/handler/export/LongComp.java   |    46 +
 .../org/apache/solr/handler/export/LongValue.java  |     4 +-
 .../apache/solr/handler/export/PriorityQueue.java  |   218 -
 .../solr/handler/export/QuadValueSortDoc.java      |     1 +
 .../solr/handler/export/SingleValueSortDoc.java    |     3 +-
 .../org/apache/solr/handler/export/SortDoc.java    |    19 +-
 .../org/apache/solr/handler/export/SortQueue.java  |   155 +-
 .../solr/handler/export/StringFieldWriter.java     |    25 +-
 .../apache/solr/handler/export/StringValue.java    |    36 +-
 .../solr/handler/export/TripleValueSortDoc.java    |     1 +
 .../apache/solr/handler/loader/JavabinLoader.java  |     6 +-
 .../org/apache/solr/handler/loader/JsonLoader.java |    19 +-
 .../org/apache/solr/handler/loader/XMLLoader.java  |    22 +-
 .../apache/solr/handler/sql/CalciteSolrDriver.java |    16 +-
 .../org/apache/solr/handler/sql/LimitStream.java   |     6 +-
 .../org/apache/solr/handler/sql/SolrAggregate.java |     1 +
 .../apache/solr/handler/sql/SolrEnumerator.java    |     3 +
 .../org/apache/solr/handler/sql/SolrFilter.java    |    16 +-
 .../org/apache/solr/handler/sql/SolrMethod.java    |     1 +
 .../org/apache/solr/handler/sql/SolrSchema.java    |    62 +-
 .../org/apache/solr/handler/sql/SolrTable.java     |    31 +-
 .../handler/sql/SolrToEnumerableConverter.java     |     3 +
 .../org/apache/solr/handler/tagger/Tagger.java     |     9 +-
 .../solr/handler/tagger/TaggerRequestHandler.java  |   119 +-
 .../solr/handler/tagger/TermPrefixCursor.java      |     1 +
 .../solr/highlight/DefaultSolrHighlighter.java     |   514 +-
 .../solr/highlight/HighlightingPluginBase.java     |     2 +-
 .../org/apache/solr/highlight/RegexFragmenter.java |     2 +-
 .../org/apache/solr/highlight/SolrEncoder.java     |     2 +-
 .../org/apache/solr/highlight/SolrFormatter.java   |     2 +-
 .../apache/solr/highlight/SolrFragListBuilder.java |     2 +-
 .../org/apache/solr/highlight/SolrFragmenter.java  |     2 +-
 .../solr/highlight/UnifiedSolrHighlighter.java     |     3 +-
 .../solr/index/WrapperMergePolicyFactory.java      |     1 +
 .../org/apache/solr/internal/csv/CSVParser.java    |     4 +
 .../org/apache/solr/internal/csv/CSVPrinter.java   |     1 +
 .../java/org/apache/solr/logging/LogWatcher.java   |    10 +-
 .../org/apache/solr/logging/MDCLoggingContext.java |    78 +-
 .../org/apache/solr/metrics/MetricSuppliers.java   |    15 +-
 .../java/org/apache/solr/metrics/MetricsMap.java   |     5 +-
 .../apache/solr/metrics/SolrCoreMetricManager.java |     4 +-
 .../org/apache/solr/metrics/SolrMetricManager.java |    75 +-
 .../apache/solr/metrics/SolrMetricProducer.java    |     9 +-
 .../apache/solr/metrics/SolrMetricReporter.java    |     4 +-
 .../metrics/reporters/ReporterClientCache.java     |     4 +-
 .../solr/metrics/reporters/SolrJmxReporter.java    |     6 +-
 .../solr/metrics/reporters/SolrSlf4jReporter.java  |     1 +
 .../metrics/reporters/jmx/JmxMetricsReporter.java  |    18 +-
 .../reporters/solr/SolrClusterReporter.java        |    10 +-
 .../solr/metrics/reporters/solr/SolrReporter.java  |    83 +-
 .../metrics/reporters/solr/SolrShardReporter.java  |    20 +-
 .../apache/solr/metrics/rrd/SolrRrdBackend.java    |     2 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |    31 +-
 .../packagemanager/DefaultPackageRepository.java   |     4 +-
 .../apache/solr/packagemanager/PackageManager.java |   446 +-
 .../apache/solr/packagemanager/PackageUtils.java   |     3 +
 .../solr/packagemanager/RepositoryManager.java     |    34 +-
 .../apache/solr/packagemanager/SolrPackage.java    |     4 +
 .../solr/packagemanager/SolrPackageInstance.java   |    23 +
 .../org/apache/solr/parser/FastCharStream.java     |    12 +
 .../apache/solr/parser/SolrQueryParserBase.java    |    27 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |    62 +-
 .../java/org/apache/solr/pkg/PackageListeners.java |    58 +-
 .../solr/pkg/PackageListeningClassLoader.java      |   151 +
 .../java/org/apache/solr/pkg/PackageLoader.java    |    80 +-
 .../org/apache/solr/pkg/PackagePluginHolder.java   |    66 +-
 .../apache/solr/request/LocalSolrQueryRequest.java |    12 +-
 .../java/org/apache/solr/request/SimpleFacets.java |    27 +-
 .../apache/solr/request/SolrQueryRequestBase.java  |     1 +
 .../apache/solr/request/SolrRequestHandler.java    |     4 +-
 .../org/apache/solr/request/SolrRequestInfo.java   |    96 +-
 .../solr/request/json/JsonQueryConverter.java      |    52 +-
 .../org/apache/solr/request/json/ObjectUtil.java   |     8 +-
 .../apache/solr/response/BinaryResponseWriter.java |    13 +-
 .../apache/solr/response/CSVResponseWriter.java    |     4 +-
 .../org/apache/solr/response/DocsStreamer.java     |     1 +
 .../solr/response/GeoJSONResponseWriter.java       |    20 +-
 .../solr/response/GraphMLResponseWriter.java       |     8 +-
 .../apache/solr/response/JSONResponseWriter.java   |    25 +-
 .../java/org/apache/solr/response/JSONWriter.java  |    43 +-
 .../apache/solr/response/PHPResponseWriter.java    |     6 +-
 .../solr/response/PHPSerializedResponseWriter.java |    24 +-
 .../apache/solr/response/PythonResponseWriter.java |     4 +-
 .../apache/solr/response/QueryResponseWriter.java  |     2 +-
 .../apache/solr/response/RawResponseWriter.java    |     2 +-
 .../apache/solr/response/RubyResponseWriter.java   |     4 +-
 .../solr/response/SchemaXmlResponseWriter.java     |     2 +-
 .../org/apache/solr/response/SchemaXmlWriter.java  |    25 +-
 .../apache/solr/response/SmileResponseWriter.java  |     2 +-
 .../apache/solr/response/SolrQueryResponse.java    |     1 +
 .../solr/response/TabularResponseWriter.java       |    13 +-
 .../apache/solr/response/TextResponseWriter.java   |    16 +-
 .../apache/solr/response/XMLResponseWriter.java    |     2 +-
 .../java/org/apache/solr/response/XMLWriter.java   |    79 +-
 .../apache/solr/response/XSLTResponseWriter.java   |     4 +-
 .../response/transform/ChildDocTransformer.java    |     6 +
 .../transform/ChildDocTransformerFactory.java      |    11 +-
 .../response/transform/DocIdAugmenterFactory.java  |    31 +-
 .../transform/ExplainAugmenterFactory.java         |     2 +-
 .../response/transform/GeoTransformerFactory.java  |     1 +
 .../transform/RawValueTransformerFactory.java      |     3 +-
 .../response/transform/ShardAugmenterFactory.java  |     2 +-
 .../transform/SubQueryAugmenterFactory.java        |    64 +-
 .../response/transform/TransformerFactory.java     |     2 +-
 .../response/transform/ValueAugmenterFactory.java  |    80 +-
 .../response/transform/ValueSourceAugmenter.java   |     3 +
 .../org/apache/solr/rest/BaseSolrResource.java     |     8 +-
 .../java/org/apache/solr/rest/ManagedResource.java |    14 +-
 .../apache/solr/rest/ManagedResourceStorage.java   |    31 +-
 .../src/java/org/apache/solr/rest/RestManager.java |    21 +-
 .../analysis/BaseManagedTokenFilterFactory.java    |     5 +
 .../schema/analysis/ManagedStopFilterFactory.java  |     5 +
 .../analysis/ManagedSynonymFilterFactory.java      |    10 +-
 .../analysis/ManagedSynonymGraphFilterFactory.java |    10 +-
 .../schema/analysis/ManagedWordSetResource.java    |     7 +-
 .../org/apache/solr/schema/AbstractEnumField.java  |     5 +-
 .../solr/schema/AbstractSpatialFieldType.java      |     2 +-
 .../schema/AbstractSpatialPrefixTreeFieldType.java |     4 +-
 .../java/org/apache/solr/schema/BinaryField.java   |     2 +-
 .../src/java/org/apache/solr/schema/BoolField.java |   147 +-
 .../solr/schema/ClassicIndexSchemaFactory.java     |     2 +-
 .../org/apache/solr/schema/CurrencyFieldType.java  |     5 +-
 .../org/apache/solr/schema/DatePointField.java     |    50 +-
 .../src/java/org/apache/solr/schema/EnumField.java |     2 +-
 .../org/apache/solr/schema/ExternalFileField.java  |     3 +-
 .../solr/schema/ExternalFileFieldReloader.java     |     6 +-
 .../src/java/org/apache/solr/schema/FieldType.java |     5 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |    39 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |   184 +-
 .../org/apache/solr/schema/IndexSchemaFactory.java |     4 +-
 .../apache/solr/schema/JsonPreAnalyzedParser.java  |    10 +-
 .../solr/schema/LatLonPointSpatialField.java       |     1 +
 .../java/org/apache/solr/schema/LatLonType.java    |     4 +
 .../org/apache/solr/schema/ManagedIndexSchema.java |    98 +-
 .../solr/schema/ManagedIndexSchemaFactory.java     |   115 +-
 .../solr/schema/OpenExchangeRatesOrgProvider.java  |    16 +-
 .../java/org/apache/solr/schema/PointField.java    |     6 +-
 .../org/apache/solr/schema/PreAnalyzedField.java   |    13 +-
 .../org/apache/solr/schema/RandomSortField.java    |     2 +-
 .../src/java/org/apache/solr/schema/RankField.java |   140 +
 .../solr/schema/RptWithGeometrySpatialField.java   |     1 +
 .../java/org/apache/solr/schema/SchemaManager.java |     8 +-
 .../src/java/org/apache/solr/schema/StrField.java  |     2 +-
 .../org/apache/solr/schema/StrFieldSource.java     |     2 +-
 .../src/java/org/apache/solr/schema/TextField.java |     2 +-
 .../java/org/apache/solr/schema/TrieDateField.java |     1 +
 .../org/apache/solr/schema/TrieDoubleField.java    |     3 +-
 .../src/java/org/apache/solr/schema/TrieField.java |     3 +-
 .../org/apache/solr/schema/TrieFloatField.java     |     3 +-
 .../java/org/apache/solr/schema/TrieIntField.java  |     3 +-
 .../java/org/apache/solr/schema/TrieLongField.java |     3 +-
 .../src/java/org/apache/solr/schema/UUIDField.java |     4 +-
 .../apache/solr/schema/ZkIndexSchemaReader.java    |    16 +-
 .../apache/solr/search/AbstractReRankQuery.java    |     2 +-
 .../org/apache/solr/search/BoolQParserPlugin.java  |    53 +-
 .../java/org/apache/solr/search/CacheConfig.java   |    16 +-
 .../org/apache/solr/search/CacheRegenerator.java   |     4 +-
 .../java/org/apache/solr/search/CaffeineCache.java |     5 +-
 .../solr/search/CollapsingQParserPlugin.java       |   520 +-
 .../solr/search/ComplexPhraseQParserPlugin.java    |     2 +-
 .../java/org/apache/solr/search/CursorMark.java    |     1 +
 .../src/java/org/apache/solr/search/DocList.java   |     3 +
 .../src/java/org/apache/solr/search/DocSet.java    |    12 +-
 .../java/org/apache/solr/search/DocSetUtil.java    |    10 +-
 .../src/java/org/apache/solr/search/DocSlice.java  |    15 +-
 .../apache/solr/search/ExportQParserPlugin.java    |     5 +
 .../apache/solr/search/ExtendedDismaxQParser.java  |     5 +-
 .../solr/search/FloatPayloadValueSource.java       |     4 +-
 .../org/apache/solr/search/FunctionQParser.java    |    30 +-
 .../org/apache/solr/search/FunctionRangeQuery.java |     4 +
 .../solr/search/GraphTermsQParserPlugin.java       |    96 +-
 .../src/java/org/apache/solr/search/Grouping.java  |    58 +-
 .../solr/search/IGainTermsQParserPlugin.java       |     2 +
 .../org/apache/solr/search/JoinQParserPlugin.java  |   619 +-
 .../src/java/org/apache/solr/search/JoinQuery.java |   508 +
 .../org/apache/solr/search/MaxScoreCollector.java  |    10 +-
 .../java/org/apache/solr/search/QParserPlugin.java |     5 +-
 .../java/org/apache/solr/search/QueryCommand.java  |    10 +
 .../java/org/apache/solr/search/QueryContext.java  |     2 +
 .../java/org/apache/solr/search/QueryParsing.java  |     1 +
 .../org/apache/solr/search/QueryResultKey.java     |    15 +-
 .../java/org/apache/solr/search/QueryUtils.java    |    32 +-
 .../org/apache/solr/search/RankQParserPlugin.java  |   158 +
 .../src/java/org/apache/solr/search/RankQuery.java |     1 +
 .../org/apache/solr/search/ReRankCollector.java    |    12 +-
 .../java/org/apache/solr/search/ScoreFilter.java   |    21 -
 .../solr/search/SignificantTermsQParserPlugin.java |     6 +
 .../src/java/org/apache/solr/search/SolrCache.java |     5 +-
 .../org/apache/solr/search/SolrCacheHolder.java    |   150 -
 .../apache/solr/search/SolrConstantScoreQuery.java |     1 +
 .../org/apache/solr/search/SolrCoreParser.java     |     1 +
 .../apache/solr/search/SolrDocumentFetcher.java    |     3 +-
 .../java/org/apache/solr/search/SolrFilter.java    |     6 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  |   331 +-
 .../apache/solr/search/SurroundQParserPlugin.java  |     2 +-
 .../org/apache/solr/search/TermsQParserPlugin.java |     3 +
 .../TextLogisticRegressionQParserPlugin.java       |     4 +-
 .../org/apache/solr/search/ValueSourceParser.java  |   651 +-
 .../org/apache/solr/search/XmlQParserPlugin.java   |     3 +-
 .../java/org/apache/solr/search/facet/AggUtil.java |     8 +-
 .../apache/solr/search/facet/AggValueSource.java   |     3 +-
 .../java/org/apache/solr/search/facet/AvgAgg.java  |    22 +-
 .../org/apache/solr/search/facet/CountAgg.java     |     6 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |    12 +-
 .../org/apache/solr/search/facet/DocValuesAcc.java |   575 +-
 .../org/apache/solr/search/facet/FacetBucket.java  |    15 +-
 .../org/apache/solr/search/facet/FacetContext.java |    74 +
 .../apache/solr/search/facet/FacetDebugInfo.java   |     2 +-
 .../org/apache/solr/search/facet/FacetField.java   |    45 +-
 .../apache/solr/search/facet/FacetFieldMerger.java |     7 +-
 .../solr/search/facet/FacetFieldProcessor.java     |   130 +-
 .../search/facet/FacetFieldProcessorByArray.java   |    40 +-
 .../search/facet/FacetFieldProcessorByArrayDV.java |   177 +-
 .../FacetFieldProcessorByEnumTermsStream.java      |     1 +
 .../search/facet/FacetFieldProcessorByHashDV.java  |    31 +-
 .../org/apache/solr/search/facet/FacetHeatmap.java |    12 +-
 .../org/apache/solr/search/facet/FacetModule.java  |   307 +-
 .../org/apache/solr/search/facet/FacetParser.java  |   637 +
 .../apache/solr/search/facet/FacetProcessor.java   |    24 +-
 .../org/apache/solr/search/facet/FacetQuery.java   |     3 +-
 .../org/apache/solr/search/facet/FacetRange.java   |  1038 +-
 .../apache/solr/search/facet/FacetRangeMerger.java |     4 +-
 .../apache/solr/search/facet/FacetRangeParser.java |    76 +
 .../solr/search/facet/FacetRangeProcessor.java     |  1077 ++
 .../org/apache/solr/search/facet/FacetRequest.java |   747 +-
 .../solr/search/facet/FacetRequestSorted.java      |    58 +
 .../search/facet/FacetRequestSortedMerger.java     |    10 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |    27 +-
 .../org/apache/solr/search/facet/LegacyFacet.java  |     1 +
 .../org/apache/solr/search/facet/MinMaxAgg.java    |    21 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |     6 +-
 .../apache/solr/search/facet/PercentileAgg.java    |     8 +-
 .../solr/search/facet/ReadOnlyCountSlotAcc.java    |    31 +
 .../apache/solr/search/facet/RelatednessAgg.java   |   277 +-
 .../solr/search/facet/SimpleAggValueSource.java    |     1 +
 .../apache/solr/search/facet/SingletonDISI.java    |    48 +
 .../solr/search/facet/SingletonDocIterator.java    |    52 +
 .../java/org/apache/solr/search/facet/SlotAcc.java |   967 +-
 .../org/apache/solr/search/facet/StddevAgg.java    |    20 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |    12 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |    10 +-
 .../apache/solr/search/facet/SweepCountAware.java  |   187 +
 .../org/apache/solr/search/facet/SweepDISI.java    |    85 +
 .../apache/solr/search/facet/SweepDocIterator.java |    87 +
 .../apache/solr/search/facet/UnInvertedField.java  |    73 +-
 .../solr/search/facet/UnInvertedFieldAcc.java      |   174 +-
 .../org/apache/solr/search/facet/UnionDISI.java    |   100 +
 .../apache/solr/search/facet/UnionDocIterator.java |   107 +
 .../org/apache/solr/search/facet/UniqueAgg.java    |    45 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |    11 +-
 .../solr/search/facet/UniqueBlockFieldAgg.java     |     2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |     6 +-
 .../apache/solr/search/facet/UniqueSlotAcc.java    |    24 +-
 .../org/apache/solr/search/facet/VarianceAgg.java  |    20 +-
 .../search/function/CollapseScoreFunction.java     |     2 +
 .../solr/search/function/FieldNameValueSource.java |     1 +
 .../solr/search/function/FileFloatSource.java      |    37 +-
 .../solr/search/function/MultiStringFunction.java  |     3 +-
 .../solr/search/function/OrdFieldSource.java       |     1 +
 .../search/function/ReverseOrdFieldSource.java     |     1 +
 .../search/function/ValueSourceRangeFilter.java    |     5 +-
 .../distance/GeoDistValueSourceParser.java         |     4 +-
 .../search/function/distance/GeohashFunction.java  |     3 +
 .../distance/GeohashHaversineFunction.java         |     8 +-
 .../function/distance/HaversineConstFunction.java  |     8 +-
 .../function/distance/HaversineFunction.java       |     7 +-
 .../function/distance/StringDistanceFunction.java  |     3 +
 .../function/distance/VectorDistanceFunction.java  |     7 +-
 .../solr/search/grouping/CommandHandler.java       |    26 +-
 .../distributed/command/GroupConverter.java        |     6 +-
 .../grouping/distributed/command/QueryCommand.java |     1 +
 .../command/SearchGroupsFieldCommand.java          |     3 +
 .../distributed/command/TopGroupsFieldCommand.java |     2 +
 .../SearchGroupShardResponseProcessor.java         |     3 +-
 .../TopGroupsShardResponseProcessor.java           |     4 +-
 .../SearchGroupsResultTransformer.java             |     7 +-
 .../ShardResultTransformer.java                    |     2 +
 .../TopGroupsResultTransformer.java                |     3 +-
 .../GroupedEndResultTransformer.java               |     4 +-
 .../solr/search/join/BlockJoinChildQParser.java    |     7 +-
 .../solr/search/join/BlockJoinParentQParser.java   |   105 +-
 .../search/join/ChildFieldValueSourceParser.java   |     6 +-
 .../search/join/CrossCollectionJoinQParser.java    |    92 +
 .../solr/search/join/CrossCollectionJoinQuery.java |   380 +
 .../apache/solr/search/join/FiltersQParser.java    |    91 +-
 .../solr/search/join/GraphEdgeCollector.java       |   207 +
 .../org/apache/solr/search/join/GraphQuery.java    |     2 +-
 .../solr/search/join/GraphTermsCollector.java      |   202 -
 .../solr/search/join/ScoreJoinQParserPlugin.java   |    19 +-
 .../org/apache/solr/search/join/XCJFQParser.java   |    90 -
 .../apache/solr/search/join/XCJFQParserPlugin.java |    66 -
 .../org/apache/solr/search/join/XCJFQuery.java     |   380 -
 .../apache/solr/search/mlt/CloudMLTQParser.java    |     4 +
 .../apache/solr/search/mlt/SimpleMLTQParser.java   |     1 +
 .../similarities/BooleanSimilarityFactory.java     |    36 +
 .../solr/search/stats/ExactSharedStatsCache.java   |     6 +-
 .../apache/solr/search/stats/ExactStatsCache.java  |    22 +-
 .../apache/solr/search/stats/LRUStatsCache.java    |    10 +-
 .../org/apache/solr/search/stats/StatsCache.java   |     2 +-
 .../org/apache/solr/search/stats/StatsUtil.java    |    17 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |    16 +-
 .../apache/solr/security/AuthenticationPlugin.java |    29 +-
 .../apache/solr/security/AuthorizationContext.java |    27 +-
 .../solr/security/AutorizationEditOperation.java   |     9 +
 .../org/apache/solr/security/BasicAuthPlugin.java  |    21 +-
 .../org/apache/solr/security/CertAuthPlugin.java   |    51 +
 .../security/DelegationTokenKerberosFilter.java    |    19 +-
 .../ExternalRoleRuleBasedAuthorizationPlugin.java  |    52 +
 .../org/apache/solr/security/HadoopAuthPlugin.java |    44 +-
 .../org/apache/solr/security/JWTAuthPlugin.java    |    52 +-
 .../org/apache/solr/security/JWTPrincipal.java     |     4 +-
 .../solr/security/JWTVerificationkeyResolver.java  |     8 +-
 .../org/apache/solr/security/KerberosFilter.java   |     6 +-
 .../org/apache/solr/security/KerberosPlugin.java   |    57 +-
 .../solr/security/MultiDestinationAuditLogger.java |     6 +-
 .../solr/security/PKIAuthenticationPlugin.java     |    42 +-
 .../java/org/apache/solr/security/Permission.java  |     9 +-
 .../solr/security/PermissionNameProvider.java      |     5 +-
 .../security/RuleBasedAuthorizationPlugin.java     |   307 +-
 .../security/RuleBasedAuthorizationPluginBase.java |   347 +
 .../security/Sha256AuthenticationProvider.java     |    13 +-
 .../solr/security/SolrLogAuditLoggerPlugin.java    |     4 +-
 .../apache/solr/servlet/DirectSolrConnection.java  |     4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |    57 +-
 .../apache/solr/servlet/LoadAdminUiServlet.java    |    31 +-
 .../org/apache/solr/servlet/QueryRateLimiter.java  |    55 +
 .../org/apache/solr/servlet/RateLimitManager.java  |   181 +
 .../apache/solr/servlet/RequestRateLimiter.java    |   168 +
 .../org/apache/solr/servlet/ResponseUtils.java     |     5 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |   160 +-
 .../apache/solr/servlet/SolrRequestParsers.java    |   151 +-
 .../solr/spelling/AbstractLuceneSpellChecker.java  |     3 +-
 .../solr/spelling/DirectSolrSpellChecker.java      |     7 +-
 .../solr/spelling/FileBasedSpellChecker.java       |     2 +-
 .../solr/spelling/IndexBasedSpellChecker.java      |     2 +-
 .../org/apache/solr/spelling/QueryConverter.java   |     3 +-
 .../org/apache/solr/spelling/SolrSpellChecker.java |     2 +-
 .../apache/solr/spelling/SpellCheckCollator.java   |    16 +-
 .../solr/spelling/WordBreakSolrSpellChecker.java   |     8 +-
 .../solr/spelling/suggest/DictionaryFactory.java   |     3 +-
 .../DocumentExpressionDictionaryFactory.java       |    20 +-
 .../solr/spelling/suggest/LookupFactory.java       |     2 +-
 .../solr/spelling/suggest/SolrSuggester.java       |    27 +-
 .../apache/solr/spelling/suggest/Suggester.java    |    14 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |     2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |     2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |     2 +-
 .../spelling/suggest/fst/FSTLookupFactory.java     |     2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |     2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |     2 +-
 .../spelling/suggest/fst/WFSTLookupFactory.java    |     2 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |     4 +-
 .../spelling/suggest/tst/TSTLookupFactory.java     |     2 +-
 .../solr/store/blockcache/BlockDirectory.java      |     2 +-
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |    10 +-
 .../org/apache/solr/store/hdfs/HdfsFileWriter.java |     2 +
 .../solr/store/hdfs/HdfsLocalityReporter.java      |    10 +-
 .../apache/solr/store/hdfs/HdfsLockFactory.java    |     4 +
 .../org/apache/solr/update/AddUpdateCommand.java   |     1 +
 .../org/apache/solr/update/CdcrTransactionLog.java |     8 +-
 .../java/org/apache/solr/update/CdcrUpdateLog.java |     6 +-
 .../java/org/apache/solr/update/CommitTracker.java |    25 +-
 .../apache/solr/update/DefaultSolrCoreState.java   |     8 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |    37 +-
 .../org/apache/solr/update/DocumentBuilder.java    |     1 +
 .../org/apache/solr/update/HdfsTransactionLog.java |    10 +-
 .../java/org/apache/solr/update/HdfsUpdateLog.java |    25 +-
 .../org/apache/solr/update/IndexFingerprint.java   |     5 +-
 .../org/apache/solr/update/LoggingInfoStream.java  |     4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   149 +-
 .../org/apache/solr/update/PeerSyncWithLeader.java |    56 +-
 .../org/apache/solr/update/SolrCmdDistributor.java |    12 +-
 .../java/org/apache/solr/update/SolrCoreState.java |     3 +-
 .../org/apache/solr/update/SolrIndexConfig.java    |    29 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |    28 +-
 .../org/apache/solr/update/SolrIndexWriter.java    |    12 +-
 .../apache/solr/update/StreamingSolrClients.java   |     2 +-
 .../org/apache/solr/update/TransactionLog.java     |   174 +-
 .../java/org/apache/solr/update/UpdateHandler.java |     8 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |    99 +-
 .../org/apache/solr/update/UpdateShardHandler.java |    16 +-
 .../java/org/apache/solr/update/VersionInfo.java   |     4 +
 ...AbstractDefaultValueUpdateProcessorFactory.java |     2 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |    11 +-
 ...llValuesOrNoneFieldMutatingUpdateProcessor.java |     6 +-
 .../processor/AtomicUpdateDocumentMerger.java      |    58 +-
 .../processor/AtomicUpdateProcessorFactory.java    |     3 +-
 .../solr/update/processor/CdcrUpdateProcessor.java |     2 +
 .../processor/CdcrUpdateProcessorFactory.java      |     2 +-
 .../ClassificationUpdateProcessorFactory.java      |     2 +-
 .../CloneFieldUpdateProcessorFactory.java          |    17 +-
 .../ConcatFieldUpdateProcessorFactory.java         |     2 +-
 .../CountFieldValuesUpdateProcessorFactory.java    |     2 +-
 .../DefaultValueUpdateProcessorFactory.java        |     2 +-
 .../processor/DistributedUpdateProcessor.java      |    83 +-
 .../processor/DistributedZkUpdateProcessor.java    |    54 +-
 .../DocBasedVersionConstraintsProcessor.java       |     8 +-
 ...DocBasedVersionConstraintsProcessorFactory.java |     7 +-
 .../DocExpirationUpdateProcessorFactory.java       |    25 +-
 .../FieldLengthUpdateProcessorFactory.java         |     2 +-
 .../processor/FieldMutatingUpdateProcessor.java    |     7 +-
 .../FieldMutatingUpdateProcessorFactory.java       |    11 +-
 .../FieldNameMutatingUpdateProcessorFactory.java   |     2 +-
 .../FieldValueMutatingUpdateProcessor.java         |    12 +-
 ...IgnoreCommitOptimizeUpdateProcessorFactory.java |     2 +-
 .../IgnoreLargeDocumentProcessorFactory.java       |     5 +-
 .../LastFieldValueUpdateProcessorFactory.java      |     1 +
 .../processor/LogUpdateProcessorFactory.java       |    31 +-
 .../MaxFieldValueUpdateProcessorFactory.java       |     7 +-
 .../MinFieldValueUpdateProcessorFactory.java       |     7 +-
 .../ParseBooleanFieldUpdateProcessorFactory.java   |     4 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |     9 +-
 .../ParseDoubleFieldUpdateProcessorFactory.java    |     6 +-
 .../ParseFloatFieldUpdateProcessorFactory.java     |     6 +-
 .../ParseIntFieldUpdateProcessorFactory.java       |     6 +-
 .../ParseLongFieldUpdateProcessorFactory.java      |     6 +-
 .../ParseNumericFieldUpdateProcessorFactory.java   |     2 +-
 .../PreAnalyzedUpdateProcessorFactory.java         |     2 +-
 .../processor/RegexReplaceProcessorFactory.java    |     2 +-
 .../update/processor/RegexpBoostProcessor.java     |    13 +-
 .../RemoveBlankFieldUpdateProcessorFactory.java    |     2 +-
 .../processor/RunUpdateProcessorFactory.java       |   123 +-
 .../processor/SignatureUpdateProcessorFactory.java |     2 +-
 .../processor/SimpleUpdateProcessorFactory.java    |     3 +-
 .../SkipExistingDocumentsProcessorFactory.java     |     2 +-
 .../StatelessScriptUpdateProcessorFactory.java     |     5 +-
 .../update/processor/TolerantUpdateProcessor.java  |     2 +-
 .../processor/TrimFieldUpdateProcessorFactory.java |     2 +-
 .../TruncateFieldUpdateProcessorFactory.java       |     2 +-
 .../update/processor/URLClassifyProcessor.java     |    60 +-
 .../processor/UUIDUpdateProcessorFactory.java      |     2 +-
 .../UniqFieldsUpdateProcessorFactory.java          |     3 +-
 .../processor/UpdateRequestProcessorChain.java     |    18 +-
 .../processor/UpdateRequestProcessorFactory.java   |     2 +-
 .../org/apache/solr/util/ConcurrentLRUCache.java   |    10 +-
 .../src/java/org/apache/solr/util/CryptoKeys.java  |     5 +-
 .../src/java/org/apache/solr/util/DOMUtil.java     |     6 +-
 .../apache/solr/util/DefaultSolrThreadFactory.java |    49 -
 .../src/java/org/apache/solr/util/DynamicMap.java  |    55 +
 .../src/java/org/apache/solr/util/ExportTool.java  |    61 +-
 .../src/java/org/apache/solr/util/FSHDFSUtils.java |    14 +-
 .../java/org/apache/solr/util/FloatConsumer.java   |    39 +
 .../org/apache/solr/util/IntFloatDynamicMap.java   |   118 +
 .../org/apache/solr/util/IntIntDynamicMap.java     |   120 +
 .../org/apache/solr/util/IntLongDynamicMap.java    |   120 +
 .../apache/solr/util/MockSearchableSolrClient.java |     3 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   126 +-
 .../src/java/org/apache/solr/util/RTimerTree.java  |     1 +
 .../src/java/org/apache/solr/util/SolrCLI.java     |  1590 +--
 .../apache/solr/util/SolrFileCleaningTracker.java  |   147 -
 .../java/org/apache/solr/util/SolrLogLayout.java   |     1 +
 .../java/org/apache/solr/util/SolrLogPostTool.java |   294 +-
 .../java/org/apache/solr/util/SolrPluginUtils.java |    27 +-
 .../org/apache/solr/util/StartupLoggingUtils.java  |     3 +-
 .../java/org/apache/solr/util/TestInjection.java   |    17 +-
 .../solr/util/circuitbreaker/CircuitBreaker.java   |    56 +
 .../util/circuitbreaker/CircuitBreakerManager.java |   134 +
 .../util/circuitbreaker/MemoryCircuitBreaker.java  |   114 +
 .../SSLCredentialProviderFactory.java              |     8 +-
 .../providers/HadoopSSLCredentialProvider.java     |     2 +-
 .../solr/util/plugin/AbstractPluginLoader.java     |    16 +-
 .../util/plugin/NamedListInitializedPlugin.java    |     2 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |    12 +-
 .../solr/util/tracing/SolrRequestCarrier.java      |     3 +-
 .../apache/solr/util/xslt/TransformerProvider.java |    10 +-
 .../resources/EditableSolrConfigAttributes.json    |     5 +-
 solr/core/src/resources/ImplicitPlugins.json       |    13 +-
 solr/core/src/test-files/log4j2.xml                |    44 +-
 solr/core/src/test-files/runtimecode/MyPlugin.java |    43 +
 .../runtimecode/containerplugin.v.1.jar.bin        |   Bin 0 -> 867 bytes
 .../runtimecode/containerplugin.v.2.jar.bin        |   Bin 0 -> 867 bytes
 .../test-files/runtimecode/schema-plugins.jar.bin  |   Bin 0 -> 6814 bytes
 solr/core/src/test-files/runtimecode/sig.txt       |    13 +
 .../collection1/conf/schema-booleansimilarity.xml  |    35 +
 .../solr/collection1/conf/schema-rank-fields.xml   |    27 +
 .../test-files/solr/collection1/conf/schema15.xml  |     3 +
 .../solr/collection1/conf/schema_latest.xml        |     4 +
 .../conf/solrconfig-cache-enable-disable.xml       |    10 +
 .../solr/collection1/conf/solrconfig-follower.xml  |    59 +
 ...rconfig-slave1.xml => solrconfig-follower1.xml} |     0
 ...rottled.xml => solrconfig-leader-throttled.xml} |     0
 .../solr/collection1/conf/solrconfig-leader.xml    |    70 +
 .../conf/solrconfig-leader1-keepOneBackup.xml      |    49 +
 .../solr/collection1/conf/solrconfig-leader1.xml   |    68 +
 .../solr/collection1/conf/solrconfig-leader2.xml   |    66 +
 .../solr/collection1/conf/solrconfig-leader3.xml   |    67 +
 .../solr/collection1/conf/solrconfig-master.xml    |    70 -
 .../conf/solrconfig-master1-keepOneBackup.xml      |    49 -
 .../solr/collection1/conf/solrconfig-master1.xml   |    68 -
 .../solr/collection1/conf/solrconfig-master2.xml   |    66 -
 .../solr/collection1/conf/solrconfig-master3.xml   |    67 -
 .../conf/solrconfig-memory-circuitbreaker.xml      |    95 +
 .../solr/collection1/conf/solrconfig-repeater.xml  |     6 +-
 .../conf/solrconfig-replication-legacy.xml         |    62 +
 .../solr/collection1/conf/solrconfig-slave.xml     |    59 -
 .../solr/collection1/conf/solrconfig-tlog.xml      |     4 -
 .../conf/solrconfig.snippet.randomindexconfig.xml  |     1 +
 .../configsets/{xcjf => ccjoin}/conf/schema.xml    |     0
 .../solr/configsets/ccjoin/conf/solrconfig.xml     |    62 +
 .../solr/configsets/xcjf/conf/solrconfig.xml       |    72 -
 .../security/hadoop_kerberos_authz_config.json     |    37 +
 .../solr/simSnapshot/autoscalingState.json         |  3923 ------
 .../test-files/solr/simSnapshot/clusterState.json  |  2854 ----
 .../test-files/solr/simSnapshot/distribState.json  |   206 -
 .../test-files/solr/simSnapshot/managerState.json  |     1 -
 .../src/test-files/solr/simSnapshot/nodeState.json |  3823 ------
 .../test-files/solr/simSnapshot/statistics.json    |  2045 ---
 solr/core/src/test-files/solr/solr-50-all.xml      |     1 +
 solr/core/src/test-files/solr/solr-jmxreporter.xml |     1 -
 .../core/src/test-files/solr/solr-solrreporter.xml |     7 +-
 .../test-files/solr/solr-trackingshardhandler.xml  |     1 -
 solr/core/src/test-files/solr/solr.xml             |     2 +-
 .../src/test/org/apache/hadoop/fs/FileUtil.java    |    33 +-
 .../datanode/fsdataset/impl/BlockPoolSlice.java    |    50 +-
 .../test/org/apache/hadoop/http/HttpServer2.java   |    55 +-
 .../test/org/apache/hadoop/util/DiskChecker.java   |     4 +-
 .../org/apache/solr/BasicFunctionalityTest.java    |    12 +-
 .../src/test/org/apache/solr/CursorPagingTest.java |     8 +
 .../apache/solr/HelloWorldSolrCloudTestCase.java   |     4 +-
 .../src/test/org/apache/solr/OutputWriterTest.java |     2 +-
 .../src/test/org/apache/solr/SolrInfoBeanTest.java |     6 +-
 .../test/org/apache/solr/TestCrossCoreJoin.java    |     4 +-
 .../org/apache/solr/TestDistributedGrouping.java   |     3 +
 .../org/apache/solr/TestDistributedSearch.java     |    46 +-
 .../test/org/apache/solr/TestGroupingSearch.java   |   207 +-
 solr/core/src/test/org/apache/solr/TestJoin.java   |    38 +-
 .../test/org/apache/solr/TestRandomDVFaceting.java |    10 +-
 .../test/org/apache/solr/TestRandomFaceting.java   |    22 +-
 .../org/apache/solr/TestSolrCoreProperties.java    |     1 +
 .../solr/analysis/TestDeprecatedFilters.java       |     2 +-
 .../apache/solr/analysis/TokenizerChainTest.java   |     1 +
 .../TestEmbeddedSolrServerAdminHandler.java        |    15 +-
 .../TestEmbeddedSolrServerConstructors.java        |     5 +-
 .../test/org/apache/solr/cloud/AddReplicaTest.java |    12 +-
 .../apache/solr/cloud/AliasIntegrationTest.java    |     2 +-
 .../cloud/AssignBackwardCompatibilityTest.java     |     5 +-
 .../apache/solr/cloud/BasicDistributedZk2Test.java |     8 +-
 .../apache/solr/cloud/BasicDistributedZkTest.java  |    18 +-
 .../test/org/apache/solr/cloud/BasicZkTest.java    |   181 -
 .../solr/cloud/ChaosMonkeyNothingIsSafeTest.java   |     8 +-
 ...aosMonkeyNothingIsSafeWithPullReplicasTest.java |    11 +-
 .../solr/cloud/ChaosMonkeySafeLeaderTest.java      |     6 +-
 .../ChaosMonkeySafeLeaderWithPullReplicasTest.java |    15 +-
 .../solr/cloud/ChaosMonkeyShardSplitTest.java      |    22 +-
 .../test/org/apache/solr/cloud/CloudTestUtils.java |   189 -
 .../apache/solr/cloud/ClusterStateMockUtil.java    |    13 +-
 .../org/apache/solr/cloud/ClusterStateTest.java    |     8 +-
 .../org/apache/solr/cloud/CollectionPropsTest.java |     9 +-
 .../solr/cloud/CollectionStateFormat2Test.java     |    71 -
 .../solr/cloud/CollectionStateZnodeTest.java       |    70 +
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |    50 +-
 .../org/apache/solr/cloud/ConfigSetsAPITest.java   |     1 +
 .../apache/solr/cloud/ConnectionManagerTest.java   |     4 +-
 .../apache/solr/cloud/CreateRoutedAliasTest.java   |     4 -
 .../solr/cloud/DeleteInactiveReplicaTest.java      |     8 +-
 .../cloud/DeleteLastCustomShardedReplicaTest.java  |     1 -
 .../test/org/apache/solr/cloud/DeleteNodeTest.java |     8 +-
 .../org/apache/solr/cloud/DeleteReplicaTest.java   |    38 +-
 .../org/apache/solr/cloud/DeleteShardTest.java     |     1 -
 .../apache/solr/cloud/DistribCursorPagingTest.java |     1 +
 .../DistribDocExpirationUpdateProcessorTest.java   |     5 +-
 .../solr/cloud/DistribJoinFromCollectionTest.java  |     8 +-
 .../apache/solr/cloud/DistributedQueueTest.java    |     4 +-
 .../solr/cloud/DistributedVersionInfoTest.java     |     8 +-
 .../apache/solr/cloud/DocValuesNotIndexedTest.java |     1 -
 .../org/apache/solr/cloud/ForceLeaderTest.java     |    26 +-
 .../solr/cloud/FullSolrCloudDistribCmdsTest.java   |     6 +-
 .../cloud/FullThrottleStoppableIndexingThread.java |     2 +-
 .../apache/solr/cloud/HealthCheckHandlerTest.java  |   179 -
 .../solr/cloud/HttpPartitionOnCommitTest.java      |    37 +-
 .../org/apache/solr/cloud/HttpPartitionTest.java   |    45 +-
 .../apache/solr/cloud/KerberosTestServices.java    |     6 +-
 .../solr/cloud/LeaderElectionContextKeyTest.java   |     1 -
 .../solr/cloud/LeaderElectionIntegrationTest.java  |     2 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |     8 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java    |     6 +-
 .../cloud/LeaderFailureAfterFreshStartTest.java    |     8 +-
 .../apache/solr/cloud/LeaderTragicEventTest.java   |    17 +-
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      |     6 +-
 .../solr/cloud/LegacyCloudClusterPropTest.java     |   180 -
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |    28 +-
 .../org/apache/solr/cloud/MigrateRouteKeyTest.java |    14 +-
 .../solr/cloud/MissingSegmentRecoveryTest.java     |     1 -
 .../apache/solr/cloud/MockSimpleZkController.java  |     5 +-
 .../test/org/apache/solr/cloud/MockSolrSource.java |     2 +-
 .../solr/cloud/MoveReplicaHDFSFailoverTest.java    |     4 +
 .../org/apache/solr/cloud/MoveReplicaHDFSTest.java |     4 +
 .../org/apache/solr/cloud/MoveReplicaTest.java     |    21 +-
 .../solr/cloud/MultiSolrCloudTestCaseTest.java     |     6 +-
 .../apache/solr/cloud/MultiThreadedOCPTest.java    |    71 +-
 .../solr/cloud/NestedShardedAtomicUpdateTest.java  |     4 +
 .../org/apache/solr/cloud/NodeMutatorTest.java     |     6 +-
 .../OutOfBoxZkACLAndCredentialsProvidersTest.java  |    12 +-
 ...OverriddenZkACLAndCredentialsProvidersTest.java |    10 +-
 .../OverseerCollectionConfigSetProcessorTest.java  |    94 +-
 .../solr/cloud/OverseerModifyCollectionTest.java   |     1 +
 .../org/apache/solr/cloud/OverseerRolesTest.java   |    10 +-
 .../org/apache/solr/cloud/OverseerStatusTest.java  |     5 +-
 .../apache/solr/cloud/OverseerTaskQueueTest.java   |     1 +
 .../test/org/apache/solr/cloud/OverseerTest.java   |   199 +-
 .../apache/solr/cloud/PeerSyncReplicationTest.java |    14 +-
 .../test/org/apache/solr/cloud/RecoveryZkTest.java |     1 -
 .../apache/solr/cloud/ReindexCollectionTest.java   |     3 +-
 .../apache/solr/cloud/ReplaceNodeNoTargetTest.java |   122 -
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |    12 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   |    25 +-
 .../solr/cloud/RestartWhileUpdatingTest.java       |     5 +-
 .../org/apache/solr/cloud/RollingRestartTest.java  |    12 +-
 .../test/org/apache/solr/cloud/RouteFieldTest.java |   163 +
 .../cloud/RoutingToNodesWithPropertiesTest.java    |   241 -
 .../org/apache/solr/cloud/SSLMigrationTest.java    |     3 +-
 .../apache/solr/cloud/SaslZkACLProviderTest.java   |    14 +-
 .../apache/solr/cloud/ShardRoutingCustomTest.java  |     3 -
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |    32 +-
 .../test/org/apache/solr/cloud/SliceStateTest.java |     4 +-
 .../apache/solr/cloud/SolrCloudExampleTest.java    |    23 +-
 .../org/apache/solr/cloud/SolrXmlInZkTest.java     |     8 +-
 .../test/org/apache/solr/cloud/SplitShardTest.java |    15 +-
 .../test/org/apache/solr/cloud/SyncSliceTest.java  |     7 +-
 .../solr/cloud/SystemCollectionCompatTest.java     |    16 +-
 .../solr/cloud/TestAuthenticationFramework.java    |    19 +-
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |     2 +-
 .../apache/solr/cloud/TestCloudConsistency.java    |     6 +-
 .../TestCloudPhrasesIdentificationComponent.java   |     4 +
 .../org/apache/solr/cloud/TestCloudPivotFacet.java |     7 +-
 .../org/apache/solr/cloud/TestCloudRecovery.java   |     1 -
 .../org/apache/solr/cloud/TestCloudRecovery2.java  |     1 -
 .../solr/cloud/TestCloudSearcherWarming.java       |    22 +-
 .../apache/solr/cloud/TestClusterProperties.java   |    12 -
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |    41 +-
 .../solr/cloud/TestConfigSetsAPIExclusivity.java   |     4 +
 .../solr/cloud/TestConfigSetsAPIZkFailure.java     |    30 +-
 .../test/org/apache/solr/cloud/TestCryptoKeys.java |   208 -
 .../cloud/TestDeleteCollectionOnDownNodes.java     |     1 -
 .../cloud/TestDynamicFieldNamesIndexCorrectly.java |     9 +-
 .../org/apache/solr/cloud/TestHashPartitioner.java |     1 +
 .../org/apache/solr/cloud/TestLazySolrCluster.java |    97 +
 .../solr/cloud/TestLeaderElectionZkExpiry.java     |    13 +-
 .../solr/cloud/TestMiniSolrCloudClusterSSL.java    |    16 +-
 .../solr/cloud/TestOnReconnectListenerSupport.java |     5 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |    32 +-
 .../solr/cloud/TestPullReplicaErrorHandling.java   |    22 +-
 .../solr/cloud/TestQueryingOnDownCollection.java   |     2 +
 .../solr/cloud/TestRandomRequestDistribution.java  |    13 +-
 .../apache/solr/cloud/TestRebalanceLeaders.java    |     2 +-
 .../apache/solr/cloud/TestRequestForwarding.java   |     1 -
 .../apache/solr/cloud/TestSSLRandomization.java    |    12 +-
 .../solr/cloud/TestSkipOverseerOperations.java     |     1 -
 .../cloud/TestSolrCloudWithDelegationTokens.java   |    50 +-
 .../solr/cloud/TestSolrCloudWithKerberosAlt.java   |    12 +-
 .../TestSolrCloudWithSecureImpersonation.java      |    21 +-
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |    23 +-
 .../solr/cloud/TestStressInPlaceUpdates.java       |    19 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |    12 +-
 .../solr/cloud/TestTlogReplayVsRecovery.java       |     4 +-
 .../org/apache/solr/cloud/TestTlogReplica.java     |   100 +-
 .../TestTolerantUpdateProcessorRandomCloud.java    |    10 +-
 .../org/apache/solr/cloud/TestUtilizeNode.java     |   181 -
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |    10 +-
 .../org/apache/solr/cloud/TestWithCollection.java  |   605 -
 .../test/org/apache/solr/cloud/TestZkChroot.java   |   169 -
 .../cloud/TlogReplayBufferedWhileIndexingTest.java |     5 +-
 .../apache/solr/cloud/UnloadDistributedZkTest.java |     8 +-
 .../VMParamsZkACLAndCredentialsProvidersTest.java  |    10 +-
 .../src/test/org/apache/solr/cloud/ZkCLITest.java  |    10 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |    42 +-
 .../org/apache/solr/cloud/ZkNodePropsTest.java     |     4 +-
 .../org/apache/solr/cloud/ZkShardTermsTest.java    |     1 -
 .../org/apache/solr/cloud/ZkSolrClientTest.java    |    12 +-
 .../AbstractCloudBackupRestoreTestCase.java        |    59 +-
 .../solr/cloud/api/collections/AssignTest.java     |   203 -
 .../AsyncCallRequestStatusResponseTest.java        |     1 -
 .../api/collections/CollectionReloadTest.java      |     4 +-
 .../collections/CollectionTooManyReplicasTest.java |    68 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |    28 +-
 .../CollectionsAPIDistributedZkTest.java           |    50 +-
 .../ConcurrentCreateCollectionTest.java            |   293 -
 .../api/collections/CustomCollectionTest.java      |     8 -
 .../HdfsCollectionsAPIDistributedZkTest.java       |     4 +
 .../solr/cloud/api/collections/ShardSplitTest.java |   112 +-
 .../SimpleCollectionCreateDeleteTest.java          |     7 +-
 .../cloud/api/collections/SplitByPrefixTest.java   |     3 +-
 .../cloud/api/collections/TestCollectionAPI.java   |   136 +-
 .../TestCollectionsAPIViaSolrCloudCluster.java     |     7 +-
 .../collections/TestHdfsCloudBackupRestore.java    |     5 +
 .../collections/TestLocalFSCloudBackupRestore.java |     3 +-
 .../api/collections/TestReplicaProperties.java     |     6 +-
 .../TestRequestStatusCollectionAPI.java            |     5 +-
 .../AutoAddReplicasIntegrationTest.java            |   435 -
 .../autoscaling/AutoAddReplicasPlanActionTest.java |   258 -
 .../cloud/autoscaling/AutoScalingHandlerTest.java  |  1089 --
 .../solr/cloud/autoscaling/CapturedEvent.java      |    65 -
 .../cloud/autoscaling/ComputePlanActionTest.java   |   735 --
 .../cloud/autoscaling/ExecutePlanActionTest.java   |   380 -
 .../HdfsAutoAddReplicasIntegrationTest.java        |    57 -
 .../cloud/autoscaling/HttpTriggerListenerTest.java |   207 -
 .../IndexSizeTriggerMixedBoundsTest.java           |   372 -
 .../IndexSizeTriggerSizeEstimationTest.java        |   320 -
 .../cloud/autoscaling/IndexSizeTriggerTest.java    |   759 --
 .../autoscaling/MetricTriggerIntegrationTest.java  |   241 -
 .../solr/cloud/autoscaling/MetricTriggerTest.java  |   136 -
 .../NodeAddedTriggerIntegrationTest.java           |   316 -
 .../cloud/autoscaling/NodeAddedTriggerTest.java    |   342 -
 .../NodeLostTriggerIntegrationTest.java            |   352 -
 .../cloud/autoscaling/NodeLostTriggerTest.java     |   391 -
 .../autoscaling/NodeMarkersRegistrationTest.java   |   354 -
 .../cloud/autoscaling/RestoreTriggerStateTest.java |   166 -
 .../ScheduledMaintenanceTriggerTest.java           |   379 -
 .../ScheduledTriggerIntegrationTest.java           |   148 -
 .../cloud/autoscaling/ScheduledTriggerTest.java    |   141 -
 .../SearchRateTriggerIntegrationTest.java          |   742 --
 .../cloud/autoscaling/SearchRateTriggerTest.java   |   357 -
 .../cloud/autoscaling/SystemLogListenerTest.java   |   289 -
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |   532 -
 .../TriggerCooldownIntegrationTest.java            |   227 -
 .../cloud/autoscaling/TriggerEventQueueTest.java   |    98 -
 .../cloud/autoscaling/TriggerIntegrationTest.java  |   713 -
 .../TriggerSetPropertiesIntegrationTest.java       |   259 -
 .../autoscaling/sim/SimSolrCloudTestCase.java      |   253 -
 .../sim/TestSimClusterStateProvider.java           |   228 -
 .../autoscaling/sim/TestSimComputePlanAction.java  |   378 -
 .../sim/TestSimDistribStateManager.java            |   378 -
 .../autoscaling/sim/TestSimDistributedQueue.java   |   221 -
 .../autoscaling/sim/TestSimExecutePlanAction.java  |   217 -
 .../autoscaling/sim/TestSimExtremeIndexing.java    |   144 -
 .../sim/TestSimGenericDistributedQueue.java        |    38 -
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |   842 --
 .../autoscaling/sim/TestSimNodeAddedTrigger.java   |   329 -
 .../autoscaling/sim/TestSimNodeLostTrigger.java    |   347 -
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |   376 -
 .../cloud/autoscaling/sim/TestSimScenario.java     |   166 -
 .../autoscaling/sim/TestSimTriggerIntegration.java |  1536 ---
 .../solr/cloud/autoscaling/sim/TestSimUtils.java   |    95 -
 .../autoscaling/sim/TestSnapshotCloudManager.java  |   266 -
 .../solr/cloud/cdcr/BaseCdcrDistributedZkTest.java |    28 +-
 .../solr/cloud/cdcr/CdcrBidirectionalTest.java     |    34 +-
 .../apache/solr/cloud/cdcr/CdcrBootstrapTest.java  |    31 +-
 .../solr/cloud/cdcr/CdcrOpsAndBoundariesTest.java  |     5 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |    96 +-
 .../solr/cloud/cdcr/CdcrRequestHandlerTest.java    |     5 +
 .../org/apache/solr/cloud/cdcr/CdcrTestsUtil.java  |     6 +-
 .../cloud/cdcr/CdcrVersionReplicationTest.java     |     2 +-
 .../solr/cloud/hdfs/HDFSCollectionsAPITest.java    |     4 +
 .../cloud/hdfs/HdfsBasicDistributedZk2Test.java    |     4 +
 .../cloud/hdfs/HdfsBasicDistributedZkTest.java     |     4 +
 .../hdfs/HdfsChaosMonkeyNothingIsSafeTest.java     |     4 +
 .../cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java  |     4 +
 .../apache/solr/cloud/hdfs/HdfsNNFailoverTest.java |     6 +-
 .../solr/cloud/hdfs/HdfsRecoverLeaseTest.java      |     4 +
 .../apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java |     4 +
 .../cloud/hdfs/HdfsRestartWhileUpdatingTest.java   |     4 +
 .../apache/solr/cloud/hdfs/HdfsSyncSliceTest.java  |     6 +-
 .../apache/solr/cloud/hdfs/HdfsThreadLeakTest.java |     4 +
 .../HdfsTlogReplayBufferedWhileIndexingTest.java   |     4 +
 .../cloud/hdfs/HdfsUnloadDistributedZkTest.java    |     4 +
 .../hdfs/HdfsWriteToMultipleCollectionsTest.java   |     6 +-
 .../org/apache/solr/cloud/hdfs/StressHdfsTest.java |    13 +-
 .../cloud/overseer/TestClusterStateMutator.java    |     9 +-
 .../overseer/ZkCollectionPropsCachingTest.java     |     4 -
 .../solr/cloud/overseer/ZkStateReaderTest.java     |   111 +-
 .../solr/cloud/overseer/ZkStateWriterTest.java     |   150 +-
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java |     3 +
 .../org/apache/solr/cloud/rule/RuleEngineTest.java |    14 +-
 .../test/org/apache/solr/cloud/rule/RulesTest.java |    78 +-
 .../solr/common/cloud/ZkDynamicConfigTest.java     |    69 +
 .../solr/core/BlobRepositoryMockingTest.java       |    10 +-
 .../test/org/apache/solr/core/CoreSorterTest.java  |   310 +-
 .../solr/core/CountUsageValueSourceParser.java     |     3 +-
 .../org/apache/solr/core/DirectoryFactoryTest.java |     9 +-
 .../apache/solr/core/DummyValueSourceParser.java   |     3 +-
 .../solr/core/ExitableDirectoryReaderTest.java     |     6 +
 .../org/apache/solr/core/FakeDeletionPolicy.java   |     6 +-
 .../apache/solr/core/HdfsDirectoryFactoryTest.java |     5 +
 .../src/test/org/apache/solr/core/HelloStream.java |    10 +-
 .../org/apache/solr/core/MockEventListener.java    |     2 +-
 .../core/MockQuerySenderListenerReqHandler.java    |     2 +-
 .../apache/solr/core/MockShardHandlerFactory.java  |     1 +
 .../org/apache/solr/core/QueryResultKeyTest.java   |    16 +-
 .../org/apache/solr/core/RequestHandlersTest.java  |     1 +
 .../org/apache/solr/core/ResourceLoaderTest.java   |    17 +-
 .../solr/core/SolrCoreCheckLockOnStartupTest.java  |     6 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |     8 +-
 .../org/apache/solr/core/TestCodecSupport.java     |     2 +-
 .../src/test/org/apache/solr/core/TestConfig.java  |    40 +-
 .../org/apache/solr/core/TestConfigOverlay.java    |     3 +
 .../apache/solr/core/TestConfigSetImmutable.java   |     3 +
 .../apache/solr/core/TestConfigSetProperties.java  |     4 +
 .../test/org/apache/solr/core/TestConfigSets.java  |    30 +-
 .../org/apache/solr/core/TestCoreContainer.java    |   104 +-
 .../org/apache/solr/core/TestCoreDiscovery.java    |    14 +-
 .../org/apache/solr/core/TestDirectoryFactory.java |     2 +-
 .../org/apache/solr/core/TestDynamicLoading.java   |   287 -
 .../apache/solr/core/TestDynamicLoadingUrl.java    |   127 -
 .../test/org/apache/solr/core/TestDynamicURP.java  |   111 -
 .../test/org/apache/solr/core/TestInitParams.java  |    12 +-
 .../org/apache/solr/core/TestJmxIntegration.java   |    13 +-
 .../test/org/apache/solr/core/TestLazyCores.java   |    78 +-
 .../apache/solr/core/TestShardHandlerFactory.java  |     1 +
 .../apache/solr/core/TestSolrConfigHandler.java    |    71 +-
 .../src/test/org/apache/solr/core/TestSolrXml.java |   130 +-
 .../repository/HdfsBackupRepositoryTest.java       |    94 +-
 .../core/snapshots/TestSolrCloudSnapshots.java     |    20 +-
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |    31 +-
 .../solr/filestore/TestDistribPackageStore.java    |    80 +-
 .../handler/AnalysisRequestHandlerTestBase.java    |     2 +-
 .../apache/solr/handler/BackupRestoreUtils.java    |    20 +-
 .../apache/solr/handler/BackupStatusChecker.java   |     4 +
 .../handler/BinaryUpdateRequestHandlerTest.java    |    30 +-
 .../DocumentAnalysisRequestHandlerTest.java        |     2 +
 .../handler/FieldAnalysisRequestHandlerTest.java   |    32 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |     4 +
 .../solr/handler/MoreLikeThisHandlerTest.java      |    11 +-
 .../solr/handler/PingRequestHandlerTest.java       |     3 +
 .../org/apache/solr/handler/TestBlobHandler.java   |     1 +
 .../org/apache/solr/handler/TestConfigReload.java  |     9 +-
 .../apache/solr/handler/TestContainerPlugin.java   |   377 +
 .../org/apache/solr/handler/TestCoreBackup.java    |    46 +-
 .../solr/handler/TestHdfsBackupRestoreCore.java    |    18 +-
 .../solr/handler/TestReplicationHandler.java       |  1299 +-
 .../solr/handler/TestReplicationHandlerBackup.java |    74 +-
 .../TestReplicationHandlerDiskOverFlow.java        |    83 +-
 .../org/apache/solr/handler/TestReqParamsAPI.java  |     2 +
 .../org/apache/solr/handler/TestRestoreCore.java   |    83 +-
 .../org/apache/solr/handler/TestSQLHandler.java    |     6 +-
 .../solr/handler/TestSolrConfigHandlerCloud.java   |     4 +-
 .../handler/TestSolrConfigHandlerConcurrent.java   |    14 +-
 .../solr/handler/TestStressThreadBackup.java       |    13 +
 .../handler/ThrowErrorOnInitRequestHandler.java    |     2 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  |    31 +-
 .../org/apache/solr/handler/V2StandaloneTest.java  |     2 +
 .../solr/handler/XsltUpdateRequestHandlerTest.java |     7 +-
 .../admin/AutoscalingHistoryHandlerTest.java       |   461 -
 .../handler/admin/CoreAdminCreateDiscoverTest.java |     2 +
 .../solr/handler/admin/CoreAdminHandlerTest.java   |     7 +-
 .../handler/admin/CoreAdminRequestStatusTest.java  |     2 +
 .../admin/CoreMergeIndexesAdminHandlerTest.java    |    13 +-
 .../solr/handler/admin/DaemonStreamApiTest.java    |     3 -
 .../solr/handler/admin/HealthCheckHandlerTest.java |   237 +
 .../solr/handler/admin/IndexSizeEstimatorTest.java |    12 +-
 .../solr/handler/admin/LukeRequestHandlerTest.java |    15 +
 .../solr/handler/admin/MBeansHandlerTest.java      |     2 +
 .../solr/handler/admin/MetricsHandlerTest.java     |    18 +
 .../handler/admin/MetricsHistoryHandlerTest.java   |    45 +-
 .../admin/PropertiesRequestHandlerTest.java        |     1 +
 .../handler/admin/SecurityConfHandlerTest.java     |     7 +-
 .../admin/SegmentsInfoRequestHandlerTest.java      |    16 +-
 .../solr/handler/admin/StatsReloadRaceTest.java    |     2 +
 .../solr/handler/admin/TestApiFramework.java       |    82 +-
 .../solr/handler/admin/TestCollectionAPIs.java     |    28 +-
 .../apache/solr/handler/admin/TestConfigsApi.java  |    20 +-
 .../solr/handler/admin/TestCoreAdminApis.java      |    12 +-
 .../solr/handler/admin/ThreadDumpHandlerTest.java  |   239 +
 .../solr/handler/admin/ZookeeperReadAPITest.java   |   101 +
 .../handler/admin/ZookeeperStatusHandlerTest.java  |    72 +-
 .../component/CustomHighlightComponentTest.java    |    25 +-
 .../component/CustomTermsComponentTest.java        |     2 +-
 .../solr/handler/component/DebugComponentTest.java |    40 +-
 .../component/DistributedDebugComponentTest.java   |     8 +-
 .../component/DistributedExpandComponentTest.java  |    49 +
 .../component/DistributedFacetPivotLargeTest.java  |     3 +-
 .../DistributedFacetPivotLongTailTest.java         |     2 +
 .../component/DistributedFacetPivotSmallTest.java  |    26 +-
 .../component/DistributedMLTComponentTest.java     |     2 +-
 .../DistributedQueryComponentOptimizationTest.java |     2 +-
 .../handler/component/InfixSuggestersTest.java     |     2 +
 .../PhrasesIdentificationComponentTest.java        |     4 +
 .../component/QueryElevationComponentTest.java     |    75 +-
 .../component/ResourceSharingTestComponent.java    |     4 +-
 .../solr/handler/component/SearchHandlerTest.java  |    74 +-
 .../handler/component/ShardsWhitelistTest.java     |     6 +-
 .../handler/component/SpellCheckComponentTest.java |     7 +-
 .../solr/handler/component/StatsComponentTest.java |   115 +-
 .../solr/handler/component/TermsComponentTest.java |    13 +-
 .../handler/component/TestExpandComponent.java     |    96 +
 .../component/TestHttpShardHandlerFactory.java     |     4 +-
 .../component/TestTrackingShardHandlerFactory.java |     4 +-
 .../solr/handler/export/TestExportWriter.java      |    80 +-
 .../org/apache/solr/handler/tagger/TaggerTest.java |    22 +-
 .../apache/solr/handler/tagger/TaggerTestCase.java |    11 +-
 .../tagger/WordLengthTaggingFilterFactory.java     |     5 +
 .../apache/solr/highlight/DummyHighlighter.java    |     1 +
 .../org/apache/solr/highlight/HighlighterTest.java |    20 +-
 .../solr/highlight/TestUnifiedSolrHighlighter.java |    16 +-
 .../apache/solr/index/hdfs/CheckHdfsIndexTest.java |     6 +
 .../org/apache/solr/logging/TestLogWatcher.java    |     1 +
 .../org/apache/solr/metrics/JvmMetricsTest.java    |     8 +-
 .../org/apache/solr/metrics/MetricsConfigTest.java |    13 +-
 .../apache/solr/metrics/SolrMetricManagerTest.java |    11 +-
 .../solr/metrics/SolrMetricsIntegrationTest.java   |     7 +-
 .../reporters/SolrGraphiteReporterTest.java        |     5 +-
 .../reporters/SolrJmxReporterCloudTest.java        |     7 +-
 .../metrics/reporters/SolrSlf4jReporterTest.java   |     4 +-
 .../reporters/solr/SolrCloudReportersTest.java     |     6 +-
 .../reporters/solr/SolrShardReporterTest.java      |    12 +
 .../solr/parser/SolrQueryParserBaseTest.java       |   137 +
 .../src/test/org/apache/solr/pkg/TestPackages.java |   318 +-
 .../org/apache/solr/request/SimpleFacetsTest.java  |     3 +-
 .../test/org/apache/solr/request/TestFaceting.java |    25 +
 .../apache/solr/request/TestIntervalFaceting.java  |     2 +-
 .../org/apache/solr/request/TestWriterPerf.java    |     5 +-
 .../solr/request/macro/TestMacroExpander.java      |     2 +
 .../org/apache/solr/response/JSONWriterTest.java   |    10 +-
 .../org/apache/solr/response/SmileWriterTest.java  |    11 +
 .../solr/response/TestBinaryResponseWriter.java    |     2 +
 .../solr/response/TestGeoJSONResponseWriter.java   |     4 +
 .../solr/response/TestGraphMLResponseWriter.java   |    22 +-
 .../response/TestJavabinTupleStreamParser.java     |     7 +-
 .../response/TestPHPSerializedResponseWriter.java  |     2 +-
 .../org/apache/solr/response/TestPushWriter.java   |    65 +-
 .../solr/response/TestRawResponseWriter.java       |     2 +
 .../solr/response/TestRetrieveFieldsOptimizer.java |     3 +
 .../solr/response/TestSolrQueryResponse.java       |     1 +
 .../transform/TestChildDocTransformer.java         |    28 +-
 .../TestChildDocTransformerHierarchy.java          |     1 +
 .../apache/solr/rest/schema/TestBulkSchemaAPI.java |    40 +-
 .../apache/solr/schema/ChangedSchemaMergeTest.java |     6 +-
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |    94 +-
 .../test/org/apache/solr/schema/DateFieldTest.java |     2 +-
 .../test/org/apache/solr/schema/DocValuesTest.java |     4 +-
 .../schema/ManagedSchemaRoundRobinCloudTest.java   |     1 -
 .../schema/OpenExchangeRatesOrgProviderTest.java   |     2 +-
 .../PreAnalyzedFieldManagedSchemaCloudTest.java    |     1 -
 .../apache/solr/schema/PrimitiveFieldTypeTest.java |     2 +-
 .../test/org/apache/solr/schema/RankFieldTest.java |   285 +
 .../solr/schema/ResolveAnalyzerByNameTest.java     |     7 +
 .../apache/solr/schema/SchemaApiFailureTest.java   |     5 +-
 .../solr/schema/SpatialRPTFieldTypeTest.java       |     2 +
 .../solr/schema/TestBulkSchemaConcurrent.java      |    23 +-
 .../apache/solr/schema/TestCloudManagedSchema.java |     3 +
 .../org/apache/solr/schema/TestManagedSchema.java  |     3 +
 .../apache/solr/schema/TestManagedSchemaAPI.java   |     2 +-
 .../solr/schema/TestManagedSchemaThreadSafety.java |     5 +-
 .../org/apache/solr/schema/TestPointFields.java    |     1 +
 .../apache/solr/schema/TestSortableTextField.java  |     6 +-
 .../solr/schema/TestUseDocValuesAsStored2.java     |     1 +
 .../apache/solr/schema/WrappedIntPointField.java   |    20 +-
 .../apache/solr/schema/WrappedTrieIntField.java    |     1 +
 .../solr/search/AnalyticsMergeStrategyTest.java    |     4 +
 .../solr/search/AnalyticsTestQParserPlugin.java    |    11 +
 .../solr/search/CurrencyRangeFacetCloudTest.java   |    93 +-
 .../org/apache/solr/search/LargeFieldTest.java     |     1 +
 .../apache/solr/search/MaxScoreCollectorTest.java  |    91 +
 .../org/apache/solr/search/MergeStrategyTest.java  |     1 +
 .../apache/solr/search/MockSearchComponent.java    |     2 +-
 .../org/apache/solr/search/QueryEqualityTest.java  |    28 +-
 .../apache/solr/search/RankQParserPluginTest.java  |   258 +
 .../apache/solr/search/RankQueryTestPlugin.java    |    25 +-
 .../apache/solr/search/SolrIndexSearcherTest.java  |   330 +
 .../solr/search/TestAddFieldRealTimeGet.java       |     8 +-
 .../solr/search/TestCollapseQParserPlugin.java     |   100 +-
 .../test/org/apache/solr/search/TestDocSet.java    |     3 +-
 .../solr/search/TestExtendedDismaxParser.java      |    60 +-
 .../apache/solr/search/TestHashQParserPlugin.java  |    26 +-
 .../org/apache/solr/search/TestIndexSearcher.java  |     8 +-
 .../solr/search/TestMaxScoreQueryParser.java       |     1 +
 .../solr/search/TestReRankQParserPlugin.java       |    95 +
 .../org/apache/solr/search/TestRealTimeGet.java    |    20 +-
 .../test/org/apache/solr/search/TestRecovery.java  |    10 +
 .../org/apache/solr/search/TestRecoveryHdfs.java   |     9 +
 .../org/apache/solr/search/TestReloadDeadlock.java |     2 +-
 .../org/apache/solr/search/TestSmileRequest.java   |     2 +
 .../org/apache/solr/search/TestSolrCachePerf.java  |     3 +
 .../src/test/org/apache/solr/search/TestSolrJ.java |     2 +
 .../apache/solr/search/TestSolrQueryParser.java    |     1 +
 .../src/test/org/apache/solr/search/TestSort.java  |     5 +-
 .../org/apache/solr/search/TestStressRecovery.java |     2 +
 .../org/apache/solr/search/TestStressReorder.java  |     6 +-
 .../apache/solr/search/TestStressUserVersions.java |     8 +-
 .../org/apache/solr/search/TestStressVersions.java |     2 +
 .../apache/solr/search/TestTermsQParserPlugin.java |     6 +
 .../org/apache/solr/search/facet/DebugAgg.java     |    16 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |    49 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |    56 +-
 .../search/facet/SpatialHeatmapFacetsTest.java     |     5 +
 .../search/facet/TestCloudJSONFacetJoinDomain.java |    45 +-
 .../solr/search/facet/TestCloudJSONFacetSKG.java   |   342 +-
 .../search/facet/TestCloudJSONFacetSKGEquiv.java   |  1233 ++
 .../solr/search/facet/TestJsonFacetErrors.java     |   400 +
 .../solr/search/facet/TestJsonFacetRefinement.java |    97 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |   828 +-
 .../search/facet/TestJsonFacetsStatsParsing.java   |     2 +
 .../facet/TestJsonFacetsWithNestedObjects.java     |    70 +-
 .../solr/search/facet/TestJsonRangeFacets.java     |   435 +
 .../solr/search/function/NvlValueSourceParser.java |     2 +-
 .../solr/search/function/TestFunctionQuery.java    |    32 +
 .../function/TestMinMaxOnMultiValuedField.java     |    13 +-
 .../search/join/CrossCollectionJoinQueryTest.java  |   280 +
 .../solr/search/join/TestCloudNestedDocsSort.java  |     4 +-
 .../solr/search/join/TestNestedDocsSort.java       |     1 +
 .../solr/search/join/TestScoreJoinQPNoScore.java   |    27 +-
 .../solr/search/join/TestScoreJoinQPScore.java     |    18 +-
 .../org/apache/solr/search/join/XCJFQueryTest.java |   280 -
 .../join/another/BJQFilterAccessibleTest.java      |     2 +-
 .../apache/solr/search/json/TestJsonRequest.java   |    70 +-
 .../solr/search/mlt/CloudMLTQParserTest.java       |     1 +
 .../similarities/TestBooleanSimilarityFactory.java |    39 +
 .../apache/solr/search/stats/TestDistribIDF.java   |     2 -
 .../solr/security/AuditLoggerIntegrationTest.java  |    20 +-
 .../BaseTestRuleBasedAuthorizationPlugin.java      |   617 +
 .../solr/security/BasicAuthIntegrationTest.java    |    20 +-
 .../solr/security/BasicAuthOnSingleNodeTest.java   |    45 +-
 .../solr/security/BasicAuthStandaloneTest.java     |     2 +-
 .../solr/security/CallbackAuditLoggerPlugin.java   |     4 +-
 .../apache/solr/security/CertAuthPluginTest.java   |    79 +
 .../security/HttpParamDelegationTokenPlugin.java   |     2 +-
 .../security/JWTAuthPluginIntegrationTest.java     |     6 +-
 .../apache/solr/security/JWTAuthPluginTest.java    |    22 +-
 .../security/JWTVerificationkeyResolverTest.java   |     4 +-
 .../solr/security/MockAuditLoggerPlugin.java       |     4 +-
 .../solr/security/MockAuthenticationPlugin.java    |    25 +-
 .../solr/security/MockAuthorizationPlugin.java     |     2 +-
 .../solr/security/PrincipalWithUserRoles.java      |    91 +
 .../solr/security/TestAuthorizationFramework.java  |     6 +-
 ...stExternalRoleRuleBasedAuthorizationPlugin.java |    78 +
 .../security/TestRuleBasedAuthorizationPlugin.java |   585 -
 .../security/TestSha256AuthenticationProvider.java |     4 +
 .../solr/security/hadoop/ImpersonationUtil.java    |     1 +
 .../apache/solr/security/hadoop/KerberosUtils.java |    93 +
 .../hadoop/TestDelegationWithHadoopAuth.java       |    16 +-
 .../hadoop/TestImpersonationWithHadoopAuth.java    |    13 +-
 .../TestRuleBasedAuthorizationWithKerberos.java    |    81 +
 .../hadoop/TestSolrCloudWithHadoopAuthPlugin.java  |    63 +-
 .../security/hadoop/TestZkAclsWithHadoopAuth.java  |     1 +
 .../solr/servlet/HttpSolrCallGetCoreTest.java      |     1 -
 .../apache/solr/servlet/SolrRequestParserTest.java |     2 +
 .../solr/servlet/TestRequestRateLimiter.java       |   235 +
 .../solr/spelling/DirectSolrSpellCheckerTest.java  |     3 +
 .../solr/spelling/FileBasedSpellCheckerTest.java   |     7 +
 .../solr/spelling/IndexBasedSpellCheckerTest.java  |     8 +
 .../solr/spelling/SpellCheckCollatorTest.java      |     9 +
 .../SpellCheckCollatorWithCollapseTest.java        |    37 +-
 .../solr/spelling/SpellingQueryConverterTest.java  |     6 +
 .../suggest/RandomTestDictionaryFactory.java       |     6 +-
 .../solr/spelling/suggest/SuggesterTest.java       |     2 +
 .../solr/store/blockcache/BlockCacheTest.java      |    16 +-
 .../apache/solr/store/hdfs/HdfsDirectoryTest.java  |     6 +-
 .../solr/store/hdfs/HdfsLockFactoryTest.java       |     4 +
 .../org/apache/solr/update/AddBlockUpdateTest.java |     6 +-
 .../org/apache/solr/update/CdcrUpdateLogTest.java  |     8 +
 .../solr/update/DirectUpdateHandlerTest.java       |    15 +-
 .../apache/solr/update/MaxSizeAutoCommitTest.java  |     2 +-
 .../solr/update/MockStreamingSolrClients.java      |     2 +-
 .../apache/solr/update/MockingHttp2SolrClient.java |    26 +-
 .../test/org/apache/solr/update/PeerSyncTest.java  |     1 +
 .../solr/update/PeerSyncWithBufferUpdatesTest.java |     1 +
 .../PeerSyncWithIndexFingerprintCachingTest.java   |     2 +
 ...ncWithLeaderAndIndexFingerprintCachingTest.java |     1 +
 .../apache/solr/update/PeerSyncWithLeaderTest.java |     1 +
 .../org/apache/solr/update/SoftAutoCommitTest.java |     2 +-
 .../apache/solr/update/SolrCmdDistributorTest.java |     2 +-
 .../apache/solr/update/SolrIndexConfigTest.java    |    31 +-
 .../apache/solr/update/SolrIndexSplitterTest.java  |     3 +
 .../org/apache/solr/update/TestHdfsUpdateLog.java  |     4 +
 .../update/TestInPlaceUpdateWithRouteField.java    |     1 -
 .../solr/update/TestInPlaceUpdatesDistrib.java     |    81 +-
 .../solr/update/TestInPlaceUpdatesStandalone.java  |     1 +
 .../solr/update/TestIndexingPerformance.java       |     8 +-
 .../solr/update/TestNestedUpdateProcessor.java     |     2 +
 .../test/org/apache/solr/update/TestUpdate.java    |     2 +-
 .../test/org/apache/solr/update/UpdateLogTest.java |     1 +
 .../processor/AtomicUpdateRemovalJavabinTest.java  |     2 -
 .../solr/update/processor/AtomicUpdatesTest.java   |    15 +-
 .../CategoryRoutedAliasUpdateProcessorTest.java    |    24 +-
 .../ClassificationUpdateProcessorFactoryTest.java  |     4 +
 ...assificationUpdateProcessorIntegrationTest.java |     2 -
 .../ClassificationUpdateProcessorTest.java         |     5 +
 .../CustomUpdateRequestProcessorFactory.java       |     3 +-
 .../DimensionalRoutedAliasUpdateProcessorTest.java |    12 +-
 .../IgnoreLargeDocumentProcessorFactoryTest.java   |     1 +
 .../update/processor/NestedAtomicUpdateTest.java   |     1 +
 .../processor/RoutedAliasUpdateProcessorTest.java  |     5 +-
 .../apache/solr/update/processor/RuntimeUrp.java   |    40 -
 .../SignatureUpdateProcessorFactoryTest.java       |     1 +
 .../SkipExistingDocumentsProcessorFactoryTest.java |     1 +
 .../processor/TestDocBasedVersionConstraints.java  |     4 +-
 .../processor/TestNamedUpdateProcessors.java       |   162 -
 .../TimeRoutedAliasUpdateProcessorTest.java        |    34 +-
 .../processor/TolerantUpdateProcessorTest.java     |     2 +-
 .../processor/TrackingUpdateProcessorFactory.java  |     2 +-
 .../update/processor/URLClassifyProcessorTest.java |     2 +
 .../UpdateRequestProcessorFactoryTest.java         |     2 +-
 .../test/org/apache/solr/util/DynamicMapsTest.java |    90 +
 .../org/apache/solr/util/MockCoreContainer.java    |     2 +-
 .../org/apache/solr/util/OrderedExecutorTest.java  |    28 +-
 .../org/apache/solr/util/SolrLogPostToolTest.java  |    62 +-
 .../org/apache/solr/util/SolrPluginUtilsTest.java  |     2 +-
 .../org/apache/solr/util/TestCircuitBreaker.java   |   243 +
 .../test/org/apache/solr/util/TestExportTool.java  |     2 -
 .../test/org/apache/solr/util/TestRTimerTree.java  |     3 +
 .../apache/solr/util/TestSolrCLIRunExample.java    |   132 +-
 .../solr/util/TestSolrJacksonAnnotation.java       |     2 +
 .../src/test/org/apache/solr/util/TestUtils.java   |    11 +-
 .../apache/solr/util/stats/MetricUtilsTest.java    |    10 +
 .../solr/util/tracing/TestHttpServletCarrier.java  |     2 +-
 solr/example/README.md                             |    95 +
 solr/example/README.txt                            |    78 -
 solr/example/build.gradle                          |     4 +-
 solr/example/example-DIH/README.md                 |    55 +
 solr/example/example-DIH/README.txt                |    49 -
 .../example-DIH/solr/db/conf/solrconfig.xml        |     4 +-
 .../example-DIH/solr/mail/conf/solrconfig.xml      |     4 +-
 .../example-DIH/solr/solr/conf/solrconfig.xml      |     4 +-
 solr/example/files/README.md                       |   167 +
 solr/example/files/README.txt                      |   152 -
 solr/example/files/conf/solrconfig.xml             |    42 +-
 solr/example/films/README.md                       |   161 +
 solr/example/films/README.txt                      |   138 -
 solr/licenses/caffeine-2.8.0.jar.sha1              |     1 -
 solr/licenses/caffeine-2.8.4.jar.sha1              |     1 +
 solr/licenses/commons-cli-1.2.jar.sha1             |     1 -
 solr/licenses/commons-cli-1.4.jar.sha1             |     1 +
 solr/licenses/commons-collections4-4.2.jar.sha1    |     1 -
 solr/licenses/commons-collections4-4.4.jar.sha1    |     1 +
 solr/licenses/commons-fileupload-1.3.3.jar.sha1    |     1 -
 solr/licenses/commons-fileupload-NOTICE.txt        |     5 -
 solr/licenses/commons-lang-2.6.jar.sha1            |     1 +
 ...ICENSE-ASL.txt => commons-lang-LICENSE-ASL.txt} |     0
 solr/licenses/commons-lang-NOTICE.txt              |     5 +
 solr/licenses/hamcrest-2.2.jar.sha1                |     1 +
 .../licenses/hamcrest-LICENSE-BSD.txt              |     0
 .../licenses/hamcrest-NOTICE.txt                   |     0
 solr/licenses/hamcrest-core-1.3.jar.sha1           |     1 -
 solr/licenses/hppc-0.8.1.jar.sha1                  |     1 -
 solr/licenses/hppc-0.8.2.jar.sha1                  |     1 +
 .../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/log4j-1.2-api-2.11.2.jar.sha1        |     1 -
 solr/licenses/log4j-1.2-api-2.13.2.jar.sha1        |     1 +
 solr/licenses/log4j-api-2.11.2.jar.sha1            |     1 -
 solr/licenses/log4j-api-2.13.2.jar.sha1            |     1 +
 solr/licenses/log4j-core-2.11.2.jar.sha1           |     1 -
 solr/licenses/log4j-core-2.13.2.jar.sha1           |     1 +
 solr/licenses/log4j-slf4j-impl-2.11.2.jar.sha1     |     1 -
 solr/licenses/log4j-slf4j-impl-2.13.2.jar.sha1     |     1 +
 solr/licenses/log4j-web-2.11.2.jar.sha1            |     1 -
 solr/licenses/log4j-web-2.13.2.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 +
 .../morfologik-ukrainian-search-3.9.0.jar.sha1     |     1 -
 .../morfologik-ukrainian-search-4.9.1.jar.sha1     |     1 +
 solr/licenses/netty-buffer-4.1.29.Final.jar.sha1   |     1 -
 solr/licenses/netty-buffer-4.1.50.Final.jar.sha1   |     1 +
 solr/licenses/netty-codec-4.1.29.Final.jar.sha1    |     1 -
 solr/licenses/netty-codec-4.1.50.Final.jar.sha1    |     1 +
 solr/licenses/netty-common-4.1.29.Final.jar.sha1   |     1 -
 solr/licenses/netty-common-4.1.50.Final.jar.sha1   |     1 +
 solr/licenses/netty-handler-4.1.29.Final.jar.sha1  |     1 -
 solr/licenses/netty-handler-4.1.50.Final.jar.sha1  |     1 +
 solr/licenses/netty-resolver-4.1.29.Final.jar.sha1 |     1 -
 solr/licenses/netty-resolver-4.1.50.Final.jar.sha1 |     1 +
 .../licenses/netty-transport-4.1.29.Final.jar.sha1 |     1 -
 .../licenses/netty-transport-4.1.50.Final.jar.sha1 |     1 +
 ...ty-transport-native-epoll-4.1.29.Final.jar.sha1 |     1 -
 ...ty-transport-native-epoll-4.1.50.Final.jar.sha1 |     1 +
 ...nsport-native-unix-common-4.1.29.Final.jar.sha1 |     1 -
 ...nsport-native-unix-common-4.1.50.Final.jar.sha1 |     1 +
 solr/licenses/org.restlet-2.4.0.jar.sha1           |     1 -
 solr/licenses/org.restlet-2.4.3.jar.sha1           |     1 +
 .../org.restlet.ext.servlet-2.4.0.jar.sha1         |     1 -
 .../org.restlet.ext.servlet-2.4.3.jar.sha1         |     1 +
 solr/licenses/snappy-java-1.1.7.6.jar.sha1         |     1 +
 ...LICENSE-ASL.txt => snappy-java-LICENSE-ASL.txt} |     0
 solr/licenses/snappy-java-NOTICE.txt               |    17 +
 solr/licenses/start.jar.sha1                       |     2 +-
 solr/licenses/tika-core-1.23.jar.sha1              |     1 -
 solr/licenses/tika-core-1.24.jar.sha1              |     1 +
 solr/licenses/tika-java7-1.23.jar.sha1             |     1 -
 solr/licenses/tika-java7-1.24.jar.sha1             |     1 +
 solr/licenses/tika-parsers-1.23.jar.sha1           |     1 -
 solr/licenses/tika-parsers-1.24.jar.sha1           |     1 +
 solr/licenses/tika-xmp-1.23.jar.sha1               |     1 -
 solr/licenses/tika-xmp-1.24.jar.sha1               |     1 +
 solr/licenses/zookeeper-3.5.5.jar.sha1             |     1 -
 solr/licenses/zookeeper-3.6.1.jar.sha1             |     1 +
 solr/licenses/zookeeper-jute-3.5.5.jar.sha1        |     1 -
 solr/licenses/zookeeper-jute-3.6.1.jar.sha1        |     1 +
 solr/packaging/build.gradle                        |    14 +-
 solr/server/README.md                              |   114 +
 solr/server/README.txt                             |   109 -
 solr/server/build.gradle                           |     4 +-
 solr/server/etc/jetty.xml                          |     8 +-
 solr/server/resources/log4j2-console.xml           |    28 +-
 solr/server/resources/log4j2.xml                   |    72 +-
 solr/server/solr/README.md                         |    79 +
 solr/server/solr/README.txt                        |    77 -
 .../solr/configsets/_default/conf/managed-schema   |     7 +
 .../solr/configsets/_default/conf/solrconfig.xml   |    63 +-
 .../clustering/carrot2/{README.txt => README.md}   |     0
 .../conf/solrconfig.xml                            |    48 +-
 .../conf/velocity/README.md                        |   116 +
 .../conf/velocity/README.txt                       |   101 -
 solr/server/solr/solr.xml                          |     1 +
 ..._REQUIREMENTS.mdtext => SYSTEM_REQUIREMENTS.md} |     0
 solr/site/index.template.md                        |    37 +
 solr/site/online-link.template.md                  |    19 +
 solr/solr-ref-guide/build.gradle                   |     5 +-
 solr/solr-ref-guide/build.xml                      |     1 -
 solr/solr-ref-guide/src/_config.yml.template       |     3 +-
 solr/solr-ref-guide/src/_includes/head.html        |    26 +-
 solr/solr-ref-guide/src/_includes/head_print.html  |    29 -
 .../src/_includes/mathjax-support.html             |    22 +
 solr/solr-ref-guide/src/_includes/sidebar.html     |    35 +-
 solr/solr-ref-guide/src/_includes/taglogic.html    |    22 -
 solr/solr-ref-guide/src/_includes/toc.html         |     9 -
 solr/solr-ref-guide/src/_includes/topnav.html      |    39 +-
 solr/solr-ref-guide/src/_layouts/default.html      |    35 +-
 .../solr-ref-guide/src/_layouts/default_print.html |    25 -
 solr/solr-ref-guide/src/_layouts/home.html         |    27 +-
 solr/solr-ref-guide/src/_layouts/page.html         |    29 +-
 solr/solr-ref-guide/src/_layouts/page_print.html   |    15 -
 solr/solr-ref-guide/src/_templates/open.html.slim  |     2 +-
 solr/solr-ref-guide/src/_templates/ulist.html.slim |     2 +-
 .../adding-custom-plugins-in-solrcloud-mode.adoc   |   333 -
 solr/solr-ref-guide/src/aliases.adoc               |     9 +-
 .../src/analytics-expression-sources.adoc          |     1 -
 .../src/analytics-mapping-functions.adoc           |     1 -
 .../src/analytics-reduction-functions.adoc         |     3 +-
 solr/solr-ref-guide/src/analytics.adoc             |     3 +-
 .../authentication-and-authorization-plugins.adoc  |     2 +-
 solr/solr-ref-guide/src/cdcr-api.adoc              |     8 +
 solr/solr-ref-guide/src/cdcr-architecture.adoc     |     8 +
 solr/solr-ref-guide/src/cdcr-config.adoc           |     9 +
 solr/solr-ref-guide/src/cdcr-operations.adoc       |     8 +
 .../src/cert-authentication-plugin.adoc            |    61 +
 solr/solr-ref-guide/src/circuit-breakers.adoc      |    68 +
 solr/solr-ref-guide/src/cloud-screens.adoc         |     2 +-
 .../src/cluster-node-management.adoc               |    57 +-
 .../src/collapse-and-expand-results.adoc           |    28 +-
 solr/solr-ref-guide/src/collection-aliasing.adoc   |     5 +-
 solr/solr-ref-guide/src/collection-management.adoc |    68 +-
 .../src/collection-specific-tools.adoc             |     2 +-
 solr/solr-ref-guide/src/collections-api.adoc       |     2 +-
 .../solr-ref-guide/src/colocating-collections.adoc |    76 -
 .../combining-distribution-and-replication.adoc    |    12 +-
 .../solr-ref-guide/src/command-line-utilities.adoc |    27 +-
 .../src/common-query-parameters.adoc               |    54 +-
 solr/solr-ref-guide/src/config-api.adoc            |    42 +-
 solr/solr-ref-guide/src/config-sets.adoc           |     4 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |     2 +-
 solr/solr-ref-guide/src/coreadmin-api.adoc         |     8 +-
 .../src/cross-data-center-replication-cdcr.adoc    |    14 +
 solr/solr-ref-guide/src/css/customstyles.css       |   919 --
 solr/solr-ref-guide/src/css/decoration.css         |   254 +
 solr/solr-ref-guide/src/css/font-awesome.min.css   |     4 -
 solr/solr-ref-guide/src/css/lavish-bootstrap.css   |  5423 --------
 solr/solr-ref-guide/src/css/navs.css               |   366 +
 solr/solr-ref-guide/src/css/printstyles.css        |   160 -
 solr/solr-ref-guide/src/css/ref-guide.css          |  2919 ++--
 solr/solr-ref-guide/src/css/search.css             |    47 +
 solr/solr-ref-guide/src/css/theme-solr.css         |   147 -
 ...datadir-and-directoryfactory-in-solrconfig.adoc |     2 +-
 solr/solr-ref-guide/src/dataimport-screen.adoc     |     2 +
 solr/solr-ref-guide/src/distributed-requests.adoc  |     6 +-
 .../distributed-search-with-index-sharding.adoc    |     2 +-
 solr/solr-ref-guide/src/enabling-ssl.adoc          |   241 +-
 solr/solr-ref-guide/src/exporting-result-sets.adoc |    30 +
 solr/solr-ref-guide/src/filter-descriptions.adoc   |    46 +-
 .../glyphicons/glyphicons-halflings-regular.eot    |   Bin 20127 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.svg    |   288 -
 .../glyphicons/glyphicons-halflings-regular.ttf    |   Bin 45404 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.woff   |   Bin 23424 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.woff2  |   Bin 18028 -> 0 bytes
 .../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf     |   Bin 15868 -> 0 bytes
 .../fonts/mplus1mn/mplus1mn-bold_italic-ascii.ttf  |   Bin 15908 -> 0 bytes
 .../src/fonts/mplus1mn/mplus1mn-italic-ascii.ttf   |   Bin 15928 -> 0 bytes
 .../mplus1mn/mplus1mn-regular-ascii-conums.ttf     |   Bin 20024 -> 0 bytes
 .../src/fonts/mplus1p-regular-fallback.ttf         |   Bin 1405716 -> 0 bytes
 solr/solr-ref-guide/src/format-of-solr-xml.adoc    |     4 +
 solr/solr-ref-guide/src/function-queries.adoc      |     1 -
 solr/solr-ref-guide/src/highlighting.adoc          |    13 +-
 solr/solr-ref-guide/src/how-solrcloud-works.adoc   |     4 +-
 solr/solr-ref-guide/src/how-to-contribute.adoc     |    16 +-
 .../overview-of-the-solr-admin-ui/dashboard.png    |   Bin 92750 -> 172175 bytes
 .../src/implicit-requesthandlers.adoc              |    28 +-
 solr/solr-ref-guide/src/index-replication.adoc     |   177 +-
 solr/solr-ref-guide/src/index.adoc                 |    37 +-
 .../src/indexing-nested-documents.adoc             |     2 +-
 solr/solr-ref-guide/src/installing-solr.adoc       |     2 +-
 solr/solr-ref-guide/src/js/customscripts.js        |    68 +-
 solr/solr-ref-guide/src/js/ref-guide-toc.js        |    36 -
 solr/solr-ref-guide/src/js/toc.js                  |    82 -
 solr/solr-ref-guide/src/json-facet-api.adoc        |    11 +-
 .../src/json-faceting-domain-changes.adoc          |     8 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |    38 +-
 solr/solr-ref-guide/src/jvm-settings.adoc          |    20 +-
 .../src/jwt-authentication-plugin.adoc             |     3 +-
 .../src/kerberos-authentication-plugin.adoc        |     7 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |    20 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |     2 +-
 solr/solr-ref-guide/src/libs.adoc                  |     2 +-
 .../src/major-changes-in-solr-7.adoc               |     3 -
 .../src/major-changes-in-solr-8.adoc               |    13 +-
 .../src/major-changes-in-solr-9.adoc               |   103 +-
 .../src/making-and-restoring-backups.adoc          |     2 +-
 .../src/meta-docs/asciidoc-syntax.adoc             |    45 +
 solr/solr-ref-guide/src/meta-docs/jekyll.adoc      |    72 +-
 solr/solr-ref-guide/src/meta-docs/publish.adoc     |    69 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |     2 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |     2 +-
 .../solr-ref-guide/src/migrate-to-policy-rule.adoc |   198 -
 .../src/near-real-time-searching.adoc              |     2 +-
 solr/solr-ref-guide/src/other-parsers.adoc         |   185 +-
 .../src/overview-of-the-solr-admin-ui.adoc         |    16 +-
 .../src/package-manager-internals.adoc             |   155 +-
 solr/solr-ref-guide/src/package-manager.adoc       |    56 +-
 .../src/query-settings-in-solrconfig.adoc          |    24 +-
 solr/solr-ref-guide/src/rate-limiters.adoc         |   131 +
 solr/solr-ref-guide/src/relevance.adoc             |     4 +-
 solr/solr-ref-guide/src/replica-management.adoc    |    91 +-
 solr/solr-ref-guide/src/replication-screen.adoc    |     8 +-
 .../solr-ref-guide/src/request-parameters-api.adoc |     4 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |     9 +
 solr/solr-ref-guide/src/resource-loading.adoc      |     2 +-
 solr/solr-ref-guide/src/result-clustering.adoc     |     4 +-
 .../src/rule-based-authorization-plugin.adoc       |    86 +-
 .../src/rule-based-replica-placement.adoc          |     2 +-
 solr/solr-ref-guide/src/running-solr-on-hdfs.adoc  |    41 +-
 solr/solr-ref-guide/src/schema-api.adoc            |     1 -
 solr/solr-ref-guide/src/securing-solr.adoc         |     6 +-
 .../setting-up-an-external-zookeeper-ensemble.adoc |     2 +
 solr/solr-ref-guide/src/shard-management.adoc      |    11 +-
 .../src/shards-and-indexing-data-in-solrcloud.adoc |     4 +-
 .../src/solr-control-script-reference.adoc         |    12 +-
 solr/solr-ref-guide/src/solr-glossary.adoc         |     4 +-
 solr/solr-ref-guide/src/solr-plugins.adoc          |    19 +-
 solr/solr-ref-guide/src/solr-tracing.adoc          |     2 +-
 solr/solr-ref-guide/src/solr-tutorial.adoc         |     7 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |   262 +-
 .../src/solrcloud-autoscaling-api.adoc             |   809 --
 .../solrcloud-autoscaling-auto-add-replicas.adoc   |    73 -
 .../src/solrcloud-autoscaling-fault-tolerance.adoc |    59 -
 .../src/solrcloud-autoscaling-listeners.adoc       |   220 -
 .../src/solrcloud-autoscaling-overview.adoc        |    96 -
 .../solrcloud-autoscaling-policy-preferences.adoc  |   641 -
 .../src/solrcloud-autoscaling-trigger-actions.adoc |    88 -
 .../src/solrcloud-autoscaling-triggers.adoc        |   609 -
 solr/solr-ref-guide/src/solrcloud-autoscaling.adoc |    35 -
 solr/solr-ref-guide/src/solrcloud.adoc             |     8 +-
 solr/solr-ref-guide/src/spatial-search.adoc        |     2 +-
 solr/solr-ref-guide/src/spell-checking.adoc        |     2 +-
 solr/solr-ref-guide/src/stream-api.adoc            |   216 +
 .../src/stream-decorator-reference.adoc            |    15 +-
 .../src/stream-evaluator-reference.adoc            |     3 +-
 .../src/stream-source-reference.adoc               |    66 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |     6 +-
 solr/solr-ref-guide/src/suggestions-screen.adoc    |    40 -
 .../src/the-query-elevation-component.adoc         |     2 +-
 .../src/the-standard-query-parser.adoc             |     4 +-
 solr/solr-ref-guide/src/the-stats-component.adoc   |     2 +-
 solr/solr-ref-guide/src/the-tagger-handler.adoc    |    11 +-
 solr/solr-ref-guide/src/tokenizers.adoc            |     2 +-
 .../src/updatehandlers-in-solrconfig.adoc          |     2 +-
 ...ding-data-with-solr-cell-using-apache-tika.adoc |     1 -
 ...ta-store-data-with-the-data-import-handler.adoc |     4 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |    33 +-
 ...ing-the-solr-administration-user-interface.adoc |     3 +-
 solr/solr-ref-guide/src/v2-api.adoc                |    12 +-
 solr/solrj/build.gradle                            |     2 +
 solr/solrj/ivy.xml                                 |     4 +
 .../org/apache/solr/client/solrj/SolrClient.java   |    16 +-
 .../org/apache/solr/client/solrj/SolrRequest.java  |    22 +
 .../org/apache/solr/client/solrj/SolrResponse.java |     1 +
 .../apache/solr/client/solrj/V2RequestSupport.java |     1 +
 .../client/solrj/beans/DocumentObjectBinder.java   |    13 +-
 .../client/solrj/cloud/AlreadyExistsException.java |    35 +
 .../client/solrj/cloud/BadVersionException.java    |    40 +
 .../client/solrj/cloud/DelegatingCloudManager.java |    89 +
 .../cloud/DelegatingClusterStateProvider.java      |   130 +
 .../client/solrj/cloud/DistribStateManager.java    |    11 -
 .../solr/client/solrj/cloud/NodeStateProvider.java |     5 +-
 .../solr/client/solrj/cloud/NotEmptyException.java |    35 +
 .../solr/client/solrj/cloud/SocketProxy.java       |    56 +-
 .../solr/client/solrj/cloud/SolrCloudManager.java  |     2 +-
 .../solr/client/solrj/cloud/VersionedData.java     |    99 +
 .../cloud/autoscaling/AddReplicaSuggester.java     |    81 -
 .../cloud/autoscaling/AlreadyExistsException.java  |    35 -
 .../solrj/cloud/autoscaling/AutoScalingConfig.java |   589 -
 .../cloud/autoscaling/BadVersionException.java     |    40 -
 .../solr/client/solrj/cloud/autoscaling/Cell.java  |    74 -
 .../client/solrj/cloud/autoscaling/Clause.java     |   829 --
 .../solrj/cloud/autoscaling/ComputedType.java      |    99 -
 .../client/solrj/cloud/autoscaling/Condition.java  |   125 -
 .../solrj/cloud/autoscaling/CoresVariable.java     |   125 -
 .../cloud/autoscaling/DelegatingCloudManager.java  |    93 -
 .../DelegatingClusterStateProvider.java            |   130 -
 .../autoscaling/DelegatingDistribStateManager.java |   107 -
 .../autoscaling/DelegatingNodeStateProvider.java   |    56 -
 .../cloud/autoscaling/DeleteNodeSuggester.java     |    46 -
 .../cloud/autoscaling/DeleteReplicaSuggester.java  |    74 -
 .../solrj/cloud/autoscaling/FreeDiskVariable.java  |   175 -
 .../cloud/autoscaling/MoveReplicaSuggester.java    |   112 -
 .../solrj/cloud/autoscaling/NodeVariable.java      |    44 -
 .../solrj/cloud/autoscaling/NoneSuggester.java     |    39 -
 .../solrj/cloud/autoscaling/NotEmptyException.java |    35 -
 .../client/solrj/cloud/autoscaling/Operand.java    |   209 -
 .../client/solrj/cloud/autoscaling/Policy.java     |   664 -
 .../solrj/cloud/autoscaling/PolicyHelper.java      |   603 -
 .../client/solrj/cloud/autoscaling/Preference.java |   148 -
 .../client/solrj/cloud/autoscaling/RangeVal.java   |    61 -
 .../solrj/cloud/autoscaling/ReplicaCount.java      |   128 -
 .../solrj/cloud/autoscaling/ReplicaInfo.java       |   219 -
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |   175 -
 .../solr/client/solrj/cloud/autoscaling/Row.java   |   379 -
 .../solrj/cloud/autoscaling/SealedClause.java      |    29 -
 .../cloud/autoscaling/SplitShardSuggester.java     |    65 -
 .../client/solrj/cloud/autoscaling/Suggester.java  |   518 -
 .../client/solrj/cloud/autoscaling/Suggestion.java |   130 -
 .../autoscaling/TriggerEventProcessorStage.java    |    30 -
 .../solrj/cloud/autoscaling/TriggerEventType.java  |    33 -
 .../cloud/autoscaling/UnsupportedSuggester.java    |    59 -
 .../client/solrj/cloud/autoscaling/Variable.java   |   406 -
 .../solrj/cloud/autoscaling/VariableBase.java      |   211 -
 .../solrj/cloud/autoscaling/VersionedData.java     |    94 -
 .../client/solrj/cloud/autoscaling/Violation.java  |   181 -
 .../cloud/autoscaling/WithCollectionVariable.java  |   166 -
 .../solrj/cloud/autoscaling/package-info.java      |    23 -
 .../client/solrj/impl/BaseCloudSolrClient.java     |   100 +-
 .../solrj/impl/BaseHttpClusterStateProvider.java   |    22 +-
 .../solr/client/solrj/impl/BaseHttpSolrClient.java |    10 +-
 .../client/solrj/impl/BinaryRequestWriter.java     |     6 +-
 .../client/solrj/impl/BinaryResponseParser.java    |     1 +
 .../solr/client/solrj/impl/CloudSolrClient.java    |     2 +-
 .../client/solrj/impl/ClusterStateProvider.java    |     2 +
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |    25 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |    24 +-
 .../solrj/impl/DelegationTokenHttpSolrClient.java  |     2 +-
 .../solrj/impl/Http2ClusterStateProvider.java      |     1 +
 .../solr/client/solrj/impl/Http2SolrClient.java    |   274 +-
 .../solr/client/solrj/impl/HttpClientUtil.java     |    51 +-
 .../solrj/impl/HttpClusterStateProvider.java       |     1 +
 .../solr/client/solrj/impl/HttpSolrClient.java     |   171 +-
 .../client/solrj/impl/Krb5HttpClientBuilder.java   |    13 +-
 .../solr/client/solrj/impl/LBHttp2SolrClient.java  |   141 +-
 .../solr/client/solrj/impl/LBHttpSolrClient.java   |     8 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   208 +-
 .../client/solrj/impl/SolrClientCloudManager.java  |    20 +-
 .../solrj/impl/SolrClientNodeStateProvider.java    |   248 +-
 .../solrj/impl/SolrHttpRequestRetryHandler.java    |     4 +-
 .../solrj/impl/StreamingBinaryResponseParser.java  |     3 +
 .../solr/client/solrj/impl/XMLResponseParser.java  |     6 +-
 .../solrj/impl/ZkClientClusterStateProvider.java   |     3 +-
 .../client/solrj/impl/ZkDistribStateManager.java   |    33 +-
 .../client/solrj/io/ClassificationEvaluation.java  |     8 +-
 .../java/org/apache/solr/client/solrj/io/Lang.java |   104 +-
 .../apache/solr/client/solrj/io/ModelCache.java    |     2 +-
 .../solr/client/solrj/io/SolrClientCache.java      |     2 +-
 .../org/apache/solr/client/solrj/io/Tuple.java     |   185 +-
 .../solr/client/solrj/io/comp/FieldComparator.java |     5 +
 .../solr/client/solrj/io/eq/FieldEqualitor.java    |     3 +
 .../solr/client/solrj/io/eval/AkimaEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/AnovaEvaluator.java  |    12 +-
 .../solr/client/solrj/io/eval/ArrayEvaluator.java  |     2 +
 .../solr/client/solrj/io/eval/AscEvaluator.java    |     1 +
 .../solr/client/solrj/io/eval/Attributes.java      |     1 +
 .../solrj/io/eval/BicubicSplineEvaluator.java      |     2 +
 .../solrj/io/eval/ChebyshevDistanceEvaluator.java  |     1 +
 .../solrj/io/eval/ChiSquareDataSetEvaluator.java   |    13 +-
 .../client/solrj/io/eval/ColumnAtEvaluator.java    |     2 +-
 .../client/solrj/io/eval/ConvexHullEvaluator.java  |     2 +-
 .../client/solrj/io/eval/ConvolutionEvaluator.java |     1 +
 .../client/solrj/io/eval/CorrelationEvaluator.java |     3 +-
 .../solrj/io/eval/CosineSimilarityEvaluator.java   |     2 +
 .../client/solrj/io/eval/CovarianceEvaluator.java  |     1 +
 .../solr/client/solrj/io/eval/DbscanEvaluator.java |     7 +-
 .../client/solrj/io/eval/DensityEvaluator.java     |     1 +
 .../client/solrj/io/eval/DescribeEvaluator.java    |    30 +-
 .../client/solrj/io/eval/DistanceEvaluator.java    |     1 +
 .../client/solrj/io/eval/DotProductEvaluator.java  |     2 +
 .../solr/client/solrj/io/eval/EBEAddEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBEDivideEvaluator.java   |     3 +-
 .../client/solrj/io/eval/EBEMultiplyEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBESubtractEvaluator.java |     3 +-
 .../solrj/io/eval/EnclosingDiskEvaluator.java      |     5 +-
 .../io/eval/EnumeratedDistributionEvaluator.java   |     6 +
 .../solrj/io/eval/EuclideanDistanceEvaluator.java  |     1 +
 .../solr/client/solrj/io/eval/FFTEvaluator.java    |     2 +-
 .../solrj/io/eval/FeatureSelectEvaluator.java      |     5 +-
 .../client/solrj/io/eval/FieldValueEvaluator.java  |     1 +
 .../client/solrj/io/eval/FindDelayEvaluator.java   |     2 +
 .../solrj/io/eval/FrequencyTableEvaluator.java     |    17 +-
 .../client/solrj/io/eval/FuzzyKmeansEvaluator.java |     7 +-
 .../solrj/io/eval/GTestDataSetEvaluator.java       |    13 +-
 .../client/solrj/io/eval/GaussFitEvaluator.java    |     1 +
 .../solrj/io/eval/GetBaryCenterEvaluator.java      |     2 +-
 .../client/solrj/io/eval/GetCacheEvaluator.java    |     2 +
 .../client/solrj/io/eval/GetCenterEvaluator.java   |     3 +-
 .../client/solrj/io/eval/GetClusterEvaluator.java  |     4 +-
 .../client/solrj/io/eval/GetRadiusEvaluator.java   |     1 +
 .../solrj/io/eval/GetSupportPointsEvaluator.java   |     4 +-
 .../client/solrj/io/eval/HarmonicFitEvaluator.java |     3 +
 .../client/solrj/io/eval/HistogramEvaluator.java   |    24 +-
 .../solr/client/solrj/io/eval/IFFTEvaluator.java   |     2 +-
 .../client/solrj/io/eval/IndexOfEvaluator.java     |     1 +
 .../client/solrj/io/eval/IntegrateEvaluator.java   |     2 +-
 .../solr/client/solrj/io/eval/IsNullEvaluator.java |     1 +
 .../solr/client/solrj/io/eval/KmeansEvaluator.java |     9 +-
 .../solr/client/solrj/io/eval/KnnEvaluator.java    |     9 +-
 .../solrj/io/eval/KnnRegressionEvaluator.java      |     3 +
 .../solrj/io/eval/KolmogorovSmirnovEvaluator.java  |    19 +-
 .../solr/client/solrj/io/eval/L1NormEvaluator.java |     1 +
 .../client/solrj/io/eval/LInfNormEvaluator.java    |     1 +
 .../solrj/io/eval/LatLonVectorsEvaluator.java      |     6 +-
 .../solr/client/solrj/io/eval/LerpEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ListCacheEvaluator.java   |     8 +
 .../solr/client/solrj/io/eval/LoessEvaluator.java  |     3 +-
 .../solrj/io/eval/MannWhitneyUEvaluator.java       |    12 +-
 .../apache/solr/client/solrj/io/eval/Matrix.java   |     7 +-
 .../solr/client/solrj/io/eval/MatrixEvaluator.java |     1 +
 .../solrj/io/eval/MatrixMultiplyEvaluator.java     |     1 +
 .../solrj/io/eval/MeanDifferenceEvaluator.java     |     1 +
 .../solr/client/solrj/io/eval/MeanEvaluator.java   |     1 +
 .../solr/client/solrj/io/eval/MemsetEvaluator.java |     6 +-
 .../client/solrj/io/eval/MinMaxScaleEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/ModeEvaluator.java   |     3 +-
 .../client/solrj/io/eval/MonteCarloEvaluator.java  |    10 +-
 .../client/solrj/io/eval/MultiKmeansEvaluator.java |     6 +-
 .../MultiVariateNormalDistributionEvaluator.java   |     1 +
 .../client/solrj/io/eval/NaturalEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/NormEvaluator.java   |     1 +
 .../solrj/io/eval/NormalizeSumEvaluator.java       |     3 +-
 .../client/solrj/io/eval/NotNullEvaluator.java     |     1 +
 .../solrj/io/eval/OLSRegressionEvaluator.java      |     7 +-
 .../solr/client/solrj/io/eval/OnesEvaluator.java   |     2 +-
 .../client/solrj/io/eval/OscillateEvaluator.java   |     2 +
 .../client/solrj/io/eval/OutliersEvaluator.java    |     8 +-
 .../client/solrj/io/eval/PairSortEvaluator.java    |     3 +-
 .../client/solrj/io/eval/PairedTTestEvaluator.java |    10 +-
 .../client/solrj/io/eval/PercentileEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/PivotEvaluator.java  |    13 +-
 .../solrj/io/eval/PolyFitDerivativeEvaluator.java  |     2 +
 .../client/solrj/io/eval/PolyFitEvaluator.java     |     1 +
 .../solr/client/solrj/io/eval/PowerEvaluator.java  |     9 +-
 .../client/solrj/io/eval/PredictEvaluator.java     |    11 +-
 .../solr/client/solrj/io/eval/PrimesEvaluator.java |     2 +-
 .../client/solrj/io/eval/PutCacheEvaluator.java    |     1 +
 .../client/solrj/io/eval/RecursiveEvaluator.java   |    14 +-
 .../client/solrj/io/eval/RegressionEvaluator.java  |     2 +
 .../client/solrj/io/eval/RemoveCacheEvaluator.java |     2 +
 .../solr/client/solrj/io/eval/RepeatEvaluator.java |     2 +-
 .../solr/client/solrj/io/eval/RowAtEvaluator.java  |     2 +-
 .../solr/client/solrj/io/eval/SampleEvaluator.java |     2 +-
 .../client/solrj/io/eval/ScalarAddEvaluator.java   |     3 +-
 .../solr/client/solrj/io/eval/ScaleEvaluator.java  |     2 +-
 .../solrj/io/eval/SetColumnLabelsEvaluator.java    |     3 +-
 .../solrj/io/eval/SetRowLabelsEvaluator.java       |     3 +-
 .../client/solrj/io/eval/SetValueEvaluator.java    |     8 +-
 .../solr/client/solrj/io/eval/SplineEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/SplitEvaluator.java  |     2 +-
 .../solrj/io/eval/StandardDeviationEvaluator.java  |     3 +-
 .../client/solrj/io/eval/SumColumnsEvaluator.java  |     2 +-
 .../solrj/io/eval/SumDifferenceEvaluator.java      |     1 +
 .../client/solrj/io/eval/SumRowsEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/SumSqEvaluator.java  |     1 +
 .../solr/client/solrj/io/eval/TTestEvaluator.java  |    13 +-
 .../client/solrj/io/eval/TermVectorsEvaluator.java |    16 +-
 .../solrj/io/eval/TimeDifferencingEvaluator.java   |    97 +-
 .../client/solrj/io/eval/TopFeaturesEvaluator.java |     8 +-
 .../solr/client/solrj/io/eval/UnitEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ValueAtEvaluator.java     |     1 +
 .../client/solrj/io/eval/VarianceEvaluator.java    |     3 +-
 .../solr/client/solrj/io/eval/VectorFunction.java  |     4 +
 .../solr/client/solrj/io/eval/ZerosEvaluator.java  |     2 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |    56 +-
 .../apache/solr/client/solrj/io/graph/Node.java    |    20 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |    35 +-
 .../solr/client/solrj/io/graph/Traversal.java      |    11 +-
 .../client/solrj/io/graph/TraversalIterator.java   |     9 +-
 .../solr/client/solrj/io/ops/GroupOperation.java   |    17 +-
 .../client/solrj/io/sql/ResultSetMetaDataImpl.java |     2 +
 .../client/solrj/io/stream/CalculatorStream.java   |    12 +-
 .../solrj/io/stream/CartesianProductStream.java    |     1 +
 .../solr/client/solrj/io/stream/CellStream.java    |     9 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |    32 +-
 .../solr/client/solrj/io/stream/CommitStream.java  |     2 +-
 .../solr/client/solrj/io/stream/CsvStream.java     |     3 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |    31 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |    28 +-
 .../solr/client/solrj/io/stream/DrillStream.java   |   280 +
 .../solr/client/solrj/io/stream/EchoStream.java    |    11 +-
 .../solr/client/solrj/io/stream/EvalStream.java    |     2 +-
 .../client/solrj/io/stream/ExceptionStream.java    |    12 +-
 .../client/solrj/io/stream/ExecutorStream.java     |    13 +-
 .../solr/client/solrj/io/stream/Facet2DStream.java |    26 +-
 .../solr/client/solrj/io/stream/FacetStream.java   |    96 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |    37 +-
 .../solr/client/solrj/io/stream/FetchStream.java   |     4 +-
 .../solr/client/solrj/io/stream/GetStream.java     |    14 +-
 .../client/solrj/io/stream/HashRollupStream.java   |    12 +-
 .../solr/client/solrj/io/stream/JDBCStream.java    |    23 +-
 .../client/solrj/io/stream/JSONTupleStream.java    |     1 +
 .../solrj/io/stream/JavabinTupleStreamParser.java  |     3 +
 .../solr/client/solrj/io/stream/KnnStream.java     |    13 +-
 .../solr/client/solrj/io/stream/LetStream.java     |     6 +-
 .../solr/client/solrj/io/stream/ListStream.java    |     5 +-
 .../solr/client/solrj/io/stream/ModelStream.java   |     6 +-
 .../solr/client/solrj/io/stream/NoOpStream.java    |     6 +-
 .../solr/client/solrj/io/stream/NullStream.java    |     3 +-
 .../client/solrj/io/stream/ParallelListStream.java |    13 +-
 .../client/solrj/io/stream/ParallelStream.java     |    10 +-
 .../solr/client/solrj/io/stream/PlotStream.java    |    21 +-
 .../client/solrj/io/stream/PriorityStream.java     |     2 +-
 .../solr/client/solrj/io/stream/RandomStream.java  |    15 +-
 .../solr/client/solrj/io/stream/RollupStream.java  |    16 +-
 .../client/solrj/io/stream/ScoreNodesStream.java   |    15 +-
 .../solr/client/solrj/io/stream/SearchStream.java  |    16 +-
 .../solr/client/solrj/io/stream/SelectStream.java  |    15 +-
 .../solrj/io/stream/SignificantTermsStream.java    |    31 +-
 .../solr/client/solrj/io/stream/SolrStream.java    |    13 +-
 .../solr/client/solrj/io/stream/StatsStream.java   |   286 +-
 .../solr/client/solrj/io/stream/StreamContext.java |    11 +-
 .../client/solrj/io/stream/TextLogitStream.java    |    54 +-
 .../client/solrj/io/stream/TimeSeriesStream.java   |    30 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |    16 +-
 .../solr/client/solrj/io/stream/TupStream.java     |    20 +-
 .../solr/client/solrj/io/stream/TupleStream.java   |     3 +-
 .../solr/client/solrj/io/stream/UpdateStream.java  |    21 +-
 .../solr/client/solrj/io/stream/ZplotStream.java   |    38 +-
 .../client/solrj/io/stream/expr/Explanation.java   |     1 +
 .../solrj/io/stream/expr/StreamExplanation.java    |     1 +
 .../solrj/io/stream/expr/StreamExpression.java     |     6 +
 .../expr/StreamExpressionNamedParameter.java       |     7 +
 .../io/stream/expr/StreamExpressionValue.java      |     9 +-
 .../client/solrj/io/stream/expr/StreamFactory.java |   249 +-
 .../solrj/io/stream/metrics/CountMetric.java       |     4 +-
 .../solrj/io/stream/metrics/PercentileMetric.java  |    84 +
 .../client/solrj/io/stream/metrics/StdMetric.java  |    93 +
 .../solrj/request/AbstractUpdateRequest.java       |     5 +
 .../solrj/request/CollectionAdminRequest.java      |   112 +-
 .../client/solrj/request/CollectionApiMapping.java |    14 +-
 .../solrj/request/ConfigSetAdminRequest.java       |     8 +-
 .../client/solrj/request/CoreAdminRequest.java     |     5 +
 .../solr/client/solrj/request/CoreApiMapping.java  |     3 +-
 .../solrj/request/DelegationTokenRequest.java      |    15 +
 .../client/solrj/request/DirectXmlRequest.java     |     5 +
 .../solrj/request/DocumentAnalysisRequest.java     |     5 +
 .../client/solrj/request/FieldAnalysisRequest.java |     5 +
 .../client/solrj/request/GenericSolrRequest.java   |     5 +
 .../client/solrj/request/HealthCheckRequest.java   |     5 +-
 .../solrj/request/JavaBinUpdateRequestCodec.java   |    19 +-
 .../solr/client/solrj/request/LukeRequest.java     |     5 +
 .../solrj/request/MultiContentWriterRequest.java   |     7 +-
 .../solr/client/solrj/request/QueryRequest.java    |     4 +
 .../solr/client/solrj/request/RequestWriter.java   |    13 +-
 .../apache/solr/client/solrj/request/SolrPing.java |     5 +
 .../solr/client/solrj/request/UpdateRequest.java   |     2 +-
 .../solr/client/solrj/request/V1toV2ApiMapper.java |     1 +
 .../solr/client/solrj/request/V2Request.java       |     5 +
 .../client/solrj/request/beans/PluginMeta.java     |    64 +
 .../solr/client/solrj/request/json/DomainMap.java  |     3 +
 .../client/solrj/request/json/HeatmapFacetMap.java |     3 +-
 .../client/solrj/request/json/JsonFacetMap.java    |     5 +-
 .../solrj/request/json/JsonQueryRequest.java       |     8 +
 .../request/schema/AbstractSchemaRequest.java      |     4 +
 .../solrj/response/AnalysisResponseBase.java       |     3 +-
 .../solrj/response/CollectionAdminResponse.java    |     1 +
 .../solrj/response/ConfigSetAdminResponse.java     |     3 +-
 .../solrj/response/DelegationTokenResponse.java    |     3 +
 .../solr/client/solrj/response/FieldStatsInfo.java |     1 +
 .../client/solrj/response/HealthCheckResponse.java |     1 +
 .../solr/client/solrj/response/PivotField.java     |     5 +-
 .../solr/client/solrj/response/QueryResponse.java  |    11 +-
 .../solr/client/solrj/response/RangeFacet.java     |     5 +-
 .../client/solrj/response/SolrResponseBase.java    |     3 +
 .../client/solrj/response/SpellCheckResponse.java  |     1 +
 .../client/solrj/response/SuggesterResponse.java   |     1 +
 .../solrj/response/json/BucketBasedJsonFacet.java  |     1 +
 .../solrj/response/json/HeatmapJsonFacet.java      |     1 +
 .../solrj/response/json/NestableJsonFacet.java     |     1 +
 .../solrj/response/schema/SchemaResponse.java      |    32 +-
 .../RequestReplicaListTransformerGenerator.java    |     6 +-
 .../solr/client/solrj/util/AsyncListener.java      |    33 +
 .../apache/solr/client/solrj/util/Cancellable.java |    22 +
 .../apache/solr/client/solrj/util/ClientUtils.java |     2 +
 .../java/org/apache/solr/cluster/api/ApiType.java  |    31 +
 .../apache/solr/cluster/api/CollectionConfig.java  |    27 +
 .../org/apache/solr/cluster/api/HashRange.java     |    42 +
 .../java/org/apache/solr/cluster/api/Resource.java |    41 +
 .../java/org/apache/solr/cluster/api/Router.java   |    25 +
 .../java/org/apache/solr/cluster/api/Shard.java    |    39 +
 .../org/apache/solr/cluster/api/ShardReplica.java  |    57 +
 .../org/apache/solr/cluster/api/SimpleMap.java     |    80 +
 .../org/apache/solr/cluster/api/SolrCluster.java   |    48 +
 .../apache/solr/cluster/api/SolrCollection.java    |    34 +
 .../java/org/apache/solr/cluster/api/SolrNode.java |    36 +
 .../org/apache/solr/common/IteratorWriter.java     |     1 +
 .../org/apache/solr/common/LazySolrCluster.java    |   446 +
 .../apache/solr/common/LinkedHashMapWriter.java    |     2 +
 .../org/apache/solr/common/MapSerializable.java    |     1 +
 .../src/java/org/apache/solr/common/MapWriter.java |     1 +
 .../java/org/apache/solr/common/MapWriterMap.java  |     7 +-
 .../org/apache/solr/common/NavigableObject.java    |     6 +-
 .../java/org/apache/solr/common/SimpleZkMap.java   |   139 +
 .../java/org/apache/solr/common/SolrDocument.java  |     7 +-
 .../org/apache/solr/common/SolrDocumentBase.java   |     1 +
 .../org/apache/solr/common/SolrDocumentList.java   |    10 +
 .../java/org/apache/solr/common/SolrException.java |    15 +-
 .../org/apache/solr/common/SolrInputDocument.java  |     1 +
 .../org/apache/solr/common/SolrInputField.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Aliases.java |    12 +-
 .../solr/common/cloud/ClusterProperties.java       |     4 +
 .../org/apache/solr/common/cloud/ClusterState.java |    91 +-
 .../solr/common/cloud/CompositeIdRouter.java       |     2 +-
 .../solr/common/cloud/ConnectionManager.java       |     6 +-
 .../apache/solr/common/cloud/DocCollection.java    |    63 +-
 .../org/apache/solr/common/cloud/DocRouter.java    |    16 +-
 .../solr/common/cloud/NodesSysPropsCacher.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Replica.java |   193 +-
 .../java/org/apache/solr/common/cloud/Slice.java   |     3 +
 .../org/apache/solr/common/cloud/SolrZkClient.java |    49 +-
 .../apache/solr/common/cloud/SolrZooKeeper.java    |     1 +
 .../apache/solr/common/cloud/ZkConfigManager.java  |     3 +-
 .../apache/solr/common/cloud/ZkDynamicConfig.java  |   145 +
 .../solr/common/cloud/ZkMaintenanceUtils.java      |    33 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |    11 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   364 +-
 .../solr/common/cloud/rule/ImplicitSnitch.java     |     5 +-
 .../org/apache/solr/common/cloud/rule/Snitch.java  |     1 +
 .../solr/common/cloud/rule/SnitchContext.java      |     1 +
 .../solr/common/params/AutoScalingParams.java      |    76 -
 .../solr/common/params/CollectionAdminParams.java  |    11 +-
 .../solr/common/params/CollectionParams.java       |    44 +-
 .../apache/solr/common/params/CommonParams.java    |    33 +-
 .../org/apache/solr/common/params/FacetParams.java |     4 +-
 .../apache/solr/common/params/MapSolrParams.java   |    22 +-
 .../solr/common/params/MultiMapSolrParams.java     |     5 +
 .../org/apache/solr/common/params/SolrParams.java  |     7 +-
 .../apache/solr/common/params/StreamParams.java    |    41 +
 .../common/util/ByteArrayUtf8CharSequence.java     |     6 +-
 .../apache/solr/common/util/CommandOperation.java  |    16 +-
 .../apache/solr/common/util/ContentStreamBase.java |     3 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |    12 +-
 .../solr/common/util/FastJavaBinDecoder.java       |     6 +
 .../src/java/org/apache/solr/common/util/Hash.java |     2 +
 .../org/apache/solr/common/util/JavaBinCodec.java  |    28 +-
 .../apache/solr/common/util/JsonRecordReader.java  |    10 +
 .../apache/solr/common/util/JsonSchemaCreator.java |     3 +-
 .../solr/common/util/JsonSchemaValidator.java      |    22 +-
 .../apache/solr/common/util/JsonTextWriter.java    |    19 +-
 .../solr/common/util/LinkedSimpleHashMap.java      |    34 +
 .../apache/solr/common/util/MapBackedCache.java    |     4 +
 .../org/apache/solr/common/util/NamedList.java     |    59 +-
 .../src/java/org/apache/solr/common/util/Pair.java |     1 +
 .../java/org/apache/solr/common/util/PathTrie.java |    50 +-
 .../apache/solr/common/util/ReflectMapWriter.java  |    29 +-
 .../org/apache/solr/common/util/RetryUtil.java     |    13 +-
 .../solr/common/util/SolrNamedThreadFactory.java   |    52 +
 .../solr/common/util/SolrjNamedThreadFactory.java  |    49 -
 .../java/org/apache/solr/common/util/StrUtils.java |     2 +-
 .../org/apache/solr/common/util/TextWriter.java    |    21 +-
 .../org/apache/solr/common/util/TimeSource.java    |     4 +-
 .../java/org/apache/solr/common/util/Utils.java    |   192 +-
 .../apache/solr/common/util/ValidatingJsonMap.java |    19 +-
 .../apache/solr/common/util/WrappedSimpleMap.java  |    49 +
 .../apache/solr/common/util/XMLErrorLogger.java    |     4 +-
 solr/solrj/src/java/org/noggit/CharArr.java        |   262 +-
 solr/solrj/src/java/org/noggit/JSONParser.java     |     2 +-
 .../resources/apispec/autoscaling.Commands.json    |   199 -
 .../src/resources/apispec/autoscaling.history.json |    61 -
 .../src/resources/apispec/cluster.Commands.json    |    28 -
 .../resources/apispec/collections.Commands.json    |    15 -
 .../apispec/collections.collection.Commands.json   |     8 +-
 .../collections.collection.Commands.modify.json    |    15 -
 ...collections.collection.shards.shard.delete.json |     2 +-
 ...ons.collection.shards.shard.replica.delete.json |     2 +-
 solr/solrj/src/test-files/log4j2.xml               |    45 +-
 .../src/test-files/solrj/javabin_backcompat.bin    |   Bin 169 -> 170 bytes
 .../solr/autoscaling/testAddMissingReplica.json    |   123 -
 .../autoscaling/testAutoScalingHandlerFailure.json |   141 -
 ...testAutoscalingPreferencesUsedWithNoPolicy.json |    53 -
 .../autoscaling/testComputePlanAfterNodeAdded.json |    16 -
 .../solr/autoscaling/testCoresSuggestions.json     |    17 -
 .../testCreateCollectionWithEmptyPolicy.json       |    20 -
 .../solrj/solr/autoscaling/testDiskSpaceHint.json  |    16 -
 .../solr/autoscaling/testEmptyCollection.json      |    27 -
 .../solrj/solr/autoscaling/testEqualOnNonNode.json |    83 -
 .../solr/autoscaling/testFreeDiskDeviation.json    |    35 -
 .../solr/autoscaling/testFreeDiskSuggestions.json  |    27 -
 .../solr/autoscaling/testFreediskPercentage.json   |    25 -
 .../solrj/solr/autoscaling/testHostAttribute.json  |   119 -
 .../solrj/solr/autoscaling/testInfiniteLoop.json   | 13196 -------------------
 .../solr/autoscaling/testMoveReplicaSuggester.json |    15 -
 .../testMoveReplicasInMultipleCollections.json     |    88 -
 .../solrj/solr/autoscaling/testPolicy.json         |    41 -
 .../solr/autoscaling/testPortSuggestions.json      |    22 -
 .../autoscaling/testReplicaCountSuggestions.json   |    15 -
 .../solr/autoscaling/testReplicaPercentage.json    |    46 -
 .../autoscaling/testReplicaZonesPercentage.json    |    15 -
 .../autoscaling/testScheduledTriggerFailure.json   |    52 -
 .../solrj/solr/autoscaling/testSortError.json      |   225 -
 .../autoscaling/testSuggestionsRebalance2.json     |   130 -
 .../autoscaling/testSuggestionsRebalanceOnly.json  |   105 -
 .../solr/autoscaling/testSysPropSuggestions.json   |   127 -
 .../solr/autoscaling/testSyspropSuggestions1.json  |    24 -
 .../solr/autoscaling/testUnresolvedSuggestion.json |   212 -
 .../solr/autoscaling/testUtilizeNodeFailure.json   |    69 -
 .../solr/autoscaling/testUtilizeNodeFailure2.json  |    66 -
 .../solr/autoscaling/testViolationOutput.json      |    22 -
 .../solrj/solr/autoscaling/testWithCollection.json |    21 -
 .../autoscaling/testWithCollectionMoveReplica.json |    28 -
 .../testWithCollectionMoveVsAddSuggestions.json    |    49 -
 .../autoscaling/testWithCollectionSuggestions.json |    21 -
 ...rconfig-slave1.xml => solrconfig-follower1.xml} |     0
 .../ref_guide_examples/JsonRequestApiTest.java     |     4 +-
 .../UsingSolrJRefGuideExamplesTest.java            |    59 +-
 .../org/apache/solr/client/solrj/GetByIdTest.java  |    27 +-
 .../solr/client/solrj/LargeVolumeTestBase.java     |    10 +-
 .../client/solrj/MergeIndexesExampleTestBase.java  |    15 +-
 .../apache/solr/client/solrj/SolrExampleTests.java |    21 +-
 .../client/solrj/SolrSchemalessExampleTest.java    |     2 +
 .../solr/client/solrj/TestLBHttp2SolrClient.java   |     9 +-
 .../solr/client/solrj/TestLBHttpSolrClient.java    |     9 +-
 .../solr/client/solrj/TestSolrJErrorHandling.java  |    20 +-
 .../solrj/beans/TestDocumentObjectBinder.java      |     1 +
 .../solrj/cloud/autoscaling/ConditionTest.java     |    80 -
 .../autoscaling/MoveReplicaSuggesterTest.java      |   104 -
 .../client/solrj/cloud/autoscaling/TestPolicy.java |  3092 -----
 .../solrj/cloud/autoscaling/TestPolicy2.java       |   505 -
 .../solrj/cloud/autoscaling/TestPolicy2Old.java    |    26 -
 .../solrj/cloud/autoscaling/TestPolicyOld.java     |    25 -
 .../solrj/embedded/SolrExampleJettyTest.java       |     1 +
 .../solrj/embedded/TestEmbeddedSolrServer.java     |     2 +-
 .../client/solrj/impl/BasicHttpSolrClientTest.java |    53 +-
 .../impl/CloudHttp2SolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/CloudHttp2SolrClientRetryTest.java  |     1 +
 .../solrj/impl/CloudHttp2SolrClientTest.java       |    45 +-
 .../solrj/impl/CloudSolrClientBadInputTest.java    |     4 +-
 .../solrj/impl/CloudSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/CloudSolrClientCacheTest.java       |    15 +-
 .../solrj/impl/CloudSolrClientRetryTest.java       |     1 +
 .../client/solrj/impl/CloudSolrClientTest.java     |    41 +-
 ...oncurrentUpdateHttp2SolrClientBadInputTest.java |     4 +-
 .../impl/ConcurrentUpdateHttp2SolrClientTest.java  |     6 +-
 .../ConcurrentUpdateSolrClientBadInputTest.java    |     4 +-
 .../ConcurrentUpdateSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/ConcurrentUpdateSolrClientTest.java |     6 +-
 .../impl/Http2SolrClientCompatibilityTest.java     |     7 +-
 .../client/solrj/impl/Http2SolrClientTest.java     |    44 +-
 .../solr/client/solrj/impl/HttpClientUtilTest.java |    16 +-
 .../solrj/impl/HttpSolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/HttpSolrClientConPoolTest.java      |     4 +-
 .../solrj/impl/LBHttpSolrClientBadInputTest.java   |     4 +-
 .../solr/client/solrj/impl/LBSolrClientTest.java   |    90 +
 .../org/apache/solr/client/solrj/io/TestLang.java  |     4 +-
 .../client/solrj/io/graph/GraphExpressionTest.java |    16 +-
 .../solr/client/solrj/io/graph/GraphTest.java      |    10 +-
 .../apache/solr/client/solrj/io/sql/JdbcTest.java  |     2 +
 .../solrj/io/stream/CloudAuthStreamTest.java       |     9 +-
 .../client/solrj/io/stream/JDBCStreamTest.java     |     4 +-
 .../client/solrj/io/stream/MathExpressionTest.java |   258 +-
 .../client/solrj/io/stream/RecordCountStream.java  |     2 +-
 .../solrj/io/stream/SelectWithEvaluatorsTest.java  |    10 +-
 .../solrj/io/stream/StreamDecoratorTest.java       |    33 +-
 .../solrj/io/stream/StreamExpressionTest.java      |   417 +-
 .../solr/client/solrj/io/stream/StreamingTest.java |    15 +-
 .../solrj/io/stream/eval/AscEvaluatorTest.java     |     6 +
 .../io/stream/eval/ConversionEvaluatorsTest.java   |    27 +-
 .../solrj/io/stream/eval/ReverseEvaluatorTest.java |     1 +
 .../io/stream/eval/TemporalEvaluatorsTest.java     |     4 +-
 .../solrj/io/stream/ops/ConcatOperationTest.java   |     4 +-
 .../client/solrj/io/stream/ops/OperationsTest.java |     4 +-
 .../solr/client/solrj/request/SchemaTest.java      |    14 +-
 .../solrj/request/TestConfigSetAdminRequest.java   |     3 +-
 .../solr/client/solrj/request/TestCoreAdmin.java   |    12 +-
 .../solrj/request/TestUpdateRequestCodec.java      |     6 +-
 .../solr/client/solrj/request/TestV2Request.java   |     6 +-
 .../client/solrj/request/json/DomainMapTest.java   |     7 +
 .../solrj/response/AnlysisResponseBaseTest.java    |     6 +-
 .../response/DocumentAnalysisResponseTest.java     |     2 +
 .../solrj/response/FieldAnalysisResponseTest.java  |     2 +
 .../solrj/response/NoOpResponseParserTest.java     |     2 +
 .../client/solrj/response/QueryResponseTest.java   |     1 +
 .../response/TestDelegationTokenResponse.java      |     2 +-
 ...RequestReplicaListTransformerGeneratorTest.java |    17 +-
 .../org/apache/solr/common/SolrDocumentTest.java   |     7 +-
 .../solr/common/TestToleratedUpdateError.java      |     2 +
 .../apache/solr/common/cloud/SolrZkClientTest.java |    12 +-
 .../cloud/TestCloudCollectionsListeners.java       |   110 -
 .../common/cloud/TestCollectionStateWatchers.java  |    23 -
 .../common/cloud/TestDocCollectionWatcher.java     |    26 -
 .../solr/common/params/CommonParamsTest.java       |     2 +
 .../apache/solr/common/util/JsonValidatorTest.java |     3 +
 .../org/apache/solr/common/util/NamedListTest.java |     5 +-
 .../solr/common/util/TestFastJavabinDecoder.java   |    13 +
 .../apache/solr/common/util/TestJavaBinCodec.java  |   103 +-
 .../solr/common/util/TestJsonRecordReader.java     |     5 +
 .../solr/common/util/TestNamedListCodec.java       |    15 +
 .../org/apache/solr/common/util/TestPathTrie.java  |    10 +
 .../solr/common/util/TestSolrJsonWriter.java       |   102 +-
 .../solr/common/util/TestValidatingJsonMap.java    |     1 +
 .../solr/common/util/TestZkMaintenanceUtils.java   |    55 +
 .../solr/common/util/Utf8CharSequenceTest.java     |     6 +
 solr/test-framework/{README.txt => README.md}      |     0
 solr/test-framework/build.gradle                   |     3 +-
 solr/test-framework/build.xml                      |     2 +-
 solr/test-framework/ivy.xml                        |     2 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |    31 +-
 .../src/java/org/apache/solr/JSONTestUtil.java     |     7 +
 .../org/apache/solr/SolrIgnoredThreadsFilter.java  |     5 +
 .../java/org/apache/solr/SolrJettyTestBase.java    |     2 +-
 .../src/java/org/apache/solr/SolrTestCase.java     |    12 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |    95 +-
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   129 +-
 .../solr/analysis/MockCharFilterFactory.java       |     5 +
 .../solr/analysis/MockTokenFilterFactory.java      |     5 +
 .../apache/solr/analysis/MockTokenizerFactory.java |     5 +
 .../solr/cloud/AbstractDistribZkTestBase.java      |    54 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |   183 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |    12 +-
 .../org/apache/solr/cloud/CloudInspectUtil.java    |    23 +-
 .../java/org/apache/solr/cloud/ConfigRequest.java  |     6 +
 .../src/java/org/apache/solr/cloud/IpTables.java   |     4 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |    19 +-
 .../apache/solr/cloud/MultiSolrCloudTestCase.java  |     5 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |     4 +
 .../org/apache/solr/cloud/SolrCloudTestCase.java   |     9 +-
 .../apache/solr/cloud/StoppableCommitThread.java   |     4 +-
 .../apache/solr/cloud/StoppableSearchThread.java   |     2 +-
 .../java/org/apache/solr/cloud/ZkTestServer.java   |    29 +-
 .../solr/core/MockConcurrentMergeScheduler.java    |     3 +-
 .../apache/solr/core/MockTracerConfigurator.java   |     2 +-
 .../component/TrackingShardHandlerFactory.java     |    67 +-
 .../org/apache/solr/util/RandomMergePolicy.java    |     4 +-
 .../java/org/apache/solr/util/RandomizeSSL.java    |     4 +-
 .../java/org/apache/solr/util/RestTestBase.java    |    71 +-
 .../java/org/apache/solr/util/SSLTestConfig.java   |    26 +-
 .../src/java/org/apache/solr/util/TestHarness.java |    35 +-
 solr/webapp/build.gradle                           |     2 +
 solr/webapp/web/css/angular/collections.css        |     2 +-
 solr/webapp/web/css/angular/dashboard.css          |     4 +-
 solr/webapp/web/css/angular/dataimport.css         |     3 +-
 solr/webapp/web/css/angular/index.css              |     5 +
 solr/webapp/web/css/angular/menu.css               |     3 +-
 solr/webapp/web/css/angular/replication.css        |    10 +-
 solr/webapp/web/css/angular/suggestions.css        |    64 -
 .../img/ico/{node-slave.png => node-follower.png}  |   Bin
 .../img/ico/{node-master.png => node-leader.png}   |   Bin
 solr/webapp/web/index.html                         |    31 +-
 solr/webapp/web/js/angular/app.js                  |     4 -
 solr/webapp/web/js/angular/controllers/cloud.js    |     9 +-
 .../js/angular/controllers/cluster-suggestions.js  |    62 -
 .../web/js/angular/controllers/collections.js      |     8 +-
 .../web/js/angular/controllers/core-overview.js    |     4 +-
 solr/webapp/web/js/angular/controllers/index.js    |     6 +
 solr/webapp/web/js/angular/controllers/login.js    |     2 +-
 .../web/js/angular/controllers/replication.js      |   108 +-
 solr/webapp/web/libs/angular-chosen.min.js         |     4 +-
 solr/webapp/web/partials/cloud.html                |     3 +-
 solr/webapp/web/partials/cluster_suggestions.html  |    49 -
 solr/webapp/web/partials/collection_overview.html  |     6 -
 solr/webapp/web/partials/collections.html          |    20 -
 solr/webapp/web/partials/core_overview.html        |    38 +-
 solr/webapp/web/partials/dataimport.html           |     1 +
 solr/webapp/web/partials/index.html                |    34 +
 solr/webapp/web/partials/login.html                |    17 +
 solr/webapp/web/partials/replication.html          |    62 +-
 versions.lock                                      |   121 +-
 versions.props                                     |    32 +-
 3441 files changed, 84058 insertions(+), 139424 deletions(-)

diff --cc lucene/core/src/java/org/apache/lucene/search/MultiCollector.java
index 56965e6,5cb6db8..ab426de
--- a/lucene/core/src/java/org/apache/lucene/search/MultiCollector.java
+++ b/lucene/core/src/java/org/apache/lucene/search/MultiCollector.java
@@@ -116,14 -115,9 +116,14 @@@ public class MultiCollector implements 
      return scoreMode;
    }
  
 +  // nocommit: need to raise a LUCENE jira for this?
 +  public List<Collector> getCollectors() {
 +    return Collections.unmodifiableList(Arrays.asList(collectors));
 +  }
 +
    @Override
    public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
-     final List<LeafCollector> leafCollectors = new ArrayList<>();
+     final List<LeafCollector> leafCollectors = new ArrayList<>(collectors.length);
      for (Collector collector : collectors) {
        final LeafCollector leafCollector;
        try {
diff --cc solr/core/src/java/org/apache/solr/core/CoreContainer.java
index fc59fc7,b5cd2d7..1203eb7
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@@ -182,12 -196,11 +196,13 @@@ public class CoreContainer 
    private volatile UpdateShardHandler updateShardHandler;
  
    private volatile ExecutorService coreContainerWorkExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(
-       new DefaultSolrThreadFactory("coreContainerWorkExecutor"));
+       new SolrNamedThreadFactory("coreContainerWorkExecutor"));
  
 +  final private ExecutorService collectorExecutor;
 +
    private final OrderedExecutor replayUpdatesExecutor;
  
+   @SuppressWarnings({"rawtypes"})
    protected volatile LogWatcher logging = null;
  
    private volatile CloserThread backgroundCloser = null;
@@@ -354,11 -344,30 +346,32 @@@
          cfg.getReplayUpdatesThreads(),
          ExecutorUtil.newMDCAwareCachedThreadPool(
              cfg.getReplayUpdatesThreads(),
-             new DefaultSolrThreadFactory("replayUpdatesExecutor")));
+             new SolrNamedThreadFactory("replayUpdatesExecutor")));
 -
 +    this.collectorExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(cfg.getCollectorsPoolSize(),
-         new DefaultSolrThreadFactory("searcherCollectorExecutor"));
++            new SolrNamedThreadFactory("searcherCollectorExecutor"));
++    
+     this.allowPaths = new java.util.HashSet<>();
+     this.allowPaths.add(cfg.getSolrHome());
+     this.allowPaths.add(cfg.getCoreRootDirectory());
+     if (cfg.getSolrDataHome() != null) {
+       this.allowPaths.add(cfg.getSolrDataHome());
+     }
+     if (!cfg.getAllowPaths().isEmpty()) {
+       this.allowPaths.addAll(cfg.getAllowPaths());
+       if (log.isInfoEnabled()) {
+         log.info("Allowing use of paths: {}", cfg.getAllowPaths());
+       }
+     }
+ 
+     Path userFilesPath = getUserFilesPath(); // TODO make configurable on cfg?
+     try {
+       Files.createDirectories(userFilesPath); // does nothing if already exists
+     } catch (Exception e) {
+       log.warn("Unable to create [{}].  Features requiring this directory may fail.", userFilesPath, e);
+     }
    }
  
+   @SuppressWarnings({"unchecked"})
    private synchronized void initializeAuthorizationPlugin(Map<String, Object> authorizationConf) {
      authorizationConf = Utils.getDeepCopy(authorizationConf, 4);
      int newVersion = readVersion(authorizationConf);
@@@ -547,7 -559,6 +563,7 @@@
      cfg = null;
      containerProperties = null;
      replayUpdatesExecutor = null;
-     this.collectorExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(new DefaultSolrThreadFactory("searcherCollectorExecutor"));
++    this.collectorExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrNamedThreadFactory("searcherCollectorExecutor"));
    }
  
    public static CoreContainer createAndLoad(Path solrHome) {
@@@ -963,11 -983,12 +988,13 @@@
        OverseerTaskQueue overseerCollectionQueue = zkController.getOverseerCollectionQueue();
        overseerCollectionQueue.allowOverseerPendingTasksToComplete();
      }
-     log.info("Shutting down CoreContainer instance=" + System.identityHashCode(this));
+     if (log.isInfoEnabled()) {
+       log.info("Shutting down CoreContainer instance={}", System.identityHashCode(this));
+     }
  
 +    ExecutorUtil.shutdownAndAwaitTermination(collectorExecutor);
      ExecutorUtil.shutdownAndAwaitTermination(coreContainerAsyncTaskExecutor);
-     ExecutorService customThreadPool = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrjNamedThreadFactory("closeThreadPool"));
+     ExecutorService customThreadPool = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrNamedThreadFactory("closeThreadPool"));
  
      isShutDown = true;
      try {
diff --cc solr/core/src/java/org/apache/solr/core/NodeConfig.java
index a701beb,ef8fddb..090d2e0
--- a/solr/core/src/java/org/apache/solr/core/NodeConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/NodeConfig.java
@@@ -88,9 -94,12 +96,12 @@@ public class NodeConfig 
                       String coreAdminHandlerClass, String collectionsAdminHandlerClass,
                       String healthCheckHandlerClass, String infoHandlerClass, String configSetsHandlerClass,
                       LogWatcherConfig logWatcherConfig, CloudConfig cloudConfig, Integer coreLoadThreads, int replayUpdatesThreads,
-                      int collectorsPoolSize, int transientCacheSize, boolean useSchemaCache, String managementPath, SolrResourceLoader loader,
 -                     int transientCacheSize, boolean useSchemaCache, String managementPath,
++                     int collectorsPoolSize, int transientCacheSize, boolean useSchemaCache, String managementPath,
+                      Path solrHome, SolrResourceLoader loader,
                       Properties solrProperties, PluginInfo[] backupRepositoryPlugins,
-                      MetricsConfig metricsConfig, PluginInfo transientCacheConfig, PluginInfo tracerConfig) {
+                      MetricsConfig metricsConfig, PluginInfo transientCacheConfig, PluginInfo tracerConfig,
+                      boolean fromZookeeper, Set<Path> allowPaths) {
+     // all Path params here are absolute and normalized.
      this.nodeName = nodeName;
      this.coreRootDirectory = coreRootDirectory;
      this.solrDataHome = solrDataHome;
@@@ -449,8 -481,14 +495,14 @@@
        return new NodeConfig(nodeName, coreRootDirectory, solrDataHome, booleanQueryMaxClauseCount,
                              configSetBaseDirectory, sharedLibDirectory, shardHandlerFactoryConfig,
                              updateShardHandlerConfig, coreAdminHandlerClass, collectionsAdminHandlerClass, healthCheckHandlerClass, infoHandlerClass, configSetsHandlerClass,
-                             logWatcherConfig, cloudConfig, coreLoadThreads, replayUpdatesThreads, collectorsPoolSize, transientCacheSize, useSchemaCache, managementPath, loader, solrProperties,
-                             backupRepositoryPlugins, metricsConfig, transientCacheConfig, tracerConfig);
 -                            logWatcherConfig, cloudConfig, coreLoadThreads, replayUpdatesThreads, transientCacheSize, useSchemaCache, managementPath,
++                            logWatcherConfig, cloudConfig, coreLoadThreads, replayUpdatesThreads, collectorsPoolSize, transientCacheSize, useSchemaCache, managementPath,
+                             solrHome, loader, solrProperties,
+                             backupRepositoryPlugins, metricsConfig, transientCacheConfig, tracerConfig, fromZookeeper, allowPaths);
+     }
+ 
+     public NodeConfigBuilder setSolrResourceLoader(SolrResourceLoader resourceLoader) {
+       this.loader = resourceLoader;
+       return this;
      }
    }
  }
diff --cc solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index 67d6539,853da1c..ce3fde8
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@@ -910,9 -925,14 +925,14 @@@ public class QueryComponent extends Sea
            maxScore = maxScore==null ? docs.getMaxScore() : Math.max(maxScore, docs.getMaxScore());
          }
          numFound += docs.getNumFound();
+         
+         if (hitCountIsExact && Boolean.FALSE.equals(docs.getNumFoundExact())) {
+           hitCountIsExact = false;
+         }
  
+         @SuppressWarnings({"rawtypes"})
          NamedList sortFieldValues = (NamedList)(srsp.getSolrResponse().getResponse().get("sort_values"));
 -        if (sortFieldValues.size()==0 && // we bypass merging this response only if it's partial itself
 +        if (sortFieldValues == null || sortFieldValues.size()==0 && // we bypass merging this response only if it's partial itself
                              thisResponseIsPartial) { // but not the previous one!!
            continue; //fsv timeout yields empty sort_vlaues
          }
diff --cc solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index 034a488,3ebd43c..663d3c9
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@@ -1612,35 -1587,24 +1589,44 @@@ public class SolrIndexSearcher extends 
        maxScore = totalHits > 0 ? topscore[0] : 0.0f;
        // no docs on this page, so cursor doesn't change
        qr.setNextCursorMark(cmd.getCursorMark());
+       hitsRelation = Relation.EQUAL_TO;
      } else {
 -      final TopDocsCollector<?> topCollector = buildTopDocsCollector(len, cmd);
 -      MaxScoreCollector maxScoreCollector = null;
 -      Collector collector = topCollector;
 -      if ((cmd.getFlags() & GET_SCORES) != 0) {
 -        maxScoreCollector = new MaxScoreCollector();
 -        collector = MultiCollector.wrap(topCollector, maxScoreCollector);
 -      }
 -      ScoreMode scoreModeUsed = buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter).scoreMode();
 +      TopDocs topDocs;
 +      log.info("calling from 2, query: "+query.getClass()); // nocommit
 +      if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0 
 +          || query instanceof RankQuery || query instanceof GraphQuery) {
 +        log.debug("skipping collector manager");
-         final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
++        final TopDocsCollector<?> topCollector = buildTopDocsCollector(len, cmd);
 +        MaxScoreCollector maxScoreCollector = null;
 +        Collector collector = topCollector;
 +        if ((cmd.getFlags() & GET_SCORES) != 0) {
 +          maxScoreCollector = new MaxScoreCollector();
 +          collector = MultiCollector.wrap(topCollector, maxScoreCollector);
 +        }
-         buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
++        ScoreMode scoreModeUsed = buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter).scoreMode();
+ 
 -      totalHits = topCollector.getTotalHits();
 -      TopDocs topDocs = topCollector.topDocs(0, len);
 -      if (scoreModeUsed == ScoreMode.COMPLETE || scoreModeUsed == ScoreMode.COMPLETE_NO_SCORES) {
 -        hitsRelation = TotalHits.Relation.EQUAL_TO;
 +        totalHits = topCollector.getTotalHits();
 +        topDocs = topCollector.topDocs(0, len);
- 
-         maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
++        if (scoreModeUsed == ScoreMode.COMPLETE || scoreModeUsed == ScoreMode.COMPLETE_NO_SCORES) {
++          hitsRelation = TotalHits.Relation.EQUAL_TO;
++        } else {
++          hitsRelation = topDocs.totalHits.relation;
++        }
 +        nDocsReturned = topDocs.scoreDocs.length;
++        maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
        } else {
 +        log.debug("using collectormanager");
 +        CollectorManagerResult result = searchCollectorManagers(len, cmd, query, true, true, false); // nocommit: need docset should be false
 +        totalHits = result.totalHits;
 +
 +        maxScore = result.maxScore;
 +        nDocsReturned = result.topDocs.scoreDocs.length;
 +        topDocs = result.topDocs;
++
++        //TODO: Is this correct?
+         hitsRelation = topDocs.totalHits.relation;
        }
 +
        if (cmd.getSort() != null && query instanceof RankQuery == false && (cmd.getFlags() & GET_SCORES) != 0) {
          TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
        }
@@@ -1657,86 -1623,9 +1643,88 @@@
  
      int sliceLen = Math.min(lastDocRequested, nDocsReturned);
      if (sliceLen < 0) sliceLen = 0;
-     qr.setDocList(new DocSlice(0, sliceLen, ids, scores, totalHits, maxScore));
+     qr.setDocList(new DocSlice(0, sliceLen, ids, scores, totalHits, maxScore, hitsRelation));
    }
  
 +  CollectorManagerResult searchCollectorManagers(int len, QueryCommand cmd, Query query,
 +      boolean needTopDocs, boolean needMaxScore, boolean needDocSet) throws IOException {
 +    CollectorManager<MultiCollector, CollectorManagerResult> manager = new CollectorManager<MultiCollector, CollectorManagerResult>() {
 +      @Override
 +      public MultiCollector newCollector() throws IOException {
-         // nocommit: Here, creating a MultiCollector for every segment (correctness > speed).
-         // Need to explore sharing a single MultiCollector with every segment. Are these
-         // sub-collectors thread-safe? DocSetCollector seems like not thread-safe, does someone know?
++        // TODO: DocCollector is not thread safe.
 +        Collection<Collector> collectors = new ArrayList<Collector>();
 +        if (needTopDocs) collectors.add(buildTopDocsCollector(len, cmd));
 +        if (needMaxScore) collectors.add(new MaxScoreCollector());
 +        if (needDocSet) collectors.add(new DocSetCollector(maxDoc()));
 +        return (MultiCollector) MultiCollector.wrap(collectors);
 +      }
 +
 +      @Override
 +      public CollectorManagerResult reduce(Collection<MultiCollector> multiCollectors) throws IOException {
 +        final TopDocs[] topDocs = new TopDocs[multiCollectors.size()];
 +        float maxScore = 0.0f;
 +        DocSet docSet = new BitDocSet(new FixedBitSet(maxDoc())); // TODO: if docset is not needed, avoid this initialization
 +        int i = 0;
 +        for (MultiCollector multiCollector: multiCollectors) {
 +          int c = 0;
 +          List<Collector> subCollectors = multiCollector.getCollectors();
 +          TopDocsCollector topDocsCollector = needTopDocs? ((TopDocsCollector) subCollectors.get(c++)): null;
 +          MaxScoreCollector maxScoreCollector = needMaxScore? ((MaxScoreCollector) subCollectors.get(c++)): null;
 +          DocSetCollector docSetCollector = needDocSet? ((DocSetCollector) subCollectors.get(c++)): null;
 +          
-           if (needTopDocs)  topDocs[i++] = (topDocsCollector instanceof TopFieldCollector)? ((TopFieldCollector)topDocsCollector).topDocs(0, len): topDocsCollector.topDocs(0, len);
++          if (needTopDocs)  topDocs[i++] = topDocsCollector.topDocs(0, len);
 +          if (needMaxScore) 
 +            if (!Float.isNaN(maxScoreCollector.getMaxScore()))
 +              maxScore = Math.max(maxScore, maxScoreCollector.getMaxScore());
-           if (needDocSet)   docSet = docSet.union(docSetCollector.getDocSet());
++          if (needDocSet) {
++            if (docSet == null) {
++              docSet = docSetCollector.getDocSet(); // TODO: Should this be always true? Convert null check into assert?
++            }
++          }
 +        }
 +        TopDocs mergedTopDocs;
 +        if (topDocs != null && topDocs.length>0 && topDocs[0] instanceof TopFieldDocs) {
 +          TopFieldDocs[] topFieldDocs = Arrays.copyOf(topDocs, topDocs.length, TopFieldDocs[].class);
 +          mergedTopDocs = TopFieldDocs.merge(weightSort(cmd.getSort()), len, topFieldDocs);
 +        } else {
 +          mergedTopDocs = needTopDocs? TopDocs.merge(0, len, topDocs): null;
 +        }
 +        int totalHits = needTopDocs? (int)mergedTopDocs.totalHits.value: -1;
 +        maxScore = totalHits > 0 ? maxScore : 0.0f;
 +        return new CollectorManagerResult(mergedTopDocs, docSet, maxScore, totalHits);
 +      }
 +
 +    };
 +
 +    CollectorManagerResult ret;
 +    try {
 +      ret = super.search(query, manager);
 +    } catch (Exception ex) {
 +      if (ex instanceof RuntimeException && 
 +          ex.getCause() != null & ex.getCause() instanceof ExecutionException
 +          && ex.getCause().getCause() != null && ex.getCause().getCause() instanceof RuntimeException) {
 +        throw (RuntimeException)ex.getCause().getCause();
 +      } else {
 +        throw ex;
 +      }
 +    }
 +    return ret;
 +  }
 +
 +  class CollectorManagerResult {
-     TopDocs topDocs;
-     DocSet docSet;
-     float maxScore;
-     int totalHits;
++    final TopDocs topDocs;
++    final DocSet docSet;
++    final float maxScore;
++    final int totalHits;
 +    
 +    public CollectorManagerResult(TopDocs topDocs, DocSet docSet, float maxScore, int totalHits) {
 +      this.topDocs = topDocs;
 +      this.docSet = docSet;
 +      this.maxScore = maxScore;
 +      this.totalHits = totalHits;
 +    }
 +  }
 +  
    // any DocSet returned is for the query only, without any filtering... that way it may
    // be cached if desired.
    private DocSet getDocListAndSetNC(QueryResult qr, QueryCommand cmd) throws IOException {
@@@ -1806,48 -1693,34 +1792,44 @@@
        // no docs on this page, so cursor doesn't change
        qr.setNextCursorMark(cmd.getCursorMark());
      } else {
 -      @SuppressWarnings({"rawtypes"})
 -      final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
 -      DocSetCollector setCollector = new DocSetCollector(maxDoc);
 -      MaxScoreCollector maxScoreCollector = null;
 -      List<Collector> collectors = new ArrayList<>(Arrays.asList(topCollector, setCollector));
 -
 -      if ((cmd.getFlags() & GET_SCORES) != 0) {
 -        maxScoreCollector = new MaxScoreCollector();
 -        collectors.add(maxScoreCollector);
 -      }
 +      TopDocs topDocs;
++
 +      if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0
 +          || query instanceof RankQuery || query instanceof GraphQuery) {
-   
 +        final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
 +        DocSetCollector setCollector = new DocSetCollector(maxDoc);
 +        MaxScoreCollector maxScoreCollector = null;
 +        List<Collector> collectors = new ArrayList<>(Arrays.asList(topCollector, setCollector));
-   
++
 +        if ((cmd.getFlags() & GET_SCORES) != 0) {
 +          maxScoreCollector = new MaxScoreCollector();
 +          collectors.add(maxScoreCollector);
 +        }
-   
-         Collector collector = MultiCollector.wrap(collectors);
-         log.info("calling from 4");  // nocommit
-         buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
-   
-         set = DocSetUtil.getDocSet(setCollector, this);
-   
+ 
 -      Collector collector = MultiCollector.wrap(collectors);
 +        totalHits = topCollector.getTotalHits();
++        set = DocSetUtil.getDocSet(setCollector, this);
+ 
 -      buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
 -
 -      set = DocSetUtil.getDocSet(setCollector, this);
 +        assert (totalHits == set.size()) || qr.isPartialResults();
-   
+ 
 -      totalHits = topCollector.getTotalHits();
 -      assert (totalHits == set.size()) || qr.isPartialResults();
 -
 -      TopDocs topDocs = topCollector.topDocs(0, len);
 +        topDocs = topCollector.topDocs(0, len);
 +        maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
-         nDocsReturned = topDocs.scoreDocs.length;
 +      } else {
 +        log.debug("using collectormanager");
 +        CollectorManagerResult result = searchCollectorManagers(len, cmd, query, true, true, true);
 +        set = result.docSet;
 +        totalHits = result.totalHits;
-         assert (totalHits == set.size()) || qr.isPartialResults();
++        //assert (totalHits == set.size()) || qr.isPartialResults();
 +        topDocs = result.topDocs;
 +        maxScore = result.maxScore;
-         nDocsReturned = result.topDocs.scoreDocs.length;        
 +      }
 +      
        if (cmd.getSort() != null && query instanceof RankQuery == false && (cmd.getFlags() & GET_SCORES) != 0) {
          TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
        }
        populateNextCursorMarkFromTopDocs(qr, cmd, topDocs);
 -      maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
 +
+       nDocsReturned = topDocs.scoreDocs.length;
+ 
        ids = new int[nDocsReturned];
        scores = (cmd.getFlags() & GET_SCORES) != 0 ? new float[nDocsReturned] : null;
        for (int i = 0; i < nDocsReturned; i++) {


[lucene] 04/10: SOLR-13350: Fix join queries to make sure multithreading doesn't result in multiple close() calls on fromCore

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

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

commit 11465db146a1b9fe7f05b0e12c5447a4b999bce0
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Tue Mar 3 19:09:21 2020 +0530

    SOLR-13350: Fix join queries to make sure multithreading doesn't result in multiple close() calls on fromCore
---
 .../org/apache/solr/request/SolrRequestInfo.java   |  36 ++
 .../org/apache/solr/search/JoinQParserPlugin.java  | 492 +++++++++++----------
 .../org/apache/solr/search/TopLevelJoinQuery.java  |   2 +-
 3 files changed, 307 insertions(+), 223 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java b/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
index 859c55a..07758dc 100644
--- a/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
+++ b/solr/core/src/java/org/apache/solr/request/SolrRequestInfo.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.TimeZone;
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.apache.solr.common.Callable;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.util.ExecutorUtil;
@@ -47,6 +48,8 @@ public class SolrRequestInfo {
   protected TimeZone tz;
   protected ResponseBuilder rb;
   protected List<Closeable> closeHooks;
+  protected List<Callable> initHooks;
+  protected Object initData; // Any additional auxiliary data that needs to be stored
   protected SolrDispatchFilter.Action action;
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -67,6 +70,19 @@ public class SolrRequestInfo {
     threadLocal.set(info);
   }
 
+  public static void init() {
+    SolrRequestInfo info = threadLocal.get();
+    if (info != null && info.initHooks != null) {
+      for (Callable hook : info.initHooks) {
+        try {
+          hook.call(null);
+        } catch (Exception e) {
+          SolrException.log(log, "Exception during init hook", e);
+        }
+      }
+    }
+  }
+
   public static void clearRequestInfo() {
     try {
       SolrRequestInfo info = threadLocal.get();
@@ -151,6 +167,16 @@ public class SolrRequestInfo {
     this.rb = rb;
   }
 
+  public void addInitHook(Callable hook) {
+    // is this better here, or on SolrQueryRequest?
+    synchronized (this) {
+      if (initHooks == null) {
+        initHooks = new LinkedList<>();
+      }
+      initHooks.add(hook);
+    }
+  }
+
   public void addCloseHook(Closeable hook) {
     // is this better here, or on SolrQueryRequest?
     synchronized (this) {
@@ -169,6 +195,16 @@ public class SolrRequestInfo {
     this.action = action;
   }
 
+  public Object getInitData() {
+    return initData;
+  }
+
+  public void setInitData(Object initData) {
+    synchronized (this) {
+      this.initData = initData;
+    }
+  }
+
   public static ExecutorUtil.InheritableThreadLocalProvider getInheritableThreadLocalProvider() {
     return new ExecutorUtil.InheritableThreadLocalProvider() {
       @Override
diff --git a/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
index aa96f03..cd72c9d 100644
--- a/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/JoinQParserPlugin.java
@@ -45,6 +45,7 @@ import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.StringHelper;
+import org.apache.solr.common.Callable;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.SimpleOrderedMap;
@@ -234,23 +235,21 @@ class JoinQuery extends Query {
   }
 
   protected class JoinQueryWeight extends ConstantScoreWeight {
-    SolrIndexSearcher fromSearcher;
-    RefCounted<SolrIndexSearcher> fromRef;
     SolrIndexSearcher toSearcher;
     ResponseBuilder rb;
     ScoreMode scoreMode;
+    final boolean isSameCoreJoin;
 
     public JoinQueryWeight(SolrIndexSearcher searcher, ScoreMode scoreMode, float boost) {
       super(JoinQuery.this, boost);
       this.scoreMode = scoreMode;
-      this.fromSearcher = searcher;
       SolrRequestInfo info = SolrRequestInfo.getRequestInfo();
       if (info != null) {
         rb = info.getResponseBuilder();
       }
 
       if (fromIndex == null) {
-        this.fromSearcher = searcher;
+        isSameCoreJoin = true;
       } else {
         if (info == null) {
           throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Cross-core join must have SolrRequestInfo");
@@ -259,39 +258,38 @@ class JoinQuery extends Query {
         CoreContainer container = searcher.getCore().getCoreContainer();
         final SolrCore fromCore = container.getCore(fromIndex);
 
-        if (fromCore == null) {
-          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Cross-core join: no such core " + fromIndex);
-        }
+        try {  
+          if (fromCore == null) {
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Cross-core join: no such core " + fromIndex);
+          }
 
-        if (info.getReq().getCore() == fromCore) {
-          // if this is the same core, use the searcher passed in... otherwise we could be warming and
-          // get an older searcher from the core.
-          fromSearcher = searcher;
-        } else {
-          // This could block if there is a static warming query with a join in it, and if useColdSearcher is true.
-          // Deadlock could result if two cores both had useColdSearcher and had joins that used eachother.
-          // This would be very predictable though (should happen every time if misconfigured)
-          fromRef = fromCore.getSearcher(false, true, null);
-
-          // be careful not to do anything with this searcher that requires the thread local
-          // SolrRequestInfo in a manner that requires the core in the request to match
-          fromSearcher = fromRef.get();
+          if (info.getReq().getCore() == fromCore) {
+            isSameCoreJoin = true;
+          } else {
+            isSameCoreJoin = false;
+          }
+        } finally {
+          fromCore.close();
         }
-
-        if (fromRef != null) {
-          final RefCounted<SolrIndexSearcher> ref = fromRef;
-          info.addCloseHook(new Closeable() {
-            @Override
-            public void close() {
-              ref.decref();
+        info.addInitHook(new Callable<Object>() {
+          @Override
+          public void call(Object data) {
+            if (!isSameCoreJoin ) {
+              info.setInitData(container.getCore(fromIndex));
             }
-          });
-        }
+          }
+        });
 
         info.addCloseHook(new Closeable() {
           @Override
           public void close() {
-            fromCore.close();
+            synchronized (info) {
+              SolrCore fromCore = (SolrCore) info.getInitData();
+              if (fromCore != null) {
+                fromCore.close();
+                info.setInitData(null); // unset
+              }
+            }
           }
         });
 
@@ -367,248 +365,298 @@ class JoinQuery extends Query {
 
 
     public DocSet getDocSet() throws IOException {
-      SchemaField fromSchemaField = fromSearcher.getSchema().getField(fromField);
-      SchemaField toSchemaField = toSearcher.getSchema().getField(toField);
-
-      boolean usePoints = false;
-      if (toSchemaField.getType().isPointField()) {
-        if (!fromSchemaField.hasDocValues()) {
-          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "join from field " + fromSchemaField + " should have docValues to join with points field " + toSchemaField);
+      RefCounted<SolrIndexSearcher> fromSearcherRef = null;
+      SolrIndexSearcher fromSearcher;
+      SolrCore fromCore = null;
+      boolean openedFromCoreHere = false;
+      if (isSameCoreJoin) {
+        // if this is the same core, use the searcher passed in... otherwise we could be warming and
+        // get an older searcher from the core.
+        fromSearcher = toSearcher;
+      } else {
+        fromCore = (SolrCore) SolrRequestInfo.getRequestInfo().getInitData();
+        if (fromCore == null) {
+          fromCore = toSearcher.getCore().getCoreContainer().getCore(fromIndex);
+          openedFromCoreHere = true;
         }
-        usePoints = true;
+        fromSearcherRef = fromCore.getSearcher();
+        fromSearcher = fromSearcherRef.get();
       }
+      try {
+        SchemaField fromSchemaField = fromSearcher.getSchema().getField(fromField);
+        SchemaField toSchemaField = toSearcher.getSchema().getField(toField);
+
+        boolean usePoints = false;
+        if (toSchemaField.getType().isPointField()) {
+          if (!fromSchemaField.hasDocValues()) {
+            throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "join from field " + fromSchemaField + " should have docValues to join with points field " + toSchemaField);
+          }
+          usePoints = true;
+        }
 
-      if (!usePoints) {
-        return getDocSetEnumerate();
-      }
+        if (!usePoints) {
+          return getDocSetEnumerate();
+        }
 
-      // point fields
-      GraphPointsCollector collector = new GraphPointsCollector(fromSchemaField, null, null);
-      fromSearcher.search(q, collector);
-      Query resultQ = collector.getResultQuery(toSchemaField, false);
-      // don't cache the resulting docSet... the query may be very large.  Better to cache the results of the join query itself
-      DocSet result = resultQ==null ? DocSet.EMPTY : toSearcher.getDocSetNC(resultQ, null);
-      return result;
+        // point fields
+        GraphPointsCollector collector = new GraphPointsCollector(fromSchemaField, null, null);
+        fromSearcher.search(q, collector);
+        Query resultQ = collector.getResultQuery(toSchemaField, false);
+        // don't cache the resulting docSet... the query may be very large.  Better to cache the results of the join query itself
+        DocSet result = resultQ==null ? DocSet.EMPTY : toSearcher.getDocSetNC(resultQ, null);
+        return result;
+      } finally {
+        if (fromSearcherRef != null) {
+          fromSearcherRef.decref();
+        }
+        if (fromCore != null && openedFromCoreHere) {
+          fromCore.close();
+        }
+      }
     }
 
 
 
     public DocSet getDocSetEnumerate() throws IOException {
-      FixedBitSet resultBits = null;
+      RefCounted<SolrIndexSearcher> fromSearcherRef = null;
+      SolrIndexSearcher fromSearcher;
+      SolrCore fromCore = null;
+      boolean openedFromCoreHere = false;
+      if (isSameCoreJoin) {
+        fromSearcher = toSearcher;
+      } else {
+        fromCore = (SolrCore) SolrRequestInfo.getRequestInfo().getInitData();
+        if (fromCore == null) {
+          fromCore = toSearcher.getCore().getCoreContainer().getCore(fromIndex);
+          openedFromCoreHere = true;
+        }
+        fromSearcherRef = fromCore.getSearcher();
+        fromSearcher = fromSearcherRef.get();
+      }
+      try {
+        FixedBitSet resultBits = null;
 
-      // minimum docFreq to use the cache
-      int minDocFreqFrom = Math.max(5, fromSearcher.maxDoc() >> 13);
-      int minDocFreqTo = Math.max(5, toSearcher.maxDoc() >> 13);
+        // minimum docFreq to use the cache
+        int minDocFreqFrom = Math.max(5, fromSearcher.maxDoc() >> 13);
+        int minDocFreqTo = Math.max(5, toSearcher.maxDoc() >> 13);
 
-      // use a smaller size than normal since we will need to sort and dedup the results
-      int maxSortedIntSize = Math.max(10, toSearcher.maxDoc() >> 10);
+        // use a smaller size than normal since we will need to sort and dedup the results
+        int maxSortedIntSize = Math.max(10, toSearcher.maxDoc() >> 10);
 
-      DocSet fromSet = fromSearcher.getDocSet(q);
-      fromSetSize = fromSet.size();
+        DocSet fromSet = fromSearcher.getDocSet(q);
+        fromSetSize = fromSet.size();
 
-      List<DocSet> resultList = new ArrayList<>(10);
+        List<DocSet> resultList = new ArrayList<>(10);
 
-      // make sure we have a set that is fast for random access, if we will use it for that
-      Bits fastForRandomSet;
-      if (minDocFreqFrom <= 0) {
-        fastForRandomSet = null;
-      } else {
-        fastForRandomSet = fromSet.getBits();
-      }
+        // make sure we have a set that is fast for random access, if we will use it for that
+        Bits fastForRandomSet;
+        if (minDocFreqFrom <= 0) {
+          fastForRandomSet = null;
+        } else {
+          fastForRandomSet = fromSet.getBits();
+        }
 
 
-      LeafReader fromReader = fromSearcher.getSlowAtomicReader();
-      LeafReader toReader = fromSearcher==toSearcher ? fromReader : toSearcher.getSlowAtomicReader();
-      Terms terms = fromReader.terms(fromField);
-      Terms toTerms = toReader.terms(toField);
-      if (terms == null || toTerms==null) return DocSet.EMPTY;
-      String prefixStr = TrieField.getMainValuePrefix(fromSearcher.getSchema().getFieldType(fromField));
-      BytesRef prefix = prefixStr == null ? null : new BytesRef(prefixStr);
+        LeafReader fromReader = fromSearcher.getSlowAtomicReader();
+        LeafReader toReader = fromSearcher==toSearcher ? fromReader : toSearcher.getSlowAtomicReader();
+        Terms terms = fromReader.terms(fromField);
+        Terms toTerms = toReader.terms(toField);
+        if (terms == null || toTerms==null) return DocSet.EMPTY;
+        String prefixStr = TrieField.getMainValuePrefix(fromSearcher.getSchema().getFieldType(fromField));
+        BytesRef prefix = prefixStr == null ? null : new BytesRef(prefixStr);
 
-      BytesRef term = null;
-      TermsEnum  termsEnum = terms.iterator();
-      TermsEnum  toTermsEnum = toTerms.iterator();
-      SolrIndexSearcher.DocsEnumState fromDeState = null;
-      SolrIndexSearcher.DocsEnumState toDeState = null;
+        BytesRef term = null;
+        TermsEnum  termsEnum = terms.iterator();
+        TermsEnum  toTermsEnum = toTerms.iterator();
+        SolrIndexSearcher.DocsEnumState fromDeState = null;
+        SolrIndexSearcher.DocsEnumState toDeState = null;
 
-      if (prefix == null) {
-        term = termsEnum.next();
-      } else {
-        if (termsEnum.seekCeil(prefix) != TermsEnum.SeekStatus.END) {
-          term = termsEnum.term();
+        if (prefix == null) {
+          term = termsEnum.next();
+        } else {
+          if (termsEnum.seekCeil(prefix) != TermsEnum.SeekStatus.END) {
+            term = termsEnum.term();
+          }
         }
-      }
 
-      Bits fromLiveDocs = fromSearcher.getLiveDocsBits();
-      Bits toLiveDocs = fromSearcher == toSearcher ? fromLiveDocs : toSearcher.getLiveDocsBits();
-
-      fromDeState = new SolrIndexSearcher.DocsEnumState();
-      fromDeState.fieldName = fromField;
-      fromDeState.liveDocs = fromLiveDocs;
-      fromDeState.termsEnum = termsEnum;
-      fromDeState.postingsEnum = null;
-      fromDeState.minSetSizeCached = minDocFreqFrom;
-
-      toDeState = new SolrIndexSearcher.DocsEnumState();
-      toDeState.fieldName = toField;
-      toDeState.liveDocs = toLiveDocs;
-      toDeState.termsEnum = toTermsEnum;
-      toDeState.postingsEnum = null;
-      toDeState.minSetSizeCached = minDocFreqTo;
-
-      while (term != null) {
-        if (prefix != null && !StringHelper.startsWith(term, prefix))
-          break;
-
-        fromTermCount++;
-
-        boolean intersects = false;
-        int freq = termsEnum.docFreq();
-        fromTermTotalDf++;
-
-        if (freq < minDocFreqFrom) {
-          fromTermDirectCount++;
-          // OK to skip liveDocs, since we check for intersection with docs matching query
-          fromDeState.postingsEnum = fromDeState.termsEnum.postings(fromDeState.postingsEnum, PostingsEnum.NONE);
-          PostingsEnum postingsEnum = fromDeState.postingsEnum;
-
-          if (postingsEnum instanceof MultiPostingsEnum) {
-            MultiPostingsEnum.EnumWithSlice[] subs = ((MultiPostingsEnum) postingsEnum).getSubs();
-            int numSubs = ((MultiPostingsEnum) postingsEnum).getNumSubs();
-            outer: for (int subindex = 0; subindex<numSubs; subindex++) {
-              MultiPostingsEnum.EnumWithSlice sub = subs[subindex];
-              if (sub.postingsEnum == null) continue;
-              int base = sub.slice.start;
+        Bits fromLiveDocs = fromSearcher.getLiveDocsBits();
+        Bits toLiveDocs = fromSearcher == toSearcher ? fromLiveDocs : toSearcher.getLiveDocsBits();
+
+        fromDeState = new SolrIndexSearcher.DocsEnumState();
+        fromDeState.fieldName = fromField;
+        fromDeState.liveDocs = fromLiveDocs;
+        fromDeState.termsEnum = termsEnum;
+        fromDeState.postingsEnum = null;
+        fromDeState.minSetSizeCached = minDocFreqFrom;
+
+        toDeState = new SolrIndexSearcher.DocsEnumState();
+        toDeState.fieldName = toField;
+        toDeState.liveDocs = toLiveDocs;
+        toDeState.termsEnum = toTermsEnum;
+        toDeState.postingsEnum = null;
+        toDeState.minSetSizeCached = minDocFreqTo;
+
+        while (term != null) {
+          if (prefix != null && !StringHelper.startsWith(term, prefix))
+            break;
+
+          fromTermCount++;
+
+          boolean intersects = false;
+          int freq = termsEnum.docFreq();
+          fromTermTotalDf++;
+
+          if (freq < minDocFreqFrom) {
+            fromTermDirectCount++;
+            // OK to skip liveDocs, since we check for intersection with docs matching query
+            fromDeState.postingsEnum = fromDeState.termsEnum.postings(fromDeState.postingsEnum, PostingsEnum.NONE);
+            PostingsEnum postingsEnum = fromDeState.postingsEnum;
+
+            if (postingsEnum instanceof MultiPostingsEnum) {
+              MultiPostingsEnum.EnumWithSlice[] subs = ((MultiPostingsEnum) postingsEnum).getSubs();
+              int numSubs = ((MultiPostingsEnum) postingsEnum).getNumSubs();
+              outer: for (int subindex = 0; subindex<numSubs; subindex++) {
+                MultiPostingsEnum.EnumWithSlice sub = subs[subindex];
+                if (sub.postingsEnum == null) continue;
+                int base = sub.slice.start;
+                int docid;
+                while ((docid = sub.postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
+                  if (fastForRandomSet.get(docid+base)) {
+                    intersects = true;
+                    break outer;
+                  }
+                }
+              }
+            } else {
               int docid;
-              while ((docid = sub.postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-                if (fastForRandomSet.get(docid+base)) {
+              while ((docid = postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
+                if (fastForRandomSet.get(docid)) {
                   intersects = true;
-                  break outer;
+                  break;
                 }
               }
             }
           } else {
-            int docid;
-            while ((docid = postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-              if (fastForRandomSet.get(docid)) {
-                intersects = true;
-                break;
-              }
-            }
+            // use the filter cache
+            DocSet fromTermSet = fromSearcher.getDocSet(fromDeState);
+            intersects = fromSet.intersects(fromTermSet);
           }
-        } else {
-          // use the filter cache
-          DocSet fromTermSet = fromSearcher.getDocSet(fromDeState);
-          intersects = fromSet.intersects(fromTermSet);
-        }
 
-        if (intersects) {
-          fromTermHits++;
-          fromTermHitsTotalDf++;
-          TermsEnum.SeekStatus status = toTermsEnum.seekCeil(term);
-          if (status == TermsEnum.SeekStatus.END) break;
-          if (status == TermsEnum.SeekStatus.FOUND) {
-            toTermHits++;
-            int df = toTermsEnum.docFreq();
-            toTermHitsTotalDf += df;
-            if (resultBits==null && df + resultListDocs > maxSortedIntSize && resultList.size() > 0) {
-              resultBits = new FixedBitSet(toSearcher.maxDoc());
-            }
+          if (intersects) {
+            fromTermHits++;
+            fromTermHitsTotalDf++;
+            TermsEnum.SeekStatus status = toTermsEnum.seekCeil(term);
+            if (status == TermsEnum.SeekStatus.END) break;
+            if (status == TermsEnum.SeekStatus.FOUND) {
+              toTermHits++;
+              int df = toTermsEnum.docFreq();
+              toTermHitsTotalDf += df;
+              if (resultBits==null && df + resultListDocs > maxSortedIntSize && resultList.size() > 0) {
+                resultBits = new FixedBitSet(toSearcher.maxDoc());
+              }
 
-            // if we don't have a bitset yet, or if the resulting set will be too large
-            // use the filterCache to get a DocSet
-            if (toTermsEnum.docFreq() >= minDocFreqTo || resultBits == null) {
-              // use filter cache
-              DocSet toTermSet = toSearcher.getDocSet(toDeState);
-              resultListDocs += toTermSet.size();
-              if (resultBits != null) {
-                toTermSet.addAllTo(resultBits);
-              } else {
-                if (toTermSet instanceof BitDocSet) {
-                  resultBits = ((BitDocSet)toTermSet).getBits().clone();
+              // if we don't have a bitset yet, or if the resulting set will be too large
+              // use the filterCache to get a DocSet
+              if (toTermsEnum.docFreq() >= minDocFreqTo || resultBits == null) {
+                // use filter cache
+                DocSet toTermSet = toSearcher.getDocSet(toDeState);
+                resultListDocs += toTermSet.size();
+                if (resultBits != null) {
+                  toTermSet.addAllTo(resultBits);
                 } else {
-                  resultList.add(toTermSet);
+                  if (toTermSet instanceof BitDocSet) {
+                    resultBits = ((BitDocSet)toTermSet).getBits().clone();
+                  } else {
+                    resultList.add(toTermSet);
+                  }
                 }
-              }
-            } else {
-              toTermDirectCount++;
-
-              // need to use liveDocs here so we don't map to any deleted ones
-              toDeState.postingsEnum = toDeState.termsEnum.postings(toDeState.postingsEnum, PostingsEnum.NONE);
-              toDeState.postingsEnum = BitsFilteredPostingsEnum.wrap(toDeState.postingsEnum, toDeState.liveDocs);
-              PostingsEnum postingsEnum = toDeState.postingsEnum;
-
-              if (postingsEnum instanceof MultiPostingsEnum) {
-                MultiPostingsEnum.EnumWithSlice[] subs = ((MultiPostingsEnum) postingsEnum).getSubs();
-                int numSubs = ((MultiPostingsEnum) postingsEnum).getNumSubs();
-                for (int subindex = 0; subindex<numSubs; subindex++) {
-                  MultiPostingsEnum.EnumWithSlice sub = subs[subindex];
-                  if (sub.postingsEnum == null) continue;
-                  int base = sub.slice.start;
+              } else {
+                toTermDirectCount++;
+
+                // need to use liveDocs here so we don't map to any deleted ones
+                toDeState.postingsEnum = toDeState.termsEnum.postings(toDeState.postingsEnum, PostingsEnum.NONE);
+                toDeState.postingsEnum = BitsFilteredPostingsEnum.wrap(toDeState.postingsEnum, toDeState.liveDocs);
+                PostingsEnum postingsEnum = toDeState.postingsEnum;
+
+                if (postingsEnum instanceof MultiPostingsEnum) {
+                  MultiPostingsEnum.EnumWithSlice[] subs = ((MultiPostingsEnum) postingsEnum).getSubs();
+                  int numSubs = ((MultiPostingsEnum) postingsEnum).getNumSubs();
+                  for (int subindex = 0; subindex<numSubs; subindex++) {
+                    MultiPostingsEnum.EnumWithSlice sub = subs[subindex];
+                    if (sub.postingsEnum == null) continue;
+                    int base = sub.slice.start;
+                    int docid;
+                    while ((docid = sub.postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
+                      resultListDocs++;
+                      resultBits.set(docid + base);
+                    }
+                  }
+                } else {
                   int docid;
-                  while ((docid = sub.postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
+                  while ((docid = postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
                     resultListDocs++;
-                    resultBits.set(docid + base);
+                    resultBits.set(docid);
                   }
                 }
-              } else {
-                int docid;
-                while ((docid = postingsEnum.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
-                  resultListDocs++;
-                  resultBits.set(docid);
-                }
               }
-            }
 
+            }
           }
+
+          term = termsEnum.next();
         }
 
-        term = termsEnum.next();
-      }
+        smallSetsDeferred = resultList.size();
 
-      smallSetsDeferred = resultList.size();
+        if (resultBits != null) {
+          for (DocSet set : resultList) {
+            set.addAllTo(resultBits);
+          }
+          return new BitDocSet(resultBits);
+        }
 
-      if (resultBits != null) {
-        for (DocSet set : resultList) {
-          set.addAllTo(resultBits);
+        if (resultList.size()==0) {
+          return DocSet.EMPTY;
         }
-        return new BitDocSet(resultBits);
-      }
 
-      if (resultList.size()==0) {
-        return DocSet.EMPTY;
-      }
+        if (resultList.size() == 1) {
+          return resultList.get(0);
+        }
 
-      if (resultList.size() == 1) {
-        return resultList.get(0);
-      }
+        int sz = 0;
 
-      int sz = 0;
+        for (DocSet set : resultList)
+          sz += set.size();
 
-      for (DocSet set : resultList)
-        sz += set.size();
+        int[] docs = new int[sz];
+        int pos = 0;
+        for (DocSet set : resultList) {
+          System.arraycopy(((SortedIntDocSet)set).getDocs(), 0, docs, pos, set.size());
+          pos += set.size();
+        }
+        Arrays.sort(docs);
+        int[] dedup = new int[sz];
+        pos = 0;
+        int last = -1;
+        for (int doc : docs) {
+          if (doc != last)
+            dedup[pos++] = doc;
+          last = doc;
+        }
 
-      int[] docs = new int[sz];
-      int pos = 0;
-      for (DocSet set : resultList) {
-        System.arraycopy(((SortedIntDocSet)set).getDocs(), 0, docs, pos, set.size());
-        pos += set.size();
-      }
-      Arrays.sort(docs);
-      int[] dedup = new int[sz];
-      pos = 0;
-      int last = -1;
-      for (int doc : docs) {
-        if (doc != last)
-          dedup[pos++] = doc;
-        last = doc;
-      }
+        if (pos != dedup.length) {
+          dedup = Arrays.copyOf(dedup, pos);
+        }
 
-      if (pos != dedup.length) {
-        dedup = Arrays.copyOf(dedup, pos);
+        return new SortedIntDocSet(dedup, dedup.length);
+      } finally {
+        if (fromSearcherRef != null) {
+          fromSearcherRef.decref();
+        }
+        if (fromCore != null && openedFromCoreHere) {
+          fromCore.close();
+        }
       }
-
-      return new SortedIntDocSet(dedup, dedup.length);
     }
 
   }
diff --git a/solr/core/src/java/org/apache/solr/search/TopLevelJoinQuery.java b/solr/core/src/java/org/apache/solr/search/TopLevelJoinQuery.java
index 428c229..92dbfa5 100644
--- a/solr/core/src/java/org/apache/solr/search/TopLevelJoinQuery.java
+++ b/solr/core/src/java/org/apache/solr/search/TopLevelJoinQuery.java
@@ -62,7 +62,7 @@ public class TopLevelJoinQuery extends JoinQuery {
 
     final SolrIndexSearcher solrSearcher = (SolrIndexSearcher) searcher;
     final JoinQueryWeight weight = new JoinQueryWeight(solrSearcher, ScoreMode.COMPLETE_NO_SCORES, 1.0f);
-    final SolrIndexSearcher fromSearcher = weight.fromSearcher;
+    final SolrIndexSearcher fromSearcher = weight.toSearcher; // fromIndex isn't specified, so this has to be toSearcher
     final SolrIndexSearcher toSearcher = weight.toSearcher;
 
     try {


[lucene] 01/10: SOLR-13350: Collector manager used for multi-threaded search

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

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

commit be9b8b092606df55f8c1823ef4323afc65ce79a2
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Mon Mar 2 21:43:19 2020 +0530

    SOLR-13350: Collector manager used for multi-threaded search
---
 .../org/apache/lucene/search/MultiCollector.java   |   6 +
 .../org/apache/solr/search/SolrIndexSearcher.java  | 174 +++++++++++++++++----
 .../test/org/apache/solr/search/TestFiltering.java |  18 ++-
 3 files changed, 161 insertions(+), 37 deletions(-)

diff --git a/lucene/core/src/java/org/apache/lucene/search/MultiCollector.java b/lucene/core/src/java/org/apache/lucene/search/MultiCollector.java
index 82251e4..56965e6 100644
--- a/lucene/core/src/java/org/apache/lucene/search/MultiCollector.java
+++ b/lucene/core/src/java/org/apache/lucene/search/MultiCollector.java
@@ -20,6 +20,7 @@ package org.apache.lucene.search;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.lucene.index.LeafReaderContext;
@@ -115,6 +116,11 @@ public class MultiCollector implements Collector {
     return scoreMode;
   }
 
+  // nocommit: need to raise a LUCENE jira for this?
+  public List<Collector> getCollectors() {
+    return Collections.unmodifiableList(Arrays.asList(collectors));
+  }
+
   @Override
   public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
     final List<LeafCollector> leafCollectors = new ArrayList<>();
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index ae47aed..e671b89 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
@@ -1611,24 +1612,39 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       // no docs on this page, so cursor doesn't change
       qr.setNextCursorMark(cmd.getCursorMark());
     } else {
-      final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
-      MaxScoreCollector maxScoreCollector = null;
-      Collector collector = topCollector;
-      if ((cmd.getFlags() & GET_SCORES) != 0) {
-        maxScoreCollector = new MaxScoreCollector();
-        collector = MultiCollector.wrap(topCollector, maxScoreCollector);
+      TopDocs topDocs;
+      log.info("calling from 2, query: "+query.getClass()); // nocommit
+      if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0 
+          || query instanceof RankQuery) {
+        log.debug("skipping collector manager");
+        final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
+        MaxScoreCollector maxScoreCollector = null;
+        Collector collector = topCollector;
+        if ((cmd.getFlags() & GET_SCORES) != 0) {
+          maxScoreCollector = new MaxScoreCollector();
+          collector = MultiCollector.wrap(topCollector, maxScoreCollector);
+        }
+        buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
+        totalHits = topCollector.getTotalHits();
+        topDocs = topCollector.topDocs(0, len);
+
+        maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
+        nDocsReturned = topDocs.scoreDocs.length;
+      } else {
+        log.debug("using collectormanager");
+        CollectorManagerResult result = searchCollectorManagers(len, cmd, query, true, true, false); // nocommit: need docset should be false
+        totalHits = result.totalHits;
+
+        maxScore = result.maxScore;
+        nDocsReturned = result.topDocs.scoreDocs.length;
+        topDocs = result.topDocs;
       }
-      buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
 
-      totalHits = topCollector.getTotalHits();
-      TopDocs topDocs = topCollector.topDocs(0, len);
       if (cmd.getSort() != null && query instanceof RankQuery == false && (cmd.getFlags() & GET_SCORES) != 0) {
         TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
       }
       populateNextCursorMarkFromTopDocs(qr, cmd, topDocs);
 
-      maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
-      nDocsReturned = topDocs.scoreDocs.length;
       ids = new int[nDocsReturned];
       scores = (cmd.getFlags() & GET_SCORES) != 0 ? new float[nDocsReturned] : null;
       for (int i = 0; i < nDocsReturned; i++) {
@@ -1643,6 +1659,83 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
     qr.setDocList(new DocSlice(0, sliceLen, ids, scores, totalHits, maxScore));
   }
 
+  CollectorManagerResult searchCollectorManagers(int len, QueryCommand cmd, Query query,
+      boolean needTopDocs, boolean needMaxScore, boolean needDocSet) throws IOException {
+    CollectorManager<MultiCollector, CollectorManagerResult> manager = new CollectorManager<MultiCollector, CollectorManagerResult>() {
+      @Override
+      public MultiCollector newCollector() throws IOException {
+        // nocommit: Here, creating a MultiCollector for every segment (correctness > speed).
+        // Need to explore sharing a single MultiCollector with every segment. Are these
+        // sub-collectors thread-safe? DocSetCollector seems like not thread-safe, does someone know?
+        Collection<Collector> collectors = new ArrayList<Collector>();
+        if (needTopDocs) collectors.add(buildTopDocsCollector(len, cmd));
+        if (needMaxScore) collectors.add(new MaxScoreCollector());
+        if (needDocSet) collectors.add(new DocSetCollector(maxDoc()));
+        return (MultiCollector) MultiCollector.wrap(collectors);
+      }
+
+      @Override
+      public CollectorManagerResult reduce(Collection<MultiCollector> multiCollectors) throws IOException {
+        final TopDocs[] topDocs = new TopDocs[multiCollectors.size()];
+        float maxScore = 0.0f;
+        DocSet docSet = new BitDocSet(new FixedBitSet(maxDoc())); // TODO: if docset is not needed, avoid this initialization
+        int i = 0;
+        for (MultiCollector multiCollector: multiCollectors) {
+          int c = 0;
+          List<Collector> subCollectors = multiCollector.getCollectors();
+          TopDocsCollector topDocsCollector = needTopDocs? ((TopDocsCollector) subCollectors.get(c++)): null;
+          MaxScoreCollector maxScoreCollector = needMaxScore? ((MaxScoreCollector) subCollectors.get(c++)): null;
+          DocSetCollector docSetCollector = needDocSet? ((DocSetCollector) subCollectors.get(c++)): null;
+          
+          if (needTopDocs)  topDocs[i++] = (topDocsCollector instanceof TopFieldCollector)? ((TopFieldCollector)topDocsCollector).topDocs(0, len): topDocsCollector.topDocs(0, len);
+          if (needMaxScore) 
+            if (!Float.isNaN(maxScoreCollector.getMaxScore()))
+              maxScore = Math.max(maxScore, maxScoreCollector.getMaxScore());
+          if (needDocSet)   docSet = docSet.union(docSetCollector.getDocSet());
+        }
+        TopDocs mergedTopDocs;
+        if (topDocs != null && topDocs.length>0 && topDocs[0] instanceof TopFieldDocs) {
+          TopFieldDocs[] topFieldDocs = Arrays.copyOf(topDocs, topDocs.length, TopFieldDocs[].class);
+          mergedTopDocs = TopFieldDocs.merge(weightSort(cmd.getSort()), len, topFieldDocs);
+        } else {
+          mergedTopDocs = needTopDocs? TopDocs.merge(0, len, topDocs): null;
+        }
+        int totalHits = needTopDocs? (int)mergedTopDocs.totalHits.value: -1;
+        maxScore = totalHits > 0 ? maxScore : 0.0f;
+        return new CollectorManagerResult(mergedTopDocs, docSet, maxScore, totalHits);
+      }
+
+    };
+
+    CollectorManagerResult ret;
+    try {
+      ret = super.search(query, manager);
+    } catch (Exception ex) {
+      if (ex instanceof RuntimeException && 
+          ex.getCause() != null & ex.getCause() instanceof ExecutionException
+          && ex.getCause().getCause() != null && ex.getCause().getCause() instanceof RuntimeException) {
+        throw (RuntimeException)ex.getCause().getCause();
+      } else {
+        throw ex;
+      }
+    }
+    return ret;
+  }
+
+  class CollectorManagerResult {
+    TopDocs topDocs;
+    DocSet docSet;
+    float maxScore;
+    int totalHits;
+    
+    public CollectorManagerResult(TopDocs topDocs, DocSet docSet, float maxScore, int totalHits) {
+      this.topDocs = topDocs;
+      this.docSet = docSet;
+      this.maxScore = maxScore;
+      this.totalHits = totalHits;
+    }
+  }
+  
   // any DocSet returned is for the query only, without any filtering... that way it may
   // be cached if desired.
   private DocSet getDocListAndSetNC(QueryResult qr, QueryCommand cmd) throws IOException {
@@ -1699,7 +1792,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
 
         collector = MultiCollector.wrap(setCollector, topScoreCollector);
       }
-
+      log.info("calling from 3");  // nocommit
       buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
 
       set = DocSetUtil.getDocSet(setCollector, this);
@@ -1712,33 +1805,46 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       // no docs on this page, so cursor doesn't change
       qr.setNextCursorMark(cmd.getCursorMark());
     } else {
-
-      final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
-      DocSetCollector setCollector = new DocSetCollector(maxDoc);
-      MaxScoreCollector maxScoreCollector = null;
-      List<Collector> collectors = new ArrayList<>(Arrays.asList(topCollector, setCollector));
-
-      if ((cmd.getFlags() & GET_SCORES) != 0) {
-        maxScoreCollector = new MaxScoreCollector();
-        collectors.add(maxScoreCollector);
+      TopDocs topDocs;
+      if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0 || query instanceof RankQuery) {
+  
+        final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
+        DocSetCollector setCollector = new DocSetCollector(maxDoc);
+        MaxScoreCollector maxScoreCollector = null;
+        List<Collector> collectors = new ArrayList<>(Arrays.asList(topCollector, setCollector));
+  
+        if ((cmd.getFlags() & GET_SCORES) != 0) {
+          maxScoreCollector = new MaxScoreCollector();
+          collectors.add(maxScoreCollector);
+        }
+  
+        Collector collector = MultiCollector.wrap(collectors);
+        log.info("calling from 4");  // nocommit
+        buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
+  
+        set = DocSetUtil.getDocSet(setCollector, this);
+  
+        totalHits = topCollector.getTotalHits();
+        assert (totalHits == set.size()) || qr.isPartialResults();
+  
+        topDocs = topCollector.topDocs(0, len);
+        maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
+        nDocsReturned = topDocs.scoreDocs.length;
+      } else {
+        log.debug("using collectormanager");
+        CollectorManagerResult result = searchCollectorManagers(len, cmd, query, true, true, true);
+        set = result.docSet;
+        totalHits = result.totalHits;
+        assert (totalHits == set.size()) || qr.isPartialResults();
+        topDocs = result.topDocs;
+        maxScore = result.maxScore;
+        nDocsReturned = result.topDocs.scoreDocs.length;        
       }
-
-      Collector collector = MultiCollector.wrap(collectors);
-
-      buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
-
-      set = DocSetUtil.getDocSet(setCollector, this);
-
-      totalHits = topCollector.getTotalHits();
-      assert (totalHits == set.size()) || qr.isPartialResults();
-
-      TopDocs topDocs = topCollector.topDocs(0, len);
+      
       if (cmd.getSort() != null && query instanceof RankQuery == false && (cmd.getFlags() & GET_SCORES) != 0) {
         TopFieldCollector.populateScores(topDocs.scoreDocs, this, query);
       }
       populateNextCursorMarkFromTopDocs(qr, cmd, topDocs);
-      maxScore = totalHits > 0 ? (maxScoreCollector == null ? Float.NaN : maxScoreCollector.getMaxScore()) : 0.0f;
-      nDocsReturned = topDocs.scoreDocs.length;
 
       ids = new int[nDocsReturned];
       scores = (cmd.getFlags() & GET_SCORES) != 0 ? new float[nDocsReturned] : null;
diff --git a/solr/core/src/test/org/apache/solr/search/TestFiltering.java b/solr/core/src/test/org/apache/solr/search/TestFiltering.java
index b2ad9cf..6d5e081 100644
--- a/solr/core/src/test/org/apache/solr/search/TestFiltering.java
+++ b/solr/core/src/test/org/apache/solr/search/TestFiltering.java
@@ -24,6 +24,7 @@ import java.util.Locale;
 
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrException;
@@ -77,7 +78,7 @@ public class TestFiltering extends SolrTestCaseJ4 {
         if (live == null) {
           live = searcher.getLiveDocSet();
         }
-        assertTrue( set == live);
+        assertTrue( set.equals(live) );
 
         QueryCommand cmd = new QueryCommand();
         cmd.setQuery( QParser.getParser(qstr, null, req).getQuery() );
@@ -86,14 +87,19 @@ public class TestFiltering extends SolrTestCaseJ4 {
         QueryResult res = new QueryResult();
         searcher.search(res, cmd);
         set = res.getDocSet();
-        assertTrue( set == live );
+        System.out.println("Live: "+bitsString(live.getFixedBitSet()));
+        System.out.println("Set: "+bitsString(set.getFixedBitSet()));
+        FixedBitSet xor = live.getFixedBitSet().clone();
+        xor.xor(set.getFixedBitSet());
+        System.out.println("xor: "+bitsString(xor));
+        assertTrue( set.equals(live) );
 
         cmd.setQuery( QParser.getParser(qstr + " OR id:0", null, req).getQuery() );
         cmd.setFilterList( QParser.getParser(qstr + " OR id:1", null, req).getQuery() );
         res = new QueryResult();
         searcher.search(res, cmd);
         set = res.getDocSet();
-        assertTrue( set == live );
+        assertTrue( set.equals(live) );
       }
 
     } finally {
@@ -101,6 +107,12 @@ public class TestFiltering extends SolrTestCaseJ4 {
     }
   }
 
+  private String bitsString(Bits bits) {
+    String s = "";
+    for (int i=0; i<bits.length(); i++)
+      s+=bits.get(i)? 1: 0;
+    return s;
+  }
     public void testCaching() throws Exception {
     clearIndex();
     assertU(adoc("id","4", "val_i","1"));


[lucene] 07/10: Revert "SOLR-13350: Merging master and updating the PR"

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

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

commit 590d35c66e22cb356c331af41356f63de1cc20a4
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Fri Aug 14 18:04:31 2020 +0530

    Revert "SOLR-13350: Merging master and updating the PR"
    
    This reverts commit afd6f5a139cd8b5b16212dc9cc564656e64f09a3.
---
 solr/CHANGES.txt                                   |   583 +-
 solr/NOTICE.txt                                    |    15 +-
 solr/README.md                                     |   217 -
 solr/README.txt                                    |   189 +
 solr/bin/solr                                      |    47 +-
 solr/bin/solr.cmd                                  |    46 +-
 solr/bin/solr.in.cmd                               |    29 +-
 solr/bin/solr.in.sh                                |    18 +-
 solr/build.gradle                                  |     2 -
 solr/build.xml                                     |    12 +-
 solr/contrib/analysis-extras/README.md             |    26 -
 solr/contrib/analysis-extras/README.txt            |    23 +
 solr/contrib/analysis-extras/build.gradle          |     2 -
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |    13 +-
 solr/contrib/analytics/build.gradle                |     2 -
 .../apache/solr/analytics/ExpressionFactory.java   |    78 +-
 .../apache/solr/analytics/facet/PivotFacet.java    |    77 +-
 .../apache/solr/analytics/facet/QueryFacet.java    |     8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |     8 +-
 .../function/mapping/ComparisonFunction.java       |   320 +-
 .../function/mapping/DateMathFunction.java         |   171 +-
 .../function/mapping/DateParseFunction.java        |   261 +-
 .../mapping/DecimalNumericConversionFunction.java  |   283 +-
 .../analytics/function/mapping/EqualFunction.java  |   301 +-
 .../analytics/function/mapping/ExistsFunction.java |   143 +-
 .../function/mapping/FillMissingFunction.java      |  1283 +-
 .../analytics/function/mapping/FilterFunction.java |  1075 +-
 .../analytics/function/mapping/IfFunction.java     |  1268 +-
 .../analytics/function/mapping/LambdaFunction.java |  4034 +++---
 .../analytics/function/mapping/RemoveFunction.java |  1187 +-
 .../function/mapping/ReplaceFunction.java          |  1521 ++-
 .../analytics/function/reduction/MaxFunction.java  |   405 +-
 .../function/reduction/MedianFunction.java         |   237 +-
 .../analytics/function/reduction/MinFunction.java  |   405 +-
 .../function/reduction/OrdinalFunction.java        |   489 +-
 .../function/reduction/PercentileFunction.java     |   453 +-
 .../stream/AnalyticsShardRequestManager.java       |     4 +-
 .../solr/analytics/util/FacetRangeGenerator.java   |   132 +-
 .../solr/analytics/util/MedianCalculator.java      |     6 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |    34 +-
 .../util/OldAnalyticsRequestConverter.java         |     4 +-
 .../solr/analytics/util/OrdinalCalculator.java     |    15 +-
 .../org/apache/solr/handler/AnalyticsHandler.java  |     6 +
 .../solr/handler/component/AnalyticsComponent.java |     2 +-
 .../response/AnalyticsShardResponseWriter.java     |     2 +-
 .../analytics/legacy/facetWithDottedFields.txt     |    16 -
 .../solr/collection1/conf/schema-analytics.xml     |     2 -
 .../analytics/legacy/LegacyNoFacetCloudTest.java   |    32 +-
 .../solr/analytics/legacy/LegacyNoFacetTest.java   |    32 +-
 .../LegacyAbstractAnalyticsFacetCloudTest.java     |     2 +-
 .../facet/LegacyAbstractAnalyticsFacetTest.java    |     4 +-
 .../legacy/facet/LegacyFieldFacetTest.java         |     1 -
 .../util/OldAnalyticsRequestConverterUnitTest.java |    64 -
 solr/contrib/clustering/{README.md => README.txt}  |     0
 solr/contrib/clustering/build.gradle               |     2 -
 .../handler/clustering/ClusteringComponent.java    |    20 +-
 .../clustering/carrot2/CarrotClusteringEngine.java |    20 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |    10 +-
 .../clustering/carrot2/SolrResourceLocator.java    |     8 +-
 solr/contrib/dataimporthandler-extras/build.gradle |     2 -
 .../handler/dataimport/MailEntityProcessor.java    |   101 +-
 .../handler/dataimport/TikaEntityProcessor.java    |    19 +-
 .../src/java/overview.html                         |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimport/TestMailEntityProcessor.java        |    13 +-
 solr/contrib/dataimporthandler/README.md           |    26 -
 solr/contrib/dataimporthandler/README.txt          |    16 +
 solr/contrib/dataimporthandler/build.gradle        |     2 -
 .../solr/handler/dataimport/BinURLDataSource.java  |     6 +-
 .../solr/handler/dataimport/ClobTransformer.java   |     1 -
 .../apache/solr/handler/dataimport/Context.java    |     2 -
 .../solr/handler/dataimport/ContextImpl.java       |     7 +-
 .../solr/handler/dataimport/DataImportHandler.java |    13 +-
 .../solr/handler/dataimport/DataImporter.java      |    10 +-
 .../apache/solr/handler/dataimport/DataSource.java |     3 +-
 .../handler/dataimport/DateFormatTransformer.java  |     1 -
 .../solr/handler/dataimport/DebugLogger.java       |    12 +-
 .../apache/solr/handler/dataimport/DocBuilder.java |    76 +-
 .../solr/handler/dataimport/EntityProcessor.java   |     3 +-
 .../handler/dataimport/EntityProcessorWrapper.java |    26 +-
 .../solr/handler/dataimport/FileDataSource.java    |    12 +-
 .../handler/dataimport/HTMLStripTransformer.java   |     1 -
 .../solr/handler/dataimport/JdbcDataSource.java    |    20 +-
 .../dataimport/NumberFormatTransformer.java        |     1 -
 .../dataimport/PlainTextEntityProcessor.java       |     1 -
 .../solr/handler/dataimport/RegexTransformer.java  |     6 +-
 .../handler/dataimport/SimplePropertiesWriter.java |    10 +-
 .../apache/solr/handler/dataimport/SolrWriter.java |    10 +-
 .../handler/dataimport/SqlEntityProcessor.java     |    10 +-
 .../handler/dataimport/TemplateTransformer.java    |     5 +-
 .../solr/handler/dataimport/URLDataSource.java     |     6 +-
 .../handler/dataimport/XPathEntityProcessor.java   |    21 +-
 .../solr/handler/dataimport/XPathRecordReader.java |     3 +-
 .../handler/dataimport/ZKPropertiesWriter.java     |     4 +-
 .../dataimport/config/DIHConfiguration.java        |     8 +-
 .../dataimporthandler/src/java/overview.html       |     2 +-
 .../collection1/conf/contentstream-solrconfig.xml  |     2 +-
 .../conf/dataimport-nodatasource-solrconfig.xml    |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimporthandler/src/test-files/log4j2.xml    |    42 -
 .../src/test-files/solr/collection1/README         |     1 -
 .../solr/configsets/dihconfigset/conf/README       |     2 -
 .../solr/configsets/dihconfigset/conf/schema.xml   |    70 -
 .../configsets/dihconfigset/conf/solrconfig.xml    |   287 -
 .../dataimporthandler/src/test-files/solr/solr.xml |    27 -
 .../dataimport/AbstractDIHCacheTestCase.java       |     2 +-
 .../AbstractDataImportHandlerTestCase.java         |     9 +-
 .../AbstractSqlEntityProcessorTestCase.java        |    23 +-
 .../dataimport/MockInitialContextFactory.java      |     2 +-
 .../handler/dataimport/TestClobTransformer.java    |     2 -
 .../dataimport/TestContentStreamDataSource.java    |     2 +-
 .../solr/handler/dataimport/TestDataConfig.java    |     1 -
 .../solr/handler/dataimport/TestDocBuilder.java    |    10 +-
 .../solr/handler/dataimport/TestDocBuilder2.java   |    16 +-
 .../handler/dataimport/TestEphemeralCache.java     |     3 -
 .../solr/handler/dataimport/TestErrorHandling.java |     1 -
 .../solr/handler/dataimport/TestFieldReader.java   |     1 -
 .../dataimport/TestFileListEntityProcessor.java    |    14 +-
 .../dataimport/TestJdbcDataSourceConvertType.java  |     2 +-
 .../dataimport/TestLineEntityProcessor.java        |    14 +-
 .../dataimport/TestPlainTextEntityProcessor.java   |     3 -
 .../handler/dataimport/TestRegexTransformer.java   |     5 -
 .../handler/dataimport/TestScriptTransformer.java  |     4 +-
 .../TestSolrEntityProcessorEndToEnd.java           |    16 +-
 .../dataimport/TestSolrEntityProcessorUnit.java    |     3 +-
 .../dataimport/TestSortedMapBackedCache.java       |     6 +-
 .../dataimport/TestSqlEntityProcessorDelta.java    |    12 +-
 .../dataimport/TestTemplateTransformer.java        |     4 -
 .../handler/dataimport/TestVariableResolver.java   |     1 -
 .../solr/handler/dataimport/TestWriterImpl.java    |     2 -
 .../dataimport/TestXPathEntityProcessor.java       |    15 -
 .../handler/dataimport/TestXPathRecordReader.java  |     1 -
 .../handler/dataimport/TestZKPropertiesWriter.java |   207 +-
 solr/contrib/extraction/README.md                  |    17 -
 solr/contrib/extraction/README.txt                 |    16 +
 solr/contrib/extraction/build.gradle               |     2 -
 .../extraction/ExtractingDocumentLoader.java       |     8 +-
 .../extraction/ExtractingRequestHandler.java       |    49 +-
 .../extraction/RegexRulesPasswordProvider.java     |     4 +-
 .../handler/extraction/XLSXResponseWriter.java     |     4 +-
 .../extraction/ExtractingRequestHandlerTest.java   |     3 -
 solr/contrib/jaegertracer-configurator/README.md   |    33 -
 solr/contrib/jaegertracer-configurator/README.txt  |    32 +
 .../contrib/jaegertracer-configurator/build.gradle |     2 -
 .../solr/jaeger/JaegerTracerConfigurator.java      |     2 +-
 .../apache/solr/jaeger/TestJaegerConfigurator.java |     4 -
 solr/contrib/langid/README.md                      |    22 -
 solr/contrib/langid/README.txt                     |    22 +
 solr/contrib/langid/build.gradle                   |     2 -
 .../LanguageIdentifierUpdateProcessor.java         |    48 +-
 .../OpenNLPLangDetectUpdateProcessorFactory.java   |     2 +-
 .../TikaLanguageIdentifierUpdateProcessor.java     |     5 +-
 solr/contrib/ltr/README.md                         |     2 +-
 solr/contrib/ltr/README.txt                        |     1 +
 solr/contrib/ltr/build.gradle                      |     2 -
 .../java/org/apache/solr/ltr/LTRThreadModule.java  |     7 +-
 .../java/org/apache/solr/ltr/feature/Feature.java  |    42 -
 .../solr/ltr/feature/OriginalScoreFeature.java     |    23 +-
 .../org/apache/solr/ltr/feature/SolrFeature.java   |   199 +-
 .../org/apache/solr/ltr/model/LTRScoringModel.java |     1 -
 .../org/apache/solr/ltr/model/LinearModel.java     |     1 -
 .../solr/ltr/model/MultipleAdditiveTreesModel.java |     4 -
 .../apache/solr/ltr/model/NeuralNetworkModel.java  |     4 -
 .../LTRFeatureLoggerTransformerFactory.java        |     1 -
 .../apache/solr/ltr/search/LTRQParserPlugin.java   |     1 -
 .../solr/ltr/store/rest/ManagedModelStore.java     |     5 +-
 .../org/apache/solr/ltr/TestLTROnSolrCloud.java    |    12 +-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  |     6 +-
 .../test/org/apache/solr/ltr/TestRerankBase.java   |    35 +-
 .../org/apache/solr/ltr/feature/TestFeature.java   |    48 -
 .../TestFeatureExtractionFromMultipleSegments.java |     2 -
 .../solr/ltr/feature/TestNoMatchSolrFeature.java   |     4 -
 .../solr/ltr/feature/TestOriginalScoreFeature.java |     6 -
 .../solr/ltr/feature/TestOriginalScoreScorer.java  |    47 +
 .../solr/ltr/model/TestNeuralNetworkModel.java     |     1 -
 .../store/rest/TestModelManagerPersistence.java    |     4 -
 solr/contrib/prometheus-exporter/README.md         |    21 -
 solr/contrib/prometheus-exporter/README.txt        |    21 +
 solr/contrib/prometheus-exporter/build.gradle      |     2 -
 .../conf/solr-exporter-config.xml                  |     8 +-
 .../collector/SchedulerMetricsCollector.java       |     7 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |     1 -
 .../exporter/PrometheusExporterSettings.java       |     4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |    10 +-
 .../org/apache/solr/prometheus/scraper/Async.java  |     1 -
 .../solr/prometheus/scraper/SolrScraper.java       |     4 +-
 ...theus-solr-exporter-integration-test-config.xml |     8 +-
 .../prometheus/PrometheusExporterTestBase.java     |     4 +-
 .../prometheus/scraper/SolrCloudScraperTest.java   |     4 +-
 .../scraper/SolrStandaloneScraperTest.java         |     4 +-
 solr/contrib/velocity/build.gradle                 |     2 -
 .../solr/response/VelocityResponseWriter.java      |    14 +-
 solr/core/build.gradle                             |     7 +-
 solr/core/ivy.xml                                  |     2 +-
 .../solr/analysis/LowerCaseTokenizerFactory.java   |     5 -
 .../analysis/ReversedWildcardFilterFactory.java    |     4 -
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   252 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |    36 +-
 .../apache/solr/api/CustomContainerPlugins.java    |   354 -
 .../src/java/org/apache/solr/api/EndPoint.java     |     2 +-
 .../src/java/org/apache/solr/api/PayloadObj.java   |    35 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |    43 +-
 .../client/solrj/embedded/EmbeddedSolrServer.java  |    17 +-
 .../client/solrj/embedded/JettySolrRunner.java     |    15 +-
 .../apache/solr/cloud/ActiveReplicaWatcher.java    |    19 +-
 .../apache/solr/cloud/CloudConfigSetService.java   |     7 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |    16 +-
 .../solr/cloud/CurrentCoreDescriptorProvider.java  |    28 +
 .../org/apache/solr/cloud/ElectionContext.java     |   707 +
 .../apache/solr/cloud/ExclusiveSliceProperty.java  |    10 +-
 .../java/org/apache/solr/cloud/LeaderElector.java  |     2 +-
 .../src/java/org/apache/solr/cloud/LockTree.java   |    56 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   121 +-
 .../cloud/OverseerConfigSetMessageHandler.java     |    20 +-
 .../apache/solr/cloud/OverseerElectionContext.java |   110 -
 .../apache/solr/cloud/OverseerMessageHandler.java  |     7 +-
 .../apache/solr/cloud/OverseerNodePrioritizer.java |    15 +-
 .../apache/solr/cloud/OverseerSolrResponse.java    |     4 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   230 +-
 .../org/apache/solr/cloud/OverseerTaskQueue.java   |    13 +-
 .../solr/cloud/RecoveringCoreTermWatcher.java      |     4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   109 +-
 .../org/apache/solr/cloud/ReplicateFromLeader.java |    10 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |   493 -
 .../solr/cloud/ShardLeaderElectionContextBase.java |   195 -
 .../java/org/apache/solr/cloud/SolrZkServer.java   |    80 +-
 .../java/org/apache/solr/cloud/SyncStrategy.java   |    64 +-
 .../core/src/java/org/apache/solr/cloud/ZkCLI.java |    21 +-
 .../java/org/apache/solr/cloud/ZkController.java   |   427 +-
 .../org/apache/solr/cloud/ZkDistributedQueue.java  |    17 +-
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |     1 -
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |    34 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |    81 +-
 .../solr/cloud/api/collections/AliasCmd.java       |     1 -
 .../apache/solr/cloud/api/collections/Assign.java  |   236 +-
 .../solr/cloud/api/collections/BackupCmd.java      |    15 +-
 .../cloud/api/collections/CategoryRoutedAlias.java |     4 +-
 .../solr/cloud/api/collections/CreateAliasCmd.java |     2 +-
 .../cloud/api/collections/CreateCollectionCmd.java |   153 +-
 .../solr/cloud/api/collections/CreateShardCmd.java |     3 +-
 .../cloud/api/collections/CreateSnapshotCmd.java   |    28 +-
 .../solr/cloud/api/collections/DeleteAliasCmd.java |     2 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |     3 +-
 .../solr/cloud/api/collections/DeleteNodeCmd.java  |     7 +-
 .../cloud/api/collections/DeleteReplicaCmd.java    |    16 +-
 .../solr/cloud/api/collections/DeleteShardCmd.java |    15 +-
 .../cloud/api/collections/DeleteSnapshotCmd.java   |    14 +-
 .../api/collections/MaintainRoutedAliasCmd.java    |    14 +-
 .../solr/cloud/api/collections/MigrateCmd.java     |    51 +-
 .../solr/cloud/api/collections/MoveReplicaCmd.java |    32 +-
 .../OverseerCollectionMessageHandler.java          |   125 +-
 .../cloud/api/collections/OverseerRoleCmd.java     |     6 +-
 .../cloud/api/collections/OverseerStatusCmd.java   |     7 +-
 .../api/collections/ReindexCollectionCmd.java      |    68 +-
 .../solr/cloud/api/collections/RenameCmd.java      |     2 +-
 .../solr/cloud/api/collections/ReplaceNodeCmd.java |    32 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |   373 +-
 .../solr/cloud/api/collections/RoutedAlias.java    |    11 +-
 .../cloud/api/collections/SetAliasPropCmd.java     |     2 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |   118 +-
 .../cloud/api/collections/TimeRoutedAlias.java     |    12 +-
 .../solr/cloud/api/collections/UtilizeNodeCmd.java |   133 +
 .../solr/cloud/autoscaling/ActionContext.java      |    68 +
 .../autoscaling/AutoAddReplicasPlanAction.java     |    63 +
 .../apache/solr/cloud/autoscaling/AutoScaling.java |   244 +
 .../solr/cloud/autoscaling/AutoScalingHandler.java |   732 +
 .../solr/cloud/autoscaling/ComputePlanAction.java  |   305 +
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |   244 +
 .../cloud/autoscaling/HttpTriggerListener.java     |   164 +
 .../autoscaling/InactiveMarkersPlanAction.java     |   139 +
 .../cloud/autoscaling/InactiveShardPlanAction.java |   152 +
 .../solr/cloud/autoscaling/IndexSizeTrigger.java   |   557 +
 .../solr/cloud/autoscaling/LoggingListener.java    |    38 +
 .../solr/cloud/autoscaling/MetricTrigger.java      |   219 +
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |   244 +
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |   236 +
 .../cloud/autoscaling/OverseerTriggerThread.java   |   397 +
 .../solr/cloud/autoscaling/ScheduledTrigger.java   |   227 +
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |   906 ++
 .../solr/cloud/autoscaling/SearchRateTrigger.java  |   797 ++
 .../solr/cloud/autoscaling/SystemLogListener.java  |   219 +
 .../solr/cloud/autoscaling/TriggerAction.java      |    51 +
 .../solr/cloud/autoscaling/TriggerActionBase.java  |    87 +
 .../cloud/autoscaling/TriggerActionException.java  |    33 +
 .../apache/solr/cloud/autoscaling/TriggerBase.java |   283 +
 .../solr/cloud/autoscaling/TriggerEvent.java       |   311 +
 .../solr/cloud/autoscaling/TriggerEventQueue.java  |   119 +
 .../solr/cloud/autoscaling/TriggerListener.java    |    65 +
 .../cloud/autoscaling/TriggerListenerBase.java     |    97 +
 .../solr/cloud/autoscaling/TriggerUtils.java       |    87 +
 .../autoscaling/TriggerValidationException.java    |    74 +
 .../solr/cloud/autoscaling/package-info.java       |    21 +
 .../solr/cloud/autoscaling/sim/ActionError.java    |    24 +
 .../cloud/autoscaling/sim/FakeDocIterator.java     |    56 +
 .../autoscaling/sim/GenericDistributedQueue.java   |   599 +
 .../sim/GenericDistributedQueueFactory.java        |    45 +
 .../solr/cloud/autoscaling/sim/LiveNodesSet.java   |   113 +
 .../sim/NoopDistributedQueueFactory.java           |    94 +
 .../cloud/autoscaling/sim/SimCloudManager.java     |  1051 ++
 .../autoscaling/sim/SimClusterStateProvider.java   |  2469 ++++
 .../autoscaling/sim/SimDistribStateManager.java    |   646 +
 .../sim/SimDistributedQueueFactory.java            |   284 +
 .../autoscaling/sim/SimNodeStateProvider.java      |   347 +
 .../solr/cloud/autoscaling/sim/SimScenario.java    |  1108 ++
 .../solr/cloud/autoscaling/sim/SimUtils.java       |   435 +
 .../autoscaling/sim/SnapshotCloudManager.java      |   257 +
 .../sim/SnapshotClusterStateProvider.java          |   130 +
 .../sim/SnapshotDistribStateManager.java           |   222 +
 .../autoscaling/sim/SnapshotNodeStateProvider.java |   200 +
 .../solr/cloud/autoscaling/sim/package-info.java   |    94 +
 .../solr/cloud/overseer/ClusterStateMutator.java   |    21 +-
 .../solr/cloud/overseer/CollectionMutator.java     |     9 +-
 .../apache/solr/cloud/overseer/NodeMutator.java    |     8 +-
 .../apache/solr/cloud/overseer/ReplicaMutator.java |    88 +-
 .../apache/solr/cloud/overseer/SliceMutator.java   |    14 +-
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |    47 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |    15 +-
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |    13 +-
 .../solr/cloud/rule/ServerSnitchContext.java       |     1 -
 .../solr/core/AbstractSolrEventListener.java       |     5 +-
 .../java/org/apache/solr/core/BlobRepository.java  |    17 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |    36 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |    25 +-
 .../java/org/apache/solr/core/CodecFactory.java    |     2 +-
 .../java/org/apache/solr/core/ConfigOverlay.java   |    14 -
 .../src/java/org/apache/solr/core/ConfigSet.java   |    29 +-
 .../org/apache/solr/core/ConfigSetProperties.java  |     6 +-
 .../org/apache/solr/core/ConfigSetService.java     |    17 +-
 .../java/org/apache/solr/core/CoreContainer.java   |   402 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |    10 +-
 .../apache/solr/core/CorePropertiesLocator.java    |    24 +-
 .../src/java/org/apache/solr/core/CoreSorter.java  |    77 +-
 .../src/java/org/apache/solr/core/Diagnostics.java |     2 +-
 .../org/apache/solr/core/DirectoryFactory.java     |    21 +-
 .../org/apache/solr/core/HdfsDirectoryFactory.java |    29 +-
 .../solr/core/IndexDeletionPolicyWrapper.java      |     4 +-
 .../org/apache/solr/core/IndexReaderFactory.java   |     2 +-
 .../src/java/org/apache/solr/core/InitParams.java  |    12 +-
 .../org/apache/solr/core/MMapDirectoryFactory.java |     1 -
 .../java/org/apache/solr/core/MemClassLoader.java  |   200 +
 .../solr/core/NRTCachingDirectoryFactory.java      |     1 -
 .../src/java/org/apache/solr/core/NodeConfig.java  |    86 +-
 .../src/java/org/apache/solr/core/PluginBag.java   |   261 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |    58 +-
 .../org/apache/solr/core/QuerySenderListener.java  |    54 +-
 .../java/org/apache/solr/core/RequestHandlers.java |     6 +-
 .../java/org/apache/solr/core/RequestParams.java   |    65 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |     9 +-
 .../apache/solr/core/SimpleFSDirectoryFactory.java |    42 +
 .../apache/solr/core/SimpleTextCodecFactory.java   |     1 -
 .../java/org/apache/solr/core/SolrClassLoader.java |    29 -
 .../src/java/org/apache/solr/core/SolrConfig.java  |   145 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   236 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |    33 +-
 .../org/apache/solr/core/SolrDeletionPolicy.java   |    14 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   138 -
 .../org/apache/solr/core/SolrResourceLoader.java   |   416 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |    73 +-
 .../apache/solr/core/StandardDirectoryFactory.java |     2 +-
 .../apache/solr/core/TransientSolrCoreCache.java   |    10 +
 .../solr/core/TransientSolrCoreCacheDefault.java   |    29 +-
 .../solr/core/TransientSolrCoreCacheFactory.java   |     6 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |    56 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |   105 +-
 .../org/apache/solr/core/backup/BackupManager.java |     2 +-
 .../backup/repository/HdfsBackupRepository.java    |    14 +-
 .../repository/LocalFileSystemRepository.java      |    13 +-
 .../solr/core/snapshots/SolrSnapshotManager.java   |    12 +-
 .../snapshots/SolrSnapshotMetaDataManager.java     |    10 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java     |    16 +-
 .../apache/solr/filestore/DistribPackageStore.java |    91 +-
 .../org/apache/solr/filestore/PackageStore.java    |     7 -
 .../org/apache/solr/filestore/PackageStoreAPI.java |    74 +-
 .../solr/handler/AnalysisRequestHandlerBase.java   |     3 -
 .../org/apache/solr/handler/AnalyzeEvaluator.java  |     2 +-
 .../java/org/apache/solr/handler/BlobHandler.java  |    16 +-
 .../java/org/apache/solr/handler/CatStream.java    |    92 +-
 .../solr/handler/CdcrBufferStateManager.java       |     8 +-
 .../solr/handler/CdcrLeaderStateManager.java       |     4 +-
 .../solr/handler/CdcrProcessStateManager.java      |     8 +-
 .../org/apache/solr/handler/CdcrReplicator.java    |    13 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |    44 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |    10 +-
 .../apache/solr/handler/CdcrReplicatorState.java   |     2 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |    38 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |    20 +-
 .../solr/handler/ContentStreamHandlerBase.java     |     2 +-
 .../handler/DocumentAnalysisRequestHandler.java    |     8 +-
 .../apache/solr/handler/DumpRequestHandler.java    |    10 +-
 .../org/apache/solr/handler/ExportHandler.java     |    80 +-
 .../solr/handler/FieldAnalysisRequestHandler.java  |     3 -
 .../java/org/apache/solr/handler/GraphHandler.java |    23 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |   217 +-
 .../apache/solr/handler/MoreLikeThisHandler.java   |     5 +-
 .../apache/solr/handler/PingRequestHandler.java    |     2 +-
 .../apache/solr/handler/ReplicationHandler.java    |   343 +-
 .../apache/solr/handler/RequestHandlerBase.java    |     8 +-
 .../java/org/apache/solr/handler/RestoreCore.java  |     3 +-
 .../java/org/apache/solr/handler/SQLHandler.java   |    10 +-
 .../org/apache/solr/handler/SchemaHandler.java     |    62 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |    28 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |    83 +-
 .../org/apache/solr/handler/StreamHandler.java     |   107 +-
 .../apache/solr/handler/UpdateRequestHandler.java  |     4 +-
 .../solr/handler/admin/AdminHandlersProxy.java     |    10 +-
 .../handler/admin/AutoscalingHistoryHandler.java   |   165 +
 .../solr/handler/admin/BaseHandlerApiSupport.java  |     5 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |    34 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |     9 +-
 .../solr/handler/admin/CollectionHandlerApi.java   |     2 +-
 .../solr/handler/admin/CollectionsHandler.java     |    63 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |    16 +-
 .../solr/handler/admin/ContainerPluginsApi.java    |   179 -
 .../solr/handler/admin/CoreAdminHandler.java       |     6 +-
 .../solr/handler/admin/CoreAdminOperation.java     |     9 +-
 .../solr/handler/admin/HealthCheckHandler.java     |    82 +-
 .../solr/handler/admin/IndexSizeEstimator.java     |     7 +-
 .../org/apache/solr/handler/admin/InfoHandler.java |     2 +-
 .../apache/solr/handler/admin/LoggingHandler.java  |     9 +-
 .../solr/handler/admin/LukeRequestHandler.java     |    36 +-
 .../apache/solr/handler/admin/MergeIndexesOp.java  |     8 +-
 .../handler/admin/MetricsCollectorHandler.java     |    10 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |     7 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |    56 +-
 .../apache/solr/handler/admin/PrepRecoveryOp.java  |    22 +-
 .../solr/handler/admin/RebalanceLeaders.java       |    24 +-
 .../solr/handler/admin/RequestSyncShardOp.java     |     8 +-
 .../solr/handler/admin/SecurityConfHandler.java    |     7 +-
 .../handler/admin/SegmentsInfoRequestHandler.java  |    11 +-
 .../solr/handler/admin/ShowFileRequestHandler.java |    16 +-
 .../solr/handler/admin/SolrInfoMBeanHandler.java   |     4 -
 .../org/apache/solr/handler/admin/SplitOp.java     |    14 +-
 .../solr/handler/admin/SystemInfoHandler.java      |    57 +-
 .../solr/handler/admin/ThreadDumpHandler.java      |    54 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |   201 +-
 .../solr/handler/admin/ZookeeperReadAPI.java       |   145 -
 .../solr/handler/admin/ZookeeperStatusHandler.java |    85 +-
 .../solr/handler/component/CloudReplicaSource.java |     2 -
 .../solr/handler/component/DebugComponent.java     |    38 +-
 .../solr/handler/component/ExpandComponent.java    |   119 +-
 .../solr/handler/component/FacetComponent.java     |    22 +-
 .../solr/handler/component/FieldFacetStats.java    |     4 +-
 .../solr/handler/component/HighlightComponent.java |     9 +-
 .../solr/handler/component/HttpShardHandler.java   |   176 +-
 .../handler/component/HttpShardHandlerFactory.java |    93 +-
 .../handler/component/IterativeMergeStrategy.java  |     5 +-
 .../solr/handler/component/MergeStrategy.java      |     1 -
 .../handler/component/MoreLikeThisComponent.java   |    36 +-
 .../component/PhrasesIdentificationComponent.java  |     4 -
 .../component/PivotFacetFieldValueCollection.java  |     3 +-
 .../solr/handler/component/PivotFacetHelper.java   |     5 -
 .../handler/component/PivotFacetProcessor.java     |     4 +-
 .../solr/handler/component/QueryComponent.java     |    41 +-
 .../handler/component/QueryElevationComponent.java |    13 +-
 .../handler/component/RangeFacetProcessor.java     |     1 -
 .../solr/handler/component/RangeFacetRequest.java  |    13 +-
 .../handler/component/RealTimeGetComponent.java    |    56 +-
 .../solr/handler/component/ResponseBuilder.java    |     6 +-
 .../solr/handler/component/SearchComponent.java    |     2 +-
 .../solr/handler/component/SearchHandler.java      |    90 +-
 .../apache/solr/handler/component/ShardDoc.java    |     1 -
 .../component/ShardFieldSortedHitQueue.java        |     6 +-
 .../solr/handler/component/ShardResponse.java      |     4 +-
 .../handler/component/SortedDateStatsValues.java   |     6 +-
 .../component/SortedNumericStatsValues.java        |     6 +-
 .../handler/component/SpatialHeatmapFacets.java    |     4 +-
 .../handler/component/SpellCheckComponent.java     |    62 +-
 .../handler/component/StandaloneReplicaSource.java |     1 -
 .../solr/handler/component/StatsComponent.java     |   113 +-
 .../apache/solr/handler/component/StatsInfo.java   |   108 -
 .../apache/solr/handler/component/StatsValues.java |     2 +-
 .../solr/handler/component/StatsValuesFactory.java |  1385 +-
 .../solr/handler/component/SuggestComponent.java   |    54 +-
 .../handler/component/TermVectorComponent.java     |     6 +-
 .../solr/handler/component/TermsComponent.java     |     4 +-
 .../org/apache/solr/handler/export/DoubleCmp.java  |    43 +
 .../org/apache/solr/handler/export/DoubleComp.java |    45 -
 .../solr/handler/export/DoubleValueSortDoc.java    |     1 -
 .../apache/solr/handler/export/ExportBuffers.java  |   271 -
 .../apache/solr/handler/export/ExportWriter.java   |   306 +-
 .../solr/handler/export/ExportWriterStream.java    |   242 -
 .../org/apache/solr/handler/export/FloatCmp.java   |    44 +
 .../org/apache/solr/handler/export/FloatComp.java  |    44 -
 .../org/apache/solr/handler/export/IntComp.java    |    32 +-
 .../org/apache/solr/handler/export/LongCmp.java    |    45 +
 .../org/apache/solr/handler/export/LongComp.java   |    46 -
 .../org/apache/solr/handler/export/LongValue.java  |     4 +-
 .../apache/solr/handler/export/PriorityQueue.java  |   218 +
 .../solr/handler/export/QuadValueSortDoc.java      |     1 -
 .../solr/handler/export/SingleValueSortDoc.java    |     3 +-
 .../org/apache/solr/handler/export/SortDoc.java    |    19 +-
 .../org/apache/solr/handler/export/SortQueue.java  |   155 +-
 .../solr/handler/export/StringFieldWriter.java     |    25 +-
 .../apache/solr/handler/export/StringValue.java    |    36 +-
 .../solr/handler/export/TripleValueSortDoc.java    |     1 -
 .../apache/solr/handler/loader/JavabinLoader.java  |     6 +-
 .../org/apache/solr/handler/loader/JsonLoader.java |    19 +-
 .../org/apache/solr/handler/loader/XMLLoader.java  |    22 +-
 .../apache/solr/handler/sql/CalciteSolrDriver.java |    16 +-
 .../org/apache/solr/handler/sql/LimitStream.java   |     6 +-
 .../org/apache/solr/handler/sql/SolrAggregate.java |     1 -
 .../apache/solr/handler/sql/SolrEnumerator.java    |     3 -
 .../org/apache/solr/handler/sql/SolrFilter.java    |    16 +-
 .../org/apache/solr/handler/sql/SolrMethod.java    |     1 -
 .../org/apache/solr/handler/sql/SolrSchema.java    |    62 +-
 .../org/apache/solr/handler/sql/SolrTable.java     |    31 +-
 .../handler/sql/SolrToEnumerableConverter.java     |     3 -
 .../org/apache/solr/handler/tagger/Tagger.java     |     9 +-
 .../solr/handler/tagger/TaggerRequestHandler.java  |   119 +-
 .../solr/handler/tagger/TermPrefixCursor.java      |     1 -
 .../solr/highlight/DefaultSolrHighlighter.java     |   514 +-
 .../solr/highlight/HighlightingPluginBase.java     |     2 +-
 .../org/apache/solr/highlight/RegexFragmenter.java |     2 +-
 .../org/apache/solr/highlight/SolrEncoder.java     |     2 +-
 .../org/apache/solr/highlight/SolrFormatter.java   |     2 +-
 .../apache/solr/highlight/SolrFragListBuilder.java |     2 +-
 .../org/apache/solr/highlight/SolrFragmenter.java  |     2 +-
 .../solr/highlight/UnifiedSolrHighlighter.java     |     3 +-
 .../solr/index/WrapperMergePolicyFactory.java      |     1 -
 .../org/apache/solr/internal/csv/CSVParser.java    |     4 -
 .../org/apache/solr/internal/csv/CSVPrinter.java   |     1 -
 .../java/org/apache/solr/logging/LogWatcher.java   |    10 +-
 .../org/apache/solr/logging/MDCLoggingContext.java |    78 +-
 .../org/apache/solr/metrics/MetricSuppliers.java   |    15 +-
 .../java/org/apache/solr/metrics/MetricsMap.java   |     5 +-
 .../apache/solr/metrics/SolrCoreMetricManager.java |     4 +-
 .../org/apache/solr/metrics/SolrMetricManager.java |    75 +-
 .../apache/solr/metrics/SolrMetricProducer.java    |     9 +-
 .../apache/solr/metrics/SolrMetricReporter.java    |     4 +-
 .../metrics/reporters/ReporterClientCache.java     |     4 +-
 .../solr/metrics/reporters/SolrJmxReporter.java    |     6 +-
 .../solr/metrics/reporters/SolrSlf4jReporter.java  |     1 -
 .../metrics/reporters/jmx/JmxMetricsReporter.java  |    18 +-
 .../reporters/solr/SolrClusterReporter.java        |    10 +-
 .../solr/metrics/reporters/solr/SolrReporter.java  |    83 +-
 .../metrics/reporters/solr/SolrShardReporter.java  |    20 +-
 .../apache/solr/metrics/rrd/SolrRrdBackend.java    |     2 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |    31 +-
 .../packagemanager/DefaultPackageRepository.java   |     4 +-
 .../apache/solr/packagemanager/PackageManager.java |   446 +-
 .../apache/solr/packagemanager/PackageUtils.java   |     3 -
 .../solr/packagemanager/RepositoryManager.java     |    34 +-
 .../apache/solr/packagemanager/SolrPackage.java    |     4 -
 .../solr/packagemanager/SolrPackageInstance.java   |    23 -
 .../org/apache/solr/parser/FastCharStream.java     |    12 -
 .../apache/solr/parser/SolrQueryParserBase.java    |    27 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |    62 +-
 .../java/org/apache/solr/pkg/PackageListeners.java |    58 +-
 .../solr/pkg/PackageListeningClassLoader.java      |   151 -
 .../java/org/apache/solr/pkg/PackageLoader.java    |    80 +-
 .../org/apache/solr/pkg/PackagePluginHolder.java   |    66 +-
 .../apache/solr/request/LocalSolrQueryRequest.java |    12 +-
 .../java/org/apache/solr/request/SimpleFacets.java |    27 +-
 .../apache/solr/request/SolrQueryRequestBase.java  |     1 -
 .../apache/solr/request/SolrRequestHandler.java    |     4 +-
 .../org/apache/solr/request/SolrRequestInfo.java   |    96 +-
 .../solr/request/json/JsonQueryConverter.java      |    52 +-
 .../org/apache/solr/request/json/ObjectUtil.java   |     8 +-
 .../apache/solr/response/BinaryResponseWriter.java |    13 +-
 .../apache/solr/response/CSVResponseWriter.java    |     4 +-
 .../org/apache/solr/response/DocsStreamer.java     |     1 -
 .../solr/response/GeoJSONResponseWriter.java       |    20 +-
 .../solr/response/GraphMLResponseWriter.java       |     8 +-
 .../apache/solr/response/JSONResponseWriter.java   |    25 +-
 .../java/org/apache/solr/response/JSONWriter.java  |    43 +-
 .../apache/solr/response/PHPResponseWriter.java    |     6 +-
 .../solr/response/PHPSerializedResponseWriter.java |    24 +-
 .../apache/solr/response/PythonResponseWriter.java |     4 +-
 .../apache/solr/response/QueryResponseWriter.java  |     2 +-
 .../apache/solr/response/RawResponseWriter.java    |     2 +-
 .../apache/solr/response/RubyResponseWriter.java   |     4 +-
 .../solr/response/SchemaXmlResponseWriter.java     |     2 +-
 .../org/apache/solr/response/SchemaXmlWriter.java  |    25 +-
 .../apache/solr/response/SmileResponseWriter.java  |     2 +-
 .../apache/solr/response/SolrQueryResponse.java    |     1 -
 .../solr/response/TabularResponseWriter.java       |    13 +-
 .../apache/solr/response/TextResponseWriter.java   |    16 +-
 .../apache/solr/response/XMLResponseWriter.java    |     2 +-
 .../java/org/apache/solr/response/XMLWriter.java   |    79 +-
 .../apache/solr/response/XSLTResponseWriter.java   |     4 +-
 .../response/transform/ChildDocTransformer.java    |     6 -
 .../transform/ChildDocTransformerFactory.java      |    11 +-
 .../response/transform/DocIdAugmenterFactory.java  |    31 +-
 .../transform/ExplainAugmenterFactory.java         |     2 +-
 .../response/transform/GeoTransformerFactory.java  |     1 -
 .../transform/RawValueTransformerFactory.java      |     3 +-
 .../response/transform/ShardAugmenterFactory.java  |     2 +-
 .../transform/SubQueryAugmenterFactory.java        |    64 +-
 .../response/transform/TransformerFactory.java     |     2 +-
 .../response/transform/ValueAugmenterFactory.java  |    80 +-
 .../response/transform/ValueSourceAugmenter.java   |     3 -
 .../org/apache/solr/rest/BaseSolrResource.java     |     8 +-
 .../java/org/apache/solr/rest/ManagedResource.java |    14 +-
 .../apache/solr/rest/ManagedResourceStorage.java   |    31 +-
 .../src/java/org/apache/solr/rest/RestManager.java |    21 +-
 .../analysis/BaseManagedTokenFilterFactory.java    |     5 -
 .../schema/analysis/ManagedStopFilterFactory.java  |     5 -
 .../analysis/ManagedSynonymFilterFactory.java      |    10 +-
 .../analysis/ManagedSynonymGraphFilterFactory.java |    10 +-
 .../schema/analysis/ManagedWordSetResource.java    |     7 +-
 .../org/apache/solr/schema/AbstractEnumField.java  |     5 +-
 .../solr/schema/AbstractSpatialFieldType.java      |     2 +-
 .../schema/AbstractSpatialPrefixTreeFieldType.java |     4 +-
 .../java/org/apache/solr/schema/BinaryField.java   |     2 +-
 .../src/java/org/apache/solr/schema/BoolField.java |   147 +-
 .../solr/schema/ClassicIndexSchemaFactory.java     |     2 +-
 .../org/apache/solr/schema/CurrencyFieldType.java  |     5 +-
 .../org/apache/solr/schema/DatePointField.java     |    50 +-
 .../src/java/org/apache/solr/schema/EnumField.java |     2 +-
 .../org/apache/solr/schema/ExternalFileField.java  |     3 +-
 .../solr/schema/ExternalFileFieldReloader.java     |     6 +-
 .../src/java/org/apache/solr/schema/FieldType.java |     5 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |    39 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |   184 +-
 .../org/apache/solr/schema/IndexSchemaFactory.java |     4 +-
 .../apache/solr/schema/JsonPreAnalyzedParser.java  |    10 +-
 .../solr/schema/LatLonPointSpatialField.java       |     1 -
 .../java/org/apache/solr/schema/LatLonType.java    |     4 -
 .../org/apache/solr/schema/ManagedIndexSchema.java |    98 +-
 .../solr/schema/ManagedIndexSchemaFactory.java     |   115 +-
 .../solr/schema/OpenExchangeRatesOrgProvider.java  |    16 +-
 .../java/org/apache/solr/schema/PointField.java    |     6 +-
 .../org/apache/solr/schema/PreAnalyzedField.java   |    13 +-
 .../org/apache/solr/schema/RandomSortField.java    |     2 +-
 .../src/java/org/apache/solr/schema/RankField.java |   140 -
 .../solr/schema/RptWithGeometrySpatialField.java   |     1 -
 .../java/org/apache/solr/schema/SchemaManager.java |     8 +-
 .../src/java/org/apache/solr/schema/StrField.java  |     2 +-
 .../org/apache/solr/schema/StrFieldSource.java     |     2 +-
 .../src/java/org/apache/solr/schema/TextField.java |     2 +-
 .../java/org/apache/solr/schema/TrieDateField.java |     1 -
 .../org/apache/solr/schema/TrieDoubleField.java    |     3 +-
 .../src/java/org/apache/solr/schema/TrieField.java |     3 +-
 .../org/apache/solr/schema/TrieFloatField.java     |     3 +-
 .../java/org/apache/solr/schema/TrieIntField.java  |     3 +-
 .../java/org/apache/solr/schema/TrieLongField.java |     3 +-
 .../src/java/org/apache/solr/schema/UUIDField.java |     4 +-
 .../apache/solr/schema/ZkIndexSchemaReader.java    |    16 +-
 .../apache/solr/search/AbstractReRankQuery.java    |     2 +-
 .../org/apache/solr/search/BoolQParserPlugin.java  |    53 +-
 .../java/org/apache/solr/search/CacheConfig.java   |    16 +-
 .../org/apache/solr/search/CacheRegenerator.java   |     4 +-
 .../java/org/apache/solr/search/CaffeineCache.java |     5 +-
 .../solr/search/CollapsingQParserPlugin.java       |   520 +-
 .../solr/search/ComplexPhraseQParserPlugin.java    |     2 +-
 .../java/org/apache/solr/search/CursorMark.java    |     1 -
 .../src/java/org/apache/solr/search/DocList.java   |     3 -
 .../src/java/org/apache/solr/search/DocSet.java    |    12 +-
 .../java/org/apache/solr/search/DocSetUtil.java    |    10 +-
 .../src/java/org/apache/solr/search/DocSlice.java  |    15 +-
 .../apache/solr/search/ExportQParserPlugin.java    |     5 -
 .../apache/solr/search/ExtendedDismaxQParser.java  |     5 +-
 .../solr/search/FloatPayloadValueSource.java       |     4 +-
 .../org/apache/solr/search/FunctionQParser.java    |    30 +-
 .../org/apache/solr/search/FunctionRangeQuery.java |     4 -
 .../solr/search/GraphTermsQParserPlugin.java       |    96 +-
 .../src/java/org/apache/solr/search/Grouping.java  |    58 +-
 .../solr/search/IGainTermsQParserPlugin.java       |     2 -
 .../org/apache/solr/search/JoinQParserPlugin.java  |   618 +-
 .../src/java/org/apache/solr/search/JoinQuery.java |   508 -
 .../org/apache/solr/search/MaxScoreCollector.java  |    10 +-
 .../java/org/apache/solr/search/QParserPlugin.java |     5 +-
 .../java/org/apache/solr/search/QueryCommand.java  |    10 -
 .../java/org/apache/solr/search/QueryContext.java  |     2 -
 .../java/org/apache/solr/search/QueryParsing.java  |     1 -
 .../org/apache/solr/search/QueryResultKey.java     |    15 +-
 .../java/org/apache/solr/search/QueryUtils.java    |    32 +-
 .../org/apache/solr/search/RankQParserPlugin.java  |   158 -
 .../src/java/org/apache/solr/search/RankQuery.java |     1 -
 .../org/apache/solr/search/ReRankCollector.java    |    12 +-
 .../java/org/apache/solr/search/ScoreFilter.java   |    21 +
 .../solr/search/SignificantTermsQParserPlugin.java |     6 -
 .../src/java/org/apache/solr/search/SolrCache.java |     5 +-
 .../org/apache/solr/search/SolrCacheHolder.java    |   150 +
 .../apache/solr/search/SolrConstantScoreQuery.java |     1 -
 .../org/apache/solr/search/SolrCoreParser.java     |     1 -
 .../apache/solr/search/SolrDocumentFetcher.java    |     3 +-
 .../java/org/apache/solr/search/SolrFilter.java    |     6 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  |   329 +-
 .../apache/solr/search/SurroundQParserPlugin.java  |     2 +-
 .../org/apache/solr/search/TermsQParserPlugin.java |     3 -
 .../TextLogisticRegressionQParserPlugin.java       |     4 +-
 .../org/apache/solr/search/ValueSourceParser.java  |   651 +-
 .../org/apache/solr/search/XmlQParserPlugin.java   |     3 +-
 .../java/org/apache/solr/search/facet/AggUtil.java |     8 +-
 .../apache/solr/search/facet/AggValueSource.java   |     3 +-
 .../java/org/apache/solr/search/facet/AvgAgg.java  |    22 +-
 .../org/apache/solr/search/facet/CountAgg.java     |     6 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |    12 +-
 .../org/apache/solr/search/facet/DocValuesAcc.java |   575 +-
 .../org/apache/solr/search/facet/FacetBucket.java  |    15 +-
 .../org/apache/solr/search/facet/FacetContext.java |    74 -
 .../apache/solr/search/facet/FacetDebugInfo.java   |     2 +-
 .../org/apache/solr/search/facet/FacetField.java   |    45 +-
 .../apache/solr/search/facet/FacetFieldMerger.java |     7 +-
 .../solr/search/facet/FacetFieldProcessor.java     |   130 +-
 .../search/facet/FacetFieldProcessorByArray.java   |    40 +-
 .../search/facet/FacetFieldProcessorByArrayDV.java |   177 +-
 .../FacetFieldProcessorByEnumTermsStream.java      |     1 -
 .../search/facet/FacetFieldProcessorByHashDV.java  |    31 +-
 .../org/apache/solr/search/facet/FacetHeatmap.java |    12 +-
 .../org/apache/solr/search/facet/FacetModule.java  |   307 +-
 .../org/apache/solr/search/facet/FacetParser.java  |   637 -
 .../apache/solr/search/facet/FacetProcessor.java   |    24 +-
 .../org/apache/solr/search/facet/FacetQuery.java   |     3 +-
 .../org/apache/solr/search/facet/FacetRange.java   |  1038 +-
 .../apache/solr/search/facet/FacetRangeMerger.java |     4 +-
 .../apache/solr/search/facet/FacetRangeParser.java |    76 -
 .../solr/search/facet/FacetRangeProcessor.java     |  1077 --
 .../org/apache/solr/search/facet/FacetRequest.java |   747 +-
 .../solr/search/facet/FacetRequestSorted.java      |    58 -
 .../search/facet/FacetRequestSortedMerger.java     |    10 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |    27 +-
 .../org/apache/solr/search/facet/LegacyFacet.java  |     1 -
 .../org/apache/solr/search/facet/MinMaxAgg.java    |    21 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |     6 +-
 .../apache/solr/search/facet/PercentileAgg.java    |     8 +-
 .../solr/search/facet/ReadOnlyCountSlotAcc.java    |    31 -
 .../apache/solr/search/facet/RelatednessAgg.java   |   277 +-
 .../solr/search/facet/SimpleAggValueSource.java    |     1 -
 .../apache/solr/search/facet/SingletonDISI.java    |    48 -
 .../solr/search/facet/SingletonDocIterator.java    |    52 -
 .../java/org/apache/solr/search/facet/SlotAcc.java |   967 +-
 .../org/apache/solr/search/facet/StddevAgg.java    |    20 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |    12 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |    10 +-
 .../apache/solr/search/facet/SweepCountAware.java  |   187 -
 .../org/apache/solr/search/facet/SweepDISI.java    |    85 -
 .../apache/solr/search/facet/SweepDocIterator.java |    87 -
 .../apache/solr/search/facet/UnInvertedField.java  |    73 +-
 .../solr/search/facet/UnInvertedFieldAcc.java      |   174 +-
 .../org/apache/solr/search/facet/UnionDISI.java    |   100 -
 .../apache/solr/search/facet/UnionDocIterator.java |   107 -
 .../org/apache/solr/search/facet/UniqueAgg.java    |    45 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |    11 +-
 .../solr/search/facet/UniqueBlockFieldAgg.java     |     2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |     6 +-
 .../apache/solr/search/facet/UniqueSlotAcc.java    |    24 +-
 .../org/apache/solr/search/facet/VarianceAgg.java  |    20 +-
 .../search/function/CollapseScoreFunction.java     |     2 -
 .../solr/search/function/FieldNameValueSource.java |     1 -
 .../solr/search/function/FileFloatSource.java      |    37 +-
 .../solr/search/function/MultiStringFunction.java  |     3 +-
 .../solr/search/function/OrdFieldSource.java       |     1 -
 .../search/function/ReverseOrdFieldSource.java     |     1 -
 .../search/function/ValueSourceRangeFilter.java    |     5 +-
 .../distance/GeoDistValueSourceParser.java         |     4 +-
 .../search/function/distance/GeohashFunction.java  |     3 -
 .../distance/GeohashHaversineFunction.java         |     8 +-
 .../function/distance/HaversineConstFunction.java  |     8 +-
 .../function/distance/HaversineFunction.java       |     7 +-
 .../function/distance/StringDistanceFunction.java  |     3 -
 .../function/distance/VectorDistanceFunction.java  |     7 +-
 .../solr/search/grouping/CommandHandler.java       |    26 +-
 .../distributed/command/GroupConverter.java        |     6 +-
 .../grouping/distributed/command/QueryCommand.java |     1 -
 .../command/SearchGroupsFieldCommand.java          |     3 -
 .../distributed/command/TopGroupsFieldCommand.java |     2 -
 .../SearchGroupShardResponseProcessor.java         |     3 +-
 .../TopGroupsShardResponseProcessor.java           |     4 +-
 .../SearchGroupsResultTransformer.java             |     7 +-
 .../ShardResultTransformer.java                    |     2 -
 .../TopGroupsResultTransformer.java                |     3 +-
 .../GroupedEndResultTransformer.java               |     4 +-
 .../solr/search/join/BlockJoinChildQParser.java    |     7 +-
 .../solr/search/join/BlockJoinParentQParser.java   |   105 +-
 .../search/join/ChildFieldValueSourceParser.java   |     6 +-
 .../search/join/CrossCollectionJoinQParser.java    |    92 -
 .../solr/search/join/CrossCollectionJoinQuery.java |   380 -
 .../apache/solr/search/join/FiltersQParser.java    |    91 +-
 .../solr/search/join/GraphEdgeCollector.java       |   207 -
 .../org/apache/solr/search/join/GraphQuery.java    |     2 +-
 .../solr/search/join/GraphTermsCollector.java      |   202 +
 .../solr/search/join/ScoreJoinQParserPlugin.java   |    19 +-
 .../org/apache/solr/search/join/XCJFQParser.java   |    90 +
 .../apache/solr/search/join/XCJFQParserPlugin.java |    66 +
 .../org/apache/solr/search/join/XCJFQuery.java     |   380 +
 .../apache/solr/search/mlt/CloudMLTQParser.java    |     4 -
 .../apache/solr/search/mlt/SimpleMLTQParser.java   |     1 -
 .../similarities/BooleanSimilarityFactory.java     |    36 -
 .../solr/search/stats/ExactSharedStatsCache.java   |     6 +-
 .../apache/solr/search/stats/ExactStatsCache.java  |    22 +-
 .../apache/solr/search/stats/LRUStatsCache.java    |    10 +-
 .../org/apache/solr/search/stats/StatsCache.java   |     2 +-
 .../org/apache/solr/search/stats/StatsUtil.java    |    17 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |    16 +-
 .../apache/solr/security/AuthenticationPlugin.java |    29 +-
 .../apache/solr/security/AuthorizationContext.java |    27 +-
 .../solr/security/AutorizationEditOperation.java   |     9 -
 .../org/apache/solr/security/BasicAuthPlugin.java  |    21 +-
 .../org/apache/solr/security/CertAuthPlugin.java   |    51 -
 .../security/DelegationTokenKerberosFilter.java    |    19 +-
 .../ExternalRoleRuleBasedAuthorizationPlugin.java  |    52 -
 .../org/apache/solr/security/HadoopAuthPlugin.java |    44 +-
 .../org/apache/solr/security/JWTAuthPlugin.java    |    52 +-
 .../org/apache/solr/security/JWTPrincipal.java     |     4 +-
 .../solr/security/JWTVerificationkeyResolver.java  |     8 +-
 .../org/apache/solr/security/KerberosFilter.java   |     6 +-
 .../org/apache/solr/security/KerberosPlugin.java   |    57 +-
 .../solr/security/MultiDestinationAuditLogger.java |     6 +-
 .../solr/security/PKIAuthenticationPlugin.java     |    42 +-
 .../java/org/apache/solr/security/Permission.java  |     9 +-
 .../solr/security/PermissionNameProvider.java      |     5 +-
 .../security/RuleBasedAuthorizationPlugin.java     |   307 +-
 .../security/RuleBasedAuthorizationPluginBase.java |   347 -
 .../security/Sha256AuthenticationProvider.java     |    13 +-
 .../solr/security/SolrLogAuditLoggerPlugin.java    |     4 +-
 .../apache/solr/servlet/DirectSolrConnection.java  |     4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |    57 +-
 .../apache/solr/servlet/LoadAdminUiServlet.java    |    31 +-
 .../org/apache/solr/servlet/QueryRateLimiter.java  |    55 -
 .../org/apache/solr/servlet/RateLimitManager.java  |   181 -
 .../apache/solr/servlet/RequestRateLimiter.java    |   168 -
 .../org/apache/solr/servlet/ResponseUtils.java     |     5 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |   160 +-
 .../apache/solr/servlet/SolrRequestParsers.java    |   151 +-
 .../solr/spelling/AbstractLuceneSpellChecker.java  |     3 +-
 .../solr/spelling/DirectSolrSpellChecker.java      |     7 +-
 .../solr/spelling/FileBasedSpellChecker.java       |     2 +-
 .../solr/spelling/IndexBasedSpellChecker.java      |     2 +-
 .../org/apache/solr/spelling/QueryConverter.java   |     3 +-
 .../org/apache/solr/spelling/SolrSpellChecker.java |     2 +-
 .../apache/solr/spelling/SpellCheckCollator.java   |    16 +-
 .../solr/spelling/WordBreakSolrSpellChecker.java   |     8 +-
 .../solr/spelling/suggest/DictionaryFactory.java   |     3 +-
 .../DocumentExpressionDictionaryFactory.java       |    20 +-
 .../solr/spelling/suggest/LookupFactory.java       |     2 +-
 .../solr/spelling/suggest/SolrSuggester.java       |    27 +-
 .../apache/solr/spelling/suggest/Suggester.java    |    14 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |     2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |     2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |     2 +-
 .../spelling/suggest/fst/FSTLookupFactory.java     |     2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |     2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |     2 +-
 .../spelling/suggest/fst/WFSTLookupFactory.java    |     2 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |     4 +-
 .../spelling/suggest/tst/TSTLookupFactory.java     |     2 +-
 .../solr/store/blockcache/BlockDirectory.java      |     2 +-
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |    10 +-
 .../org/apache/solr/store/hdfs/HdfsFileWriter.java |     2 -
 .../solr/store/hdfs/HdfsLocalityReporter.java      |    10 +-
 .../apache/solr/store/hdfs/HdfsLockFactory.java    |     4 -
 .../org/apache/solr/update/AddUpdateCommand.java   |     1 -
 .../org/apache/solr/update/CdcrTransactionLog.java |     8 +-
 .../java/org/apache/solr/update/CdcrUpdateLog.java |     6 +-
 .../java/org/apache/solr/update/CommitTracker.java |    25 +-
 .../apache/solr/update/DefaultSolrCoreState.java   |     8 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |    37 +-
 .../org/apache/solr/update/DocumentBuilder.java    |     1 -
 .../org/apache/solr/update/HdfsTransactionLog.java |    10 +-
 .../java/org/apache/solr/update/HdfsUpdateLog.java |    25 +-
 .../org/apache/solr/update/IndexFingerprint.java   |     5 +-
 .../org/apache/solr/update/LoggingInfoStream.java  |     4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   149 +-
 .../org/apache/solr/update/PeerSyncWithLeader.java |    56 +-
 .../org/apache/solr/update/SolrCmdDistributor.java |    12 +-
 .../java/org/apache/solr/update/SolrCoreState.java |     3 +-
 .../org/apache/solr/update/SolrIndexConfig.java    |    29 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |    28 +-
 .../org/apache/solr/update/SolrIndexWriter.java    |    12 +-
 .../apache/solr/update/StreamingSolrClients.java   |     2 +-
 .../org/apache/solr/update/TransactionLog.java     |   174 +-
 .../java/org/apache/solr/update/UpdateHandler.java |     8 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |    99 +-
 .../org/apache/solr/update/UpdateShardHandler.java |    16 +-
 .../java/org/apache/solr/update/VersionInfo.java   |     4 -
 ...AbstractDefaultValueUpdateProcessorFactory.java |     2 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |    11 +-
 ...llValuesOrNoneFieldMutatingUpdateProcessor.java |     6 +-
 .../processor/AtomicUpdateDocumentMerger.java      |    58 +-
 .../processor/AtomicUpdateProcessorFactory.java    |     3 +-
 .../solr/update/processor/CdcrUpdateProcessor.java |     2 -
 .../processor/CdcrUpdateProcessorFactory.java      |     2 +-
 .../ClassificationUpdateProcessorFactory.java      |     2 +-
 .../CloneFieldUpdateProcessorFactory.java          |    17 +-
 .../ConcatFieldUpdateProcessorFactory.java         |     2 +-
 .../CountFieldValuesUpdateProcessorFactory.java    |     2 +-
 .../DefaultValueUpdateProcessorFactory.java        |     2 +-
 .../processor/DistributedUpdateProcessor.java      |    83 +-
 .../processor/DistributedZkUpdateProcessor.java    |    54 +-
 .../DocBasedVersionConstraintsProcessor.java       |     8 +-
 ...DocBasedVersionConstraintsProcessorFactory.java |     7 +-
 .../DocExpirationUpdateProcessorFactory.java       |    25 +-
 .../FieldLengthUpdateProcessorFactory.java         |     2 +-
 .../processor/FieldMutatingUpdateProcessor.java    |     7 +-
 .../FieldMutatingUpdateProcessorFactory.java       |    11 +-
 .../FieldNameMutatingUpdateProcessorFactory.java   |     2 +-
 .../FieldValueMutatingUpdateProcessor.java         |    12 +-
 ...IgnoreCommitOptimizeUpdateProcessorFactory.java |     2 +-
 .../IgnoreLargeDocumentProcessorFactory.java       |     5 +-
 .../LastFieldValueUpdateProcessorFactory.java      |     1 -
 .../processor/LogUpdateProcessorFactory.java       |    31 +-
 .../MaxFieldValueUpdateProcessorFactory.java       |     7 +-
 .../MinFieldValueUpdateProcessorFactory.java       |     7 +-
 .../ParseBooleanFieldUpdateProcessorFactory.java   |     4 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |     9 +-
 .../ParseDoubleFieldUpdateProcessorFactory.java    |     6 +-
 .../ParseFloatFieldUpdateProcessorFactory.java     |     6 +-
 .../ParseIntFieldUpdateProcessorFactory.java       |     6 +-
 .../ParseLongFieldUpdateProcessorFactory.java      |     6 +-
 .../ParseNumericFieldUpdateProcessorFactory.java   |     2 +-
 .../PreAnalyzedUpdateProcessorFactory.java         |     2 +-
 .../processor/RegexReplaceProcessorFactory.java    |     2 +-
 .../update/processor/RegexpBoostProcessor.java     |    13 +-
 .../RemoveBlankFieldUpdateProcessorFactory.java    |     2 +-
 .../processor/RunUpdateProcessorFactory.java       |   123 +-
 .../processor/SignatureUpdateProcessorFactory.java |     2 +-
 .../processor/SimpleUpdateProcessorFactory.java    |     3 +-
 .../SkipExistingDocumentsProcessorFactory.java     |     2 +-
 .../StatelessScriptUpdateProcessorFactory.java     |     5 +-
 .../update/processor/TolerantUpdateProcessor.java  |     2 +-
 .../processor/TrimFieldUpdateProcessorFactory.java |     2 +-
 .../TruncateFieldUpdateProcessorFactory.java       |     2 +-
 .../update/processor/URLClassifyProcessor.java     |    60 +-
 .../processor/UUIDUpdateProcessorFactory.java      |     2 +-
 .../UniqFieldsUpdateProcessorFactory.java          |     3 +-
 .../processor/UpdateRequestProcessorChain.java     |    18 +-
 .../processor/UpdateRequestProcessorFactory.java   |     2 +-
 .../org/apache/solr/util/ConcurrentLRUCache.java   |    10 +-
 .../src/java/org/apache/solr/util/CryptoKeys.java  |     5 +-
 .../src/java/org/apache/solr/util/DOMUtil.java     |     6 +-
 .../apache/solr/util/DefaultSolrThreadFactory.java |    49 +
 .../src/java/org/apache/solr/util/DynamicMap.java  |    55 -
 .../src/java/org/apache/solr/util/ExportTool.java  |    61 +-
 .../src/java/org/apache/solr/util/FSHDFSUtils.java |    14 +-
 .../java/org/apache/solr/util/FloatConsumer.java   |    39 -
 .../org/apache/solr/util/IntFloatDynamicMap.java   |   118 -
 .../org/apache/solr/util/IntIntDynamicMap.java     |   120 -
 .../org/apache/solr/util/IntLongDynamicMap.java    |   120 -
 .../apache/solr/util/MockSearchableSolrClient.java |     3 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   126 +-
 .../src/java/org/apache/solr/util/RTimerTree.java  |     1 -
 .../src/java/org/apache/solr/util/SolrCLI.java     |  1590 ++-
 .../apache/solr/util/SolrFileCleaningTracker.java  |   147 +
 .../java/org/apache/solr/util/SolrLogLayout.java   |     1 -
 .../java/org/apache/solr/util/SolrLogPostTool.java |   294 +-
 .../java/org/apache/solr/util/SolrPluginUtils.java |    27 +-
 .../org/apache/solr/util/StartupLoggingUtils.java  |     3 +-
 .../java/org/apache/solr/util/TestInjection.java   |    17 +-
 .../solr/util/circuitbreaker/CircuitBreaker.java   |    56 -
 .../util/circuitbreaker/CircuitBreakerManager.java |   134 -
 .../util/circuitbreaker/MemoryCircuitBreaker.java  |   114 -
 .../SSLCredentialProviderFactory.java              |     8 +-
 .../providers/HadoopSSLCredentialProvider.java     |     2 +-
 .../solr/util/plugin/AbstractPluginLoader.java     |    16 +-
 .../util/plugin/NamedListInitializedPlugin.java    |     2 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |    12 +-
 .../solr/util/tracing/SolrRequestCarrier.java      |     3 +-
 .../apache/solr/util/xslt/TransformerProvider.java |    10 +-
 .../resources/EditableSolrConfigAttributes.json    |     5 +-
 solr/core/src/resources/ImplicitPlugins.json       |    13 +-
 solr/core/src/test-files/log4j2.xml                |    44 +-
 solr/core/src/test-files/runtimecode/MyPlugin.java |    43 -
 .../runtimecode/containerplugin.v.1.jar.bin        |   Bin 867 -> 0 bytes
 .../runtimecode/containerplugin.v.2.jar.bin        |   Bin 867 -> 0 bytes
 .../test-files/runtimecode/schema-plugins.jar.bin  |   Bin 6814 -> 0 bytes
 solr/core/src/test-files/runtimecode/sig.txt       |    13 -
 .../collection1/conf/schema-booleansimilarity.xml  |    35 -
 .../solr/collection1/conf/schema-rank-fields.xml   |    27 -
 .../test-files/solr/collection1/conf/schema15.xml  |     3 -
 .../solr/collection1/conf/schema_latest.xml        |     4 -
 .../conf/solrconfig-cache-enable-disable.xml       |    10 -
 .../solr/collection1/conf/solrconfig-follower.xml  |    59 -
 .../solr/collection1/conf/solrconfig-leader.xml    |    70 -
 .../conf/solrconfig-leader1-keepOneBackup.xml      |    49 -
 .../solr/collection1/conf/solrconfig-leader1.xml   |    68 -
 .../solr/collection1/conf/solrconfig-leader2.xml   |    66 -
 .../solr/collection1/conf/solrconfig-leader3.xml   |    67 -
 ...rottled.xml => solrconfig-master-throttled.xml} |     0
 .../solr/collection1/conf/solrconfig-master.xml    |    70 +
 .../conf/solrconfig-master1-keepOneBackup.xml      |    49 +
 .../solr/collection1/conf/solrconfig-master1.xml   |    68 +
 .../solr/collection1/conf/solrconfig-master2.xml   |    66 +
 .../solr/collection1/conf/solrconfig-master3.xml   |    67 +
 .../conf/solrconfig-memory-circuitbreaker.xml      |    95 -
 .../solr/collection1/conf/solrconfig-repeater.xml  |     6 +-
 .../conf/solrconfig-replication-legacy.xml         |    62 -
 .../solr/collection1/conf/solrconfig-slave.xml     |    59 +
 ...rconfig-follower1.xml => solrconfig-slave1.xml} |     0
 .../solr/collection1/conf/solrconfig-tlog.xml      |     4 +
 .../conf/solrconfig.snippet.randomindexconfig.xml  |     1 -
 .../solr/configsets/ccjoin/conf/solrconfig.xml     |    62 -
 .../configsets/{ccjoin => xcjf}/conf/schema.xml    |     0
 .../solr/configsets/xcjf/conf/solrconfig.xml       |    72 +
 .../security/hadoop_kerberos_authz_config.json     |    37 -
 .../solr/simSnapshot/autoscalingState.json         |  3923 ++++++
 .../test-files/solr/simSnapshot/clusterState.json  |  2854 ++++
 .../test-files/solr/simSnapshot/distribState.json  |   206 +
 .../test-files/solr/simSnapshot/managerState.json  |     1 +
 .../src/test-files/solr/simSnapshot/nodeState.json |  3823 ++++++
 .../test-files/solr/simSnapshot/statistics.json    |  2045 +++
 solr/core/src/test-files/solr/solr-50-all.xml      |     1 -
 solr/core/src/test-files/solr/solr-jmxreporter.xml |     1 +
 .../core/src/test-files/solr/solr-solrreporter.xml |     7 +-
 .../test-files/solr/solr-trackingshardhandler.xml  |     1 +
 solr/core/src/test-files/solr/solr.xml             |     2 +-
 .../src/test/org/apache/hadoop/fs/FileUtil.java    |    33 +-
 .../datanode/fsdataset/impl/BlockPoolSlice.java    |    50 +-
 .../test/org/apache/hadoop/http/HttpServer2.java   |    55 +-
 .../test/org/apache/hadoop/util/DiskChecker.java   |     4 +-
 .../org/apache/solr/BasicFunctionalityTest.java    |    12 +-
 .../src/test/org/apache/solr/CursorPagingTest.java |     8 -
 .../apache/solr/HelloWorldSolrCloudTestCase.java   |     4 +-
 .../src/test/org/apache/solr/OutputWriterTest.java |     2 +-
 .../src/test/org/apache/solr/SolrInfoBeanTest.java |     6 +-
 .../test/org/apache/solr/TestCrossCoreJoin.java    |     4 +-
 .../org/apache/solr/TestDistributedGrouping.java   |     3 -
 .../org/apache/solr/TestDistributedSearch.java     |    46 +-
 .../test/org/apache/solr/TestGroupingSearch.java   |   207 +-
 solr/core/src/test/org/apache/solr/TestJoin.java   |    38 +-
 .../test/org/apache/solr/TestRandomDVFaceting.java |    10 +-
 .../test/org/apache/solr/TestRandomFaceting.java   |    22 +-
 .../org/apache/solr/TestSolrCoreProperties.java    |     1 -
 .../solr/analysis/TestDeprecatedFilters.java       |     2 +-
 .../apache/solr/analysis/TokenizerChainTest.java   |     1 -
 .../TestEmbeddedSolrServerAdminHandler.java        |    15 +-
 .../TestEmbeddedSolrServerConstructors.java        |     5 +-
 .../test/org/apache/solr/cloud/AddReplicaTest.java |    12 +-
 .../apache/solr/cloud/AliasIntegrationTest.java    |     2 +-
 .../cloud/AssignBackwardCompatibilityTest.java     |     5 +-
 .../apache/solr/cloud/BasicDistributedZk2Test.java |     8 +-
 .../apache/solr/cloud/BasicDistributedZkTest.java  |    18 +-
 .../test/org/apache/solr/cloud/BasicZkTest.java    |   181 +
 .../solr/cloud/ChaosMonkeyNothingIsSafeTest.java   |     8 +-
 ...aosMonkeyNothingIsSafeWithPullReplicasTest.java |    11 +-
 .../solr/cloud/ChaosMonkeySafeLeaderTest.java      |     6 +-
 .../ChaosMonkeySafeLeaderWithPullReplicasTest.java |    15 +-
 .../solr/cloud/ChaosMonkeyShardSplitTest.java      |    22 +-
 .../test/org/apache/solr/cloud/CloudTestUtils.java |   189 +
 .../apache/solr/cloud/ClusterStateMockUtil.java    |    13 +-
 .../org/apache/solr/cloud/ClusterStateTest.java    |     8 +-
 .../org/apache/solr/cloud/CollectionPropsTest.java |     9 +-
 .../solr/cloud/CollectionStateFormat2Test.java     |    71 +
 .../solr/cloud/CollectionStateZnodeTest.java       |    70 -
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |    50 +-
 .../org/apache/solr/cloud/ConfigSetsAPITest.java   |     1 -
 .../apache/solr/cloud/ConnectionManagerTest.java   |     4 +-
 .../apache/solr/cloud/CreateRoutedAliasTest.java   |     4 +
 .../solr/cloud/DeleteInactiveReplicaTest.java      |     8 +-
 .../cloud/DeleteLastCustomShardedReplicaTest.java  |     1 +
 .../test/org/apache/solr/cloud/DeleteNodeTest.java |     8 +-
 .../org/apache/solr/cloud/DeleteReplicaTest.java   |    38 +-
 .../org/apache/solr/cloud/DeleteShardTest.java     |     1 +
 .../apache/solr/cloud/DistribCursorPagingTest.java |     1 -
 .../DistribDocExpirationUpdateProcessorTest.java   |     5 +-
 .../solr/cloud/DistribJoinFromCollectionTest.java  |     8 +-
 .../apache/solr/cloud/DistributedQueueTest.java    |     4 +-
 .../solr/cloud/DistributedVersionInfoTest.java     |     8 +-
 .../apache/solr/cloud/DocValuesNotIndexedTest.java |     1 +
 .../org/apache/solr/cloud/ForceLeaderTest.java     |    26 +-
 .../solr/cloud/FullSolrCloudDistribCmdsTest.java   |     6 +-
 .../cloud/FullThrottleStoppableIndexingThread.java |     2 +-
 .../apache/solr/cloud/HealthCheckHandlerTest.java  |   179 +
 .../solr/cloud/HttpPartitionOnCommitTest.java      |    37 +-
 .../org/apache/solr/cloud/HttpPartitionTest.java   |    45 +-
 .../apache/solr/cloud/KerberosTestServices.java    |     6 +-
 .../solr/cloud/LeaderElectionContextKeyTest.java   |     1 +
 .../solr/cloud/LeaderElectionIntegrationTest.java  |     2 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |     8 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java    |     6 +-
 .../cloud/LeaderFailureAfterFreshStartTest.java    |     8 +-
 .../apache/solr/cloud/LeaderTragicEventTest.java   |    17 +-
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      |     6 +-
 .../solr/cloud/LegacyCloudClusterPropTest.java     |   180 +
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |    28 +-
 .../org/apache/solr/cloud/MigrateRouteKeyTest.java |    14 +-
 .../solr/cloud/MissingSegmentRecoveryTest.java     |     1 +
 .../apache/solr/cloud/MockSimpleZkController.java  |     5 +-
 .../test/org/apache/solr/cloud/MockSolrSource.java |     2 +-
 .../solr/cloud/MoveReplicaHDFSFailoverTest.java    |     4 -
 .../org/apache/solr/cloud/MoveReplicaHDFSTest.java |     4 -
 .../org/apache/solr/cloud/MoveReplicaTest.java     |    21 +-
 .../solr/cloud/MultiSolrCloudTestCaseTest.java     |     6 +-
 .../apache/solr/cloud/MultiThreadedOCPTest.java    |    71 +-
 .../solr/cloud/NestedShardedAtomicUpdateTest.java  |     4 -
 .../org/apache/solr/cloud/NodeMutatorTest.java     |     6 +-
 .../OutOfBoxZkACLAndCredentialsProvidersTest.java  |    12 +-
 ...OverriddenZkACLAndCredentialsProvidersTest.java |    10 +-
 .../OverseerCollectionConfigSetProcessorTest.java  |    94 +-
 .../solr/cloud/OverseerModifyCollectionTest.java   |     1 -
 .../org/apache/solr/cloud/OverseerRolesTest.java   |    10 +-
 .../org/apache/solr/cloud/OverseerStatusTest.java  |     5 +-
 .../apache/solr/cloud/OverseerTaskQueueTest.java   |     1 -
 .../test/org/apache/solr/cloud/OverseerTest.java   |   199 +-
 .../apache/solr/cloud/PeerSyncReplicationTest.java |    14 +-
 .../test/org/apache/solr/cloud/RecoveryZkTest.java |     1 +
 .../apache/solr/cloud/ReindexCollectionTest.java   |     3 +-
 .../apache/solr/cloud/ReplaceNodeNoTargetTest.java |   122 +
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |    12 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   |    25 +-
 .../solr/cloud/RestartWhileUpdatingTest.java       |     5 +-
 .../org/apache/solr/cloud/RollingRestartTest.java  |    12 +-
 .../test/org/apache/solr/cloud/RouteFieldTest.java |   163 -
 .../cloud/RoutingToNodesWithPropertiesTest.java    |   241 +
 .../org/apache/solr/cloud/SSLMigrationTest.java    |     3 +-
 .../apache/solr/cloud/SaslZkACLProviderTest.java   |    14 +-
 .../apache/solr/cloud/ShardRoutingCustomTest.java  |     3 +
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |    32 +-
 .../test/org/apache/solr/cloud/SliceStateTest.java |     4 +-
 .../apache/solr/cloud/SolrCloudExampleTest.java    |    23 +-
 .../org/apache/solr/cloud/SolrXmlInZkTest.java     |     8 +-
 .../test/org/apache/solr/cloud/SplitShardTest.java |    15 +-
 .../test/org/apache/solr/cloud/SyncSliceTest.java  |     7 +-
 .../solr/cloud/SystemCollectionCompatTest.java     |    16 +-
 .../solr/cloud/TestAuthenticationFramework.java    |    19 +-
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |     2 +-
 .../apache/solr/cloud/TestCloudConsistency.java    |     6 +-
 .../TestCloudPhrasesIdentificationComponent.java   |     4 -
 .../org/apache/solr/cloud/TestCloudPivotFacet.java |     7 +-
 .../org/apache/solr/cloud/TestCloudRecovery.java   |     1 +
 .../org/apache/solr/cloud/TestCloudRecovery2.java  |     1 +
 .../solr/cloud/TestCloudSearcherWarming.java       |    22 +-
 .../apache/solr/cloud/TestClusterProperties.java   |    12 +
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |    41 +-
 .../solr/cloud/TestConfigSetsAPIExclusivity.java   |     4 -
 .../solr/cloud/TestConfigSetsAPIZkFailure.java     |    30 +-
 .../test/org/apache/solr/cloud/TestCryptoKeys.java |   208 +
 .../cloud/TestDeleteCollectionOnDownNodes.java     |     1 +
 .../cloud/TestDynamicFieldNamesIndexCorrectly.java |     9 +-
 .../org/apache/solr/cloud/TestHashPartitioner.java |     1 -
 .../org/apache/solr/cloud/TestLazySolrCluster.java |    97 -
 .../solr/cloud/TestLeaderElectionZkExpiry.java     |    13 +-
 .../solr/cloud/TestMiniSolrCloudClusterSSL.java    |    16 +-
 .../solr/cloud/TestOnReconnectListenerSupport.java |     5 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |    32 +-
 .../solr/cloud/TestPullReplicaErrorHandling.java   |    22 +-
 .../solr/cloud/TestQueryingOnDownCollection.java   |     2 -
 .../solr/cloud/TestRandomRequestDistribution.java  |    13 +-
 .../apache/solr/cloud/TestRebalanceLeaders.java    |     2 +-
 .../apache/solr/cloud/TestRequestForwarding.java   |     1 +
 .../apache/solr/cloud/TestSSLRandomization.java    |    12 +-
 .../solr/cloud/TestSkipOverseerOperations.java     |     1 +
 .../cloud/TestSolrCloudWithDelegationTokens.java   |    50 +-
 .../solr/cloud/TestSolrCloudWithKerberosAlt.java   |    12 +-
 .../TestSolrCloudWithSecureImpersonation.java      |    21 +-
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |    23 +-
 .../solr/cloud/TestStressInPlaceUpdates.java       |    19 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |    12 +-
 .../solr/cloud/TestTlogReplayVsRecovery.java       |     4 +-
 .../org/apache/solr/cloud/TestTlogReplica.java     |   100 +-
 .../TestTolerantUpdateProcessorRandomCloud.java    |    10 +-
 .../org/apache/solr/cloud/TestUtilizeNode.java     |   181 +
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |    10 +-
 .../org/apache/solr/cloud/TestWithCollection.java  |   605 +
 .../test/org/apache/solr/cloud/TestZkChroot.java   |   169 +
 .../cloud/TlogReplayBufferedWhileIndexingTest.java |     5 +-
 .../apache/solr/cloud/UnloadDistributedZkTest.java |     8 +-
 .../VMParamsZkACLAndCredentialsProvidersTest.java  |    10 +-
 .../src/test/org/apache/solr/cloud/ZkCLITest.java  |    10 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |    42 +-
 .../org/apache/solr/cloud/ZkNodePropsTest.java     |     4 +-
 .../org/apache/solr/cloud/ZkShardTermsTest.java    |     1 +
 .../org/apache/solr/cloud/ZkSolrClientTest.java    |    12 +-
 .../AbstractCloudBackupRestoreTestCase.java        |    59 +-
 .../solr/cloud/api/collections/AssignTest.java     |   203 +
 .../AsyncCallRequestStatusResponseTest.java        |     1 +
 .../api/collections/CollectionReloadTest.java      |     4 +-
 .../collections/CollectionTooManyReplicasTest.java |    68 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |    28 +-
 .../CollectionsAPIDistributedZkTest.java           |    50 +-
 .../ConcurrentCreateCollectionTest.java            |   293 +
 .../api/collections/CustomCollectionTest.java      |     8 +
 .../HdfsCollectionsAPIDistributedZkTest.java       |     4 -
 .../solr/cloud/api/collections/ShardSplitTest.java |   112 +-
 .../SimpleCollectionCreateDeleteTest.java          |     7 +-
 .../cloud/api/collections/SplitByPrefixTest.java   |     3 +-
 .../cloud/api/collections/TestCollectionAPI.java   |   136 +-
 .../TestCollectionsAPIViaSolrCloudCluster.java     |     7 +-
 .../collections/TestHdfsCloudBackupRestore.java    |     5 -
 .../collections/TestLocalFSCloudBackupRestore.java |     3 +-
 .../api/collections/TestReplicaProperties.java     |     6 +-
 .../TestRequestStatusCollectionAPI.java            |     5 +-
 .../AutoAddReplicasIntegrationTest.java            |   435 +
 .../autoscaling/AutoAddReplicasPlanActionTest.java |   258 +
 .../cloud/autoscaling/AutoScalingHandlerTest.java  |  1089 ++
 .../solr/cloud/autoscaling/CapturedEvent.java      |    65 +
 .../cloud/autoscaling/ComputePlanActionTest.java   |   735 ++
 .../cloud/autoscaling/ExecutePlanActionTest.java   |   380 +
 .../HdfsAutoAddReplicasIntegrationTest.java        |    57 +
 .../cloud/autoscaling/HttpTriggerListenerTest.java |   207 +
 .../IndexSizeTriggerMixedBoundsTest.java           |   372 +
 .../IndexSizeTriggerSizeEstimationTest.java        |   320 +
 .../cloud/autoscaling/IndexSizeTriggerTest.java    |   759 ++
 .../autoscaling/MetricTriggerIntegrationTest.java  |   241 +
 .../solr/cloud/autoscaling/MetricTriggerTest.java  |   136 +
 .../NodeAddedTriggerIntegrationTest.java           |   316 +
 .../cloud/autoscaling/NodeAddedTriggerTest.java    |   342 +
 .../NodeLostTriggerIntegrationTest.java            |   352 +
 .../cloud/autoscaling/NodeLostTriggerTest.java     |   391 +
 .../autoscaling/NodeMarkersRegistrationTest.java   |   354 +
 .../cloud/autoscaling/RestoreTriggerStateTest.java |   166 +
 .../ScheduledMaintenanceTriggerTest.java           |   379 +
 .../ScheduledTriggerIntegrationTest.java           |   148 +
 .../cloud/autoscaling/ScheduledTriggerTest.java    |   141 +
 .../SearchRateTriggerIntegrationTest.java          |   742 ++
 .../cloud/autoscaling/SearchRateTriggerTest.java   |   357 +
 .../cloud/autoscaling/SystemLogListenerTest.java   |   289 +
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |   532 +
 .../TriggerCooldownIntegrationTest.java            |   227 +
 .../cloud/autoscaling/TriggerEventQueueTest.java   |    98 +
 .../cloud/autoscaling/TriggerIntegrationTest.java  |   713 +
 .../TriggerSetPropertiesIntegrationTest.java       |   259 +
 .../autoscaling/sim/SimSolrCloudTestCase.java      |   253 +
 .../sim/TestSimClusterStateProvider.java           |   228 +
 .../autoscaling/sim/TestSimComputePlanAction.java  |   378 +
 .../sim/TestSimDistribStateManager.java            |   378 +
 .../autoscaling/sim/TestSimDistributedQueue.java   |   221 +
 .../autoscaling/sim/TestSimExecutePlanAction.java  |   217 +
 .../autoscaling/sim/TestSimExtremeIndexing.java    |   144 +
 .../sim/TestSimGenericDistributedQueue.java        |    38 +
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |   842 ++
 .../autoscaling/sim/TestSimNodeAddedTrigger.java   |   329 +
 .../autoscaling/sim/TestSimNodeLostTrigger.java    |   347 +
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |   376 +
 .../cloud/autoscaling/sim/TestSimScenario.java     |   166 +
 .../autoscaling/sim/TestSimTriggerIntegration.java |  1536 +++
 .../solr/cloud/autoscaling/sim/TestSimUtils.java   |    95 +
 .../autoscaling/sim/TestSnapshotCloudManager.java  |   266 +
 .../solr/cloud/cdcr/BaseCdcrDistributedZkTest.java |    28 +-
 .../solr/cloud/cdcr/CdcrBidirectionalTest.java     |    34 +-
 .../apache/solr/cloud/cdcr/CdcrBootstrapTest.java  |    31 +-
 .../solr/cloud/cdcr/CdcrOpsAndBoundariesTest.java  |     5 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |    96 +-
 .../solr/cloud/cdcr/CdcrRequestHandlerTest.java    |     5 -
 .../org/apache/solr/cloud/cdcr/CdcrTestsUtil.java  |     6 +-
 .../cloud/cdcr/CdcrVersionReplicationTest.java     |     2 +-
 .../solr/cloud/hdfs/HDFSCollectionsAPITest.java    |     4 -
 .../cloud/hdfs/HdfsBasicDistributedZk2Test.java    |     4 -
 .../cloud/hdfs/HdfsBasicDistributedZkTest.java     |     4 -
 .../hdfs/HdfsChaosMonkeyNothingIsSafeTest.java     |     4 -
 .../cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java  |     4 -
 .../apache/solr/cloud/hdfs/HdfsNNFailoverTest.java |     6 +-
 .../solr/cloud/hdfs/HdfsRecoverLeaseTest.java      |     4 -
 .../apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java |     4 -
 .../cloud/hdfs/HdfsRestartWhileUpdatingTest.java   |     4 -
 .../apache/solr/cloud/hdfs/HdfsSyncSliceTest.java  |     6 +-
 .../apache/solr/cloud/hdfs/HdfsThreadLeakTest.java |     4 -
 .../HdfsTlogReplayBufferedWhileIndexingTest.java   |     4 -
 .../cloud/hdfs/HdfsUnloadDistributedZkTest.java    |     4 -
 .../hdfs/HdfsWriteToMultipleCollectionsTest.java   |     6 +-
 .../org/apache/solr/cloud/hdfs/StressHdfsTest.java |    13 +-
 .../cloud/overseer/TestClusterStateMutator.java    |     9 +-
 .../overseer/ZkCollectionPropsCachingTest.java     |     4 +
 .../solr/cloud/overseer/ZkStateReaderTest.java     |   111 +-
 .../solr/cloud/overseer/ZkStateWriterTest.java     |   150 +-
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java |     3 -
 .../org/apache/solr/cloud/rule/RuleEngineTest.java |    14 +-
 .../test/org/apache/solr/cloud/rule/RulesTest.java |    78 +-
 .../solr/common/cloud/ZkDynamicConfigTest.java     |    69 -
 .../solr/core/BlobRepositoryMockingTest.java       |    10 +-
 .../test/org/apache/solr/core/CoreSorterTest.java  |   310 +-
 .../solr/core/CountUsageValueSourceParser.java     |     3 +-
 .../org/apache/solr/core/DirectoryFactoryTest.java |     9 +-
 .../apache/solr/core/DummyValueSourceParser.java   |     3 +-
 .../solr/core/ExitableDirectoryReaderTest.java     |     6 -
 .../org/apache/solr/core/FakeDeletionPolicy.java   |     6 +-
 .../apache/solr/core/HdfsDirectoryFactoryTest.java |     5 -
 .../src/test/org/apache/solr/core/HelloStream.java |    10 +-
 .../org/apache/solr/core/MockEventListener.java    |     2 +-
 .../core/MockQuerySenderListenerReqHandler.java    |     2 +-
 .../apache/solr/core/MockShardHandlerFactory.java  |     1 -
 .../org/apache/solr/core/QueryResultKeyTest.java   |    16 +-
 .../org/apache/solr/core/RequestHandlersTest.java  |     1 -
 .../org/apache/solr/core/ResourceLoaderTest.java   |    17 +-
 .../solr/core/SolrCoreCheckLockOnStartupTest.java  |     6 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |     8 +-
 .../org/apache/solr/core/TestCodecSupport.java     |     2 +-
 .../src/test/org/apache/solr/core/TestConfig.java  |    40 +-
 .../org/apache/solr/core/TestConfigOverlay.java    |     3 -
 .../apache/solr/core/TestConfigSetImmutable.java   |     3 -
 .../apache/solr/core/TestConfigSetProperties.java  |     4 -
 .../test/org/apache/solr/core/TestConfigSets.java  |    30 +-
 .../org/apache/solr/core/TestCoreContainer.java    |   104 +-
 .../org/apache/solr/core/TestCoreDiscovery.java    |    14 +-
 .../org/apache/solr/core/TestDirectoryFactory.java |     2 +-
 .../org/apache/solr/core/TestDynamicLoading.java   |   287 +
 .../apache/solr/core/TestDynamicLoadingUrl.java    |   127 +
 .../test/org/apache/solr/core/TestDynamicURP.java  |   111 +
 .../test/org/apache/solr/core/TestInitParams.java  |    12 +-
 .../org/apache/solr/core/TestJmxIntegration.java   |    13 +-
 .../test/org/apache/solr/core/TestLazyCores.java   |    78 +-
 .../apache/solr/core/TestShardHandlerFactory.java  |     1 -
 .../apache/solr/core/TestSolrConfigHandler.java    |    71 +-
 .../src/test/org/apache/solr/core/TestSolrXml.java |   130 +-
 .../repository/HdfsBackupRepositoryTest.java       |    94 +-
 .../core/snapshots/TestSolrCloudSnapshots.java     |    20 +-
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |    31 +-
 .../solr/filestore/TestDistribPackageStore.java    |    80 +-
 .../handler/AnalysisRequestHandlerTestBase.java    |     2 +-
 .../apache/solr/handler/BackupRestoreUtils.java    |    20 +-
 .../apache/solr/handler/BackupStatusChecker.java   |     4 -
 .../handler/BinaryUpdateRequestHandlerTest.java    |    30 +-
 .../DocumentAnalysisRequestHandlerTest.java        |     2 -
 .../handler/FieldAnalysisRequestHandlerTest.java   |    32 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |     4 -
 .../solr/handler/MoreLikeThisHandlerTest.java      |    11 +-
 .../solr/handler/PingRequestHandlerTest.java       |     3 -
 .../org/apache/solr/handler/TestBlobHandler.java   |     1 -
 .../org/apache/solr/handler/TestConfigReload.java  |     9 +-
 .../apache/solr/handler/TestContainerPlugin.java   |   377 -
 .../org/apache/solr/handler/TestCoreBackup.java    |    46 +-
 .../solr/handler/TestHdfsBackupRestoreCore.java    |    18 +-
 .../solr/handler/TestReplicationHandler.java       |  1299 +-
 .../solr/handler/TestReplicationHandlerBackup.java |    74 +-
 .../TestReplicationHandlerDiskOverFlow.java        |    83 +-
 .../org/apache/solr/handler/TestReqParamsAPI.java  |     2 -
 .../org/apache/solr/handler/TestRestoreCore.java   |    83 +-
 .../org/apache/solr/handler/TestSQLHandler.java    |     6 +-
 .../solr/handler/TestSolrConfigHandlerCloud.java   |     4 +-
 .../handler/TestSolrConfigHandlerConcurrent.java   |    14 +-
 .../solr/handler/TestStressThreadBackup.java       |    13 -
 .../handler/ThrowErrorOnInitRequestHandler.java    |     2 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  |    31 +-
 .../org/apache/solr/handler/V2StandaloneTest.java  |     2 -
 .../solr/handler/XsltUpdateRequestHandlerTest.java |     7 +-
 .../admin/AutoscalingHistoryHandlerTest.java       |   461 +
 .../handler/admin/CoreAdminCreateDiscoverTest.java |     2 -
 .../solr/handler/admin/CoreAdminHandlerTest.java   |     7 +-
 .../handler/admin/CoreAdminRequestStatusTest.java  |     2 -
 .../admin/CoreMergeIndexesAdminHandlerTest.java    |    13 +-
 .../solr/handler/admin/DaemonStreamApiTest.java    |     3 +
 .../solr/handler/admin/HealthCheckHandlerTest.java |   237 -
 .../solr/handler/admin/IndexSizeEstimatorTest.java |    12 +-
 .../solr/handler/admin/LukeRequestHandlerTest.java |    15 -
 .../solr/handler/admin/MBeansHandlerTest.java      |     2 -
 .../solr/handler/admin/MetricsHandlerTest.java     |    18 -
 .../handler/admin/MetricsHistoryHandlerTest.java   |    45 +-
 .../admin/PropertiesRequestHandlerTest.java        |     1 -
 .../handler/admin/SecurityConfHandlerTest.java     |     7 +-
 .../admin/SegmentsInfoRequestHandlerTest.java      |    16 +-
 .../solr/handler/admin/StatsReloadRaceTest.java    |     2 -
 .../solr/handler/admin/TestApiFramework.java       |    82 +-
 .../solr/handler/admin/TestCollectionAPIs.java     |    28 +-
 .../apache/solr/handler/admin/TestConfigsApi.java  |    20 +-
 .../solr/handler/admin/TestCoreAdminApis.java      |    12 +-
 .../solr/handler/admin/ThreadDumpHandlerTest.java  |   239 -
 .../solr/handler/admin/ZookeeperReadAPITest.java   |   101 -
 .../handler/admin/ZookeeperStatusHandlerTest.java  |    72 +-
 .../component/CustomHighlightComponentTest.java    |    25 +-
 .../component/CustomTermsComponentTest.java        |     2 +-
 .../solr/handler/component/DebugComponentTest.java |    40 +-
 .../component/DistributedDebugComponentTest.java   |     8 +-
 .../component/DistributedExpandComponentTest.java  |    49 -
 .../component/DistributedFacetPivotLargeTest.java  |     3 +-
 .../DistributedFacetPivotLongTailTest.java         |     2 -
 .../component/DistributedFacetPivotSmallTest.java  |    26 +-
 .../component/DistributedMLTComponentTest.java     |     2 +-
 .../DistributedQueryComponentOptimizationTest.java |     2 +-
 .../handler/component/InfixSuggestersTest.java     |     2 -
 .../PhrasesIdentificationComponentTest.java        |     4 -
 .../component/QueryElevationComponentTest.java     |    75 +-
 .../component/ResourceSharingTestComponent.java    |     4 +-
 .../solr/handler/component/SearchHandlerTest.java  |    74 +-
 .../handler/component/ShardsWhitelistTest.java     |     6 +-
 .../handler/component/SpellCheckComponentTest.java |     7 +-
 .../solr/handler/component/StatsComponentTest.java |   115 +-
 .../solr/handler/component/TermsComponentTest.java |    13 +-
 .../handler/component/TestExpandComponent.java     |    96 -
 .../component/TestHttpShardHandlerFactory.java     |     4 +-
 .../component/TestTrackingShardHandlerFactory.java |     4 +-
 .../solr/handler/export/TestExportWriter.java      |    80 +-
 .../org/apache/solr/handler/tagger/TaggerTest.java |    22 +-
 .../apache/solr/handler/tagger/TaggerTestCase.java |    11 +-
 .../tagger/WordLengthTaggingFilterFactory.java     |     5 -
 .../apache/solr/highlight/DummyHighlighter.java    |     1 -
 .../org/apache/solr/highlight/HighlighterTest.java |    20 +-
 .../solr/highlight/TestUnifiedSolrHighlighter.java |    16 +-
 .../apache/solr/index/hdfs/CheckHdfsIndexTest.java |     6 -
 .../org/apache/solr/logging/TestLogWatcher.java    |     1 -
 .../org/apache/solr/metrics/JvmMetricsTest.java    |     8 +-
 .../org/apache/solr/metrics/MetricsConfigTest.java |    13 +-
 .../apache/solr/metrics/SolrMetricManagerTest.java |    11 +-
 .../solr/metrics/SolrMetricsIntegrationTest.java   |     7 +-
 .../reporters/SolrGraphiteReporterTest.java        |     5 +-
 .../reporters/SolrJmxReporterCloudTest.java        |     7 +-
 .../metrics/reporters/SolrSlf4jReporterTest.java   |     4 +-
 .../reporters/solr/SolrCloudReportersTest.java     |     6 +-
 .../reporters/solr/SolrShardReporterTest.java      |    12 -
 .../solr/parser/SolrQueryParserBaseTest.java       |   137 -
 .../src/test/org/apache/solr/pkg/TestPackages.java |   318 +-
 .../org/apache/solr/request/SimpleFacetsTest.java  |     3 +-
 .../test/org/apache/solr/request/TestFaceting.java |    25 -
 .../apache/solr/request/TestIntervalFaceting.java  |     2 +-
 .../org/apache/solr/request/TestWriterPerf.java    |     5 +-
 .../solr/request/macro/TestMacroExpander.java      |     2 -
 .../org/apache/solr/response/JSONWriterTest.java   |    10 +-
 .../org/apache/solr/response/SmileWriterTest.java  |    11 -
 .../solr/response/TestBinaryResponseWriter.java    |     2 -
 .../solr/response/TestGeoJSONResponseWriter.java   |     4 -
 .../solr/response/TestGraphMLResponseWriter.java   |    22 +-
 .../response/TestJavabinTupleStreamParser.java     |     7 +-
 .../response/TestPHPSerializedResponseWriter.java  |     2 +-
 .../org/apache/solr/response/TestPushWriter.java   |    65 +-
 .../solr/response/TestRawResponseWriter.java       |     2 -
 .../solr/response/TestRetrieveFieldsOptimizer.java |     3 -
 .../solr/response/TestSolrQueryResponse.java       |     1 -
 .../transform/TestChildDocTransformer.java         |    28 +-
 .../TestChildDocTransformerHierarchy.java          |     1 -
 .../apache/solr/rest/schema/TestBulkSchemaAPI.java |    40 +-
 .../apache/solr/schema/ChangedSchemaMergeTest.java |     6 +-
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |    94 +-
 .../test/org/apache/solr/schema/DateFieldTest.java |     2 +-
 .../test/org/apache/solr/schema/DocValuesTest.java |     4 +-
 .../schema/ManagedSchemaRoundRobinCloudTest.java   |     1 +
 .../schema/OpenExchangeRatesOrgProviderTest.java   |     2 +-
 .../PreAnalyzedFieldManagedSchemaCloudTest.java    |     1 +
 .../apache/solr/schema/PrimitiveFieldTypeTest.java |     2 +-
 .../test/org/apache/solr/schema/RankFieldTest.java |   285 -
 .../solr/schema/ResolveAnalyzerByNameTest.java     |     7 -
 .../apache/solr/schema/SchemaApiFailureTest.java   |     5 +-
 .../solr/schema/SpatialRPTFieldTypeTest.java       |     2 -
 .../solr/schema/TestBulkSchemaConcurrent.java      |    23 +-
 .../apache/solr/schema/TestCloudManagedSchema.java |     3 -
 .../org/apache/solr/schema/TestManagedSchema.java  |     3 -
 .../apache/solr/schema/TestManagedSchemaAPI.java   |     2 +-
 .../solr/schema/TestManagedSchemaThreadSafety.java |     5 +-
 .../org/apache/solr/schema/TestPointFields.java    |     1 -
 .../apache/solr/schema/TestSortableTextField.java  |     6 +-
 .../solr/schema/TestUseDocValuesAsStored2.java     |     1 -
 .../apache/solr/schema/WrappedIntPointField.java   |    20 +-
 .../apache/solr/schema/WrappedTrieIntField.java    |     1 -
 .../solr/search/AnalyticsMergeStrategyTest.java    |     4 -
 .../solr/search/AnalyticsTestQParserPlugin.java    |    11 -
 .../solr/search/CurrencyRangeFacetCloudTest.java   |    93 +-
 .../org/apache/solr/search/LargeFieldTest.java     |     1 -
 .../apache/solr/search/MaxScoreCollectorTest.java  |    91 -
 .../org/apache/solr/search/MergeStrategyTest.java  |     1 -
 .../apache/solr/search/MockSearchComponent.java    |     2 +-
 .../org/apache/solr/search/QueryEqualityTest.java  |    28 +-
 .../apache/solr/search/RankQParserPluginTest.java  |   258 -
 .../apache/solr/search/RankQueryTestPlugin.java    |    25 +-
 .../apache/solr/search/SolrIndexSearcherTest.java  |   330 -
 .../solr/search/TestAddFieldRealTimeGet.java       |     8 +-
 .../solr/search/TestCollapseQParserPlugin.java     |   100 +-
 .../test/org/apache/solr/search/TestDocSet.java    |     3 +-
 .../solr/search/TestExtendedDismaxParser.java      |    60 +-
 .../apache/solr/search/TestHashQParserPlugin.java  |    26 +-
 .../org/apache/solr/search/TestIndexSearcher.java  |     8 +-
 .../solr/search/TestMaxScoreQueryParser.java       |     1 -
 .../solr/search/TestReRankQParserPlugin.java       |    95 -
 .../org/apache/solr/search/TestRealTimeGet.java    |    20 +-
 .../test/org/apache/solr/search/TestRecovery.java  |    10 -
 .../org/apache/solr/search/TestRecoveryHdfs.java   |     9 -
 .../org/apache/solr/search/TestReloadDeadlock.java |     2 +-
 .../org/apache/solr/search/TestSmileRequest.java   |     2 -
 .../org/apache/solr/search/TestSolrCachePerf.java  |     3 -
 .../src/test/org/apache/solr/search/TestSolrJ.java |     2 -
 .../apache/solr/search/TestSolrQueryParser.java    |     1 -
 .../src/test/org/apache/solr/search/TestSort.java  |     5 +-
 .../org/apache/solr/search/TestStressRecovery.java |     2 -
 .../org/apache/solr/search/TestStressReorder.java  |     6 +-
 .../apache/solr/search/TestStressUserVersions.java |     8 +-
 .../org/apache/solr/search/TestStressVersions.java |     2 -
 .../apache/solr/search/TestTermsQParserPlugin.java |     6 -
 .../org/apache/solr/search/facet/DebugAgg.java     |    16 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |    49 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |    56 +-
 .../search/facet/SpatialHeatmapFacetsTest.java     |     5 -
 .../search/facet/TestCloudJSONFacetJoinDomain.java |    45 +-
 .../solr/search/facet/TestCloudJSONFacetSKG.java   |   342 +-
 .../search/facet/TestCloudJSONFacetSKGEquiv.java   |  1233 --
 .../solr/search/facet/TestJsonFacetErrors.java     |   400 -
 .../solr/search/facet/TestJsonFacetRefinement.java |    97 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |   828 +-
 .../search/facet/TestJsonFacetsStatsParsing.java   |     2 -
 .../facet/TestJsonFacetsWithNestedObjects.java     |    70 +-
 .../solr/search/facet/TestJsonRangeFacets.java     |   435 -
 .../solr/search/function/NvlValueSourceParser.java |     2 +-
 .../solr/search/function/TestFunctionQuery.java    |    32 -
 .../function/TestMinMaxOnMultiValuedField.java     |    13 +-
 .../search/join/CrossCollectionJoinQueryTest.java  |   280 -
 .../solr/search/join/TestCloudNestedDocsSort.java  |     4 +-
 .../solr/search/join/TestNestedDocsSort.java       |     1 -
 .../solr/search/join/TestScoreJoinQPNoScore.java   |    27 +-
 .../solr/search/join/TestScoreJoinQPScore.java     |    18 +-
 .../org/apache/solr/search/join/XCJFQueryTest.java |   280 +
 .../join/another/BJQFilterAccessibleTest.java      |     2 +-
 .../apache/solr/search/json/TestJsonRequest.java   |    70 +-
 .../solr/search/mlt/CloudMLTQParserTest.java       |     1 -
 .../similarities/TestBooleanSimilarityFactory.java |    39 -
 .../apache/solr/search/stats/TestDistribIDF.java   |     2 +
 .../solr/security/AuditLoggerIntegrationTest.java  |    20 +-
 .../BaseTestRuleBasedAuthorizationPlugin.java      |   617 -
 .../solr/security/BasicAuthIntegrationTest.java    |    20 +-
 .../solr/security/BasicAuthOnSingleNodeTest.java   |    45 +-
 .../solr/security/BasicAuthStandaloneTest.java     |     2 +-
 .../solr/security/CallbackAuditLoggerPlugin.java   |     4 +-
 .../apache/solr/security/CertAuthPluginTest.java   |    79 -
 .../security/HttpParamDelegationTokenPlugin.java   |     2 +-
 .../security/JWTAuthPluginIntegrationTest.java     |     6 +-
 .../apache/solr/security/JWTAuthPluginTest.java    |    22 +-
 .../security/JWTVerificationkeyResolverTest.java   |     4 +-
 .../solr/security/MockAuditLoggerPlugin.java       |     4 +-
 .../solr/security/MockAuthenticationPlugin.java    |    25 +-
 .../solr/security/MockAuthorizationPlugin.java     |     2 +-
 .../solr/security/PrincipalWithUserRoles.java      |    91 -
 .../solr/security/TestAuthorizationFramework.java  |     6 +-
 ...stExternalRoleRuleBasedAuthorizationPlugin.java |    78 -
 .../security/TestRuleBasedAuthorizationPlugin.java |   585 +
 .../security/TestSha256AuthenticationProvider.java |     4 -
 .../solr/security/hadoop/ImpersonationUtil.java    |     1 -
 .../apache/solr/security/hadoop/KerberosUtils.java |    93 -
 .../hadoop/TestDelegationWithHadoopAuth.java       |    16 +-
 .../hadoop/TestImpersonationWithHadoopAuth.java    |    13 +-
 .../TestRuleBasedAuthorizationWithKerberos.java    |    81 -
 .../hadoop/TestSolrCloudWithHadoopAuthPlugin.java  |    63 +-
 .../security/hadoop/TestZkAclsWithHadoopAuth.java  |     1 -
 .../solr/servlet/HttpSolrCallGetCoreTest.java      |     1 +
 .../apache/solr/servlet/SolrRequestParserTest.java |     2 -
 .../solr/servlet/TestRequestRateLimiter.java       |   235 -
 .../solr/spelling/DirectSolrSpellCheckerTest.java  |     3 -
 .../solr/spelling/FileBasedSpellCheckerTest.java   |     7 -
 .../solr/spelling/IndexBasedSpellCheckerTest.java  |     8 -
 .../solr/spelling/SpellCheckCollatorTest.java      |     9 -
 .../SpellCheckCollatorWithCollapseTest.java        |    37 +-
 .../solr/spelling/SpellingQueryConverterTest.java  |     6 -
 .../suggest/RandomTestDictionaryFactory.java       |     6 +-
 .../solr/spelling/suggest/SuggesterTest.java       |     2 -
 .../solr/store/blockcache/BlockCacheTest.java      |    16 +-
 .../apache/solr/store/hdfs/HdfsDirectoryTest.java  |     6 +-
 .../solr/store/hdfs/HdfsLockFactoryTest.java       |     4 -
 .../org/apache/solr/update/AddBlockUpdateTest.java |     6 +-
 .../org/apache/solr/update/CdcrUpdateLogTest.java  |     8 -
 .../solr/update/DirectUpdateHandlerTest.java       |    15 +-
 .../apache/solr/update/MaxSizeAutoCommitTest.java  |     2 +-
 .../solr/update/MockStreamingSolrClients.java      |     2 +-
 .../apache/solr/update/MockingHttp2SolrClient.java |    26 +-
 .../test/org/apache/solr/update/PeerSyncTest.java  |     1 -
 .../solr/update/PeerSyncWithBufferUpdatesTest.java |     1 -
 .../PeerSyncWithIndexFingerprintCachingTest.java   |     2 -
 ...ncWithLeaderAndIndexFingerprintCachingTest.java |     1 -
 .../apache/solr/update/PeerSyncWithLeaderTest.java |     1 -
 .../org/apache/solr/update/SoftAutoCommitTest.java |     2 +-
 .../apache/solr/update/SolrCmdDistributorTest.java |     2 +-
 .../apache/solr/update/SolrIndexConfigTest.java    |    31 +-
 .../apache/solr/update/SolrIndexSplitterTest.java  |     3 -
 .../org/apache/solr/update/TestHdfsUpdateLog.java  |     4 -
 .../update/TestInPlaceUpdateWithRouteField.java    |     1 +
 .../solr/update/TestInPlaceUpdatesDistrib.java     |    81 +-
 .../solr/update/TestInPlaceUpdatesStandalone.java  |     1 -
 .../solr/update/TestIndexingPerformance.java       |     8 +-
 .../solr/update/TestNestedUpdateProcessor.java     |     2 -
 .../test/org/apache/solr/update/TestUpdate.java    |     2 +-
 .../test/org/apache/solr/update/UpdateLogTest.java |     1 -
 .../processor/AtomicUpdateRemovalJavabinTest.java  |     2 +
 .../solr/update/processor/AtomicUpdatesTest.java   |    15 +-
 .../CategoryRoutedAliasUpdateProcessorTest.java    |    24 +-
 .../ClassificationUpdateProcessorFactoryTest.java  |     4 -
 ...assificationUpdateProcessorIntegrationTest.java |     2 +
 .../ClassificationUpdateProcessorTest.java         |     5 -
 .../CustomUpdateRequestProcessorFactory.java       |     3 +-
 .../DimensionalRoutedAliasUpdateProcessorTest.java |    12 +-
 .../IgnoreLargeDocumentProcessorFactoryTest.java   |     1 -
 .../update/processor/NestedAtomicUpdateTest.java   |     1 -
 .../processor/RoutedAliasUpdateProcessorTest.java  |     5 +-
 .../apache/solr/update/processor/RuntimeUrp.java   |    40 +
 .../SignatureUpdateProcessorFactoryTest.java       |     1 -
 .../SkipExistingDocumentsProcessorFactoryTest.java |     1 -
 .../processor/TestDocBasedVersionConstraints.java  |     4 +-
 .../processor/TestNamedUpdateProcessors.java       |   162 +
 .../TimeRoutedAliasUpdateProcessorTest.java        |    34 +-
 .../processor/TolerantUpdateProcessorTest.java     |     2 +-
 .../processor/TrackingUpdateProcessorFactory.java  |     2 +-
 .../update/processor/URLClassifyProcessorTest.java |     2 -
 .../UpdateRequestProcessorFactoryTest.java         |     2 +-
 .../test/org/apache/solr/util/DynamicMapsTest.java |    90 -
 .../org/apache/solr/util/MockCoreContainer.java    |     2 +-
 .../org/apache/solr/util/OrderedExecutorTest.java  |    28 +-
 .../org/apache/solr/util/SolrLogPostToolTest.java  |    62 +-
 .../org/apache/solr/util/SolrPluginUtilsTest.java  |     2 +-
 .../org/apache/solr/util/TestCircuitBreaker.java   |   243 -
 .../test/org/apache/solr/util/TestExportTool.java  |     2 +
 .../test/org/apache/solr/util/TestRTimerTree.java  |     3 -
 .../apache/solr/util/TestSolrCLIRunExample.java    |   132 +-
 .../solr/util/TestSolrJacksonAnnotation.java       |     2 -
 .../src/test/org/apache/solr/util/TestUtils.java   |    11 +-
 .../apache/solr/util/stats/MetricUtilsTest.java    |    10 -
 .../solr/util/tracing/TestHttpServletCarrier.java  |     2 +-
 solr/example/README.md                             |    95 -
 solr/example/README.txt                            |    78 +
 solr/example/build.gradle                          |     4 +-
 solr/example/example-DIH/README.md                 |    55 -
 solr/example/example-DIH/README.txt                |    49 +
 .../example-DIH/solr/db/conf/solrconfig.xml        |     4 +-
 .../example-DIH/solr/mail/conf/solrconfig.xml      |     4 +-
 .../example-DIH/solr/solr/conf/solrconfig.xml      |     4 +-
 solr/example/files/README.md                       |   167 -
 solr/example/files/README.txt                      |   152 +
 solr/example/files/conf/solrconfig.xml             |    42 +-
 solr/example/films/README.md                       |   161 -
 solr/example/films/README.txt                      |   138 +
 solr/licenses/caffeine-2.8.0.jar.sha1              |     1 +
 solr/licenses/caffeine-2.8.4.jar.sha1              |     1 -
 solr/licenses/commons-cli-1.2.jar.sha1             |     1 +
 solr/licenses/commons-cli-1.4.jar.sha1             |     1 -
 solr/licenses/commons-collections4-4.2.jar.sha1    |     1 +
 solr/licenses/commons-collections4-4.4.jar.sha1    |     1 -
 solr/licenses/commons-fileupload-1.3.3.jar.sha1    |     1 +
 ...-ASL.txt => commons-fileupload-LICENSE-ASL.txt} |     0
 solr/licenses/commons-fileupload-NOTICE.txt        |     5 +
 solr/licenses/commons-lang-2.6.jar.sha1            |     1 -
 solr/licenses/commons-lang-LICENSE-ASL.txt         |   202 -
 solr/licenses/commons-lang-NOTICE.txt              |     5 -
 solr/licenses/hamcrest-2.2.jar.sha1                |     1 -
 solr/licenses/hamcrest-core-1.3.jar.sha1           |     1 +
 ...CENSE-BSD.txt => hamcrest-core-LICENSE-BSD.txt} |     0
 ...amcrest-NOTICE.txt => hamcrest-core-NOTICE.txt} |     0
 solr/licenses/hppc-0.8.1.jar.sha1                  |     1 +
 solr/licenses/hppc-0.8.2.jar.sha1                  |     1 -
 .../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/log4j-1.2-api-2.11.2.jar.sha1        |     1 +
 solr/licenses/log4j-1.2-api-2.13.2.jar.sha1        |     1 -
 solr/licenses/log4j-api-2.11.2.jar.sha1            |     1 +
 solr/licenses/log4j-api-2.13.2.jar.sha1            |     1 -
 solr/licenses/log4j-core-2.11.2.jar.sha1           |     1 +
 solr/licenses/log4j-core-2.13.2.jar.sha1           |     1 -
 solr/licenses/log4j-slf4j-impl-2.11.2.jar.sha1     |     1 +
 solr/licenses/log4j-slf4j-impl-2.13.2.jar.sha1     |     1 -
 solr/licenses/log4j-web-2.11.2.jar.sha1            |     1 +
 solr/licenses/log4j-web-2.13.2.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 -
 .../morfologik-ukrainian-search-3.9.0.jar.sha1     |     1 +
 .../morfologik-ukrainian-search-4.9.1.jar.sha1     |     1 -
 solr/licenses/netty-buffer-4.1.29.Final.jar.sha1   |     1 +
 solr/licenses/netty-buffer-4.1.50.Final.jar.sha1   |     1 -
 solr/licenses/netty-codec-4.1.29.Final.jar.sha1    |     1 +
 solr/licenses/netty-codec-4.1.50.Final.jar.sha1    |     1 -
 solr/licenses/netty-common-4.1.29.Final.jar.sha1   |     1 +
 solr/licenses/netty-common-4.1.50.Final.jar.sha1   |     1 -
 solr/licenses/netty-handler-4.1.29.Final.jar.sha1  |     1 +
 solr/licenses/netty-handler-4.1.50.Final.jar.sha1  |     1 -
 solr/licenses/netty-resolver-4.1.29.Final.jar.sha1 |     1 +
 solr/licenses/netty-resolver-4.1.50.Final.jar.sha1 |     1 -
 .../licenses/netty-transport-4.1.29.Final.jar.sha1 |     1 +
 .../licenses/netty-transport-4.1.50.Final.jar.sha1 |     1 -
 ...ty-transport-native-epoll-4.1.29.Final.jar.sha1 |     1 +
 ...ty-transport-native-epoll-4.1.50.Final.jar.sha1 |     1 -
 ...nsport-native-unix-common-4.1.29.Final.jar.sha1 |     1 +
 ...nsport-native-unix-common-4.1.50.Final.jar.sha1 |     1 -
 solr/licenses/org.restlet-2.4.0.jar.sha1           |     1 +
 solr/licenses/org.restlet-2.4.3.jar.sha1           |     1 -
 .../org.restlet.ext.servlet-2.4.0.jar.sha1         |     1 +
 .../org.restlet.ext.servlet-2.4.3.jar.sha1         |     1 -
 solr/licenses/snappy-java-1.1.7.6.jar.sha1         |     1 -
 solr/licenses/snappy-java-NOTICE.txt               |    17 -
 solr/licenses/start.jar.sha1                       |     2 +-
 solr/licenses/tika-core-1.23.jar.sha1              |     1 +
 solr/licenses/tika-core-1.24.jar.sha1              |     1 -
 solr/licenses/tika-java7-1.23.jar.sha1             |     1 +
 solr/licenses/tika-java7-1.24.jar.sha1             |     1 -
 solr/licenses/tika-parsers-1.23.jar.sha1           |     1 +
 solr/licenses/tika-parsers-1.24.jar.sha1           |     1 -
 solr/licenses/tika-xmp-1.23.jar.sha1               |     1 +
 solr/licenses/tika-xmp-1.24.jar.sha1               |     1 -
 solr/licenses/zookeeper-3.5.5.jar.sha1             |     1 +
 solr/licenses/zookeeper-3.6.1.jar.sha1             |     1 -
 solr/licenses/zookeeper-jute-3.5.5.jar.sha1        |     1 +
 solr/licenses/zookeeper-jute-3.6.1.jar.sha1        |     1 -
 solr/packaging/build.gradle                        |    14 +-
 solr/server/README.md                              |   114 -
 solr/server/README.txt                             |   109 +
 solr/server/build.gradle                           |     4 +-
 solr/server/etc/jetty.xml                          |     8 +-
 solr/server/resources/log4j2-console.xml           |    28 +-
 solr/server/resources/log4j2.xml                   |    72 +-
 solr/server/solr/README.md                         |    79 -
 solr/server/solr/README.txt                        |    77 +
 .../solr/configsets/_default/conf/managed-schema   |     7 -
 .../solr/configsets/_default/conf/solrconfig.xml   |    63 +-
 .../clustering/carrot2/{README.md => README.txt}   |     0
 .../conf/solrconfig.xml                            |    48 +-
 .../conf/velocity/README.md                        |   116 -
 .../conf/velocity/README.txt                       |   101 +
 solr/server/solr/solr.xml                          |     1 -
 ..._REQUIREMENTS.md => SYSTEM_REQUIREMENTS.mdtext} |     0
 solr/site/index.template.md                        |    37 -
 solr/site/online-link.template.md                  |    19 -
 solr/solr-ref-guide/build.gradle                   |     5 +-
 solr/solr-ref-guide/build.xml                      |     1 +
 solr/solr-ref-guide/src/_config.yml.template       |     3 +-
 solr/solr-ref-guide/src/_includes/head.html        |    26 +-
 solr/solr-ref-guide/src/_includes/head_print.html  |    29 +
 .../src/_includes/mathjax-support.html             |    22 -
 solr/solr-ref-guide/src/_includes/sidebar.html     |    35 +-
 solr/solr-ref-guide/src/_includes/taglogic.html    |    22 +
 solr/solr-ref-guide/src/_includes/toc.html         |     9 +
 solr/solr-ref-guide/src/_includes/topnav.html      |    39 +-
 solr/solr-ref-guide/src/_layouts/default.html      |    35 +-
 .../solr-ref-guide/src/_layouts/default_print.html |    25 +
 solr/solr-ref-guide/src/_layouts/home.html         |    27 +-
 solr/solr-ref-guide/src/_layouts/page.html         |    29 +-
 solr/solr-ref-guide/src/_layouts/page_print.html   |    15 +
 solr/solr-ref-guide/src/_templates/open.html.slim  |     2 +-
 solr/solr-ref-guide/src/_templates/ulist.html.slim |     2 +-
 .../adding-custom-plugins-in-solrcloud-mode.adoc   |   333 +
 solr/solr-ref-guide/src/aliases.adoc               |     9 +-
 .../src/analytics-expression-sources.adoc          |     1 +
 .../src/analytics-mapping-functions.adoc           |     1 +
 .../src/analytics-reduction-functions.adoc         |     3 +-
 solr/solr-ref-guide/src/analytics.adoc             |     3 +-
 .../authentication-and-authorization-plugins.adoc  |     2 +-
 solr/solr-ref-guide/src/cdcr-api.adoc              |     8 -
 solr/solr-ref-guide/src/cdcr-architecture.adoc     |     8 -
 solr/solr-ref-guide/src/cdcr-config.adoc           |     9 -
 solr/solr-ref-guide/src/cdcr-operations.adoc       |     8 -
 .../src/cert-authentication-plugin.adoc            |    61 -
 solr/solr-ref-guide/src/circuit-breakers.adoc      |    68 -
 solr/solr-ref-guide/src/cloud-screens.adoc         |     2 +-
 .../src/cluster-node-management.adoc               |    57 +-
 .../src/collapse-and-expand-results.adoc           |    28 +-
 solr/solr-ref-guide/src/collection-aliasing.adoc   |     5 +-
 solr/solr-ref-guide/src/collection-management.adoc |    68 +-
 .../src/collection-specific-tools.adoc             |     2 +-
 solr/solr-ref-guide/src/collections-api.adoc       |     2 +-
 .../solr-ref-guide/src/colocating-collections.adoc |    76 +
 .../combining-distribution-and-replication.adoc    |    12 +-
 .../solr-ref-guide/src/command-line-utilities.adoc |    27 +-
 .../src/common-query-parameters.adoc               |    54 +-
 solr/solr-ref-guide/src/config-api.adoc            |    42 +-
 solr/solr-ref-guide/src/config-sets.adoc           |     4 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |     2 +-
 solr/solr-ref-guide/src/coreadmin-api.adoc         |     8 +-
 .../src/cross-data-center-replication-cdcr.adoc    |    14 -
 solr/solr-ref-guide/src/css/customstyles.css       |   919 ++
 solr/solr-ref-guide/src/css/decoration.css         |   254 -
 solr/solr-ref-guide/src/css/font-awesome.min.css   |     4 +
 solr/solr-ref-guide/src/css/lavish-bootstrap.css   |  5423 ++++++++
 solr/solr-ref-guide/src/css/navs.css               |   366 -
 solr/solr-ref-guide/src/css/printstyles.css        |   160 +
 solr/solr-ref-guide/src/css/ref-guide.css          |  2823 ++--
 solr/solr-ref-guide/src/css/search.css             |    47 -
 solr/solr-ref-guide/src/css/theme-solr.css         |   147 +
 ...datadir-and-directoryfactory-in-solrconfig.adoc |     2 +-
 solr/solr-ref-guide/src/dataimport-screen.adoc     |     2 -
 solr/solr-ref-guide/src/distributed-requests.adoc  |     6 +-
 .../distributed-search-with-index-sharding.adoc    |     2 +-
 solr/solr-ref-guide/src/enabling-ssl.adoc          |   241 +-
 solr/solr-ref-guide/src/exporting-result-sets.adoc |    30 -
 solr/solr-ref-guide/src/filter-descriptions.adoc   |    46 +-
 .../glyphicons/glyphicons-halflings-regular.eot    |   Bin 0 -> 20127 bytes
 .../glyphicons/glyphicons-halflings-regular.svg    |   288 +
 .../glyphicons/glyphicons-halflings-regular.ttf    |   Bin 0 -> 45404 bytes
 .../glyphicons/glyphicons-halflings-regular.woff   |   Bin 0 -> 23424 bytes
 .../glyphicons/glyphicons-halflings-regular.woff2  |   Bin 0 -> 18028 bytes
 .../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf     |   Bin 0 -> 15868 bytes
 .../fonts/mplus1mn/mplus1mn-bold_italic-ascii.ttf  |   Bin 0 -> 15908 bytes
 .../src/fonts/mplus1mn/mplus1mn-italic-ascii.ttf   |   Bin 0 -> 15928 bytes
 .../mplus1mn/mplus1mn-regular-ascii-conums.ttf     |   Bin 0 -> 20024 bytes
 .../src/fonts/mplus1p-regular-fallback.ttf         |   Bin 0 -> 1405716 bytes
 solr/solr-ref-guide/src/format-of-solr-xml.adoc    |     4 -
 solr/solr-ref-guide/src/function-queries.adoc      |     1 +
 solr/solr-ref-guide/src/highlighting.adoc          |    13 +-
 solr/solr-ref-guide/src/how-solrcloud-works.adoc   |     4 +-
 solr/solr-ref-guide/src/how-to-contribute.adoc     |    16 +-
 .../overview-of-the-solr-admin-ui/dashboard.png    |   Bin 172175 -> 92750 bytes
 .../src/implicit-requesthandlers.adoc              |    28 +-
 solr/solr-ref-guide/src/index-replication.adoc     |   177 +-
 solr/solr-ref-guide/src/index.adoc                 |    37 +-
 .../src/indexing-nested-documents.adoc             |     2 +-
 solr/solr-ref-guide/src/installing-solr.adoc       |     2 +-
 solr/solr-ref-guide/src/js/customscripts.js        |    68 +-
 solr/solr-ref-guide/src/js/ref-guide-toc.js        |    36 +
 solr/solr-ref-guide/src/js/toc.js                  |    82 +
 solr/solr-ref-guide/src/json-facet-api.adoc        |    11 +-
 .../src/json-faceting-domain-changes.adoc          |     8 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |    38 +-
 solr/solr-ref-guide/src/jvm-settings.adoc          |    20 +-
 .../src/jwt-authentication-plugin.adoc             |     3 +-
 .../src/kerberos-authentication-plugin.adoc        |     7 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |    20 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |     2 +-
 solr/solr-ref-guide/src/libs.adoc                  |     2 +-
 .../src/major-changes-in-solr-7.adoc               |     3 +
 .../src/major-changes-in-solr-8.adoc               |    13 +-
 .../src/major-changes-in-solr-9.adoc               |   103 +-
 .../src/making-and-restoring-backups.adoc          |     2 +-
 .../src/meta-docs/asciidoc-syntax.adoc             |    45 -
 solr/solr-ref-guide/src/meta-docs/jekyll.adoc      |    72 +-
 solr/solr-ref-guide/src/meta-docs/publish.adoc     |    69 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |     2 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |     2 +-
 .../solr-ref-guide/src/migrate-to-policy-rule.adoc |   198 +
 .../src/near-real-time-searching.adoc              |     2 +-
 solr/solr-ref-guide/src/other-parsers.adoc         |   185 +-
 .../src/overview-of-the-solr-admin-ui.adoc         |    16 +-
 .../src/package-manager-internals.adoc             |   155 +-
 solr/solr-ref-guide/src/package-manager.adoc       |    56 +-
 .../src/query-settings-in-solrconfig.adoc          |    24 +-
 solr/solr-ref-guide/src/rate-limiters.adoc         |   131 -
 solr/solr-ref-guide/src/relevance.adoc             |     4 +-
 solr/solr-ref-guide/src/replica-management.adoc    |    91 +-
 solr/solr-ref-guide/src/replication-screen.adoc    |     8 +-
 .../solr-ref-guide/src/request-parameters-api.adoc |     4 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |     9 -
 solr/solr-ref-guide/src/resource-loading.adoc      |     2 +-
 solr/solr-ref-guide/src/result-clustering.adoc     |     4 +-
 .../src/rule-based-authorization-plugin.adoc       |    86 +-
 .../src/rule-based-replica-placement.adoc          |     2 +-
 solr/solr-ref-guide/src/running-solr-on-hdfs.adoc  |    41 +-
 solr/solr-ref-guide/src/schema-api.adoc            |     1 +
 solr/solr-ref-guide/src/securing-solr.adoc         |     6 +-
 .../setting-up-an-external-zookeeper-ensemble.adoc |     2 -
 solr/solr-ref-guide/src/shard-management.adoc      |    11 +-
 .../src/shards-and-indexing-data-in-solrcloud.adoc |     4 +-
 .../src/solr-control-script-reference.adoc         |    12 +-
 solr/solr-ref-guide/src/solr-glossary.adoc         |     4 +-
 solr/solr-ref-guide/src/solr-plugins.adoc          |    19 +-
 solr/solr-ref-guide/src/solr-tracing.adoc          |     2 +-
 solr/solr-ref-guide/src/solr-tutorial.adoc         |     7 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |   262 +-
 .../src/solrcloud-autoscaling-api.adoc             |   809 ++
 .../solrcloud-autoscaling-auto-add-replicas.adoc   |    73 +
 .../src/solrcloud-autoscaling-fault-tolerance.adoc |    59 +
 .../src/solrcloud-autoscaling-listeners.adoc       |   220 +
 .../src/solrcloud-autoscaling-overview.adoc        |    96 +
 .../solrcloud-autoscaling-policy-preferences.adoc  |   641 +
 .../src/solrcloud-autoscaling-trigger-actions.adoc |    88 +
 .../src/solrcloud-autoscaling-triggers.adoc        |   609 +
 solr/solr-ref-guide/src/solrcloud-autoscaling.adoc |    35 +
 solr/solr-ref-guide/src/solrcloud.adoc             |     8 +-
 solr/solr-ref-guide/src/spatial-search.adoc        |     2 +-
 solr/solr-ref-guide/src/spell-checking.adoc        |     2 +-
 solr/solr-ref-guide/src/stream-api.adoc            |   216 -
 .../src/stream-decorator-reference.adoc            |    15 +-
 .../src/stream-evaluator-reference.adoc            |     3 +-
 .../src/stream-source-reference.adoc               |    66 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |     6 +-
 solr/solr-ref-guide/src/suggestions-screen.adoc    |    40 +
 .../src/the-query-elevation-component.adoc         |     2 +-
 .../src/the-standard-query-parser.adoc             |     4 +-
 solr/solr-ref-guide/src/the-stats-component.adoc   |     2 +-
 solr/solr-ref-guide/src/the-tagger-handler.adoc    |    11 +-
 solr/solr-ref-guide/src/tokenizers.adoc            |     2 +-
 .../src/updatehandlers-in-solrconfig.adoc          |     2 +-
 ...ding-data-with-solr-cell-using-apache-tika.adoc |     1 +
 ...ta-store-data-with-the-data-import-handler.adoc |     4 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |    33 +-
 ...ing-the-solr-administration-user-interface.adoc |     3 +-
 solr/solr-ref-guide/src/v2-api.adoc                |    12 +-
 solr/solrj/build.gradle                            |     2 -
 solr/solrj/ivy.xml                                 |     4 -
 .../org/apache/solr/client/solrj/SolrClient.java   |    16 +-
 .../org/apache/solr/client/solrj/SolrRequest.java  |    22 -
 .../org/apache/solr/client/solrj/SolrResponse.java |     1 -
 .../apache/solr/client/solrj/V2RequestSupport.java |     1 -
 .../client/solrj/beans/DocumentObjectBinder.java   |    13 +-
 .../client/solrj/cloud/AlreadyExistsException.java |    35 -
 .../client/solrj/cloud/BadVersionException.java    |    40 -
 .../client/solrj/cloud/DelegatingCloudManager.java |    89 -
 .../cloud/DelegatingClusterStateProvider.java      |   130 -
 .../client/solrj/cloud/DistribStateManager.java    |    11 +
 .../solr/client/solrj/cloud/NodeStateProvider.java |     5 +-
 .../solr/client/solrj/cloud/NotEmptyException.java |    35 -
 .../solr/client/solrj/cloud/SocketProxy.java       |    56 +-
 .../solr/client/solrj/cloud/SolrCloudManager.java  |     2 +-
 .../solr/client/solrj/cloud/VersionedData.java     |    99 -
 .../cloud/autoscaling/AddReplicaSuggester.java     |    81 +
 .../cloud/autoscaling/AlreadyExistsException.java  |    35 +
 .../solrj/cloud/autoscaling/AutoScalingConfig.java |   589 +
 .../cloud/autoscaling/BadVersionException.java     |    40 +
 .../solr/client/solrj/cloud/autoscaling/Cell.java  |    74 +
 .../client/solrj/cloud/autoscaling/Clause.java     |   829 ++
 .../solrj/cloud/autoscaling/ComputedType.java      |    99 +
 .../client/solrj/cloud/autoscaling/Condition.java  |   125 +
 .../solrj/cloud/autoscaling/CoresVariable.java     |   125 +
 .../cloud/autoscaling/DelegatingCloudManager.java  |    93 +
 .../DelegatingClusterStateProvider.java            |   130 +
 .../autoscaling/DelegatingDistribStateManager.java |   107 +
 .../autoscaling/DelegatingNodeStateProvider.java   |    56 +
 .../cloud/autoscaling/DeleteNodeSuggester.java     |    46 +
 .../cloud/autoscaling/DeleteReplicaSuggester.java  |    74 +
 .../solrj/cloud/autoscaling/FreeDiskVariable.java  |   175 +
 .../cloud/autoscaling/MoveReplicaSuggester.java    |   112 +
 .../solrj/cloud/autoscaling/NodeVariable.java      |    44 +
 .../solrj/cloud/autoscaling/NoneSuggester.java     |    39 +
 .../solrj/cloud/autoscaling/NotEmptyException.java |    35 +
 .../client/solrj/cloud/autoscaling/Operand.java    |   209 +
 .../client/solrj/cloud/autoscaling/Policy.java     |   664 +
 .../solrj/cloud/autoscaling/PolicyHelper.java      |   603 +
 .../client/solrj/cloud/autoscaling/Preference.java |   148 +
 .../client/solrj/cloud/autoscaling/RangeVal.java   |    61 +
 .../solrj/cloud/autoscaling/ReplicaCount.java      |   128 +
 .../solrj/cloud/autoscaling/ReplicaInfo.java       |   219 +
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |   175 +
 .../solr/client/solrj/cloud/autoscaling/Row.java   |   379 +
 .../solrj/cloud/autoscaling/SealedClause.java      |    29 +
 .../cloud/autoscaling/SplitShardSuggester.java     |    65 +
 .../client/solrj/cloud/autoscaling/Suggester.java  |   518 +
 .../client/solrj/cloud/autoscaling/Suggestion.java |   130 +
 .../autoscaling/TriggerEventProcessorStage.java    |    30 +
 .../solrj/cloud/autoscaling/TriggerEventType.java  |    33 +
 .../cloud/autoscaling/UnsupportedSuggester.java    |    59 +
 .../client/solrj/cloud/autoscaling/Variable.java   |   406 +
 .../solrj/cloud/autoscaling/VariableBase.java      |   211 +
 .../solrj/cloud/autoscaling/VersionedData.java     |    94 +
 .../client/solrj/cloud/autoscaling/Violation.java  |   181 +
 .../cloud/autoscaling/WithCollectionVariable.java  |   166 +
 .../solrj/cloud/autoscaling/package-info.java      |    23 +
 .../client/solrj/impl/BaseCloudSolrClient.java     |   100 +-
 .../solrj/impl/BaseHttpClusterStateProvider.java   |    22 +-
 .../solr/client/solrj/impl/BaseHttpSolrClient.java |    10 +-
 .../client/solrj/impl/BinaryRequestWriter.java     |     6 +-
 .../client/solrj/impl/BinaryResponseParser.java    |     1 -
 .../solr/client/solrj/impl/CloudSolrClient.java    |     2 +-
 .../client/solrj/impl/ClusterStateProvider.java    |     2 -
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |    25 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |    24 +-
 .../solrj/impl/DelegationTokenHttpSolrClient.java  |     2 +-
 .../solrj/impl/Http2ClusterStateProvider.java      |     1 -
 .../solr/client/solrj/impl/Http2SolrClient.java    |   274 +-
 .../solr/client/solrj/impl/HttpClientUtil.java     |    51 +-
 .../solrj/impl/HttpClusterStateProvider.java       |     1 -
 .../solr/client/solrj/impl/HttpSolrClient.java     |   171 +-
 .../client/solrj/impl/Krb5HttpClientBuilder.java   |    13 +-
 .../solr/client/solrj/impl/LBHttp2SolrClient.java  |   141 +-
 .../solr/client/solrj/impl/LBHttpSolrClient.java   |     8 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   208 +-
 .../client/solrj/impl/SolrClientCloudManager.java  |    20 +-
 .../solrj/impl/SolrClientNodeStateProvider.java    |   248 +-
 .../solrj/impl/SolrHttpRequestRetryHandler.java    |     4 +-
 .../solrj/impl/StreamingBinaryResponseParser.java  |     3 -
 .../solr/client/solrj/impl/XMLResponseParser.java  |     6 +-
 .../solrj/impl/ZkClientClusterStateProvider.java   |     3 +-
 .../client/solrj/impl/ZkDistribStateManager.java   |    33 +-
 .../client/solrj/io/ClassificationEvaluation.java  |     8 +-
 .../java/org/apache/solr/client/solrj/io/Lang.java |   104 +-
 .../apache/solr/client/solrj/io/ModelCache.java    |     2 +-
 .../solr/client/solrj/io/SolrClientCache.java      |     2 +-
 .../org/apache/solr/client/solrj/io/Tuple.java     |   185 +-
 .../solr/client/solrj/io/comp/FieldComparator.java |     5 -
 .../solr/client/solrj/io/eq/FieldEqualitor.java    |     3 -
 .../solr/client/solrj/io/eval/AkimaEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/AnovaEvaluator.java  |    12 +-
 .../solr/client/solrj/io/eval/ArrayEvaluator.java  |     2 -
 .../solr/client/solrj/io/eval/AscEvaluator.java    |     1 -
 .../solr/client/solrj/io/eval/Attributes.java      |     1 -
 .../solrj/io/eval/BicubicSplineEvaluator.java      |     2 -
 .../solrj/io/eval/ChebyshevDistanceEvaluator.java  |     1 -
 .../solrj/io/eval/ChiSquareDataSetEvaluator.java   |    13 +-
 .../client/solrj/io/eval/ColumnAtEvaluator.java    |     2 +-
 .../client/solrj/io/eval/ConvexHullEvaluator.java  |     2 +-
 .../client/solrj/io/eval/ConvolutionEvaluator.java |     1 -
 .../client/solrj/io/eval/CorrelationEvaluator.java |     3 +-
 .../solrj/io/eval/CosineSimilarityEvaluator.java   |     2 -
 .../client/solrj/io/eval/CovarianceEvaluator.java  |     1 -
 .../solr/client/solrj/io/eval/DbscanEvaluator.java |     7 +-
 .../client/solrj/io/eval/DensityEvaluator.java     |     1 -
 .../client/solrj/io/eval/DescribeEvaluator.java    |    30 +-
 .../client/solrj/io/eval/DistanceEvaluator.java    |     1 -
 .../client/solrj/io/eval/DotProductEvaluator.java  |     2 -
 .../solr/client/solrj/io/eval/EBEAddEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBEDivideEvaluator.java   |     3 +-
 .../client/solrj/io/eval/EBEMultiplyEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBESubtractEvaluator.java |     3 +-
 .../solrj/io/eval/EnclosingDiskEvaluator.java      |     5 +-
 .../io/eval/EnumeratedDistributionEvaluator.java   |     6 -
 .../solrj/io/eval/EuclideanDistanceEvaluator.java  |     1 -
 .../solr/client/solrj/io/eval/FFTEvaluator.java    |     2 +-
 .../solrj/io/eval/FeatureSelectEvaluator.java      |     5 +-
 .../client/solrj/io/eval/FieldValueEvaluator.java  |     1 -
 .../client/solrj/io/eval/FindDelayEvaluator.java   |     2 -
 .../solrj/io/eval/FrequencyTableEvaluator.java     |    17 +-
 .../client/solrj/io/eval/FuzzyKmeansEvaluator.java |     7 +-
 .../solrj/io/eval/GTestDataSetEvaluator.java       |    13 +-
 .../client/solrj/io/eval/GaussFitEvaluator.java    |     1 -
 .../solrj/io/eval/GetBaryCenterEvaluator.java      |     2 +-
 .../client/solrj/io/eval/GetCacheEvaluator.java    |     2 -
 .../client/solrj/io/eval/GetCenterEvaluator.java   |     3 +-
 .../client/solrj/io/eval/GetClusterEvaluator.java  |     4 +-
 .../client/solrj/io/eval/GetRadiusEvaluator.java   |     1 -
 .../solrj/io/eval/GetSupportPointsEvaluator.java   |     4 +-
 .../client/solrj/io/eval/HarmonicFitEvaluator.java |     3 -
 .../client/solrj/io/eval/HistogramEvaluator.java   |    24 +-
 .../solr/client/solrj/io/eval/IFFTEvaluator.java   |     2 +-
 .../client/solrj/io/eval/IndexOfEvaluator.java     |     1 -
 .../client/solrj/io/eval/IntegrateEvaluator.java   |     2 +-
 .../solr/client/solrj/io/eval/IsNullEvaluator.java |     1 -
 .../solr/client/solrj/io/eval/KmeansEvaluator.java |     9 +-
 .../solr/client/solrj/io/eval/KnnEvaluator.java    |     9 +-
 .../solrj/io/eval/KnnRegressionEvaluator.java      |     3 -
 .../solrj/io/eval/KolmogorovSmirnovEvaluator.java  |    19 +-
 .../solr/client/solrj/io/eval/L1NormEvaluator.java |     1 -
 .../client/solrj/io/eval/LInfNormEvaluator.java    |     1 -
 .../solrj/io/eval/LatLonVectorsEvaluator.java      |     6 +-
 .../solr/client/solrj/io/eval/LerpEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ListCacheEvaluator.java   |     8 -
 .../solr/client/solrj/io/eval/LoessEvaluator.java  |     3 +-
 .../solrj/io/eval/MannWhitneyUEvaluator.java       |    12 +-
 .../apache/solr/client/solrj/io/eval/Matrix.java   |     7 +-
 .../solr/client/solrj/io/eval/MatrixEvaluator.java |     1 -
 .../solrj/io/eval/MatrixMultiplyEvaluator.java     |     1 -
 .../solrj/io/eval/MeanDifferenceEvaluator.java     |     1 -
 .../solr/client/solrj/io/eval/MeanEvaluator.java   |     1 -
 .../solr/client/solrj/io/eval/MemsetEvaluator.java |     6 +-
 .../client/solrj/io/eval/MinMaxScaleEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/ModeEvaluator.java   |     3 +-
 .../client/solrj/io/eval/MonteCarloEvaluator.java  |    10 +-
 .../client/solrj/io/eval/MultiKmeansEvaluator.java |     6 +-
 .../MultiVariateNormalDistributionEvaluator.java   |     1 -
 .../client/solrj/io/eval/NaturalEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/NormEvaluator.java   |     1 -
 .../solrj/io/eval/NormalizeSumEvaluator.java       |     3 +-
 .../client/solrj/io/eval/NotNullEvaluator.java     |     1 -
 .../solrj/io/eval/OLSRegressionEvaluator.java      |     7 +-
 .../solr/client/solrj/io/eval/OnesEvaluator.java   |     2 +-
 .../client/solrj/io/eval/OscillateEvaluator.java   |     2 -
 .../client/solrj/io/eval/OutliersEvaluator.java    |     8 +-
 .../client/solrj/io/eval/PairSortEvaluator.java    |     3 +-
 .../client/solrj/io/eval/PairedTTestEvaluator.java |    10 +-
 .../client/solrj/io/eval/PercentileEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/PivotEvaluator.java  |    13 +-
 .../solrj/io/eval/PolyFitDerivativeEvaluator.java  |     2 -
 .../client/solrj/io/eval/PolyFitEvaluator.java     |     1 -
 .../solr/client/solrj/io/eval/PowerEvaluator.java  |     9 +-
 .../client/solrj/io/eval/PredictEvaluator.java     |    11 +-
 .../solr/client/solrj/io/eval/PrimesEvaluator.java |     2 +-
 .../client/solrj/io/eval/PutCacheEvaluator.java    |     1 -
 .../client/solrj/io/eval/RecursiveEvaluator.java   |    14 +-
 .../client/solrj/io/eval/RegressionEvaluator.java  |     2 -
 .../client/solrj/io/eval/RemoveCacheEvaluator.java |     2 -
 .../solr/client/solrj/io/eval/RepeatEvaluator.java |     2 +-
 .../solr/client/solrj/io/eval/RowAtEvaluator.java  |     2 +-
 .../solr/client/solrj/io/eval/SampleEvaluator.java |     2 +-
 .../client/solrj/io/eval/ScalarAddEvaluator.java   |     3 +-
 .../solr/client/solrj/io/eval/ScaleEvaluator.java  |     2 +-
 .../solrj/io/eval/SetColumnLabelsEvaluator.java    |     3 +-
 .../solrj/io/eval/SetRowLabelsEvaluator.java       |     3 +-
 .../client/solrj/io/eval/SetValueEvaluator.java    |     8 +-
 .../solr/client/solrj/io/eval/SplineEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/SplitEvaluator.java  |     2 +-
 .../solrj/io/eval/StandardDeviationEvaluator.java  |     3 +-
 .../client/solrj/io/eval/SumColumnsEvaluator.java  |     2 +-
 .../solrj/io/eval/SumDifferenceEvaluator.java      |     1 -
 .../client/solrj/io/eval/SumRowsEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/SumSqEvaluator.java  |     1 -
 .../solr/client/solrj/io/eval/TTestEvaluator.java  |    13 +-
 .../client/solrj/io/eval/TermVectorsEvaluator.java |    16 +-
 .../solrj/io/eval/TimeDifferencingEvaluator.java   |    97 +-
 .../client/solrj/io/eval/TopFeaturesEvaluator.java |     8 +-
 .../solr/client/solrj/io/eval/UnitEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ValueAtEvaluator.java     |     1 -
 .../client/solrj/io/eval/VarianceEvaluator.java    |     3 +-
 .../solr/client/solrj/io/eval/VectorFunction.java  |     4 -
 .../solr/client/solrj/io/eval/ZerosEvaluator.java  |     2 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |    56 +-
 .../apache/solr/client/solrj/io/graph/Node.java    |    20 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |    35 +-
 .../solr/client/solrj/io/graph/Traversal.java      |    11 +-
 .../client/solrj/io/graph/TraversalIterator.java   |     9 +-
 .../solr/client/solrj/io/ops/GroupOperation.java   |    17 +-
 .../client/solrj/io/sql/ResultSetMetaDataImpl.java |     2 -
 .../client/solrj/io/stream/CalculatorStream.java   |    12 +-
 .../solrj/io/stream/CartesianProductStream.java    |     1 -
 .../solr/client/solrj/io/stream/CellStream.java    |     9 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |    32 +-
 .../solr/client/solrj/io/stream/CommitStream.java  |     2 +-
 .../solr/client/solrj/io/stream/CsvStream.java     |     3 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |    31 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |    28 +-
 .../solr/client/solrj/io/stream/DrillStream.java   |   280 -
 .../solr/client/solrj/io/stream/EchoStream.java    |    11 +-
 .../solr/client/solrj/io/stream/EvalStream.java    |     2 +-
 .../client/solrj/io/stream/ExceptionStream.java    |    12 +-
 .../client/solrj/io/stream/ExecutorStream.java     |    13 +-
 .../solr/client/solrj/io/stream/Facet2DStream.java |    26 +-
 .../solr/client/solrj/io/stream/FacetStream.java   |    96 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |    37 +-
 .../solr/client/solrj/io/stream/FetchStream.java   |     4 +-
 .../solr/client/solrj/io/stream/GetStream.java     |    14 +-
 .../client/solrj/io/stream/HashRollupStream.java   |    12 +-
 .../solr/client/solrj/io/stream/JDBCStream.java    |    23 +-
 .../client/solrj/io/stream/JSONTupleStream.java    |     1 -
 .../solrj/io/stream/JavabinTupleStreamParser.java  |     3 -
 .../solr/client/solrj/io/stream/KnnStream.java     |    13 +-
 .../solr/client/solrj/io/stream/LetStream.java     |     6 +-
 .../solr/client/solrj/io/stream/ListStream.java    |     5 +-
 .../solr/client/solrj/io/stream/ModelStream.java   |     6 +-
 .../solr/client/solrj/io/stream/NoOpStream.java    |     6 +-
 .../solr/client/solrj/io/stream/NullStream.java    |     3 +-
 .../client/solrj/io/stream/ParallelListStream.java |    13 +-
 .../client/solrj/io/stream/ParallelStream.java     |    10 +-
 .../solr/client/solrj/io/stream/PlotStream.java    |    21 +-
 .../client/solrj/io/stream/PriorityStream.java     |     2 +-
 .../solr/client/solrj/io/stream/RandomStream.java  |    15 +-
 .../solr/client/solrj/io/stream/RollupStream.java  |    16 +-
 .../client/solrj/io/stream/ScoreNodesStream.java   |    15 +-
 .../solr/client/solrj/io/stream/SearchStream.java  |    16 +-
 .../solr/client/solrj/io/stream/SelectStream.java  |    15 +-
 .../solrj/io/stream/SignificantTermsStream.java    |    31 +-
 .../solr/client/solrj/io/stream/SolrStream.java    |    13 +-
 .../solr/client/solrj/io/stream/StatsStream.java   |   286 +-
 .../solr/client/solrj/io/stream/StreamContext.java |    11 +-
 .../client/solrj/io/stream/TextLogitStream.java    |    54 +-
 .../client/solrj/io/stream/TimeSeriesStream.java   |    30 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |    16 +-
 .../solr/client/solrj/io/stream/TupStream.java     |    20 +-
 .../solr/client/solrj/io/stream/TupleStream.java   |     3 +-
 .../solr/client/solrj/io/stream/UpdateStream.java  |    21 +-
 .../solr/client/solrj/io/stream/ZplotStream.java   |    38 +-
 .../client/solrj/io/stream/expr/Explanation.java   |     1 -
 .../solrj/io/stream/expr/StreamExplanation.java    |     1 -
 .../solrj/io/stream/expr/StreamExpression.java     |     6 -
 .../expr/StreamExpressionNamedParameter.java       |     7 -
 .../io/stream/expr/StreamExpressionValue.java      |     9 +-
 .../client/solrj/io/stream/expr/StreamFactory.java |   249 +-
 .../solrj/io/stream/metrics/CountMetric.java       |     4 +-
 .../solrj/io/stream/metrics/PercentileMetric.java  |    84 -
 .../client/solrj/io/stream/metrics/StdMetric.java  |    93 -
 .../solrj/request/AbstractUpdateRequest.java       |     5 -
 .../solrj/request/CollectionAdminRequest.java      |   112 +-
 .../client/solrj/request/CollectionApiMapping.java |    14 +-
 .../solrj/request/ConfigSetAdminRequest.java       |     8 +-
 .../client/solrj/request/CoreAdminRequest.java     |     5 -
 .../solr/client/solrj/request/CoreApiMapping.java  |     3 +-
 .../solrj/request/DelegationTokenRequest.java      |    15 -
 .../client/solrj/request/DirectXmlRequest.java     |     5 -
 .../solrj/request/DocumentAnalysisRequest.java     |     5 -
 .../client/solrj/request/FieldAnalysisRequest.java |     5 -
 .../client/solrj/request/GenericSolrRequest.java   |     5 -
 .../client/solrj/request/HealthCheckRequest.java   |     5 +-
 .../solrj/request/JavaBinUpdateRequestCodec.java   |    19 +-
 .../solr/client/solrj/request/LukeRequest.java     |     5 -
 .../solrj/request/MultiContentWriterRequest.java   |     7 +-
 .../solr/client/solrj/request/QueryRequest.java    |     4 -
 .../solr/client/solrj/request/RequestWriter.java   |    13 +-
 .../apache/solr/client/solrj/request/SolrPing.java |     5 -
 .../solr/client/solrj/request/UpdateRequest.java   |     2 +-
 .../solr/client/solrj/request/V1toV2ApiMapper.java |     1 -
 .../solr/client/solrj/request/V2Request.java       |     5 -
 .../client/solrj/request/beans/PluginMeta.java     |    64 -
 .../solr/client/solrj/request/json/DomainMap.java  |     3 -
 .../client/solrj/request/json/HeatmapFacetMap.java |     3 +-
 .../client/solrj/request/json/JsonFacetMap.java    |     5 +-
 .../solrj/request/json/JsonQueryRequest.java       |     8 -
 .../request/schema/AbstractSchemaRequest.java      |     4 -
 .../solrj/response/AnalysisResponseBase.java       |     3 +-
 .../solrj/response/CollectionAdminResponse.java    |     1 -
 .../solrj/response/ConfigSetAdminResponse.java     |     3 +-
 .../solrj/response/DelegationTokenResponse.java    |     3 -
 .../solr/client/solrj/response/FieldStatsInfo.java |     1 -
 .../client/solrj/response/HealthCheckResponse.java |     1 -
 .../solr/client/solrj/response/PivotField.java     |     5 +-
 .../solr/client/solrj/response/QueryResponse.java  |    11 +-
 .../solr/client/solrj/response/RangeFacet.java     |     5 +-
 .../client/solrj/response/SolrResponseBase.java    |     3 -
 .../client/solrj/response/SpellCheckResponse.java  |     1 -
 .../client/solrj/response/SuggesterResponse.java   |     1 -
 .../solrj/response/json/BucketBasedJsonFacet.java  |     1 -
 .../solrj/response/json/HeatmapJsonFacet.java      |     1 -
 .../solrj/response/json/NestableJsonFacet.java     |     1 -
 .../solrj/response/schema/SchemaResponse.java      |    32 +-
 .../RequestReplicaListTransformerGenerator.java    |     6 +-
 .../solr/client/solrj/util/AsyncListener.java      |    33 -
 .../apache/solr/client/solrj/util/Cancellable.java |    22 -
 .../apache/solr/client/solrj/util/ClientUtils.java |     2 -
 .../java/org/apache/solr/cluster/api/ApiType.java  |    31 -
 .../apache/solr/cluster/api/CollectionConfig.java  |    27 -
 .../org/apache/solr/cluster/api/HashRange.java     |    42 -
 .../java/org/apache/solr/cluster/api/Resource.java |    41 -
 .../java/org/apache/solr/cluster/api/Router.java   |    25 -
 .../java/org/apache/solr/cluster/api/Shard.java    |    39 -
 .../org/apache/solr/cluster/api/ShardReplica.java  |    57 -
 .../org/apache/solr/cluster/api/SimpleMap.java     |    80 -
 .../org/apache/solr/cluster/api/SolrCluster.java   |    48 -
 .../apache/solr/cluster/api/SolrCollection.java    |    34 -
 .../java/org/apache/solr/cluster/api/SolrNode.java |    36 -
 .../org/apache/solr/common/IteratorWriter.java     |     1 -
 .../org/apache/solr/common/LazySolrCluster.java    |   446 -
 .../apache/solr/common/LinkedHashMapWriter.java    |     2 -
 .../org/apache/solr/common/MapSerializable.java    |     1 -
 .../src/java/org/apache/solr/common/MapWriter.java |     1 -
 .../java/org/apache/solr/common/MapWriterMap.java  |     7 +-
 .../org/apache/solr/common/NavigableObject.java    |     6 +-
 .../java/org/apache/solr/common/SimpleZkMap.java   |   139 -
 .../java/org/apache/solr/common/SolrDocument.java  |     7 +-
 .../org/apache/solr/common/SolrDocumentBase.java   |     1 -
 .../org/apache/solr/common/SolrDocumentList.java   |    10 -
 .../java/org/apache/solr/common/SolrException.java |    15 +-
 .../org/apache/solr/common/SolrInputDocument.java  |     1 -
 .../org/apache/solr/common/SolrInputField.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Aliases.java |    12 +-
 .../solr/common/cloud/ClusterProperties.java       |     4 -
 .../org/apache/solr/common/cloud/ClusterState.java |    91 +-
 .../solr/common/cloud/CompositeIdRouter.java       |     2 +-
 .../solr/common/cloud/ConnectionManager.java       |     6 +-
 .../apache/solr/common/cloud/DocCollection.java    |    63 +-
 .../org/apache/solr/common/cloud/DocRouter.java    |    16 +-
 .../solr/common/cloud/NodesSysPropsCacher.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Replica.java |   193 +-
 .../java/org/apache/solr/common/cloud/Slice.java   |     3 -
 .../org/apache/solr/common/cloud/SolrZkClient.java |    49 +-
 .../apache/solr/common/cloud/SolrZooKeeper.java    |     1 -
 .../apache/solr/common/cloud/ZkConfigManager.java  |     3 +-
 .../apache/solr/common/cloud/ZkDynamicConfig.java  |   145 -
 .../solr/common/cloud/ZkMaintenanceUtils.java      |    33 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |    11 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   364 +-
 .../solr/common/cloud/rule/ImplicitSnitch.java     |     5 +-
 .../org/apache/solr/common/cloud/rule/Snitch.java  |     1 -
 .../solr/common/cloud/rule/SnitchContext.java      |     1 -
 .../solr/common/params/AutoScalingParams.java      |    76 +
 .../solr/common/params/CollectionAdminParams.java  |    11 +-
 .../solr/common/params/CollectionParams.java       |    44 +-
 .../apache/solr/common/params/CommonParams.java    |    33 +-
 .../org/apache/solr/common/params/FacetParams.java |     4 +-
 .../apache/solr/common/params/MapSolrParams.java   |    22 +-
 .../solr/common/params/MultiMapSolrParams.java     |     5 -
 .../org/apache/solr/common/params/SolrParams.java  |     7 +-
 .../apache/solr/common/params/StreamParams.java    |    41 -
 .../common/util/ByteArrayUtf8CharSequence.java     |     6 +-
 .../apache/solr/common/util/CommandOperation.java  |    16 +-
 .../apache/solr/common/util/ContentStreamBase.java |     3 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |    12 +-
 .../solr/common/util/FastJavaBinDecoder.java       |     6 -
 .../src/java/org/apache/solr/common/util/Hash.java |     2 -
 .../org/apache/solr/common/util/JavaBinCodec.java  |    28 +-
 .../apache/solr/common/util/JsonRecordReader.java  |    10 -
 .../apache/solr/common/util/JsonSchemaCreator.java |     3 +-
 .../solr/common/util/JsonSchemaValidator.java      |    22 +-
 .../apache/solr/common/util/JsonTextWriter.java    |    19 +-
 .../solr/common/util/LinkedSimpleHashMap.java      |    34 -
 .../apache/solr/common/util/MapBackedCache.java    |     4 -
 .../org/apache/solr/common/util/NamedList.java     |    59 +-
 .../src/java/org/apache/solr/common/util/Pair.java |     1 -
 .../java/org/apache/solr/common/util/PathTrie.java |    50 +-
 .../apache/solr/common/util/ReflectMapWriter.java  |    29 +-
 .../org/apache/solr/common/util/RetryUtil.java     |    13 +-
 .../solr/common/util/SolrNamedThreadFactory.java   |    52 -
 .../solr/common/util/SolrjNamedThreadFactory.java  |    49 +
 .../java/org/apache/solr/common/util/StrUtils.java |     2 +-
 .../org/apache/solr/common/util/TextWriter.java    |    21 +-
 .../org/apache/solr/common/util/TimeSource.java    |     4 +-
 .../java/org/apache/solr/common/util/Utils.java    |   192 +-
 .../apache/solr/common/util/ValidatingJsonMap.java |    19 +-
 .../apache/solr/common/util/WrappedSimpleMap.java  |    49 -
 .../apache/solr/common/util/XMLErrorLogger.java    |     4 +-
 solr/solrj/src/java/org/noggit/CharArr.java        |   262 +-
 solr/solrj/src/java/org/noggit/JSONParser.java     |     2 +-
 .../resources/apispec/autoscaling.Commands.json    |   199 +
 .../src/resources/apispec/autoscaling.history.json |    61 +
 .../src/resources/apispec/cluster.Commands.json    |    28 +
 .../resources/apispec/collections.Commands.json    |    15 +
 .../apispec/collections.collection.Commands.json   |     8 +-
 .../collections.collection.Commands.modify.json    |    15 +
 ...collections.collection.shards.shard.delete.json |     2 +-
 ...ons.collection.shards.shard.replica.delete.json |     2 +-
 solr/solrj/src/test-files/log4j2.xml               |    45 +-
 .../src/test-files/solrj/javabin_backcompat.bin    |   Bin 170 -> 169 bytes
 .../solr/autoscaling/testAddMissingReplica.json    |   123 +
 .../autoscaling/testAutoScalingHandlerFailure.json |   141 +
 ...testAutoscalingPreferencesUsedWithNoPolicy.json |    53 +
 .../autoscaling/testComputePlanAfterNodeAdded.json |    16 +
 .../solr/autoscaling/testCoresSuggestions.json     |    17 +
 .../testCreateCollectionWithEmptyPolicy.json       |    20 +
 .../solrj/solr/autoscaling/testDiskSpaceHint.json  |    16 +
 .../solr/autoscaling/testEmptyCollection.json      |    27 +
 .../solrj/solr/autoscaling/testEqualOnNonNode.json |    83 +
 .../solr/autoscaling/testFreeDiskDeviation.json    |    35 +
 .../solr/autoscaling/testFreeDiskSuggestions.json  |    27 +
 .../solr/autoscaling/testFreediskPercentage.json   |    25 +
 .../solrj/solr/autoscaling/testHostAttribute.json  |   119 +
 .../solrj/solr/autoscaling/testInfiniteLoop.json   | 13196 +++++++++++++++++++
 .../solr/autoscaling/testMoveReplicaSuggester.json |    15 +
 .../testMoveReplicasInMultipleCollections.json     |    88 +
 .../solrj/solr/autoscaling/testPolicy.json         |    41 +
 .../solr/autoscaling/testPortSuggestions.json      |    22 +
 .../autoscaling/testReplicaCountSuggestions.json   |    15 +
 .../solr/autoscaling/testReplicaPercentage.json    |    46 +
 .../autoscaling/testReplicaZonesPercentage.json    |    15 +
 .../autoscaling/testScheduledTriggerFailure.json   |    52 +
 .../solrj/solr/autoscaling/testSortError.json      |   225 +
 .../autoscaling/testSuggestionsRebalance2.json     |   130 +
 .../autoscaling/testSuggestionsRebalanceOnly.json  |   105 +
 .../solr/autoscaling/testSysPropSuggestions.json   |   127 +
 .../solr/autoscaling/testSyspropSuggestions1.json  |    24 +
 .../solr/autoscaling/testUnresolvedSuggestion.json |   212 +
 .../solr/autoscaling/testUtilizeNodeFailure.json   |    69 +
 .../solr/autoscaling/testUtilizeNodeFailure2.json  |    66 +
 .../solr/autoscaling/testViolationOutput.json      |    22 +
 .../solrj/solr/autoscaling/testWithCollection.json |    21 +
 .../autoscaling/testWithCollectionMoveReplica.json |    28 +
 .../testWithCollectionMoveVsAddSuggestions.json    |    49 +
 .../autoscaling/testWithCollectionSuggestions.json |    21 +
 ...rconfig-follower1.xml => solrconfig-slave1.xml} |     0
 .../ref_guide_examples/JsonRequestApiTest.java     |     4 +-
 .../UsingSolrJRefGuideExamplesTest.java            |    59 +-
 .../org/apache/solr/client/solrj/GetByIdTest.java  |    27 +-
 .../solr/client/solrj/LargeVolumeTestBase.java     |    10 +-
 .../client/solrj/MergeIndexesExampleTestBase.java  |    15 +-
 .../apache/solr/client/solrj/SolrExampleTests.java |    21 +-
 .../client/solrj/SolrSchemalessExampleTest.java    |     2 -
 .../solr/client/solrj/TestLBHttp2SolrClient.java   |     9 +-
 .../solr/client/solrj/TestLBHttpSolrClient.java    |     9 +-
 .../solr/client/solrj/TestSolrJErrorHandling.java  |    20 +-
 .../solrj/beans/TestDocumentObjectBinder.java      |     1 -
 .../solrj/cloud/autoscaling/ConditionTest.java     |    80 +
 .../autoscaling/MoveReplicaSuggesterTest.java      |   104 +
 .../client/solrj/cloud/autoscaling/TestPolicy.java |  3092 +++++
 .../solrj/cloud/autoscaling/TestPolicy2.java       |   505 +
 .../solrj/cloud/autoscaling/TestPolicy2Old.java    |    26 +
 .../solrj/cloud/autoscaling/TestPolicyOld.java     |    25 +
 .../solrj/embedded/SolrExampleJettyTest.java       |     1 -
 .../solrj/embedded/TestEmbeddedSolrServer.java     |     2 +-
 .../client/solrj/impl/BasicHttpSolrClientTest.java |    53 +-
 .../impl/CloudHttp2SolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/CloudHttp2SolrClientRetryTest.java  |     1 -
 .../solrj/impl/CloudHttp2SolrClientTest.java       |    45 +-
 .../solrj/impl/CloudSolrClientBadInputTest.java    |     4 +-
 .../solrj/impl/CloudSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/CloudSolrClientCacheTest.java       |    15 +-
 .../solrj/impl/CloudSolrClientRetryTest.java       |     1 -
 .../client/solrj/impl/CloudSolrClientTest.java     |    41 +-
 ...oncurrentUpdateHttp2SolrClientBadInputTest.java |     4 +-
 .../impl/ConcurrentUpdateHttp2SolrClientTest.java  |     6 +-
 .../ConcurrentUpdateSolrClientBadInputTest.java    |     4 +-
 .../ConcurrentUpdateSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/ConcurrentUpdateSolrClientTest.java |     6 +-
 .../impl/Http2SolrClientCompatibilityTest.java     |     7 +-
 .../client/solrj/impl/Http2SolrClientTest.java     |    44 +-
 .../solr/client/solrj/impl/HttpClientUtilTest.java |    16 +-
 .../solrj/impl/HttpSolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/HttpSolrClientConPoolTest.java      |     4 +-
 .../solrj/impl/LBHttpSolrClientBadInputTest.java   |     4 +-
 .../solr/client/solrj/impl/LBSolrClientTest.java   |    90 -
 .../org/apache/solr/client/solrj/io/TestLang.java  |     4 +-
 .../client/solrj/io/graph/GraphExpressionTest.java |    16 +-
 .../solr/client/solrj/io/graph/GraphTest.java      |    10 +-
 .../apache/solr/client/solrj/io/sql/JdbcTest.java  |     2 -
 .../solrj/io/stream/CloudAuthStreamTest.java       |     9 +-
 .../client/solrj/io/stream/JDBCStreamTest.java     |     4 +-
 .../client/solrj/io/stream/MathExpressionTest.java |   258 +-
 .../client/solrj/io/stream/RecordCountStream.java  |     2 +-
 .../solrj/io/stream/SelectWithEvaluatorsTest.java  |    10 +-
 .../solrj/io/stream/StreamDecoratorTest.java       |    33 +-
 .../solrj/io/stream/StreamExpressionTest.java      |   417 +-
 .../solr/client/solrj/io/stream/StreamingTest.java |    15 +-
 .../solrj/io/stream/eval/AscEvaluatorTest.java     |     6 -
 .../io/stream/eval/ConversionEvaluatorsTest.java   |    27 +-
 .../solrj/io/stream/eval/ReverseEvaluatorTest.java |     1 -
 .../io/stream/eval/TemporalEvaluatorsTest.java     |     4 +-
 .../solrj/io/stream/ops/ConcatOperationTest.java   |     4 +-
 .../client/solrj/io/stream/ops/OperationsTest.java |     4 +-
 .../solr/client/solrj/request/SchemaTest.java      |    14 +-
 .../solrj/request/TestConfigSetAdminRequest.java   |     3 +-
 .../solr/client/solrj/request/TestCoreAdmin.java   |    12 +-
 .../solrj/request/TestUpdateRequestCodec.java      |     6 +-
 .../solr/client/solrj/request/TestV2Request.java   |     6 +-
 .../client/solrj/request/json/DomainMapTest.java   |     7 -
 .../solrj/response/AnlysisResponseBaseTest.java    |     6 +-
 .../response/DocumentAnalysisResponseTest.java     |     2 -
 .../solrj/response/FieldAnalysisResponseTest.java  |     2 -
 .../solrj/response/NoOpResponseParserTest.java     |     2 -
 .../client/solrj/response/QueryResponseTest.java   |     1 -
 .../response/TestDelegationTokenResponse.java      |     2 +-
 ...RequestReplicaListTransformerGeneratorTest.java |    17 +-
 .../org/apache/solr/common/SolrDocumentTest.java   |     7 +-
 .../solr/common/TestToleratedUpdateError.java      |     2 -
 .../apache/solr/common/cloud/SolrZkClientTest.java |    12 +-
 .../cloud/TestCloudCollectionsListeners.java       |   110 +
 .../common/cloud/TestCollectionStateWatchers.java  |    23 +
 .../common/cloud/TestDocCollectionWatcher.java     |    26 +
 .../solr/common/params/CommonParamsTest.java       |     2 -
 .../apache/solr/common/util/JsonValidatorTest.java |     3 -
 .../org/apache/solr/common/util/NamedListTest.java |     5 +-
 .../solr/common/util/TestFastJavabinDecoder.java   |    13 -
 .../apache/solr/common/util/TestJavaBinCodec.java  |   103 +-
 .../solr/common/util/TestJsonRecordReader.java     |     5 -
 .../solr/common/util/TestNamedListCodec.java       |    15 -
 .../org/apache/solr/common/util/TestPathTrie.java  |    10 -
 .../solr/common/util/TestSolrJsonWriter.java       |   102 +-
 .../solr/common/util/TestValidatingJsonMap.java    |     1 -
 .../solr/common/util/TestZkMaintenanceUtils.java   |    55 -
 .../solr/common/util/Utf8CharSequenceTest.java     |     6 -
 solr/test-framework/{README.md => README.txt}      |     0
 solr/test-framework/build.gradle                   |     3 +-
 solr/test-framework/build.xml                      |     2 +-
 solr/test-framework/ivy.xml                        |     2 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |    31 +-
 .../src/java/org/apache/solr/JSONTestUtil.java     |     7 -
 .../org/apache/solr/SolrIgnoredThreadsFilter.java  |     5 -
 .../java/org/apache/solr/SolrJettyTestBase.java    |     2 +-
 .../src/java/org/apache/solr/SolrTestCase.java     |    12 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |    95 +-
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   129 +-
 .../solr/analysis/MockCharFilterFactory.java       |     5 -
 .../solr/analysis/MockTokenFilterFactory.java      |     5 -
 .../apache/solr/analysis/MockTokenizerFactory.java |     5 -
 .../solr/cloud/AbstractDistribZkTestBase.java      |    54 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |   183 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |    12 +-
 .../org/apache/solr/cloud/CloudInspectUtil.java    |    23 +-
 .../java/org/apache/solr/cloud/ConfigRequest.java  |     6 -
 .../src/java/org/apache/solr/cloud/IpTables.java   |     4 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |    19 +-
 .../apache/solr/cloud/MultiSolrCloudTestCase.java  |     5 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |     4 -
 .../org/apache/solr/cloud/SolrCloudTestCase.java   |     9 +-
 .../apache/solr/cloud/StoppableCommitThread.java   |     4 +-
 .../apache/solr/cloud/StoppableSearchThread.java   |     2 +-
 .../java/org/apache/solr/cloud/ZkTestServer.java   |    29 +-
 .../solr/core/MockConcurrentMergeScheduler.java    |     3 +-
 .../apache/solr/core/MockTracerConfigurator.java   |     2 +-
 .../component/TrackingShardHandlerFactory.java     |    67 +-
 .../org/apache/solr/util/RandomMergePolicy.java    |     4 +-
 .../java/org/apache/solr/util/RandomizeSSL.java    |     4 +-
 .../java/org/apache/solr/util/RestTestBase.java    |    71 +-
 .../java/org/apache/solr/util/SSLTestConfig.java   |    26 +-
 .../src/java/org/apache/solr/util/TestHarness.java |    35 +-
 solr/webapp/build.gradle                           |     2 -
 solr/webapp/web/css/angular/collections.css        |     2 +-
 solr/webapp/web/css/angular/dashboard.css          |     4 +-
 solr/webapp/web/css/angular/dataimport.css         |     3 +-
 solr/webapp/web/css/angular/index.css              |     5 -
 solr/webapp/web/css/angular/menu.css               |     3 +-
 solr/webapp/web/css/angular/replication.css        |    10 +-
 solr/webapp/web/css/angular/suggestions.css        |    64 +
 .../img/ico/{node-leader.png => node-master.png}   |   Bin
 .../img/ico/{node-follower.png => node-slave.png}  |   Bin
 solr/webapp/web/index.html                         |    31 +-
 solr/webapp/web/js/angular/app.js                  |     4 +
 solr/webapp/web/js/angular/controllers/cloud.js    |     9 +-
 .../js/angular/controllers/cluster-suggestions.js  |    62 +
 .../web/js/angular/controllers/collections.js      |     8 +-
 .../web/js/angular/controllers/core-overview.js    |     4 +-
 solr/webapp/web/js/angular/controllers/index.js    |     6 -
 solr/webapp/web/js/angular/controllers/login.js    |     2 +-
 .../web/js/angular/controllers/replication.js      |   108 +-
 solr/webapp/web/libs/angular-chosen.min.js         |     4 +-
 solr/webapp/web/partials/cloud.html                |     3 +-
 solr/webapp/web/partials/cluster_suggestions.html  |    49 +
 solr/webapp/web/partials/collection_overview.html  |     6 +
 solr/webapp/web/partials/collections.html          |    20 +
 solr/webapp/web/partials/core_overview.html        |    38 +-
 solr/webapp/web/partials/dataimport.html           |     1 -
 solr/webapp/web/partials/index.html                |    34 -
 solr/webapp/web/partials/login.html                |    17 -
 solr/webapp/web/partials/replication.html          |    62 +-
 2494 files changed, 124129 insertions(+), 59586 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9945ecb..e9df9b1 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -6,24 +6,11 @@ https://github.com/apache/lucene-solr/blob/master/solr/solr-ref-guide/src/solr-u
 
 ==================  9.0.0 ==================
 
-Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
-
-Upgrade Notes
----------------------
-
-* SOLR-12847: maxShardsPerNode parameter has been removed because it was broken and
-inconsistent with other replica placement strategies. Other relevant placement strategies
-should be used instead, such as autoscaling policy or rules-based placement.
-
-* SOLR-14654 : plugins cannot be loaded using "runtimeLib=true" option. Use the package manager to use
-  and load plugins
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
 
 New Features
 ---------------------
-* SOLR-14440: Introduce new Certificate Authentication Plugin to load Principal from certificate subject. (Mike Drob)
-
-* SOLR-14588: Introduce Circuit Breaker Infrastructure and a JVM heap usage memory tracking circuit breaker implementation (Atri Sharma)
-
+(No changes)
 
 Improvements
 ----------------------
@@ -31,23 +18,8 @@ Improvements
 
 * SOLR-14223: PKI Auth can bootstrap from existing key files instead of creating new keys on startup (Mike Drob)
 
-* SOLR-11725: Use corrected sample formula for computing stdDev and variance in JSON aggregations
-  (hossman, Munendra S N, yonik)
-
-* SOLR-14387: SolrClient.getById() will escape comma separater within ids (Markus Schuch via Mike Drob)
-
-* SOLR-10814: Add short-name feature to RuleBasedAuthz plugin (Mike Drob, Hrishikesh Gadre)
-
-* SOLR-7683 Introduce support to identify Solr internal request types (Atri Sharma, Hrishikesh Gadre)
-
-* SOLR-13528 Rate Limiting in Solr (Atri Sharma, Mike Drob)
-
 Other Changes
 ----------------------
-* SOLR-14656: Autoscaling framework removed (Ishan Chattopadhyaya, noble, Ilan Ginzburg)
-
-* LUCENE-9391: Upgrade HPPC to 0.8.2. (Haoyu Zhai)
-
 * SOLR-10288: Remove non-minified JavaScript from the webapp. (Erik Hatcher, marcussorealheis)
 
 * SOLR-13655:Upgrade Collections.unModifiableSet to Set.of and Set.copyOf (Atri Sharma via Tomás Fernández Löbbe)
@@ -68,527 +40,30 @@ Other Changes
 * SOLR-14256: Remove HashDocSet; add DocSet.getBits() instead.  DocSet is now strictly immutable and ascending order.
   It's now locked-down to external extension; only 2 impls exist.  (David Smiley)
 
-* SOLR-14197: SolrResourceLoader: remove deprecated methods and do other improvements. (David Smiley)
-
-* SOLR-14012: Return long value for unique and hll aggregations irrespective of shard count (Munendra S N, hossman)
-
-* SOLR-14322: AbstractFullDistribZkTestBase.waitForRecoveriesToFinish now takes a timeout and time unit instead of
-  assuming that we are passed value in seconds. (Mike Drob)
-
-* SOLR-13893: Remove support to read BlobRepository's max jar size from deprecated `runtme.lib.size` system property
-  (Erick Erickson, Kesharee Nandan Vishwakarma, Munendra S N)
-
-* SOLR-12720: Remove support for `autoReplicaFailoverWaitAfterExpiration`. (marcussorealheis, shalin)
-
-* SOLR-9909: The deprecated SolrjNamedThreadFactory has been removed. Use SolrNamedThreadFactory instead.
-  (Andras Salamon, shalin)
-
-* SOLR-14420: AuthenticationPlugin.authenticate accepts HttpServletRequest instead of ServletRequest. (Mike Drob)
-
-* SOLR-14429: Convert .txt files to properly formatted .md files. (Tomoko Uchida, Uwe Schindler)
-
-* SOLR-14412: Automatically set urlScheme to https when running secure solr with embedded zookeeper. (Mike Drob)
-  Do not erroneously set solr.jetty.https.port system property when running in http mode (Upendra Penegalapati)
-
-* SOLR-14014: Introducing a system property that allows users to disable the Admin UI, which is enabled by default.
-  If you have security concerns or other reasons to disable the Admin UI, you can modify `SOLR_ADMIN_UI_DISABLED`
-  `solr.in.sh`/`solr.in.cmd` at start. (marcussorealheis)
-
-* SOLR-14486: Autoscaling simulation framework no longer creates /clusterstate.json (format 1),
-  instead it creates individual per-collection /state.json files (format 2). (ab)
-
-* SOLR-12823: Remove /clusterstate.json support, including support for collections created with stateFormat=1,
-  as well as support for Collection API MIGRATESTATEFORMAT action and support for the legacyCloud flag (Ilan Ginzburg).
-
-* LUCENE-9411: Fail complation on warnings, 9x gradle-only (Erick Erickson, Dawid Weiss)
-  Deserves mention here as well as Lucene CHANGES.txt since it affects both.
-
-* SOLR-12847: Remove support for maxShardsPerNode. (ab)
-
-* SOLR-14244: Remove ReplicaInfo. (ab)
-
-* SOLR-14654: Remove plugin loading from .system collection (for 9.0) (noble)
-
-* SOLR-14702: All references to "master" and "slave" replaced with "leader" and "follower" (MarcusSorealheis, 
-  Erick Erickson, Tomás Fernández Löbbe)
-
-Bug Fixes
----------------------
-* SOLR-14546: Fix for a relatively hard to hit issue in OverseerTaskProcessor that could lead to out of order execution
-  of Collection API tasks competing for a lock (Ilan Ginzburg).
-
-==================  8.7.0 ==================
-
-Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
-
-New Features
----------------------
-
-* SOLR-14151 Make schema components load from packages (noble)
-
-* SOLR-14681: Introduce ability to delete .jar stored in the Package Store. (MarcusSorealheis , Mike Drob)
-
-* SOLR-14604: Add the ability to uninstall a package from with the Package CLI. (MarcusSorealheis)
-
-* SOLR-14582: Expose IWC.setMaxCommitMergeWaitMillis in Solr's index config. This is an expert config option that can be
-  set when using a custom MergePolicy (doesn't have any effect on the default MP) (Tomás Fernández Löbbe)
-
-* SOLR-13751: Add BooleanSimilarityFactory class. (Andy Webb via Christine Poerschke)
-
-Improvements
----------------------
-
-* SOLR-14523: Enhance gradle logging calls validation: eliminate getMessage() (Andras Salamon via Erick Erickson)
-
-* SOLR-14537: Improve performance of ExportWriter. (ab, Joel Bernstein)
-
-* SOLR-14566: Request ID's ('rid') are now added by default to distributed search requests, and can be used to correlate
-  logs from the receiving coordinator node with those from downstream shard requests.  This can be disabled by providing a
-  disableRequestId=true request parameter. (Jason Gerlowski)
-
-* SOLR-14635: ThreadDumpHandler has been enhanced to show lock ownership (hossman)
-
-* SOLR-11262: Add support to stream data out using push APIs when wt=xml (yonik, Munendra S N)
-
-* SOLR-13205: Prevent StringIndexOutOfBoundsException when parsing field names in SolrQueryParserBase
-  (pramodkumar9 via Jason Gerlowski)
-
-* SOLR-14651: The MetricsHistoryHandler can more completely disable itself when you tell it to.
-  Also, it now shuts down more thoroughly. (David Smiley)
-
-Optimizations
----------------------
-
-* SOLR-14354: HttpShardHandler send requests in async (Cao Manh Dat).
-
-* SOLR-14610: ReflectMapWriter to use MethodHandle instead of old reflection (noble)
-
-* SOLR-13132: JSON Facet perf improvements to support "sweeping" collection of "relatedness()"
-  (hossman, Michael Gibney)
-
-Bug Fixes
----------------------
-
-* SOLR-11656: TLOG replication doesn't work properly after rebalancing leaders. (Yuki Yano via
-  Erick Erickson)
-
-* SOLR-14516: Fix NPE in JSON response writer(wt=json) with /get when writing non-stored, non-indexed docvalue field
-  from an uncommitted document (noble, Ishan Chattopadhyaya, Munendra S N)
-
-* SOLR-14657: Improve error handling in IndexReader realted metrics that were causing scary ERROR logging
-  if metrics were requested while Solr was in the process of closing/re-opening a new IndexReader. (hossman)
-
-* SOLR-14748: Fix incorrect auth/SSL startup logging (Jason Gerlowski)
-
-* SOLR-14751: Zookeeper Admin screen not working for old ZK versions (janhoy)
-
-* SOLR-14677: Improve DIH termination logic to close all DataSources, EntityProcessors (Jason Gerlowski)
-
-Other Changes
----------------------
-
-* SOLR-14592: Upgrade Zookeeper to 3.6.1. NOTE: this required upgrading netty to 4.1.50 (Erick Erickson)
-
-* SOLR-10742: SolrCores.getNamesForCore is quite inefficient and blocks other core operations.
-  NOTE: this experimental method has been removed (Erick Erickson)
-
-* SOLR-13939: Extract any non-gradle related patches (deprecations, URL fixes, etc.) from gradle effort. NOTE:
-  this will be in several separate commits/pushes. (Erick Erickson)
-
-* SOLR-14637: Update CloudSolrClient examples to remove deprecated method. (Andras Salamon via Eric Pugh)
-
-* SOLR-14676: Update commons-collections to 4.4 and use it in Solr (Erick Erickson)
-
-* SOLR-11868: Deprecate CloudSolrClient.setIdField, use information from Zookeeper (Erick Erickson)
-
-* SOLR-14641: PeerSync, remove canHandleVersionRanges check (Cao Manh Dat)
-
-==================  8.6.1 ==================
-
-Bug Fixes
----------------------
-
-* SOLR-14671: Parsing dynamic ZK config sometimes cause NuberFormatException (janhoy)
-
-==================  8.6.0 ==================
-
-Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
-
-New Features
----------------------
-* SOLR-14210: HealthCheckHandler can now require that all cores are healthy before returning 'OK'
-  To enable, add &requireHealthyCores=true to enable (janhoy, Houston Putman, shalin)
-
-* SOLR-13942: A read API at /api/cluster/zk/* to fetch raw ZK data and view contents of a ZK directory (noble)
-
-* SOLR-14237: A new panel with security info in admin UI's dashboard (Ishan Chattopadhyaya, Moshe Bla)
-
-* SOLR-12131: ExternalRoleRuleBasedAuthorizationPlugin which gets user's roles from request (janhoy)
-
-* SOLR-14478: Allow the diff Stream Evaluator to operate on the rows of a matrix (Joel Bernstein)
-
-* SOLR-14476: Add percentiles and standard deviation aggregations to stats, facet and
-  timeseries Streaming Expressions (Joel Bernstein)
-
-* SOLR-14470: Add streaming expressions to /export handler. (ab, Joel Bernstein)
-
-* SOLR-14404: CoreContainer level custom requesthandlers (noble)
-
-* SOLR-13749: Join queries can now work cross-collection, even when sharded or when spanning nodes.
-  (Dan Fox, Kevin Watters, via Gus Heck, David Smiley)
-
-* SOLR-14481: Add drill Streaming Expression for efficient and accurate high cardinality aggregation.
-  (Joel Bernstein)
-
-* SOLR-14599: Package manager support for cluster level plugins (see SOLR-14404) (Ishan Chattopadhyaya)
-
-* SOLR-14590: Add support for RankFields. RankFields allow the use of per-document scoring factors in a
-  way that lets Solr skip over non-competitive documents when ranking. See SOLR-13289.
-  (Tomás Fernández Löbbe, Varun Thacker)
-
-Improvements
----------------------
-* SOLR-14316: Remove unchecked type conversion warning in JavaBinCodec's readMapEntry's equals() method
-  (Aroop Ganguly, Tomás Fernández Löbbe, Noble Paul, Anshum Gupta)
-
-* SOLR-14260: Make SolrJ ConnectionSocketFactory pluggable via SocketFactoryRegistryProvider setting on HttpClientUtil
-  (Andy Throgmorton via David Smiley)
-
-* SOLR-14342: Load cores in an order that makes collections available sooner and reduces leaderVoteWait timeouts in
-  large SolrCloud clusters. (David Smiley)
-
-* SOLR-14329: Add support to choose collapse group to expand in ExpandComponent based on cost (Munendra S N)
-
-* SOLR-14307: User defined "<cache/>" entries in solrconfig.xml now support enabled="true|false" just like
-  core searcher caches. (hossman)
-
-* SOLR-14364: LTR's SolrFeature "fq" now supports PostFilters (e.g. collapse). (David Smiley)
-
-* SOLR-14396: TaggerRequestHandler should not error on an empty index (Trey Grainger)
-
-* SOLR-12845: Add a default autoscaling cluster policy. (shalin, varunthacker, ab)
-
-* SOLR-14433: Metrics: SolrShardReporter's default metrics list now includes TLOG and UPDATE./update (David Smiley)
-
-* SOLR-14423: Move static SolrClientCache from StreamHandler to CoreContainer for wider reuse and better life-cycle management. (ab)
-
-* SOLR-14407: Handle shards.purpose in the postlogs tool (Joel Bernstein)
-
-* SOLR-13325: ComputePlanAction now supports a collection selector of the form `collections: {policy: my_policy}`
-  which can be used to select multiple collections that match collection property/value pairs. This is useful to
-  maintain a whitelist of collections for which actions are taken without needing to hard code the collection names
-  themselves. The collection hints are pushed down to the policy engine so operations for non-matching collections
-  are not computed at all. (ab, shalin)
-
-* SOLR-14419: json.queries as well as other parameters might be referred via {"param":"ref"} in Query DSL (Mikhail Khludnev)
-
-* SOLR-11334: hl.fl and tv.fl now parse field lists when they have both commas and spaces
-  (David Smiley, Yasufumi Mizoguchi)
-
-* SOLR-14442: bin/solr and bin\solr.cmd invoke jstack <SOLR_PID> before forceful termination, if jstack is available.
-  Also, bin\solr.cmd executes forceful termination even port is unbinded  already (Christine Poerschke via Mikhail Khludnev).
-
-* SOLR-14384: SolrRequestInfo now stacks internally when a new request is set/clear'ed.
-  Also fixes SolrIndexSearcher.warm which should have re-instated previous SRI.
-  (Nazerke Seidan, David Smiley)
-
-* SOLR-14561: CoreAdminAPI's parameters instanceDir and dataDir are now validated, and must be relative to either
-  SOLR_HOME, SOLR_DATA_HOME or coreRootDir. Added new solr.xml config 'allowPaths', controlled by system property
-  'solr.allowPaths' that allows you to add other allowed paths when needed.
-
-* SOLR-13286: Metrics will no longer write a (sometimes large) log message every minute. This can be re-enabled
-  via log4j2.xml if desired, or other HttpSolrCall log messages may be quieted on a per handler basis. (Gus Heck)
-
-* SOLR-14539: Introducing {!bool excludeTags=...} for Query DSL. (Mikhail Khludnev)
-
-Optimizations
----------------------
-* SOLR-8306: Do not collect expand documents when expand.rows=0 (Marshall Sanders, Amelia Henderson)
-
-* SOLR-14340: Remove unnecessary configset verification checks when SolrCloud merely wants to know which configset a
-  collection is using.  Improves CLUSTERSTATUS times for massive clusters.  (Mathieu Marie, David Smiley)
-
-* SOLR-14365: CollapsingQParser - Avoiding always allocate int[] and float[] with size equals to number of unique values.
-  (Cao Manh Dat)
-
-* SOLR-14376: Optimize filter queries that match all docs. (David Smiley)
-
-* LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects (Erick Erickson)
-
-* SOLR-13289: When the "minExactCount" parameters is provided in queries and it's value is lower than the number of hits,
-  Solr can speedup the query resolution by using the Block-Max WAND algorithm (see LUCENE-8135). When doing this, the
-  value of matching documents in the response (numFound) will be an approximation.
-  (Ishan Chattopadhyaya, Munendra S N, Tomás Fernández Löbbe, David Smiley)
-
-* SOLR-14472: Autoscaling "cores" preference now retrieves the core count more efficiently, and counts all cores.
-  (David Smiley)
-
-* SOLR-14552: Add BlockMax-WAND support to ReRank queries (Tomás Fernández Löbbe)
-
-* SOLR-14554: Add BlockMax-WAND support for queries where the score is requested (Tomás Fernández Löbbe)
-
-* SOLR-14634: Limit the HTTP security headers to "/solr" end point (noble)
-
-Bug Fixes
----------------------
-* SOLR-13264: IndexSizeTrigger aboveOp / belowOp properties not in valid properties.
-  (Christine Poerschke, ab)
-
-* SOLR-13199: Return proper error when invalid parentFilter is passed in ChildDocTransformer
-  (Johannes Kloos, Munendra S N, David Smiley, Mikhail Khludnev)
-
-* SOLR-14347: Autoscaling placement wrong when concurrent replica placements are calculated. (ab)
-
-* SOLR-14128: Improve distributed locking around managed schema upgrade process. (ab)
-
-* SOLR-14302: Ensure Solr always includes the stacktrace for exceptions by using '-OmitStackTraceInFastThrow'
-  (hossman)
-
-* SOLR-14317: HttpClusterStateProvider throws exception when only one node down. (Lyle Wang via Ishan Chattopadhyaya)
-
-* SOLR-14356: PeerSync should not fail with SocketTimeoutException from hanging nodes (Cao Manh Dat)
-
-* SOLR-14402: Avoid creating new exceptions for every request made to MDCAwareThreadPoolExecutor by distributed search.
-  This is a fix for incomplete optimization made by SOLR-11880 in Solr 7.4 which fixed distributed updates but not
-  distributed search. (shalin)
-
-* SOLR-14291: Handle dotted fields in legacy Analytics Component (Anatolii Siuniaev via Mikhail Khludnev)
-
-* SOLR-14371: Zk StatusHandler now parse dynamic zk server config if supported, fixing Admin UI Zookeeper Status
-  screen in case dynamic reconfig host list differs from static zkHost string (janhoy)
-
-* SOLR-14421: New examples in solr.in.cmd in Solr 8.5 don't work as provided (Colvin Cowie via janhoy)
-
-* SOLR-14431: SegmentsInfoRequestHandler does not release IndexWriter (Tiziano Degaetano, ab)
-
-* SOLR-14463: Solr Admin ZkStatus page now works with ZK 3.6, without 'For input string: "null"' error (janhoy, Bernd Wahlen)
-
-* SOLR-14456: Fix Content-Type header usage when a request is forwarded from Solr node to Solr
-  node with compression enabled (samuelgmartinez via Houston Putman)
-
-* SOLR-8394: /admin/luke was always showing 0 for indexHeapUsageBytes. It should work now.
-  (Steve Molloy, Isabelle Giguere, David Smiley)
-
-* SOLR-14492: Fix ArrayIndexOutOfBoundsException in json.facet 'terms' when FacetFieldProcessorByHashDV is
-  used with aggregations over multivalued numeric fields (hossman)
-
-* SOLR-14477: Fix incorrect 'relatedness()' calculations in json.facet 'terms' when 'prefix' option is used
-  (hossman)
-
-* SOLR-14504: ZkController LiveNodesListener has NullPointerException in startup race.
-  (Colvin Cowie via ab)
-
-* SOLR-14498: Upgrade to Caffeine 2.8.4, which fixes the cache poisoning issue. (Jakub Zytka, ab)
-
-* SOLR-14517: Dont ignore 'mm' localparam on edismax queries using operators (Yuriy Koval via Jason Gerlowski)
-
-* SOLR-14491: Intercepting internode requests in KerberosPlugin when HTTP/2 client is used (Ishan Chattopadhyaya, Moshe Bla)
-
-* SOLR-14525: SolrCoreAware, ResourceLoaderAware should be honored for plugin loaded from packages (noble)
-
-* SOLR-9679: When removing zk node /security.json, security is now disabled gracefully (janhoy)
-
-* SOLR-14520: Fixed server errors from the json.facet allBuckets:true option when combined with refine:true
-  (Michael Gibney, hossman)
-
-* SOLR-14467: Fix relatedness() stat in json.facets to no longer cause server errors (or nonsense results)
-  when combined with allBuckets:true.  (Michael Gibney, hossman)
-
-* SOLR-13203: Return 400 status code on invalid dynamic field for Edismax's user Fields
-  (Johannes Kloos, mrsoong via Munendra S N)
-
-* SOLR-14550: Fix duplicates issue in Atomic updates with add-distinct (Thomas Corthals, Munendra S N)
-
-* SOLR-14345: Return proper error message when non-BinaryResponseParser is used in solrJ (Munendra S N)
-
-* SOLR-14516: NPE in JsonTextWriter (noble)
-
-* SOLR-14577: Return 400 BAD REQUEST when field is missing on a Terms query parser request
-  (Tomás Fernández Löbbe)
-
-* SOLR-14409: Existing violations allow bypassing policy rules when adding new replicas (noble, ab)
-
-* SOLR-14584: Correct SOLR_SSL_KEY_STORE and SOLR_SSL_TRUST_STORE example comments in solr.in.sh and solr.in.cmd files
-  (Aren Cambre via Christine Poerschke)
-
-* SOLR-14628: hl.fragsizeIsMinimum now defaults to true, thus fragments size like previous to Solr 8.5 and addresses a
-  significant performance regression. (David Smiley, Michal Hlavac)
-
-Other Changes
----------------------
-* SOLR-14197: SolrResourceLoader: marked many methods as deprecated, and in some cases rerouted exiting logic to avoid
-  them. (David Smiley)
-
-* SOLR-14312: Upgrade Zookeeper to 3.5.7 (Erick Erickson)
-
-* SOLR-14296: Update netty to 4.1.46 (Andras Solaman via Erick Erickson)
-
-* SOLR-10157: Improve error messages when unknown aggregations are specified in the request (hossman, Munendra S N)
-
-* SOLR-13944: Remove redundant checks in SpellCheckCollator and add tests for spellcheck with collapse
-  (Stefan, Munendra S N, Tomas Eduardo Fernandez Lobbe)
-
-* SOLR-12353: SolrDispatchFilter expensive non-conditional debug line degrades performance (Pascal Proulx via Erick Erickson)
-
-* SOLR-13842: Remove redundant defaults from ImplicitPlugins.json (Munendra S N)
-
-* SOLR-13893: BlobRepository reads max jar size from `runtime.lib.size` system property. Old `runtme.lib.size` is Deprecated
-  (Erick Erickson, Kesharee Nandan Vishwakarma, Munendra S N)
-
-* SOLR-14367: Upgrade Tika to 1.24 (Mibo via Erick Erickson)
-
-* SOLR-14351: Hardened MDC logging; sometimes info was absent (David Smiley)
-
-* SOLR-14386: Update Jetty to 9.4.27 and dropwizard-metrics version to 4.1.5 (Erick Erickson)
-
-* SOLR-9909: 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. (Andras Salamon, shalin)
-
-* SOLR-14391: Removed internal-ish ScoreFilter marker interface; only used by {!collapse}.  Removed needless code in
-  SolrIndexSearcher.getDocSet(List<Query>) (processes some filter queries).  (David Smiley)
-
-* SOLR-13886: HDFSSyncSliceTest and SyncSliceTest started failing frequently (Kevin Risden)
-
-* SOLR-14173: Major redesign of the Solr Reference Guide (Cassandra Targett)
-
-* SOLR-14461: Replaced commons-fileupload dependency with using Jetty's facilities. (David Smiley)
-
-* SOLR-14466: Upgrade log4j2 to latest release (2.13.2) (Erick Erickson)
-
-* SOLR-11934: Visit Solr logging, it's too noisy. Note particularly that the messages for
-  opening a new searcher have changed and include the autowarm time. (Erick Erickson)
-
-* SOLR-7880: Update commons-cli to 1.4 (Erick Erickson)
-
-* SOLR-14226: Fix or suppress 14 resource leak warnings in apache/solr/core (Andras Salaman via
-  Erick Erickson)
-
-* SOLR-14482: Fix or suppress warnings in solr/search/facet (Erick Erickson)
-
-* SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud (Andras Salaman via
-  Erick Erickson)
-
-* SOLR-14495: Fix or suppress warnings in solr/search/function (Erick Erickson)
-
-* SOLR-14280: Improve error reporting in SolrConfig (Andras Salamon via Jason Gerlowski)
-
-* SOLR-14474: Fix remaining auxilliary class warnings in Solr (Erick Erickson)
-
-* SOLR-14519: Fix or suppress warnings in solr/cloud/autoscaling/ (Erick Erickson)
-
-* SOLR-14526: fix or suppress warnings in apache/solr/core (Erick Erickson)
-
-* SOLR-14533: Fix or suppress warnings in solr/handler/admin (Andras Salamon, Erick Erickson)
-
-* SOLR-14535: Fix or suppress warnings in apache/solr/handler/component (Erick Erickson)
-
-* SOLR-14538: Fix or suppress remaining warnings in apache/solr/handler (Erick Erickson)
-
-* SOLR-14536: Fix or suppress warnings in apache/solr/common (Erick Erickson)
-
-* SOLR-14480: Fix or suppress warnings in solr/cloud/api (Erick Erickson)
-
-* SOLR-13492: Ensure explicit GCs are concurrent by adding '+ExplicitGCInvokesConcurrent'.
-  (Guna Sekhar Dora, Shawn Heisey, Munendra S N)
-
-* SOLR-14542: Fix or suppress warnings in solr/handler/dataimport (Erick Erickson)
-
-* SOLR-14544: Fix or suppress warnings in solr/client/solrj/io/eval (Erick Erickson)
-
-* SOLR-14543: Fix or suppress warnings in apache/solr/search (Erick Erickson)
-
-* SOLR-14545: Fix or suppress warnings in apache/solr/update (Erick Erickson)
-
-* SOLR-14548: Address warning: static member should be qualified by type name (Mike Drob)
-
-* SOLR-14547: Fix or suppress warnings in solr/client/solrj/io/stream (Erick Erickson)
-
-* SOLR-14455: Fix or suppress warnings in solr/test-framework (Erick Erickson)
-
-* SOLR-14559: Fix or suppress warnings in solr/core/src/java/org/apache/solr/util,
-  response, cloud, security, schema, api (Erick Erickson)
-
-* SOLR-14563: Fix or suppress warnings in solr/contrib (Erick Erickson)
-
-* SOLR-14565: Fix or suppress warnings in solrj/impl and solrj/io/graph (Erick Erickson)
-
-* SOLR-14564: Fix or suppress remaining warnings in solr/core (Erick Erickson)
-
-* SOLR-14567: Fix or suppress remaining warnings in solrj (Erick Erickson)
-
-* SOLR-14556: Fix or suppress warnings in solrj/cloud/autoscaling (Erick Erickson)
-
-* SOLR-14573: Fix or suppress warnings in solrj/src/test (Erick Erickson)
-
-* SOLR-14574: Fix or suppress warnings in solr/core/src/test (parts 1 and 2) (Erick Erickson)
-
-* SOLR-13268: Clean up any test failures resulting from defaulting to async logging (Erick Erickson)
-
-* LUCENE-9411: Fail complation on warnings, 9x gradle-only (Erick Erickson, Dawid Weiss)
-  Only mentioned in 8.6 because I backported some more warning suppressions but not
-  the fail-on-warnings.
-
-* SOLR-14589: Remove IntelliJ //noinspection comments (Erick Erickson)
-
-* SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings
-  (gezapeti, Ilan Ginsburg, Erick Erickson)
-
-* SOLR-14022: Deprecate CDCR (Joel Bernstein, Ishan Chattopadhyaya)
-
-* SOLR-14066: Data Import Handler is deprecated. It is scheduled to be removed as of 9.0 and a community supported
-  package for the same may now be used instead. (Ishan Chattopadhyaya, janhoy)
-
-* SOLR-14021: HDFS support is deprecated. It is scheduled to be removed as of 9.0. Please see JIRA for more details.
-  (Joel Bernstein, Ishan Chattopadhyaya)
-
-* SOLR-14603: Upgrade Restlet to 2.4.3 (marcussorealheis)
-
-==================  8.5.2 ==================
-
-Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
-
-Bug Fixes
----------------------
-
-* SOLR-14411: Fix Admin UI collection/core drop-downs placeholder text. Completes work started in SOLR-14359 (janhoy)
-
-* SOLR-14471: Fix bug in shards.preference behavior, base replica selection strategy not applied to the last group of
-  equivalent replicas. (Michael Gibney via Tomás Fernández Löbbe)
-
-==================  8.5.1 ==================
-
-Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
-
-Bug Fixes
----------------------
-
-* SOLR-14359: Admin UI collection/core drop-downs had wrong placeholder text. Fixed by upgrading angular-chosen
-  This fix was incomplete, see SOLR-14411 for the followup (janhoy)
-
 ==================  8.5.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
 
 New Features
 ---------------------
-* SOLR-12490: Introducing json.queries in JSON Request API. Every property of this object holds one or many named
-   Query DSL queries. It's optional and doesn't impact response without explicit referencing these queries by names
+ * SOLR-12490: Introducing json.queries in JSON Request API. Every property of this object holds one or many named 
+   Query DSL queries. It's optional and doesn't impact response without explicit referencing these queries by names 
    (Anatolii Siuniaev via Mikhail Khludnev)
 
-* SOLR-14130: Add postlogs command line tool for indexing Solr logs (Joel Bernstein)
+ * SOLR-14130: Add postlogs command line tool for indexing Solr logs (Joel Bernstein)
 
-* SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
+ * SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
 
-* SOLR-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)
+ * SOLR-13892: New "top-level" docValues join implementation (Jason Gerlowski, Joel Bernstein)
 
-* SOLR-14241: New delete() Stream Decorator (hossman)
+ * SOLR-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)
 
-* SOLR-14139: Support backtick phrase queries in Streaming Expressions (Joel Bernstein)
+ * SOLR-14242: HdfsDirectory now supports indexing geo-points, ranges or shapes. (Adrien Grand)
 
-* SOLR-12238: Synonyms can be individually boosted by marking them with '|<boost>' in
-  the synonyms file, and adding a DelimitedBoostTokenFilter to the analysis chain
-  (Alessandro Benedetti, Alan Woodward)
+ * SOLR-14241: New delete() Stream Decorator (hossman)
+
+ * SOLR-13965: In GraphHandler, support <expressible> configuration and deprecate <streamFunctions> configuration.
+   (Eric Pugh via Christine Poerschke)
 
 Improvements
 ---------------------
@@ -613,6 +88,8 @@ Improvements
 * SOLR-13984: Java's SecurityManager sandbox can be enabled via environment variable,
   SOLR_SECURITY_MANAGER_ENABLED=true. (rmuir)
 
+* SOLR-13808: filter in BoolQParser and {"bool":{"filter":..}} in Query DSL are cached by default (Mikhail Khludnev)
+
 * SOLR-14129: Reuse Jackson ObjectMapper in AuditLoggerPlugin (janhoy)
 
 * LUCENE-9093: The Unified highlighter has two new passage sizing parameters, hl.fragAlignRatio and
@@ -634,18 +111,13 @@ Improvements
 
 * SOLR-14270: export command to have an option to write to a zip file (noble)
 
+* SOLR-14114: Add WARN to Solr log that embedded ZK is not supported in production (janhoy)
+
 * SOLR-14286: Upgrade Jaegar to 1.1.0 (Cao Manh Dat)
 
 * SOLR-14281: Make sharedLib configurable through system property. Also allow multiple paths, separated by comma.
   See Reference Guide 'format-of-solr-xml.adoc' and comment in 'solr.in.sh' for details (janhoy)
 
-* SOLR-13892: New "top-level" docValues join implementation (Jason Gerlowski, Joel Bernstein)
-
-* SOLR-14242: HdfsDirectory now supports indexing geo-points, ranges or shapes. (Adrien Grand)
-
-* SOLR-13965: In GraphHandler, support <expressible> configuration and deprecate <streamFunctions> configuration.
-   (Eric Pugh via Christine Poerschke)
-
 Optimizations
 ---------------------
 
@@ -654,8 +126,6 @@ Optimizations
   terms queries that are searching 500 or more terms.  Users wishing to ignore this heuristic can choose the
   docValuesTermsFilterTopLevel or docValuesTermsFilterPerSegment methods directly. (Jason Gerlowski, Joel Bernstein, David Smiley)
 
-* SOLR-13808: filter in BoolQParser and {"bool":{"filter":..}} in Query DSL are cached by default (Mikhail Khludnev)
-
 * SOLR-14040: The shareSchema solr.xml option now supports SolrCloud.  shareSchema is useful when you have many
   cores per node and large schemas.  (David Smiley)
 
@@ -724,10 +194,6 @@ Bug Fixes
 
 * SOLR-14287: Admin UI Properties screen does not show colons (janhoy)
 
-* SOLR-14299: IndexFetcher doesn't reset error count to 0 after the last packet is received (Pushkar Raste via Mike Drob)
-
-* SOLR-14073: Fix segment look ahead NPE in CollapsingQParserPlugin (Joel Bernstein)
-
 Other Changes
 ---------------------
 
@@ -762,11 +228,6 @@ Other Changes
 
 * SOLR-10306: Document in Reference Guide how to disable or reduce swapping (janhoy)
 
-* SOLR-13983: Process execution is removed from SystemInfoHandler. A best-effort attempt to
-execute `uname -a` and "`uptime`" on non-Windows platforms is no longer made. (rmuir)
-
-* SOLR-14114: Add WARN to Solr log that embedded ZK is not supported in production (janhoy)
-
 ==================  8.4.1 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
@@ -2981,7 +2442,7 @@ Upgrade Notes
   start scripts will no longer attempt this nor move existing console or GC logs into logs/archived either (SOLR-12144).
 
 * SOLR-11673: Slave doesn't commit empty index when completely new index is detected on master during replication.
-  To return the previous behavior pass false to skipCommitOnLeaderVersionZero in slave section of replication
+  To return the previous behavior pass false to skipCommitOnMasterVersionZero in slave section of replication
   handler configuration, or pass it to the fetchindex command.
 
 * SOLR-11453: Configuring slowQueryThresholdMillis now logs slow requests to a separate file - solr_slow_requests.log.
@@ -3141,7 +2602,7 @@ Bug Fixes
 * SOLR-12155: Exception from UnInvertedField constructor puts threads to infinite wait.
  (Andrey Kudryavtsev, Mikhail Khludnev)
 
-* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnLeaderRestart(): handle unexpected replication failures
+* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnMasterRestart(): handle unexpected replication failures
   (Steve Rowe)
 
 * SOLR-12190: Need to properly escape output in GraphMLResponseWriter. (yonik)
@@ -3777,7 +3238,7 @@ Other Changes
 * SOLR-12067: Increase autoAddReplicas default 30 second wait time to 120 seconds.
   (Varun Thacker, Mark Miller via shalin)
 
-* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnLeaderRestart that happened
+* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnMasterRestart that happened
   due to using stale http connections. (Gus Heck, shalin)
 
 * SOLR-12099: Remove reopenReaders attribute from 'IndexConfig in SolrConfig' page in ref guide. (shalin)
@@ -7116,8 +6577,8 @@ Other Changes
   (David Smiley)
 
 * SOLR-8842: security rules made more foolproof by asking the requesthandler  about the well known
-  permission name.  The APIs are also modified to ue 'index' as the unique identifier instead of name.
-  Name is an optional attribute  now and only to be used when specifying well-known permissions (noble)
+  permission name.
  The APIs are also modified to ue 'index' as the unique identifier instead of name.
+  Name is an optional attribute
  now and only to be used when specifying well-known permissions (noble)
 
 * SOLR-5616: Simplifies grouping code to use ResponseBuilder.needDocList() to determine if it needs to
   generate a doc list for grouped results. (Steven Bower, Keith Laban, Dennis Gove)
diff --git a/solr/NOTICE.txt b/solr/NOTICE.txt
index f60d6b4..c3213f8 100644
--- a/solr/NOTICE.txt
+++ b/solr/NOTICE.txt
@@ -49,7 +49,7 @@ Copyright (C) 2010-2014 James Burke, https://github.com/jrburke/requirejs
 This product includes angular-utf8-base64.js Javascript library created by Andrey Bezyazychniy
 Copyright (c) 2014 Andrey Bezyazychniy, https://github.com/stranger82/angular-utf8-base64
 
-This product includes code copied and modified from the www-authenticate Javascript library
+This product includes code copied and modified from the www-authenticate Javascript library 
 Copyright (c) 2013 Randy McLaughlin, MIT-license, https://github.com/randymized/www-authenticate
 
 This product includes fugue icons created by Yusuke Kamiyamane
@@ -76,6 +76,10 @@ the Apache Blur incubating project and are Apache License 2.0.
 ASM (Java bytecode manipulation and analysis framework): http://asm.ow2.org/
 Copyright (c) 2000-2005 INRIA, France Telecom
 
+This project includes portions of the Jekyll Documentation Theme
+Copyright (c) 2016 Tom Johnson
+License: MIT https://github.com/tomjohnson1492/documentation-theme-jekyll/blob/gh-pages/licenses/LICENSE
+
 This project includes templates from the Asciidoctor HTML5 backend converter
 Copyright (c) 2014-2018 Jakub Jirutka
 License: MIT https://github.com/jirutka/asciidoctor-html5s/blob/master/LICENSE
@@ -84,10 +88,6 @@ This project includes the Navgoco JQuery plugin
 Copyright (c) 2013 Christopher Tsoulloftas, http://www.komposta.net
 License: BSD https://github.com/tefra/navgoco/blob/master/LICENSE-BSD
 
-This project includes the Malihu Custom Scrollbar Plugin
-Copyright (c) Manos Malihutsakis, http://manos.malihu.gr/
-License: MIT https://github.com/malihu/malihu-custom-scrollbar-plugin/blob/master/LICENSE.txt
-
 =========================================================================
 ==  Antlr2 Notice                                                       ==
 =========================================================================
@@ -160,11 +160,6 @@ http://bitbucket.org/jpbarrette/moman/overview/
 The class org.apache.lucene.util.WeakIdentityMap was derived from
 the Apache CXF project and is Apache License 2.0.
 
-The class org.apache.lucene.util.compress.LZ4 is a Java rewrite of the LZ4
-compression library (https://github.com/lz4/lz4/tree/dev/lib) that is licensed
-under the 2-clause BSD license.
-(https://opensource.org/licenses/bsd-license.php)
-
 The Google Code Prettify is Apache License 2.0.
 See http://code.google.com/p/google-code-prettify/
 
diff --git a/solr/README.md b/solr/README.md
deleted file mode 100644
index 66e2fff..0000000
--- a/solr/README.md
+++ /dev/null
@@ -1,217 +0,0 @@
-<!--
-  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.
--->
-
-Welcome to the Apache Solr project!
------------------------------------
-
-Solr is the popular, blazing fast open source enterprise search platform
-from the Apache Lucene project.
-
-For a complete description of the Solr project, team composition, source
-code repositories, and other details, please see the Solr web site at
-https://lucene.apache.org/solr
-
-
-Getting Started
----------------
-
-To start Solr for the first time after installation, simply do:
-
-```
-  bin/solr start
-```
-
-This will launch a standalone Solr server in the background of your shell,
-listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
-which allows you to scale out using sharding and replication. To launch Solr
-in cloud mode, do:
-
-```
-  bin/solr start -cloud
-```
-
-To see all available options for starting Solr, please do:
-
-```
-  bin/solr start -help
-```
-
-After starting Solr, create either a core or collection depending on whether
-Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
-
-```
-  bin/solr create -c <name>
-```
-
-This will create a collection that uses a data-driven schema which tries to guess
-the correct field type when you add documents to the index. To see all available
-options for creating a new collection, execute:
-
-```
-  bin/solr create -help
-```
-
-After starting Solr, direct your Web browser to the Solr Admin Console at:
-
-```
-  http://localhost:8983/solr/
-```
-
-When finished with your Solr installation, shut it down by executing:
-
-```
-  bin/solr stop -all
-```
-
-The `-p PORT` option can also be used to identify the Solr instance to shutdown,
-where more than one Solr is running on the machine.
-
-
-Solr Examples
----------------
-
-Solr includes a few examples to help you get started. To run a specific example, do:
-
-```
-  bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
-
-    cloud        : SolrCloud example
-    dih          : Data Import Handler (rdbms, mail, atom, tika)
-    schemaless   : Schema-less example (schema is inferred from data during indexing)
-    techproducts : Kitchen sink example providing comprehensive examples of Solr features
-```
-
-For instance, if you want to run the Solr Data Import Handler example, do:
-
-```
-  bin/solr -e dih
-```
-
-Indexing Documents
----------------
-
-To add documents to the index, use bin/post.  For example:
-
-```
-     bin/post -c <collection_name> example/exampledocs/*.xml
-```
-
-For more information about Solr examples please read...
-
- * [example/README.md](example/README.md)
-   
-For more information about the "Solr Home" and Solr specific configuration
- 
- * https://lucene.apache.org/solr/guide/solr-tutorial.html
-   
-For a Solr tutorial
- 
- * https://lucene.apache.org/solr/resources.html
-
-For a list of other tutorials and introductory articles.
-
-or linked from "docs/index.html" in a binary distribution.
-
-Also, there are Solr clients for many programming languages, see
-
-  * https://wiki.apache.org/solr/IntegratingSolr
-
-
-Files included in an Apache Solr binary distribution
-----------------------------------------------------
-
-```
-server/
-  A self-contained Solr instance, complete with a sample
-  configuration and documents to index. Please see: bin/solr start -help
-  for more information about starting a Solr server.
-
-example/
-  Contains example documents and an alternative Solr home
-  directory containing examples of how to use the Data Import Handler,
-  see example/example-DIH/README.md for more information.
-
-dist/solr-<component>-XX.jar
-  The Apache Solr libraries.  To compile Apache Solr Plugins,
-  one or more of these will be required.  The core library is
-  required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
-  for more information).
-
-docs/index.html
-  A link to the online version of Apache Solr Javadoc API documentation and Tutorial
-```
-
-Instructions for Building Apache Solr from Source
--------------------------------------------------
-
-1. Download the Java 11 JDK (Java Development Kit) or later from https://jdk.java.net/
-   You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
-   folder included on your command path. To test this, issue a "java -version" command
-   from your shell (command prompt) and verify that the Java version is 11 or later.
-
-2. Download the Apache Ant binary distribution (1.8.2+) from
-   http://ant.apache.org/  You will need Ant installed and the $ANT_HOME/bin (Windows:
-   %ANT_HOME%\bin) folder included on your command path. To test this, issue a
-   "ant -version" command from your shell (command prompt) and verify that Ant is
-   available.
-
-   You will also need to install Apache Ivy binary distribution (2.2.0) from
-   http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
-   this step, the Solr build system will offer to do it for you.
-
-3. Download the Apache Solr distribution, linked from the above web site.
-   Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
-   Alternately, you can obtain a copy of the latest Apache Solr source code
-   directly from the GIT repository:
-
-     https://lucene.apache.org/solr/versioncontrol.html
-
-4. Navigate to the "solr" folder and issue an "ant" command to see the available options
-   for building, testing, and packaging Solr.
-
-   NOTE:
-   To see Solr in action, you may want to use the "ant server" command to build
-   and package Solr into the server directory. See also server/README.md.
-
-
-Export control
--------------------------------------------------
-This distribution includes cryptographic software.  The country in
-which you currently reside may have restrictions on the import,
-possession, use, and/or re-export to another country, of
-encryption software.  BEFORE using any encryption software, please
-check your country's laws, regulations and policies concerning the
-import, possession, or use, and re-export of encryption software, to
-see if this is permitted.  See <http://www.wassenaar.org/> for more
-information.
-
-The U.S. Government Department of Commerce, Bureau of Industry and
-Security (BIS), has classified this software as Export Commodity
-Control Number (ECCN) 5D002.C.1, which includes information security
-software using or performing cryptographic functions with asymmetric
-algorithms.  The form and manner of this Apache Software Foundation
-distribution makes it eligible for export under the License Exception
-ENC Technology Software Unrestricted (TSU) exception (see the BIS
-Export Administration Regulations, Section 740.13) for both object
-code and source code.
-
-The following provides more details on the included cryptographic
-software:
-
-Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
-extracting text content and metadata from encrypted PDF files.
-See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr/README.txt b/solr/README.txt
new file mode 100644
index 0000000..80d26d5
--- /dev/null
+++ b/solr/README.txt
@@ -0,0 +1,189 @@
+# 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.
+
+
+Welcome to the Apache Solr project!
+-----------------------------------
+
+Solr is the popular, blazing fast open source enterprise search platform
+from the Apache Lucene project.
+
+For a complete description of the Solr project, team composition, source
+code repositories, and other details, please see the Solr web site at
+http://lucene.apache.org/solr
+
+
+Getting Started
+---------------
+
+To start Solr for the first time after installation, simply do:
+
+  bin/solr start
+
+This will launch a standalone Solr server in the background of your shell,
+listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
+which allows you to scale out using sharding and replication. To launch Solr
+in cloud mode, do:
+
+  bin/solr start -cloud
+
+To see all available options for starting Solr, please do:
+
+  bin/solr start -help
+
+After starting Solr, create either a core or collection depending on whether
+Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
+
+  bin/solr create -c <name>
+
+This will create a collection that uses a data-driven schema which tries to guess
+the correct field type when you add documents to the index. To see all available
+options for creating a new collection, execute:
+
+  bin/solr create -help
+
+After starting Solr, direct your Web browser to the Solr Admin Console at:
+
+  http://localhost:8983/solr/
+
+When finished with your Solr installation, shut it down by executing:
+
+  bin/solr stop -all
+
+The `-p PORT` option can also be used to identify the Solr instance to shutdown,
+where more than one Solr is running on the machine.
+
+
+Solr Examples
+---------------
+
+Solr includes a few examples to help you get started. To run a specific example, do:
+
+  bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
+
+    cloud        : SolrCloud example
+    dih          : Data Import Handler (rdbms, mail, atom, tika)
+    schemaless   : Schema-less example (schema is inferred from data during indexing)
+    techproducts : Kitchen sink example providing comprehensive examples of Solr features
+
+For instance, if you want to run the Solr Data Import Handler example, do:
+
+  bin/solr -e dih
+
+
+Indexing Documents
+---------------
+
+To add documents to the index, use bin/post.  For example:
+
+     bin/post -c <collection_name> example/exampledocs/*.xml
+
+For more information about Solr examples please read...
+
+ * example/README.txt
+   For more information about the "Solr Home" and Solr specific configuration
+ * https://lucene.apache.org/solr/guide/solr-tutorial.html
+   For a Solr tutorial
+ * http://lucene.apache.org/solr/resources.html
+   For a list of other tutorials and introductory articles.
+
+or linked from "docs/index.html" in a binary distribution.
+
+Also, there are Solr clients for many programming languages, see
+   http://wiki.apache.org/solr/IntegratingSolr
+
+
+Files included in an Apache Solr binary distribution
+----------------------------------------------------
+
+server/
+  A self-contained Solr instance, complete with a sample
+  configuration and documents to index. Please see: bin/solr start -help
+  for more information about starting a Solr server.
+
+example/
+  Contains example documents and an alternative Solr home
+  directory containing examples of how to use the Data Import Handler,
+  see example/example-DIH/README.txt for more information.
+
+dist/solr-<component>-XX.jar
+  The Apache Solr libraries.  To compile Apache Solr Plugins,
+  one or more of these will be required.  The core library is
+  required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
+  for more information).
+
+docs/index.html
+  A link to the online version of Apache Solr Javadoc API documentation and Tutorial
+
+
+Instructions for Building Apache Solr from Source
+-------------------------------------------------
+
+1. Download the Java 11 JDK (Java Development Kit) or later from https://jdk.java.net/
+   You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
+   folder included on your command path. To test this, issue a "java -version" command
+   from your shell (command prompt) and verify that the Java version is 11 or later.
+
+2. Download the Apache Ant binary distribution (1.8.2+) from
+   http://ant.apache.org/  You will need Ant installed and the $ANT_HOME/bin (Windows:
+   %ANT_HOME%\bin) folder included on your command path. To test this, issue a
+   "ant -version" command from your shell (command prompt) and verify that Ant is
+   available.
+
+   You will also need to install Apache Ivy binary distribution (2.2.0) from
+   http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
+   this step, the Solr build system will offer to do it for you.
+
+3. Download the Apache Solr distribution, linked from the above web site.
+   Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
+   Alternately, you can obtain a copy of the latest Apache Solr source code
+   directly from the GIT repository:
+
+     http://lucene.apache.org/solr/versioncontrol.html
+
+4. Navigate to the "solr" folder and issue an "ant" command to see the available options
+   for building, testing, and packaging Solr.
+
+   NOTE:
+   To see Solr in action, you may want to use the "ant server" command to build
+   and package Solr into the server directory. See also server/README.txt.
+
+
+Export control
+-------------------------------------------------
+This distribution includes cryptographic software.  The country in
+which you currently reside may have restrictions on the import,
+possession, use, and/or re-export to another country, of
+encryption software.  BEFORE using any encryption software, please
+check your country's laws, regulations and policies concerning the
+import, possession, or use, and re-export of encryption software, to
+see if this is permitted.  See <http://www.wassenaar.org/> for more
+information.
+
+The U.S. Government Department of Commerce, Bureau of Industry and
+Security (BIS), has classified this software as Export Commodity
+Control Number (ECCN) 5D002.C.1, which includes information security
+software using or performing cryptographic functions with asymmetric
+algorithms.  The form and manner of this Apache Software Foundation
+distribution makes it eligible for export under the License Exception
+ENC Technology Software Unrestricted (TSU) exception (see the BIS
+Export Administration Regulations, Section 740.13) for both object
+code and source code.
+
+The following provides more details on the included cryptographic
+software:
+    Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
+    extracting text content and metadata from encrypted PDF files.
+    See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr/bin/solr b/solr/bin/solr
index 7e3cf0c6..11f5081 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -103,17 +103,10 @@ fi
 
 if [ -n "$SOLR_JAVA_HOME" ]; then
   JAVA="$SOLR_JAVA_HOME/bin/java"
-  JSTACK="$SOLR_JAVA_HOME/bin/jstack"
 elif [ -n "$JAVA_HOME" ]; then
-  for java in "$JAVA_HOME"/bin/amd64 "$JAVA_HOME"/bin; do
-    if [ -x "$java/java" ]; then
-      JAVA="$java/java"
-      if [ -x "$java/jstack" ]; then
-        JSTACK="$java/jstack"
-      else
-        echo >&2 "The currently defined JAVA_HOME ($JAVA_HOME) refers to a location"
-        echo >&2 "where java was found but jstack was not found. Continuing."
-      fi
+  for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
+    if [ -x "$java" ]; then
+      JAVA="$java"
       break
     fi
   done
@@ -126,7 +119,6 @@ elif [ -n "$JAVA_HOME" ]; then
   fi
 else
   JAVA=java
-  JSTACK=jstack
 fi
 
 if [ -z "$SOLR_STOP_WAIT" ]; then
@@ -330,7 +322,7 @@ function print_usage() {
   if [ -z "$CMD" ]; then
     echo ""
     echo "Usage: solr COMMAND OPTIONS"
-    echo "       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, export"
+    echo "       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling, export"
     echo ""
     echo "  Standalone server example (start Solr running in the background on port 8984):"
     echo ""
@@ -829,7 +821,6 @@ function run_package() {
 
 # tries to gracefully stop Solr using the Jetty
 # stop command and if that fails, then uses kill -9
-# (will attempt to jstack before killing)
 function stop_solr() {
 
   DIR="$1"
@@ -866,15 +857,11 @@ function stop_solr() {
 
   CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
   if [ "$CHECK_PID" != "" ]; then
-    if [ "$JSTACK" != "" ]; then
-      echo -e "Solr process $SOLR_PID is still running; jstacking it now."
-      $JSTACK $SOLR_PID
-    fi
     echo -e "Solr process $SOLR_PID is still running; forcefully killing it now."
     kill -9 $SOLR_PID
     echo "Killed process $SOLR_PID"
     rm -f "$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
-    sleep 10
+    sleep 1
   fi
 
   CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
@@ -1417,6 +1404,11 @@ if [[ "$SCRIPT_CMD" == "zk" ]]; then
 fi
 
 
+if [[ "$SCRIPT_CMD" == "autoscaling" ]]; then
+  run_tool autoscaling $@
+  exit $?
+fi
+
 if [[ "$SCRIPT_CMD" == "export" ]]; then
   run_tool export $@
   exit $?
@@ -2105,14 +2097,6 @@ else
   SECURITY_MANAGER_OPTS=()
 fi
 
-# Enable ADMIN UI by default, and give the option for users to disable it
-if [ "$SOLR_ADMIN_UI_DISABLED" == "true" ]; then
-  SOLR_ADMIN_UI="-DdisableAdminUI=true"
-  echo -e "ADMIN UI Disabled"
-else
-  SOLR_ADMIN_UI="-DdisableAdminUI=false"
-fi
-
 JAVA_MEM_OPTS=()
 if [ -z "$SOLR_HEAP" ] && [ -n "$SOLR_JAVA_MEM" ]; then
   JAVA_MEM_OPTS=($SOLR_JAVA_MEM)
@@ -2147,8 +2131,7 @@ function start_solr() {
         '-XX:+ParallelRefProcEnabled' \
         '-XX:MaxGCPauseMillis=250' \
         '-XX:+UseLargePages' \
-        '-XX:+AlwaysPreTouch' \
-        '-XX:+ExplicitGCInvokesConcurrent')
+        '-XX:+AlwaysPreTouch')
   else
     GC_TUNE=($GC_TUNE)
   fi
@@ -2159,7 +2142,7 @@ function start_solr() {
   fi
 
   # If SSL-related system props are set, add them to SOLR_OPTS
-  if [ "$SOLR_SSL_ENABLED" == "true" ]; then
+  if [ "$SOLR_SSL_ENABLED" ]; then
     # If using SSL and solr.jetty.https.port not set explicitly, use the jetty.port
     SSL_PORT_PROP="-Dsolr.jetty.https.port=$SOLR_PORT"
     SOLR_OPTS+=($SOLR_SSL_OPTS "$SSL_PORT_PROP")
@@ -2221,11 +2204,9 @@ function start_solr() {
   SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE[@]}" "${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \
     "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" $SOLR_LOG_LEVEL_OPT -Dsolr.log.dir="$SOLR_LOGS_DIR" \
     "-Djetty.port=$SOLR_PORT" "-DSTOP.PORT=$stop_port" "-DSTOP.KEY=$STOP_KEY" \
-    # '-OmitStackTraceInFastThrow' ensures stack traces in errors,
-    # users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
-    "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" "-XX:-OmitStackTraceInFastThrow" \
+    "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" \
     "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.data.home=$SOLR_DATA_HOME" "-Dsolr.install.dir=$SOLR_TIP" \
-    "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_ADMIN_UI}")
+    "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}")
 
   if [ "$SOLR_MODE" == "solrcloud" ]; then
     IN_CLOUD_MODE=" in SolrCloud mode"
diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd
index 8fb5e7a..2f28bd6 100755
--- a/solr/bin/solr.cmd
+++ b/solr/bin/solr.cmd
@@ -224,6 +224,7 @@ IF "%1"=="version" goto get_version
 IF "%1"=="-v" goto get_version
 IF "%1"=="-version" goto get_version
 IF "%1"=="assert" goto run_assert
+IF "%1"=="autoscaling" goto run_autoscaling
 IF "%1"=="export" goto run_export
 IF "%1"=="package" goto run_package
 
@@ -302,7 +303,7 @@ goto done
 :script_usage
 @echo.
 @echo Usage: solr COMMAND OPTIONS
-@echo        where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, export
+@echo        where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling, export
 @echo.
 @echo   Standalone server example (start Solr running in the background on port 8984):
 @echo.
@@ -1041,10 +1042,13 @@ IF "%SCRIPT_CMD%"=="stop" (
                 del "%SOLR_TIP%"\bin\solr-!SOME_SOLR_PORT!.port
                 timeout /T 5
                 REM Kill it if it is still running after the graceful shutdown
-                IF EXIST "%JAVA_HOME%\bin\jstack.exe" (
-                  qprocess "%%k" >nul 2>nul && "%JAVA_HOME%\bin\jstack.exe" %%k && taskkill /f /PID %%k
-                ) else (
-                  qprocess "%%k" >nul 2>nul && taskkill /f /PID %%k
+                For /f "tokens=2,5" %%M in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
+                  IF "%%N"=="%%k" (
+                    IF "%%M"=="%SOLR_JETTY_HOST%:!SOME_SOLR_PORT!" (
+                      @echo Forcefully killing process %%N
+                      taskkill /f /PID %%N
+                    )
+                  )
                 )
               )
             )
@@ -1068,10 +1072,13 @@ IF "%SCRIPT_CMD%"=="stop" (
           del "%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
           timeout /T 5
           REM Kill it if it is still running after the graceful shutdown
-          IF EXIST "%JAVA_HOME%\bin\jstack.exe" (
-            qprocess "%%N" >nul 2>nul && "%JAVA_HOME%\bin\jstack.exe" %%N && taskkill /f /PID %%N
-          ) else (
-            qprocess "%%N" >nul 2>nul && taskkill /f /PID %%N
+          For /f "tokens=2,5" %%j in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":%SOLR_PORT% "') do (
+            IF "%%N"=="%%k" (
+              IF "%%j"=="%SOLR_JETTY_HOST%:%SOLR_PORT%" (
+                @echo Forcefully killing process %%N
+                taskkill /f /PID %%N
+              )
+            )
           )
         )
       )
@@ -1192,13 +1199,6 @@ IF "%SOLR_SECURITY_MANAGER_ENABLED%"=="true" (
 -Dsolr.internal.network.permission=*
 )
 
-REM Enable ADMIN UI by default, and give the option for users to disable it
-IF "%SOLR_ADMIN_UI_DISABLED%"=="true" (
-  set DISABLE_ADMIN_UI="true"
-) else (
-  set DISABLE_ADMIN_UI="false"
-)
-
 IF NOT "%SOLR_HEAP%"=="" set SOLR_JAVA_MEM=-Xms%SOLR_HEAP% -Xmx%SOLR_HEAP%
 IF "%SOLR_JAVA_MEM%"=="" set SOLR_JAVA_MEM=-Xms512m -Xmx512m
 IF "%SOLR_JAVA_STACK_SIZE%"=="" set SOLR_JAVA_STACK_SIZE=-Xss256k
@@ -1211,8 +1211,7 @@ IF "%GC_TUNE%"=="" (
     -XX:+ParallelRefProcEnabled ^
     -XX:MaxGCPauseMillis=250 ^
     -XX:+UseLargePages ^
-    -XX:+AlwaysPreTouch ^
-    -XX:+ExplicitGCInvokesConcurrent
+    -XX:+AlwaysPreTouch
 )
 
 if !JAVA_MAJOR_VERSION! GEQ 9  (
@@ -1285,11 +1284,7 @@ IF "%verbose%"=="1" (
 )
 
 set START_OPTS=-Duser.timezone=%SOLR_TIMEZONE%
-REM '-OmitStackTraceInFastThrow' ensures stack traces in errors,
-REM users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
-set "START_OPTS=%START_OPTS% -XX:-OmitStackTraceInFastThrow"
 set START_OPTS=%START_OPTS% !GC_TUNE! %GC_LOG_OPTS%
-set START_OPTS=%START_OPTS% -DdisableAdminUI=%DISABLE_ADMIN_UI%
 IF NOT "!CLOUD_MODE_OPTS!"=="" set "START_OPTS=%START_OPTS% !CLOUD_MODE_OPTS!"
 IF NOT "!IP_ACL_OPTS!"=="" set "START_OPTS=%START_OPTS% !IP_ACL_OPTS!"
 IF NOT "%REMOTE_JMX_OPTS%"=="" set "START_OPTS=%START_OPTS% %REMOTE_JMX_OPTS%"
@@ -1453,6 +1448,13 @@ if errorlevel 1 (
 )
 goto done
 
+:run_autoscaling
+"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
+  -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
+  -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
+  org.apache.solr.util.SolrCLI %* 
+goto done:
+
 :run_export
 "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
   -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
diff --git a/solr/bin/solr.in.cmd b/solr/bin/solr.in.cmd
index 0c752da..f018f31 100755
--- a/solr/bin/solr.in.cmd
+++ b/solr/bin/solr.in.cmd
@@ -35,7 +35,6 @@ REM set GC_LOG_OPTS=-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+Prin
 
 REM Various GC settings have shown to work well for a number of common Solr workloads.
 REM See solr.cmd GC_TUNE for the default list.
-REM set GC_TUNE=-XX:+ExplicitGCInvokesConcurrent
 REM set GC_TUNE=-XX:SurvivorRatio=4
 REM set GC_TUNE=%GC_TUNE% -XX:TargetSurvivorRatio=90
 REM set GC_TUNE=%GC_TUNE% -XX:MaxTenuringThreshold=8
@@ -48,7 +47,8 @@ REM set GC_TUNE=%GC_TUNE% -XX:+UseCMSInitiatingOccupancyOnly
 REM set GC_TUNE=%GC_TUNE% -XX:CMSInitiatingOccupancyFraction=50
 REM set GC_TUNE=%GC_TUNE% -XX:CMSMaxAbortablePrecleanTime=6000
 REM set GC_TUNE=%GC_TUNE% -XX:+CMSParallelRemarkEnabled
-REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled      etc.
+REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled
+REM set GC_TUNE=%GC_TUNE% -XX:-OmitStackTraceInFastThrow    etc.
 
 REM Set the ZooKeeper connection string if using an external ZooKeeper ensemble
 REM e.g. host1:2181,host2:2181/chroot
@@ -132,9 +132,9 @@ REM to enable https module with custom jetty configuration.
 REM set SOLR_SSL_ENABLED=true
 REM Uncomment to set SSL-related system properties
 REM Be sure to update the paths to the correct keystore for your environment
-REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12
+REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
 REM set SOLR_SSL_KEY_STORE_PASSWORD=secret
-REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12
+REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
 REM set SOLR_SSL_TRUST_STORE_PASSWORD=secret
 REM Require clients to authenticate
 REM set SOLR_SSL_NEED_CLIENT_AUTH=false
@@ -168,13 +168,13 @@ REM * javax.net.ssl.keyStorePassword
 REM * javax.net.ssl.trustStorePassword
 REM More info: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html
 REM set SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH=localjceks://file/home/solr/hadoop-credential-provider.jceks
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.ssl.credential.provider.chain=hadoop
+REM set SOLR_OPTS=" -Dsolr.ssl.credential.provider.chain=hadoop"
 
 REM Settings for authentication
 REM Please configure only one of SOLR_AUTHENTICATION_CLIENT_BUILDER or SOLR_AUTH_TYPE parameters
 REM set SOLR_AUTHENTICATION_CLIENT_BUILDER=org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory
 REM set SOLR_AUTH_TYPE=basic
-REM set SOLR_AUTHENTICATION_OPTS=-Dbasicauth=solr:SolrRocks
+REM set SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
 
 REM Settings for ZK ACL
 REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
@@ -187,29 +187,20 @@ REM When running Solr in non-cloud mode and if planning to do distributed search
 REM list of hosts needs to be whitelisted or Solr will forbid the request. The whitelist can be configured in solr.xml,
 REM or if you are using the OOTB solr.xml, can be specified using the system property "solr.shardsWhitelist". Alternatively
 REM host checking can be disabled by using the system property "solr.disable.shardsWhitelist"
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984
+REM set SOLR_OPTS="%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984"
 
 REM For a visual indication in the Admin UI of what type of environment this cluster is, configure
 REM a -Dsolr.environment property below. Valid values are prod, stage, test, dev, with an optional
 REM label or color, e.g. -Dsolr.environment=test,label=Functional+test,color=brown
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.environment=prod
+REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.environment=prod"
 
 REM Specifies the path to a common library directory that will be shared across all cores.
 REM Any JAR files in this directory will be added to the search path for Solr plugins.
 REM If the specified path is not absolute, it will be relative to `%SOLR_HOME%`.
-REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.sharedLib=/path/to/lib
+REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.sharedLib=/path/to/lib"
 
 REM Runs solr in a java security manager sandbox. This can protect against some attacks.
 REM Runtime properties are passed to the security policy file (server\etc\security.policy)
 REM You can also tweak via standard JDK files such as ~\.java.policy, see https://s.apache.org/java8policy
 REM This is experimental! It may not work at all with Hadoop/HDFS features.
-REM set SOLR_SECURITY_MANAGER_ENABLED=true
-REM This variable provides you with the option to disable the Admin UI. if you uncomment the variable below and
-REM change the value to true. The option is configured as a system property as defined in SOLR_START_OPTS in the start
-REM scripts.
-REM set SOLR_ADMIN_UI_DISABLED=false
-
-REM Solr is by default allowed to read and write data from/to SOLR_HOME and a few other well defined locations
-REM Sometimes it may be necessary to place a core or a backup on a different location or a different disk
-REM This parameter lets you specify file system path(s) to explicitly allow. The special value of '*' will allow any path
-REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.allowPaths=D:\,E:\other\path"
+REM set SOLR_SECURITY_MANAGER_ENABLED=true
\ No newline at end of file
diff --git a/solr/bin/solr.in.sh b/solr/bin/solr.in.sh
index 2192aa4..3b31cdc 100644
--- a/solr/bin/solr.in.sh
+++ b/solr/bin/solr.in.sh
@@ -47,7 +47,6 @@
 
 # These GC settings have shown to work well for a number of common Solr workloads
 #GC_TUNE=" \
-#-XX:+ExplicitGCInvokesConcurrent \
 #-XX:SurvivorRatio=4 \
 #-XX:TargetSurvivorRatio=90 \
 #-XX:MaxTenuringThreshold=8 \
@@ -59,7 +58,8 @@
 #-XX:CMSInitiatingOccupancyFraction=50 \
 #-XX:CMSMaxAbortablePrecleanTime=6000 \
 #-XX:+CMSParallelRemarkEnabled \
-#-XX:+ParallelRefProcEnabled        etc.
+#-XX:+ParallelRefProcEnabled \
+#-XX:-OmitStackTraceInFastThrow  etc.
 
 # Set the ZooKeeper connection string if using an external ZooKeeper ensemble
 # e.g. host1:2181,host2:2181/chroot
@@ -152,9 +152,9 @@
 #SOLR_SSL_ENABLED=true
 # Uncomment to set SSL-related system properties
 # Be sure to update the paths to the correct keystore for your environment
-#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12
+#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
 #SOLR_SSL_KEY_STORE_PASSWORD=secret
-#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12
+#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
 #SOLR_SSL_TRUST_STORE_PASSWORD=secret
 # Require clients to authenticate
 #SOLR_SSL_NEED_CLIENT_AUTH=false
@@ -235,12 +235,4 @@
 # You can also tweak via standard JDK files such as ~/.java.policy, see https://s.apache.org/java8policy
 # This is experimental! It may not work at all with Hadoop/HDFS features.
 #SOLR_SECURITY_MANAGER_ENABLED=true
-# This variable provides you with the option to disable the Admin UI. if you uncomment the variable below and
-# change the value to true. The option is configured as a system property as defined in SOLR_START_OPTS in the start
-# scripts.
-# SOLR_ADMIN_UI_DISABLED=false
-
-# Solr is by default allowed to read and write data from/to SOLR_HOME and a few other well defined locations
-# Sometimes it may be necessary to place a core or a backup on a different location or a different disk
-# This parameter lets you specify file system path(s) to explicitly allow. The special value of '*' will allow any path
-#SOLR_OPTS="$SOLR_OPTS -Dsolr.allowPaths=/mnt/bigdisk,/other/path"
+
diff --git a/solr/build.gradle b/solr/build.gradle
index 9edc4d1..148c8e8 100644
--- a/solr/build.gradle
+++ b/solr/build.gradle
@@ -15,8 +15,6 @@
  * limitations under the License.
  */
 
-description = 'Parent project for Apache Solr'
-
 subprojects {
   group "org.apache.solr"
 }
\ No newline at end of file
diff --git a/solr/build.xml b/solr/build.xml
index c3cf6bc..f20727e 100644
--- a/solr/build.xml
+++ b/solr/build.xml
@@ -57,7 +57,7 @@
         <attribute name="Main-Class" value="org.apache.solr.util.SimplePostTool"/>
       </manifest>
     </jar>
-    <echo>See ${common-solr.dir}/README.md for how to run the Solr server.</echo>
+    <echo>See ${common-solr.dir}/README.txt for how to run the Solr server.</echo>
   </target>
   
   <target name="run-example" depends="server"
@@ -207,8 +207,8 @@
     </xslt>
     
     <markdown todir="${javadoc.dir}">
-      <fileset dir="site" includes="**/*.md" excludes="**/*.template.md"/>
-      <globmapper from="*.md" to="*.html"/>
+      <fileset dir="site" includes="**/*.mdtext"/>
+      <globmapper from="*.mdtext" to="*.html"/>
     </markdown>
 
     <copy todir="${javadoc.dir}">
@@ -459,7 +459,7 @@
                   fullpath="${fullnamever}/solr/LUCENE_CHANGES.txt" />
       <tarfileset dir="${src.export.dir}"
                   prefix="${fullnamever}"
-                  excludes="solr/example/**/*.sh solr/example/**/bin/ solr/scripts/** gradle/wrapper/gradle-wrapper.jar"/>
+                  excludes="solr/example/**/*.sh solr/example/**/bin/ solr/scripts/**"/>
       <tarfileset dir="${src.export.dir}"
                   prefix="${fullnamever}"
                   filemode="755"
@@ -530,8 +530,8 @@
                   fullpath="${fullnamever}/LUCENE_CHANGES.txt" />
       <tarfileset dir="."
                   prefix="${fullnamever}"
-                  includes="LICENSE.txt NOTICE.txt CHANGES.txt README.md site/SYSTEM_REQUIREMENTS.md
-                            bin/** server/** example/** contrib/**/lib/** contrib/**/conf/** contrib/**/README.md
+                  includes="LICENSE.txt NOTICE.txt CHANGES.txt README.txt SYSTEM_REQUIREMENTS.txt
+                            bin/** server/** example/** contrib/**/lib/** contrib/**/conf/** contrib/**/README.txt
                             licenses/**"
                   excludes="licenses/README.committers.txt **/data/ **/logs/* 
                             **/classes/ **/*.sh **/ivy.xml **/build.xml
diff --git a/solr/contrib/analysis-extras/README.md b/solr/contrib/analysis-extras/README.md
deleted file mode 100644
index 29f4219..0000000
--- a/solr/contrib/analysis-extras/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-Apache Solr - Analysis Extras
-=============================
-
-The analysis-extras plugin provides additional analyzers that rely
-upon large dependencies/dictionaries.
-
-It includes integration with ICU for multilingual support,
-analyzers for Chinese and Polish, and integration with
-OpenNLP for multilingual tokenization, part-of-speech tagging
-lemmatization, phrase chunking, and named-entity recognition.
-
-Each of the jars below relies upon including `/dist/solr-analysis-extras-X.Y.jar`
-in the `solrconfig.xml`
-
-* ICU relies upon `lucene-libs/lucene-analyzers-icu-X.Y.jar`
-and `lib/icu4j-X.Y.jar`
-
-* Smartcn relies upon `lucene-libs/lucene-analyzers-smartcn-X.Y.jar`
-
-* Stempel relies on `lucene-libs/lucene-analyzers-stempel-X.Y.jar`
-
-* Morfologik relies on `lucene-libs/lucene-analyzers-morfologik-X.Y.jar`
-and `lib/morfologik-*.jar`
-
-* OpenNLP relies on `lucene-libs/lucene-analyzers-opennlp-X.Y.jar`
-and `lib/opennlp-*.jar`
diff --git a/solr/contrib/analysis-extras/README.txt b/solr/contrib/analysis-extras/README.txt
new file mode 100644
index 0000000..236195e
--- /dev/null
+++ b/solr/contrib/analysis-extras/README.txt
@@ -0,0 +1,23 @@
+The analysis-extras plugin provides additional analyzers that rely
+upon large dependencies/dictionaries.
+
+It includes integration with ICU for multilingual support,
+analyzers for Chinese and Polish, and integration with
+OpenNLP for multilingual tokenization, part-of-speech tagging
+lemmatization, phrase chunking, and named-entity recognition.
+
+Each of the jars below relies upon including /dist/solr-analysis-extras-X.Y.jar 
+in the solrconfig.xml
+
+ICU relies upon lucene-libs/lucene-analyzers-icu-X.Y.jar
+and lib/icu4j-X.Y.jar
+
+Smartcn relies upon lucene-libs/lucene-analyzers-smartcn-X.Y.jar
+
+Stempel relies on lucene-libs/lucene-analyzers-stempel-X.Y.jar
+
+Morfologik relies on lucene-libs/lucene-analyzers-morfologik-X.Y.jar
+and lib/morfologik-*.jar
+
+OpenNLP relies on lucene-libs/lucene-analyzers-opennlp-X.Y.jar
+and lib/opennlp-*.jar
diff --git a/solr/contrib/analysis-extras/build.gradle b/solr/contrib/analysis-extras/build.gradle
index c39629a..1a3a423 100644
--- a/solr/contrib/analysis-extras/build.gradle
+++ b/solr/contrib/analysis-extras/build.gradle
@@ -18,8 +18,6 @@
 
 apply plugin: 'java-library'
 
-description = 'Additional analysis components'
-
 dependencies {
   api project(':solr:core')
 
diff --git a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
index 2fdbd01..d69c367 100644
--- a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
+++ b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
@@ -215,7 +215,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
 
   @SuppressWarnings("unchecked")
   @Override
-  public void init(@SuppressWarnings({"rawtypes"})NamedList args) {
+  public void init(NamedList args) {
 
     // high level (loose) check for which type of config we have.
     //
@@ -260,7 +260,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
    * "source" and "dest" init params do <em>not</em> exist.
    */
   @SuppressWarnings("unchecked")
-  private void initSimpleRegexReplacement(@SuppressWarnings({"rawtypes"})NamedList args) {
+  private void initSimpleRegexReplacement(NamedList args) {
     // The syntactic sugar for the case where there is only one regex pattern for source and the same pattern
     // is used for the destination pattern...
     //
@@ -316,7 +316,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
    * "source" and "dest" init params <em>do</em> exist.
    */
   @SuppressWarnings("unchecked")
-  private void initSourceSelectorSyntax(@SuppressWarnings({"rawtypes"})NamedList args) {
+  private void initSourceSelectorSyntax(NamedList args) {
     // Full and complete syntax where source and dest are mandatory.
     //
     // source may be a single string or a selector.
@@ -340,7 +340,6 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
     if (1 == sources.size()) {
       if (sources.get(0) instanceof NamedList) {
         // nested set of selector options
-        @SuppressWarnings({"rawtypes"})
         NamedList selectorConfig = (NamedList) args.remove(SOURCE_PARAM);
 
         srcInclusions = parseSelectorParams(selectorConfig);
@@ -356,7 +355,6 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
             throw new SolrException(SERVER_ERROR, "Init param '" + SOURCE_PARAM +
                 "' child 'exclude' must be <lst/>");
           }
-          @SuppressWarnings({"rawtypes"})
           NamedList exc = (NamedList) excObj;
           srcExclusions.add(parseSelectorParams(exc));
           if (0 < exc.size()) {
@@ -389,7 +387,6 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
     }
 
     if (d instanceof NamedList) {
-      @SuppressWarnings({"rawtypes"})
       NamedList destList = (NamedList) d;
 
       Object patt = destList.remove(PATTERN_PARAM);
@@ -492,7 +489,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
             if (matcher.find()) {
               resolvedDest = matcher.replaceAll(dest);
             } else {
-              log.debug("srcSelector.shouldMutate('{}') returned true, " +
+              log.debug("srcSelector.shouldMutate(\"{}\") returned true, " +
                   "but replacement pattern did not match, field skipped.", fname);
               continue;
             }
@@ -574,7 +571,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
   }
 
   /** macro */
-  private static SelectorParams parseSelectorParams(@SuppressWarnings({"rawtypes"})NamedList args) {
+  private static SelectorParams parseSelectorParams(NamedList args) {
     return FieldMutatingUpdateProcessorFactory.parseSelectorParams(args);
   }
 }
diff --git a/solr/contrib/analytics/build.gradle b/solr/contrib/analytics/build.gradle
index 91e165a..9f975d2 100644
--- a/solr/contrib/analytics/build.gradle
+++ b/solr/contrib/analytics/build.gradle
@@ -17,8 +17,6 @@
 
 apply plugin: 'java-library'
 
-description = 'Analytics Package'
-
 dependencies {
   implementation project(':solr:core')
   testImplementation project(':solr:test-framework')
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
index 1bd4334..9407d1d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
@@ -849,43 +849,43 @@ public class ExpressionFactory {
   public static interface ConstantFunction {
     AnalyticsValueStream apply(String t) throws SolrException;
   }
-  static class VariableFunctionInfo {
-    public String[] params;
-    public String returnSignature;
-  }
-  static class WeightedMeanVariableFunction {
-    public static final String name = "wmean";
-    public static final String params = "a,b";
-    public static final String function = DivideFunction.name+"("+SumFunction.name+"("+MultFunction.name+"(a,b)),"+SumFunction.name+"("+FilterFunction.name+"(b,"+ExistsFunction.name+"(a))))";
-  }
-  static class SumOfSquaresVariableFunction {
-    public static final String name = "sumofsquares";
-    public static final String params = "a";
-    public static final String function = SumFunction.name+"("+PowerFunction.name+"(a,2))";
-  }
-  static class SquareRootVariableFunction {
-    public static final String name = "sqrt";
-    public static final String params = "a";
-    public static final String function = PowerFunction.name+"(a,0.5)";
-  }
-  static class VarianceVariableFunction {
-    public static final String name = "variance";
-    public static final String params = "a";
-    public static final String function = SubtractFunction.name+"("+MeanFunction.name+"("+PowerFunction.name+"(a,2)),"+PowerFunction.name+"("+MeanFunction.name+"(a),2))";
-  }
-  static class SandardDeviationVariableFunction {
-    public static final String name = "stddev";
-    public static final String params = "a";
-    public static final String function = SquareRootVariableFunction.name+"("+VarianceVariableFunction.name+"(a))";
-  }
-  static class CSVVariableFunction {
-    public static final String name = "csv";
-    public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
-    public static final String function = SeparatedConcatFunction.name+"(',',a)";
-  }
-  static class CSVOutputVariableFunction {
-    public static final String name = "csv_output";
-    public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
-    public static final String function = "concat_sep(',',a"+ExpressionFactory.variableForEachSep+FillMissingFunction.name+"("+SeparatedConcatFunction.name+"(';',"+ExpressionFactory.variableForEachParam+"),''))";
-  }
 }
+class VariableFunctionInfo {
+  public String[] params;
+  public String returnSignature;
+}
+class WeightedMeanVariableFunction {
+  public static final String name = "wmean";
+  public static final String params = "a,b";
+  public static final String function = DivideFunction.name+"("+SumFunction.name+"("+MultFunction.name+"(a,b)),"+SumFunction.name+"("+FilterFunction.name+"(b,"+ExistsFunction.name+"(a))))";
+}
+class SumOfSquaresVariableFunction {
+  public static final String name = "sumofsquares";
+  public static final String params = "a";
+  public static final String function = SumFunction.name+"("+PowerFunction.name+"(a,2))";
+}
+class SquareRootVariableFunction {
+  public static final String name = "sqrt";
+  public static final String params = "a";
+  public static final String function = PowerFunction.name+"(a,0.5)";
+}
+class VarianceVariableFunction {
+  public static final String name = "variance";
+  public static final String params = "a";
+  public static final String function = SubtractFunction.name+"("+MeanFunction.name+"("+PowerFunction.name+"(a,2)),"+PowerFunction.name+"("+MeanFunction.name+"(a),2))";
+}
+class SandardDeviationVariableFunction {
+  public static final String name = "stddev";
+  public static final String params = "a";
+  public static final String function = SquareRootVariableFunction.name+"("+VarianceVariableFunction.name+"(a))";
+}
+class CSVVariableFunction {
+  public static final String name = "csv";
+  public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
+  public static final String function = SeparatedConcatFunction.name+"(',',a)";
+}
+class CSVOutputVariableFunction {
+  public static final String name = "csv_output";
+  public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
+  public static final String function = "concat_sep(',',a"+ExpressionFactory.variableForEachSep+FillMissingFunction.name+"("+SeparatedConcatFunction.name+"(';',"+ExpressionFactory.variableForEachParam+"),''))";
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
index d6ff05e..d06bba8 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
@@ -72,44 +72,43 @@ public class PivotFacet extends AnalyticsFacet implements StreamingFacet {
   public Iterable<Map<String,Object>> createResponse() {
     return pivotHead.createResponse();
   }
+}
+/**
+ * Typed Pivot class that stores the overall Pivot data and head of the Pivot node chain.
+ *
+ * This class exists so that the {@link PivotFacet} class doesn't have to be typed ( {@code <T>} ).
+ */
+class PivotHead<T> implements StreamingFacet {
+  private final PivotNode<T> topPivot;
+  private final Map<String, T> pivotValues;
 
-  /**
-   * Typed Pivot class that stores the overall Pivot data and head of the Pivot node chain.
-   *
-   * This class exists so that the {@link PivotFacet} class doesn't have to be typed ( {@code <T>} ).
-   */
-  private static class PivotHead<T> implements StreamingFacet {
-    private final PivotNode<T> topPivot;
-    private final Map<String, T> pivotValues;
-
-    public PivotHead(PivotNode<T> topPivot) {
-      this.topPivot = topPivot;
-      this.pivotValues = new HashMap<>();
-    }
-
-    public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
-      topPivot.setReductionCollectionManager(collectionManager);
-    }
-
-    public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
-      topPivot.setExpressionCalculator(expressionCalculator);
-    }
-
-    @Override
-    public void addFacetValueCollectionTargets() {
-      topPivot.addFacetValueCollectionTargets(pivotValues);
-    }
-
-    public void importShardData(DataInput input) throws IOException {
-      topPivot.importPivot(input, pivotValues);
-    }
-
-    public void exportShardData(DataOutput output) throws IOException {
-      topPivot.exportPivot(output, pivotValues);
-    }
-
-    public Iterable<Map<String,Object>> createResponse() {
-      return topPivot.getPivotedResponse(pivotValues);
-    }
+  public PivotHead(PivotNode<T> topPivot) {
+    this.topPivot = topPivot;
+    this.pivotValues = new HashMap<>();
   }
-}
+
+  public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
+    topPivot.setReductionCollectionManager(collectionManager);
+  }
+
+  public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
+    topPivot.setExpressionCalculator(expressionCalculator);
+  }
+
+  @Override
+  public void addFacetValueCollectionTargets() {
+    topPivot.addFacetValueCollectionTargets(pivotValues);
+  }
+
+  public void importShardData(DataInput input) throws IOException {
+    topPivot.importPivot(input, pivotValues);
+  }
+
+  public void exportShardData(DataOutput output) throws IOException {
+    topPivot.exportPivot(output, pivotValues);
+  }
+
+  public Iterable<Map<String,Object>> createResponse() {
+    return topPivot.getPivotedResponse(pivotValues);
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
index 2e82f62..f344d8b 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
@@ -19,14 +19,15 @@ package org.apache.solr.analytics.facet;
 import java.util.Map;
 import java.util.function.Consumer;
 
+import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.Filter;
 import org.apache.solr.search.QParser;
-import org.apache.solr.search.QueryUtils;
 
 /**
  * A facet that breaks down the data by additional Solr Queries.
@@ -50,7 +51,10 @@ public class QueryFacet extends AbstractSolrQueryFacet {
       }
       // The searcher sends docIds to the QueryFacetAccumulator which forwards
       // them to <code>collectQuery()</code> in this class for collection.
-      Query queryQuery = QueryUtils.combineQueryAndFilter(q, filter);
+      Query queryQuery = new BooleanQuery.Builder()
+          .add(q, Occur.MUST)
+          .add(filter, Occur.FILTER)
+          .build();
 
       ReductionDataCollection dataCol = collectionManager.newDataCollection();
       reductionData.put(queryName, dataCol);
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
index ac9bf16..defc9d9 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
@@ -20,7 +20,9 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.function.Consumer;
 
+import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
 import org.apache.solr.analytics.util.FacetRangeGenerator;
 import org.apache.solr.analytics.util.FacetRangeGenerator.FacetRange;
@@ -29,7 +31,6 @@ import org.apache.solr.common.params.FacetParams.FacetRangeOther;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.Filter;
-import org.apache.solr.search.QueryUtils;
 
 /**
  * A facet that groups data by a discrete set of ranges.
@@ -65,7 +66,10 @@ public class RangeFacet extends AbstractSolrQueryFacet {
       Query q = sf.getType().getRangeQuery(null, sf, range.lower, range.upper, range.includeLower,range.includeUpper);
       // The searcher sends docIds to the RangeFacetAccumulator which forwards
       // them to <code>collectRange()</code> in this class for collection.
-      Query rangeQuery = QueryUtils.combineQueryAndFilter(q, filter);
+      Query rangeQuery = new BooleanQuery.Builder()
+          .add(q, Occur.MUST)
+          .add(filter, Occur.FILTER)
+          .build();
 
       ReductionDataCollection dataCol = collectionManager.newDataCollection();
       reductionData.put(range.toString(), dataCol);
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
index 4b7497d..1ecc930 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
@@ -17,6 +17,7 @@
 package org.apache.solr.analytics.function.mapping;
 
 import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
+import org.apache.solr.analytics.function.mapping.ComparisonFunction.CompResultFunction;
 import org.apache.solr.analytics.util.function.BooleanConsumer;
 import org.apache.solr.analytics.value.AnalyticsValue;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
@@ -140,183 +141,178 @@ public class ComparisonFunction {
   private static CompResultFunction reverse(CompResultFunction original) {
     return val -> original.apply(val*-1);
   }
+}
+/**
+ * A comparison function for two {@link DoubleValue}s.
+ */
+class CompareDoubleValueFunction extends AbstractBooleanValue {
+  private final DoubleValue exprA;
+  private final DoubleValue exprB;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A comparison function for two {@link DoubleValue}s.
-   */
-  static class CompareDoubleValueFunction extends AbstractBooleanValue {
-    private final DoubleValue exprA;
-    private final DoubleValue exprB;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public CompareDoubleValueFunction(String name, DoubleValue exprA, DoubleValue exprB, CompResultFunction comp) {
-      this.name = name;
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-    }
-
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      double valueA = exprA.getDouble();
-      double valueB = exprB.getDouble();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? comp.apply(Double.compare(valueA,valueB)) : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public CompareDoubleValueFunction(String name, DoubleValue exprA, DoubleValue exprB, CompResultFunction comp) {
+    this.name = name;
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
   }
 
-  /**
-   * A comparison function for a {@link DoubleValue} and a {@link DoubleValueStream}.
-   */
-  static class CompareDoubleStreamFunction extends AbstractBooleanValueStream {
-    private final DoubleValue baseExpr;
-    private final DoubleValueStream compExpr;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public CompareDoubleStreamFunction(String name, DoubleValue baseExpr, DoubleValueStream compExpr, CompResultFunction comp) throws SolrException {
-      this.name = name;
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      double baseValue = baseExpr.getDouble();
-      if (baseExpr.exists()) {
-        compExpr.streamDoubles(compValue -> cons.accept(comp.apply(Double.compare(baseValue,compValue))));
-      }
-    }
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    double valueA = exprA.getDouble();
+    double valueB = exprB.getDouble();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? comp.apply(Double.compare(valueA,valueB)) : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
   }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A comparison function for a {@link DoubleValue} and a {@link DoubleValueStream}.
+ */
+class CompareDoubleStreamFunction extends AbstractBooleanValueStream {
+  private final DoubleValue baseExpr;
+  private final DoubleValueStream compExpr;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A comparison function for two {@link DateValue}s.
-   */
-  static class CompareDateValueFunction extends AbstractBooleanValue {
-    private final DateValue exprA;
-    private final DateValue exprB;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  public CompareDoubleStreamFunction(String name, DoubleValue baseExpr, DoubleValueStream compExpr, CompResultFunction comp) throws SolrException {
+    this.name = name;
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+  }
 
-    public CompareDateValueFunction(String name, DateValue exprA, DateValue exprB, CompResultFunction comp) {
-      this.name = name;
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    double baseValue = baseExpr.getDouble();
+    if (baseExpr.exists()) {
+      compExpr.streamDoubles(compValue -> cons.accept(comp.apply(Double.compare(baseValue,compValue))));
     }
+  }
 
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      long valueA = exprA.getLong();
-      long valueB = exprB.getLong();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? comp.apply(Long.compare(valueA,valueB)) : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A comparison function for two {@link DateValue}s.
+ */
+class CompareDateValueFunction extends AbstractBooleanValue {
+  private final DateValue exprA;
+  private final DateValue exprB;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public CompareDateValueFunction(String name, DateValue exprA, DateValue exprB, CompResultFunction comp) {
+    this.name = name;
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
   }
 
-  /**
-   * A comparison function for a {@link DateValue} and a {@link DateValueStream}.
-   */
-  static class CompareDateStreamFunction extends AbstractBooleanValueStream {
-    private final DateValue baseExpr;
-    private final DateValueStream compExpr;
-    private final CompResultFunction comp;
-    private final String name;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    long valueA = exprA.getLong();
+    long valueB = exprB.getLong();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? comp.apply(Long.compare(valueA,valueB)) : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    public CompareDateStreamFunction(String name, DateValue baseExpr, DateValueStream compExpr, CompResultFunction comp) throws SolrException {
-      this.name = name;
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.comp = comp;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A comparison function for a {@link DateValue} and a {@link DateValueStream}.
+ */
+class CompareDateStreamFunction extends AbstractBooleanValueStream {
+  private final DateValue baseExpr;
+  private final DateValueStream compExpr;
+  private final CompResultFunction comp;
+  private final String name;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      long baseValue = baseExpr.getLong();
-      if (baseExpr.exists()) {
-        compExpr.streamLongs(compValue -> cons.accept(comp.apply(Long.compare(baseValue,compValue))));
-      }
-    }
+  public CompareDateStreamFunction(String name, DateValue baseExpr, DateValueStream compExpr, CompResultFunction comp) throws SolrException {
+    this.name = name;
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.comp = comp;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    long baseValue = baseExpr.getLong();
+    if (baseExpr.exists()) {
+      compExpr.streamLongs(compValue -> cons.accept(comp.apply(Long.compare(baseValue,compValue))));
     }
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
index 93fee3e..8a57561 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
@@ -62,100 +62,97 @@ public class DateMathFunction {
       throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires a date as the first parameter.");
     }
   });
+}
+/**
+ * DateMath function that supports {@link DateValue}s.
+ */
+class DateMathValueFunction extends AbstractDateValue {
+  private final DateValue dateParam;
+  private final String mathParam;
+  DateMathParser parser = new DateMathParser();
+  public static final String name = DateMathFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  /**
-   * DateMath function that supports {@link DateValue}s.
-   */
-  static class DateMathValueFunction extends AbstractDateValue {
-    private final DateValue dateParam;
-    private final String mathParam;
-    DateMathParser parser = new DateMathParser();
-    public static final String name = DateMathFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateMathValueFunction(DateValue dateParam, ConstantStringValue mathParam) throws SolrException {
-      this.dateParam = dateParam;
-      this.mathParam = "NOW" + mathParam.getString();
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
-    }
-
-    private boolean exists = false;
+  public DateMathValueFunction(DateValue dateParam, ConstantStringValue mathParam) throws SolrException {
+    this.dateParam = dateParam;
+    this.mathParam = "NOW" + mathParam.getString();
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
+  }
 
-    @Override
-    public long getLong() {
-      Date date = getDate();
-      return (exists) ? date.getTime() : 0;
-    }
-    @Override
-    public Date getDate() {
-      Date date = dateParam.getDate();
-      if (dateParam.exists()) {
-        exists = true;
-        return DateMathParser.parseMath(date,mathParam);
-      } else {
-        exists = false;
-        return null;
-      }
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  private boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public long getLong() {
+    Date date = getDate();
+    return (exists) ? date.getTime() : 0;
+  }
+  @Override
+  public Date getDate() {
+    Date date = dateParam.getDate();
+    if (dateParam.exists()) {
+      exists = true;
+      return DateMathParser.parseMath(date,mathParam);
+    } else {
+      exists = false;
+      return null;
     }
   }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-  /**
-   * DateMath function that supports {@link DateValueStream}s.
-   */
-  static class DateMathStreamFunction extends AbstractDateValueStream {
-    private final DateValueStream dateParam;
-    private final String mathParam;
-    public static final String name = DateMathFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateMathStreamFunction(DateValueStream dateParam, ConstantStringValue mathParam) throws SolrException {
-      this.dateParam = dateParam;
-      this.mathParam = "NOW" + mathParam.getString();
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * DateMath function that supports {@link DateValueStream}s.
+ */
+class DateMathStreamFunction extends AbstractDateValueStream {
+  private final DateValueStream dateParam;
+  private final String mathParam;
+  public static final String name = DateMathFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      streamDates(value -> cons.accept(value.getTime()));
-    }
-    @Override
-    public void streamDates(Consumer<Date> cons) {
-      dateParam.streamDates(value -> cons.accept(DateMathParser.parseMath(value, mathParam)));
-    }
+  public DateMathStreamFunction(DateValueStream dateParam, ConstantStringValue mathParam) throws SolrException {
+    this.dateParam = dateParam;
+    this.mathParam = "NOW" + mathParam.getString();
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    streamDates(value -> cons.accept(value.getTime()));
+  }
+  @Override
+  public void streamDates(Consumer<Date> cons) {
+    dateParam.streamDates(value -> cons.accept(DateMathParser.parseMath(value, mathParam)));
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
index 9462e43..83c0ba7 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
@@ -61,151 +61,146 @@ public class DateParseFunction {
           "Incorrect parameter: "+params[0].getExpressionStr());
     }
   });
-
-  static class LongToDateParseFunction extends AbstractDateValue {
-    private final LongValue param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongToDateParseFunction(LongValue param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
-
-    @Override
-    public long getLong() {
-      return param.getLong();
-    }
-    @Override
-    public boolean exists() {
-      return param.exists();
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class LongToDateParseFunction extends AbstractDateValue {
+  private final LongValue param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongToDateParseFunction(LongValue param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
   }
 
-  static class LongStreamToDateParseFunction extends AbstractDateValueStream {
-    private final LongValueStream param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongStreamToDateParseFunction(LongValueStream param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
-
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      param.streamLongs(cons);
-    }
+  @Override
+  public long getLong() {
+    return param.getLong();
+  }
+  @Override
+  public boolean exists() {
+    return param.exists();
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamToDateParseFunction extends AbstractDateValueStream {
+  private final LongValueStream param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongStreamToDateParseFunction(LongValueStream param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
   }
 
-  static class StringToDateParseFunction extends AbstractDateValue {
-    private final StringValue param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    param.streamLongs(cons);
+  }
 
-    public StringToDateParseFunction(StringValue param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringToDateParseFunction extends AbstractDateValue {
+  private final StringValue param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringToDateParseFunction(StringValue param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    private boolean exists = false;
-    @Override
-    public long getLong() {
-      long value = 0;
-      try {
-        String paramStr = param.getString();
-        exists = param.exists();
-        if (exists) {
-          value = Instant.parse(paramStr).toEpochMilli();
-        }
-      } catch (DateTimeParseException e) {
-        exists = false;
+  private boolean exists = false;
+  @Override
+  public long getLong() {
+    long value = 0;
+    try {
+      String paramStr = param.getString();
+      exists = param.exists();
+      if (exists) {
+        value = Instant.parse(paramStr).toEpochMilli();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+    } catch (DateTimeParseException e) {
+      exists = false;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class StringStreamToDateParseFunction extends AbstractDateValueStream {
-    private final StringValueStream param;
-    public static final String name = DateParseFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StringStreamToDateParseFunction(StringValueStream param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamToDateParseFunction extends AbstractDateValueStream {
+  private final StringValueStream param;
+  public static final String name = DateParseFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringStreamToDateParseFunction(StringValueStream param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      param.streamStrings(value -> {
-        try {
-          cons.accept(Instant.parse(value).toEpochMilli());
-        } catch (DateTimeParseException e) {}
-      });
-    }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    param.streamStrings(value -> {
+      try {
+        cons.accept(Instant.parse(value).toEpochMilli());
+      } catch (DateTimeParseException e) {}
+    });
+  }
 
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
 }
-
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
index fcc8400..c8881ee 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
@@ -20,6 +20,8 @@ import java.util.function.IntConsumer;
 import java.util.function.LongConsumer;
 
 import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
+import org.apache.solr.analytics.function.mapping.DecimalNumericConversionFunction.ConvertDoubleFunction;
+import org.apache.solr.analytics.function.mapping.DecimalNumericConversionFunction.ConvertFloatFunction;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
 import org.apache.solr.analytics.value.DoubleValue;
 import org.apache.solr.analytics.value.DoubleValueStream;
@@ -101,7 +103,7 @@ public class DecimalNumericConversionFunction {
   public static class RoundFunction {
     public static final String name = "round";
     public static final CreatorFunction creatorFunction = (params -> {
-      return DecimalNumericConversionFunction.createDecimalConversionFunction(name, val -> Math.round(val), val -> Math.round(val), params);
+      return DecimalNumericConversionFunction.createDecimalConversionFunction(name, val -> (int)Math.round(val), val -> (long)Math.round(val), params);
     });
   }
 
@@ -114,161 +116,156 @@ public class DecimalNumericConversionFunction {
   public static interface ConvertDoubleFunction {
     public long convert(double value);
   }
+}
+/**
+ * A function to convert a {@link FloatValue} to a {@link IntValue}.
+ */
+class ConvertFloatValueFunction extends AbstractIntValue {
+  private final String name;
+  private final FloatValue param;
+  private final ConvertFloatFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A function to convert a {@link FloatValue} to a {@link IntValue}.
-   */
-  static class ConvertFloatValueFunction extends AbstractIntValue {
-    private final String name;
-    private final FloatValue param;
-    private final ConvertFloatFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public ConvertFloatValueFunction(String name, FloatValue param, ConvertFloatFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
-
-    @Override
-    public int getInt() {
-      return conv.convert(param.getFloat());
-    }
-    @Override
-    public boolean exists() {
-      return param.exists();
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public ConvertFloatValueFunction(String name, FloatValue param, ConvertFloatFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
   }
 
-  /**
-   * A function to convert a {@link FloatValueStream} to a {@link IntValueStream}.
-   */
-  static class ConvertFloatStreamFunction extends AbstractIntValueStream {
-    private final String name;
-    private final FloatValueStream param;
-    private final ConvertFloatFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public ConvertFloatStreamFunction(String name, FloatValueStream param, ConvertFloatFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
-
-    @Override
-    public void streamInts(IntConsumer cons) {
-      param.streamFloats( value -> cons.accept(conv.convert(value)));
-    }
+  @Override
+  public int getInt() {
+    return conv.convert(param.getFloat());
+  }
+  @Override
+  public boolean exists() {
+    return param.exists();
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A function to convert a {@link FloatValueStream} to a {@link IntValueStream}.
+ */
+class ConvertFloatStreamFunction extends AbstractIntValueStream {
+  private final String name;
+  private final FloatValueStream param;
+  private final ConvertFloatFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-  /**
-   * A function to convert a {@link DoubleValue} to a {@link LongValue}.
-   */
-  static class ConvertDoubleValueFunction extends AbstractLongValue {
-    private final String name;
-    private final DoubleValue param;
-    private final ConvertDoubleFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  public ConvertFloatStreamFunction(String name, FloatValueStream param, ConvertFloatFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+  }
 
-    public ConvertDoubleValueFunction(String name, DoubleValue param, ConvertDoubleFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
+  @Override
+  public void streamInts(IntConsumer cons) {
+    param.streamFloats( value -> cons.accept(conv.convert(value)));
+  }
 
-    @Override
-    public long getLong() {
-      return conv.convert(param.getDouble());
-    }
-    @Override
-    public boolean exists() {
-      return param.exists();
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A function to convert a {@link DoubleValue} to a {@link LongValue}.
+ */
+class ConvertDoubleValueFunction extends AbstractLongValue {
+  private final String name;
+  private final DoubleValue param;
+  private final ConvertDoubleFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  public ConvertDoubleValueFunction(String name, DoubleValue param, ConvertDoubleFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
   }
 
-  /**
-   * A function to convert a {@link DoubleValueStream} to a {@link LongValueStream}.
-   */
-  static class ConvertDoubleStreamFunction extends AbstractLongValueStream {
-    private final String name;
-    private final DoubleValueStream param;
-    private final ConvertDoubleFunction conv;
-    private final String funcStr;
-    private final ExpressionType funcType;
+  @Override
+  public long getLong() {
+    return conv.convert(param.getDouble());
+  }
+  @Override
+  public boolean exists() {
+    return param.exists();
+  }
 
-    public ConvertDoubleStreamFunction(String name, DoubleValueStream param, ConvertDoubleFunction conv) {
-      this.name = name;
-      this.param = param;
-      this.conv = conv;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A function to convert a {@link DoubleValueStream} to a {@link LongValueStream}.
+ */
+class ConvertDoubleStreamFunction extends AbstractLongValueStream {
+  private final String name;
+  private final DoubleValueStream param;
+  private final ConvertDoubleFunction conv;
+  private final String funcStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      param.streamDoubles( value -> cons.accept(conv.convert(value)));
-    }
+  public ConvertDoubleStreamFunction(String name, DoubleValueStream param, ConvertDoubleFunction conv) {
+    this.name = name;
+    this.param = param;
+    this.conv = conv;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    param.streamDoubles( value -> cons.accept(conv.convert(value)));
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
index 9d1bbf2..18a8bce 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
@@ -73,171 +73,166 @@ public class EqualFunction {
     }
     throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires that at least 1 parameter be single-valued.");
   });
-
-  /**
-   * An equal function for two {@link BooleanValue}s.
-   */
-  static class BooleanValueEqualFunction extends AbstractBooleanValue {
-    private final BooleanValue exprA;
-    private final BooleanValue exprB;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public BooleanValueEqualFunction(BooleanValue exprA, BooleanValue exprB) {
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-    }
-
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      boolean valueA = exprA.getBoolean();
-      boolean valueB = exprB.getBoolean();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? valueA == valueB : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+/**
+ * An equal function for two {@link BooleanValue}s.
+ */
+class BooleanValueEqualFunction extends AbstractBooleanValue {
+  private final BooleanValue exprA;
+  private final BooleanValue exprB;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public BooleanValueEqualFunction(BooleanValue exprA, BooleanValue exprB) {
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
   }
 
-  /**
-   * An equal function for a {@link BooleanValue} and a {@link BooleanValueStream}.
-   */
-  static class BooleanStreamEqualFunction extends AbstractBooleanValueStream {
-    private final BooleanValue baseExpr;
-    private final BooleanValueStream compExpr;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamEqualFunction(BooleanValue baseExpr, BooleanValueStream compExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      boolean baseValue = baseExpr.getBoolean();
-      if (baseExpr.exists()) {
-        compExpr.streamBooleans(compValue -> cons.accept(baseValue == compValue));
-      }
-    }
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    boolean valueA = exprA.getBoolean();
+    boolean valueB = exprB.getBoolean();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? valueA == valueB : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * An equal function for a {@link BooleanValue} and a {@link BooleanValueStream}.
+ */
+class BooleanStreamEqualFunction extends AbstractBooleanValueStream {
+  private final BooleanValue baseExpr;
+  private final BooleanValueStream compExpr;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public BooleanStreamEqualFunction(BooleanValue baseExpr, BooleanValueStream compExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
   }
 
-  /**
-   * A catch-all equal function for two {@link AnalyticsValue}s.
-   */
-  static class ValueEqualFunction extends AbstractBooleanValue {
-    private final AnalyticsValue exprA;
-    private final AnalyticsValue exprB;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public ValueEqualFunction(AnalyticsValue exprA, AnalyticsValue exprB) {
-      this.exprA = exprA;
-      this.exprB = exprB;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    boolean baseValue = baseExpr.getBoolean();
+    if (baseExpr.exists()) {
+      compExpr.streamBooleans(compValue -> cons.accept(baseValue == compValue));
     }
+  }
 
-    private boolean exists = false;
-    @Override
-    public boolean getBoolean() {
-      Object valueA = exprA.getObject();
-      Object valueB = exprB.getObject();
-      exists = exprA.exists() && exprB.exists();
-      return exists ? valueA.equals(valueB) : false;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A catch-all equal function for two {@link AnalyticsValue}s.
+ */
+class ValueEqualFunction extends AbstractBooleanValue {
+  private final AnalyticsValue exprA;
+  private final AnalyticsValue exprB;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public ValueEqualFunction(AnalyticsValue exprA, AnalyticsValue exprB) {
+    this.exprA = exprA;
+    this.exprB = exprB;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  private boolean exists = false;
+  @Override
+  public boolean getBoolean() {
+    Object valueA = exprA.getObject();
+    Object valueB = exprB.getObject();
+    exists = exprA.exists() && exprB.exists();
+    return exists ? valueA.equals(valueB) : false;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  /**
-   * A catch-all equal function for an {@link AnalyticsValue} and an {@link AnalyticsValueStream}.
-   */
-  static class StreamEqualFunction extends AbstractBooleanValueStream {
-    private final AnalyticsValue baseExpr;
-    private final AnalyticsValueStream compExpr;
-    public static final String name = EqualFunction.name;
-    private final String funcStr;
-    private final ExpressionType funcType;
-
-    public StreamEqualFunction(AnalyticsValue baseExpr, AnalyticsValueStream compExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.compExpr = compExpr;
-      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * A catch-all equal function for an {@link AnalyticsValue} and an {@link AnalyticsValueStream}.
+ */
+class StreamEqualFunction extends AbstractBooleanValueStream {
+  private final AnalyticsValue baseExpr;
+  private final AnalyticsValueStream compExpr;
+  public static final String name = EqualFunction.name;
+  private final String funcStr;
+  private final ExpressionType funcType;
+
+  public StreamEqualFunction(AnalyticsValue baseExpr, AnalyticsValueStream compExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.compExpr = compExpr;
+    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+  }
 
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      Object baseValue = baseExpr.getObject();
-      if (baseExpr.exists()) {
-        compExpr.streamObjects(compValue -> cons.accept(baseValue.equals(compValue)));
-      }
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    Object baseValue = baseExpr.getObject();
+    if (baseExpr.exists()) {
+      compExpr.streamObjects(compValue -> cons.accept(baseValue.equals(compValue)));
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return funcStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return funcStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
 }
-
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
index 44f571d..0e28917 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
@@ -42,85 +42,82 @@ public class ExistsFunction {
     }
     return new ValueStreamExistsFunction(param);
   });
+}
+/**
+ * Exists function that supports {@link AnalyticsValueStream}s.
+ */
+class ValueStreamExistsFunction extends AbstractBooleanValue {
+  private final AnalyticsValueStream param;
+  public static final String name = ExistsFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  /**
-   * Exists function that supports {@link AnalyticsValueStream}s.
-   */
-  static class ValueStreamExistsFunction extends AbstractBooleanValue {
-    private final AnalyticsValueStream param;
-    public static final String name = ExistsFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public ValueStreamExistsFunction(AnalyticsValueStream param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
-
-    private boolean exists;
-    @Override
-    public boolean getBoolean() {
-      exists = false;
-      param.streamObjects(val -> exists = true);
-      return exists;
-    }
-    @Override
-    public boolean exists() {
-      return true;
-    }
+  public ValueStreamExistsFunction(AnalyticsValueStream param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  private boolean exists;
+  @Override
+  public boolean getBoolean() {
+    exists = false;
+    param.streamObjects(val -> exists = true);
+    return exists;
+  }
+  @Override
+  public boolean exists() {
+    return true;
   }
 
-  /**
-   * Exists function that supports {@link AnalyticsValue}s.
-   */
-  static class ValueExistsFunction extends AbstractBooleanValue {
-    private final AnalyticsValue param;
-    public static final String name = ExistsFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+/**
+ * Exists function that supports {@link AnalyticsValue}s.
+ */
+class ValueExistsFunction extends AbstractBooleanValue {
+  private final AnalyticsValue param;
+  public static final String name = ExistsFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    public ValueExistsFunction(AnalyticsValue param) throws SolrException {
-      this.param = param;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-    }
+  public ValueExistsFunction(AnalyticsValue param) throws SolrException {
+    this.param = param;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+  }
 
-    @Override
-    public boolean getBoolean() {
-      param.getObject();
-      return param.exists();
-    }
-    @Override
-    public boolean exists() {
-      return true;
-    }
+  @Override
+  public boolean getBoolean() {
+    param.getObject();
+    return param.exists();
+  }
+  @Override
+  public boolean exists() {
+    return true;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
 }
-
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
index 592fc1a..7bc38fd 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
@@ -128,733 +128,716 @@ public class FillMissingFunction {
     }
     return new StreamFillMissingFunction(baseExpr,fillExpr);
   });
-
-  static class StreamFillMissingFunction extends AbstractAnalyticsValueStream implements Consumer<Object> {
-    private final AnalyticsValueStream baseExpr;
-    private final AnalyticsValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StreamFillMissingFunction(AnalyticsValueStream baseExpr, AnalyticsValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    Consumer<Object> cons;
-
-    @Override
-    public void streamObjects(Consumer<Object> cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamObjects(this);
-      if (!exists) {
-        fillExpr.streamObjects(cons);
-      }
-    }
-    @Override
-    public void accept(Object value) {
-      exists = true;
-      cons.accept(value);
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class StreamFillMissingFunction extends AbstractAnalyticsValueStream implements Consumer<Object> {
+  private final AnalyticsValueStream baseExpr;
+  private final AnalyticsValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StreamFillMissingFunction(AnalyticsValueStream baseExpr, AnalyticsValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class ValueFillMissingFunction extends AbstractAnalyticsValue {
-    private final AnalyticsValue baseExpr;
-    private final AnalyticsValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  Consumer<Object> cons;
 
-    public ValueFillMissingFunction(AnalyticsValue baseExpr, AnalyticsValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public Object getObject() {
-      Object value = baseExpr.getObject();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getObject();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamObjects(Consumer<Object> cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamObjects(this);
+    if (!exists) {
+      fillExpr.streamObjects(cons);
     }
   }
-
-  static class BooleanStreamFillMissingFunction extends AbstractBooleanValueStream implements BooleanConsumer {
-    private final BooleanValueStream baseExpr;
-    private final BooleanValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamFillMissingFunction(BooleanValueStream baseExpr, BooleanValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    BooleanConsumer cons;
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamBooleans(this);
-      if (!exists) {
-        fillExpr.streamBooleans(cons);
-      }
-    }
-    @Override
-    public void accept(boolean value) {
-      exists = true;
-      cons.accept(value);
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public void accept(Object value) {
+    exists = true;
+    cons.accept(value);
   }
 
-  static class BooleanFillMissingFunction extends AbstractBooleanValue {
-    private final BooleanValue baseExpr;
-    private final BooleanValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanFillMissingFunction(BooleanValue baseExpr, BooleanValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public boolean getBoolean() {
-      boolean value = baseExpr.getBoolean();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getBoolean();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
-
-  static class IntStreamFillMissingFunction extends AbstractIntValueStream implements IntConsumer {
-    private final IntValueStream baseExpr;
-    private final IntValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntStreamFillMissingFunction(IntValueStream baseExpr, IntValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    IntConsumer cons;
-
-    @Override
-    public void streamInts(IntConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamInts(this);
-      if (!exists) {
-        fillExpr.streamInts(cons);
-      }
-    }
-    @Override
-    public void accept(int value) {
-      exists = true;
-      cons.accept(value);
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
   }
-
-  static class IntFillMissingFunction extends AbstractIntValue {
-    private final IntValue baseExpr;
-    private final IntValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntFillMissingFunction(IntValue baseExpr, IntValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public int getInt() {
-      int value = baseExpr.getInt();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getInt();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class ValueFillMissingFunction extends AbstractAnalyticsValue {
+  private final AnalyticsValue baseExpr;
+  private final AnalyticsValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public ValueFillMissingFunction(AnalyticsValue baseExpr, AnalyticsValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class LongStreamFillMissingFunction extends AbstractLongValueStream implements LongConsumer {
-    private final LongValueStream baseExpr;
-    private final LongValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongStreamFillMissingFunction(LongValueStream baseExpr, LongValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
-
-    boolean exists = false;
-    LongConsumer cons;
+  boolean exists = false;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamLongs(this);
-      if (!exists) {
-        fillExpr.streamLongs(cons);
-      }
-    }
-    @Override
-    public void accept(long value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public Object getObject() {
+    Object value = baseExpr.getObject();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getObject();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanStreamFillMissingFunction extends AbstractBooleanValueStream implements BooleanConsumer {
+  private final BooleanValueStream baseExpr;
+  private final BooleanValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanStreamFillMissingFunction(BooleanValueStream baseExpr, BooleanValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class LongFillMissingFunction extends AbstractLongValue {
-    private final LongValue baseExpr;
-    private final LongValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  BooleanConsumer cons;
 
-    public LongFillMissingFunction(LongValue baseExpr, LongValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamBooleans(this);
+    if (!exists) {
+      fillExpr.streamBooleans(cons);
     }
+  }
+  @Override
+  public void accept(boolean value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanFillMissingFunction extends AbstractBooleanValue {
+  private final BooleanValue baseExpr;
+  private final BooleanValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanFillMissingFunction(BooleanValue baseExpr, BooleanValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getLong();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public boolean getBoolean() {
+    boolean value = baseExpr.getBoolean();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getBoolean();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class FloatStreamFillMissingFunction extends AbstractFloatValueStream implements FloatConsumer {
-    private final FloatValueStream baseExpr;
-    private final FloatValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatStreamFillMissingFunction(FloatValueStream baseExpr, FloatValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntStreamFillMissingFunction extends AbstractIntValueStream implements IntConsumer {
+  private final IntValueStream baseExpr;
+  private final IntValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntStreamFillMissingFunction(IntValueStream baseExpr, IntValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    FloatConsumer cons;
+  boolean exists = false;
+  IntConsumer cons;
 
-    @Override
-    public void streamFloats(FloatConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamFloats(this);
-      if (!exists) {
-        fillExpr.streamFloats(cons);
-      }
-    }
-    @Override
-    public void accept(float value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public void streamInts(IntConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamInts(this);
+    if (!exists) {
+      fillExpr.streamInts(cons);
     }
+  }
+  @Override
+  public void accept(int value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntFillMissingFunction extends AbstractIntValue {
+  private final IntValue baseExpr;
+  private final IntValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntFillMissingFunction(IntValue baseExpr, IntValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class FloatFillMissingFunction extends AbstractFloatValue {
-    private final FloatValue baseExpr;
-    private final FloatValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public FloatFillMissingFunction(FloatValue baseExpr, FloatValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public int getInt() {
+    int value = baseExpr.getInt();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getInt();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamFillMissingFunction extends AbstractLongValueStream implements LongConsumer {
+  private final LongValueStream baseExpr;
+  private final LongValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongStreamFillMissingFunction(LongValueStream baseExpr, LongValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public float getFloat() {
-      float value = baseExpr.getFloat();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getFloat();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
+  LongConsumer cons;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamLongs(this);
+    if (!exists) {
+      fillExpr.streamLongs(cons);
     }
   }
+  @Override
+  public void accept(long value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-  static class DoubleStreamFillMissingFunction extends AbstractDoubleValueStream implements DoubleConsumer {
-    private final DoubleValueStream baseExpr;
-    private final DoubleValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleStreamFillMissingFunction(DoubleValueStream baseExpr, DoubleValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongFillMissingFunction extends AbstractLongValue {
+  private final LongValue baseExpr;
+  private final LongValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongFillMissingFunction(LongValue baseExpr, LongValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    DoubleConsumer cons;
+  boolean exists = false;
 
-    @Override
-    public void streamDoubles(DoubleConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamDoubles(this);
-      if (!exists) {
-        fillExpr.streamDoubles(cons);
-      }
-    }
-    @Override
-    public void accept(double value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getLong();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatStreamFillMissingFunction extends AbstractFloatValueStream implements FloatConsumer {
+  private final FloatValueStream baseExpr;
+  private final FloatValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatStreamFillMissingFunction(FloatValueStream baseExpr, FloatValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class DoubleFillMissingFunction extends AbstractDoubleValue {
-    private final DoubleValue baseExpr;
-    private final DoubleValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  FloatConsumer cons;
 
-    public DoubleFillMissingFunction(DoubleValue baseExpr, DoubleValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public void streamFloats(FloatConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamFloats(this);
+    if (!exists) {
+      fillExpr.streamFloats(cons);
     }
+  }
+  @Override
+  public void accept(float value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatFillMissingFunction extends AbstractFloatValue {
+  private final FloatValue baseExpr;
+  private final FloatValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatFillMissingFunction(FloatValue baseExpr, FloatValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public double getDouble() {
-      double value = baseExpr.getDouble();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getDouble();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public float getFloat() {
+    float value = baseExpr.getFloat();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getFloat();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class DateStreamFillMissingFunction extends AbstractDateValueStream implements LongConsumer {
-    private final DateValueStream baseExpr;
-    private final DateValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateStreamFillMissingFunction(DateValueStream baseExpr, DateValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleStreamFillMissingFunction extends AbstractDoubleValueStream implements DoubleConsumer {
+  private final DoubleValueStream baseExpr;
+  private final DoubleValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleStreamFillMissingFunction(DoubleValueStream baseExpr, DoubleValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    LongConsumer cons;
+  boolean exists = false;
+  DoubleConsumer cons;
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamLongs(this);
-      if (!exists) {
-        fillExpr.streamLongs(cons);
-      }
-    }
-    @Override
-    public void accept(long value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public void streamDoubles(DoubleConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamDoubles(this);
+    if (!exists) {
+      fillExpr.streamDoubles(cons);
     }
+  }
+  @Override
+  public void accept(double value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleFillMissingFunction extends AbstractDoubleValue {
+  private final DoubleValue baseExpr;
+  private final DoubleValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleFillMissingFunction(DoubleValue baseExpr, DoubleValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class DateFillMissingFunction extends AbstractDateValue {
-    private final DateValue baseExpr;
-    private final DateValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public DateFillMissingFunction(DateValue baseExpr, DateValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public double getDouble() {
+    double value = baseExpr.getDouble();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getDouble();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateStreamFillMissingFunction extends AbstractDateValueStream implements LongConsumer {
+  private final DateValueStream baseExpr;
+  private final DateValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateStreamFillMissingFunction(DateValueStream baseExpr, DateValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getLong();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
+  LongConsumer cons;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamLongs(this);
+    if (!exists) {
+      fillExpr.streamLongs(cons);
     }
   }
+  @Override
+  public void accept(long value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-  static class StringStreamFillMissingFunction extends AbstractStringValueStream implements Consumer<String> {
-    private final StringValueStream baseExpr;
-    private final StringValueStream fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StringStreamFillMissingFunction(StringValueStream baseExpr, StringValueStream fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateFillMissingFunction extends AbstractDateValue {
+  private final DateValue baseExpr;
+  private final DateValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateFillMissingFunction(DateValue baseExpr, DateValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    boolean exists = false;
-    Consumer<String> cons;
+  boolean exists = false;
 
-    @Override
-    public void streamStrings(Consumer<String> cons) {
-      exists = false;
-      this.cons = cons;
-      baseExpr.streamStrings(this);
-      if (!exists) {
-        fillExpr.streamStrings(cons);
-      }
-    }
-    @Override
-    public void accept(String value) {
-      exists = true;
-      cons.accept(value);
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getLong();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamFillMissingFunction extends AbstractStringValueStream implements Consumer<String> {
+  private final StringValueStream baseExpr;
+  private final StringValueStream fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringStreamFillMissingFunction(StringValueStream baseExpr, StringValueStream fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
   }
 
-  static class StringFillMissingFunction extends AbstractStringValue {
-    private final StringValue baseExpr;
-    private final StringValue fillExpr;
-    public static final String name = FillMissingFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
+  Consumer<String> cons;
 
-    public StringFillMissingFunction(StringValue baseExpr, StringValue fillExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.fillExpr = fillExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  @Override
+  public void streamStrings(Consumer<String> cons) {
+    exists = false;
+    this.cons = cons;
+    baseExpr.streamStrings(this);
+    if (!exists) {
+      fillExpr.streamStrings(cons);
     }
+  }
+  @Override
+  public void accept(String value) {
+    exists = true;
+    cons.accept(value);
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringFillMissingFunction extends AbstractStringValue {
+  private final StringValue baseExpr;
+  private final StringValue fillExpr;
+  public static final String name = FillMissingFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringFillMissingFunction(StringValue baseExpr, StringValue fillExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.fillExpr = fillExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+  }
 
-    @Override
-    public String getString() {
-      String value = baseExpr.getString();
-      exists = true;
-      if (!baseExpr.exists()) {
-        value = fillExpr.getString();
-        exists = fillExpr.exists();
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public String getString() {
+    String value = baseExpr.getString();
+    exists = true;
+    if (!baseExpr.exists()) {
+      value = fillExpr.getString();
+      exists = fillExpr.exists();
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
index f266e79..6dac746 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
@@ -128,613 +128,596 @@ public class FilterFunction {
     }
     return new StreamFilterFunction(baseExpr,filterExpr);
   });
-
-  static class StreamFilterFunction extends AbstractAnalyticsValueStream {
-    private final AnalyticsValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamObjects(Consumer<Object> cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamObjects(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class StreamFilterFunction extends AbstractAnalyticsValueStream {
+  private final AnalyticsValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class ValueFilterFunction extends AbstractAnalyticsValue {
-    private final AnalyticsValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public Object getObject() {
-      Object value = baseExpr.getObject();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamObjects(Consumer<Object> cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamObjects(cons);
     }
   }
 
-  static class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
-    private final BooleanValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamBooleans(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
-
-  static class BooleanFilterFunction extends AbstractBooleanValue {
-    private final BooleanValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public boolean getBoolean() {
-      boolean value = baseExpr.getBoolean();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
   }
-
-  static class IntStreamFilterFunction extends AbstractIntValueStream {
-    private final IntValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamInts(IntConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamInts(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
-
-  static class IntFilterFunction extends AbstractIntValue {
-    private final IntValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public int getInt() {
-      int value = baseExpr.getInt();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+}
+class ValueFilterFunction extends AbstractAnalyticsValue {
+  private final AnalyticsValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class LongStreamFilterFunction extends AbstractLongValueStream {
-    private final LongValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamLongs(cons);
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public Object getObject() {
+    Object value = baseExpr.getObject();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class LongFilterFunction extends AbstractLongValue {
-    private final LongValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
-
-    boolean exists = false;
-
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
+  private final BooleanValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamBooleans(cons);
     }
   }
 
-  static class FloatStreamFilterFunction extends AbstractFloatValueStream {
-    private final FloatValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanFilterFunction extends AbstractBooleanValue {
+  private final BooleanValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public void streamFloats(FloatConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamFloats(cons);
-      }
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public boolean getBoolean() {
+    boolean value = baseExpr.getBoolean();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class FloatFilterFunction extends AbstractFloatValue {
-    private final FloatValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntStreamFilterFunction extends AbstractIntValueStream {
+  private final IntValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  @Override
+  public void streamInts(IntConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamInts(cons);
     }
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class IntFilterFunction extends AbstractIntValue {
+  private final IntValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public float getFloat() {
-      float value = baseExpr.getFloat();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public int getInt() {
+    int value = baseExpr.getInt();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
-    private final DoubleValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamFilterFunction extends AbstractLongValueStream {
+  private final LongValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public void streamDoubles(DoubleConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamDoubles(cons);
-      }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamLongs(cons);
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongFilterFunction extends AbstractLongValue {
+  private final LongValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class DoubleFilterFunction extends AbstractDoubleValue {
-    private final DoubleValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatStreamFilterFunction extends AbstractFloatValueStream {
+  private final FloatValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public double getDouble() {
-      double value = baseExpr.getDouble();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
+  @Override
+  public void streamFloats(FloatConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamFloats(cons);
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatFilterFunction extends AbstractFloatValue {
+  private final FloatValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
   }
 
-  static class DateStreamFilterFunction extends AbstractDateValueStream {
-    private final DateValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  boolean exists = false;
 
-    public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public float getFloat() {
+    float value = baseExpr.getFloat();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamLongs(cons);
-      }
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
+  private final DoubleValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamDoubles(DoubleConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamDoubles(cons);
     }
   }
 
-  static class DateFilterFunction extends AbstractDateValue {
-    private final DateValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleFilterFunction extends AbstractDoubleValue {
+  private final DoubleValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  boolean exists = false;
 
-    boolean exists = false;
+  @Override
+  public double getDouble() {
+    double value = baseExpr.getDouble();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public long getLong() {
-      long value = baseExpr.getLong();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateStreamFilterFunction extends AbstractDateValueStream {
+  private final DateValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamLongs(cons);
     }
   }
 
-  static class StringStreamFilterFunction extends AbstractStringValueStream {
-    private final StringValueStream baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DateFilterFunction extends AbstractDateValue {
+  private final DateValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public void streamStrings(Consumer<String> cons) {
-      if (filterExpr.getBoolean() && filterExpr.exists()) {
-        baseExpr.streamStrings(cons);
-      }
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public long getLong() {
+    long value = baseExpr.getLong();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class StringFilterFunction extends AbstractStringValue {
-    private final StringValue baseExpr;
-    private final BooleanValue filterExpr;
-    public static final String name = FilterFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamFilterFunction extends AbstractStringValueStream {
+  private final StringValueStream baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
-      this.baseExpr = baseExpr;
-      this.filterExpr = filterExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  @Override
+  public void streamStrings(Consumer<String> cons) {
+    if (filterExpr.getBoolean() && filterExpr.exists()) {
+      baseExpr.streamStrings(cons);
     }
+  }
 
-    boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringFilterFunction extends AbstractStringValue {
+  private final StringValue baseExpr;
+  private final BooleanValue filterExpr;
+  public static final String name = FilterFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
+
+  public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
+    this.baseExpr = baseExpr;
+    this.filterExpr = filterExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+  }
 
-    @Override
-    public String getString() {
-      String value = baseExpr.getString();
-      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
+  boolean exists = false;
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getString() {
+    String value = baseExpr.getString();
+    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
-}
 
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
index a506e46..ff28b90 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
@@ -172,738 +172,722 @@ public class IfFunction extends AbstractAnalyticsValueStream {
   public ExpressionType getExpressionType() {
     return funcType;
   }
+}
+class ValueIfFunction extends AbstractAnalyticsValue {
+  private final BooleanValue ifExpr;
+  private final AnalyticsValue thenExpr;
+  private final AnalyticsValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class ValueIfFunction extends AbstractAnalyticsValue {
-    private final BooleanValue ifExpr;
-    private final AnalyticsValue thenExpr;
-    private final AnalyticsValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public Object getObject() {
-      exists = false;
-      Object value = null;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getObject();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getObject();
-          exists = elseExpr.exists();
-        }
-      }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
+  @Override
+  public Object getObject() {
+    exists = false;
+    Object value = null;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getObject();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getObject();
+        exists = elseExpr.exists();
+      }
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class BooleanStreamIfFunction extends AbstractBooleanValueStream {
-    private final BooleanValue ifExpr;
-    private final BooleanValueStream thenExpr;
-    private final BooleanValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
-
-    @Override
-    public void streamBooleans(BooleanConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamBooleans(cons);
-        }
-        else {
-          elseExpr.streamBooleans(cons);
-        }
-      }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanStreamIfFunction extends AbstractBooleanValueStream {
+  private final BooleanValue ifExpr;
+  private final BooleanValueStream thenExpr;
+  private final BooleanValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class BooleanIfFunction extends AbstractBooleanValue {
-    private final BooleanValue ifExpr;
-    private final BooleanValue thenExpr;
-    private final BooleanValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
+
+  @Override
+  public void streamBooleans(BooleanConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamBooleans(cons);
+      }
+      else {
+        elseExpr.streamBooleans(cons);
+      }
     }
+  }
 
-    private boolean exists = false;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class BooleanIfFunction extends AbstractBooleanValue {
+  private final BooleanValue ifExpr;
+  private final BooleanValue thenExpr;
+  private final BooleanValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    @Override
-    public boolean getBoolean() {
-      exists = false;
-      boolean value = false;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getBoolean();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getBoolean();
-          exists = elseExpr.exists();
-        }
+  public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
+
+  private boolean exists = false;
+
+  @Override
+  public boolean getBoolean() {
+    exists = false;
+    boolean value = false;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getBoolean();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getBoolean();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class IntStreamIfFunction extends AbstractIntValueStream {
+  private final BooleanValue ifExpr;
+  private final IntValueStream thenExpr;
+  private final IntValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class IntStreamIfFunction extends AbstractIntValueStream {
-    private final BooleanValue ifExpr;
-    private final IntValueStream thenExpr;
-    private final IntValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamInts(IntConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamInts(cons);
-        }
-        else {
-          elseExpr.streamInts(cons);
-        }
+  @Override
+  public void streamInts(IntConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamInts(cons);
+      }
+      else {
+        elseExpr.streamInts(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class IntIfFunction extends AbstractIntValue {
+  private final BooleanValue ifExpr;
+  private final IntValue thenExpr;
+  private final IntValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class IntIfFunction extends AbstractIntValue {
-    private final BooleanValue ifExpr;
-    private final IntValue thenExpr;
-    private final IntValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public int getInt() {
-      exists = false;
-      int value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getInt();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getInt();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public int getInt() {
+    exists = false;
+    int value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getInt();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getInt();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongStreamIfFunction extends AbstractLongValueStream {
+  private final BooleanValue ifExpr;
+  private final LongValueStream thenExpr;
+  private final LongValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class LongStreamIfFunction extends AbstractLongValueStream {
-    private final BooleanValue ifExpr;
-    private final LongValueStream thenExpr;
-    private final LongValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamLongs(cons);
-        }
-        else {
-          elseExpr.streamLongs(cons);
-        }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamLongs(cons);
+      }
+      else {
+        elseExpr.streamLongs(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class LongIfFunction extends AbstractLongValue {
+  private final BooleanValue ifExpr;
+  private final LongValue thenExpr;
+  private final LongValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class LongIfFunction extends AbstractLongValue {
-    private final BooleanValue ifExpr;
-    private final LongValue thenExpr;
-    private final LongValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public long getLong() {
-      exists = false;
-      long value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getLong();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getLong();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public long getLong() {
+    exists = false;
+    long value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getLong();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getLong();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
   }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class FloatStreamIfFunction extends AbstractFloatValueStream {
+  private final BooleanValue ifExpr;
+  private final FloatValueStream thenExpr;
+  private final FloatValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class FloatStreamIfFunction extends AbstractFloatValueStream {
-    private final BooleanValue ifExpr;
-    private final FloatValueStream thenExpr;
-    private final FloatValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamFloats(FloatConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamFloats(cons);
-        }
-        else {
-          elseExpr.streamFloats(cons);
-        }
+  @Override
+  public void streamFloats(FloatConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamFloats(cons);
+      }
+      else {
+        elseExpr.streamFloats(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class FloatIfFunction extends AbstractFloatValue {
+  private final BooleanValue ifExpr;
+  private final FloatValue thenExpr;
+  private final FloatValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class FloatIfFunction extends AbstractFloatValue {
-    private final BooleanValue ifExpr;
-    private final FloatValue thenExpr;
-    private final FloatValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public float getFloat() {
-      exists = false;
-      float value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getFloat();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getFloat();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public float getFloat() {
+    exists = false;
+    float value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getFloat();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getFloat();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleStreamIfFunction extends AbstractDoubleValueStream {
+  private final BooleanValue ifExpr;
+  private final DoubleValueStream thenExpr;
+  private final DoubleValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DoubleStreamIfFunction extends AbstractDoubleValueStream {
-    private final BooleanValue ifExpr;
-    private final DoubleValueStream thenExpr;
-    private final DoubleValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamDoubles(DoubleConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamDoubles(cons);
-        }
-        else {
-          elseExpr.streamDoubles(cons);
-        }
+  @Override
+  public void streamDoubles(DoubleConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamDoubles(cons);
+      }
+      else {
+        elseExpr.streamDoubles(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
   }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class DoubleIfFunction extends AbstractDoubleValue {
+  private final BooleanValue ifExpr;
+  private final DoubleValue thenExpr;
+  private final DoubleValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DoubleIfFunction extends AbstractDoubleValue {
-    private final BooleanValue ifExpr;
-    private final DoubleValue thenExpr;
-    private final DoubleValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public double getDouble() {
-      exists = false;
-      double value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getDouble();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getDouble();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public double getDouble() {
+    exists = false;
+    double value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getDouble();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getDouble();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class DateStreamIfFunction extends AbstractDateValueStream {
+  private final BooleanValue ifExpr;
+  private final DateValueStream thenExpr;
+  private final DateValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DateStreamIfFunction extends AbstractDateValueStream {
-    private final BooleanValue ifExpr;
-    private final DateValueStream thenExpr;
-    private final DateValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamLongs(LongConsumer cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamLongs(cons);
-        }
-        else {
-          elseExpr.streamLongs(cons);
-        }
+  @Override
+  public void streamLongs(LongConsumer cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamLongs(cons);
+      }
+      else {
+        elseExpr.streamLongs(cons);
       }
     }
+  }
 
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
   }
+}
+class DateIfFunction extends AbstractDateValue {
+  private final BooleanValue ifExpr;
+  private final DateValue thenExpr;
+  private final DateValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-  static class DateIfFunction extends AbstractDateValue {
-    private final BooleanValue ifExpr;
-    private final DateValue thenExpr;
-    private final DateValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
-
-    public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public long getLong() {
-      exists = false;
-      long value = 0;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getLong();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getLong();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public long getLong() {
+    exists = false;
+    long value = 0;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getLong();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getLong();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
 
-  static class StringStreamIfFunction extends AbstractStringValueStream {
-    private final BooleanValue ifExpr;
-    private final StringValueStream thenExpr;
-    private final StringValueStream elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringStreamIfFunction extends AbstractStringValueStream {
+  private final BooleanValue ifExpr;
+  private final StringValueStream thenExpr;
+  private final StringValueStream elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    @Override
-    public void streamStrings(Consumer<String> cons) {
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          thenExpr.streamStrings(cons);
-        }
-        else {
-          elseExpr.streamStrings(cons);
-        }
+  @Override
+  public void streamStrings(Consumer<String> cons) {
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        thenExpr.streamStrings(cons);
+      }
+      else {
+        elseExpr.streamStrings(cons);
       }
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
     }
   }
 
-  static class StringIfFunction extends AbstractStringValue {
-    private final BooleanValue ifExpr;
-    private final StringValue thenExpr;
-    private final StringValue elseExpr;
-    public static final String name = IfFunction.name;
-    private final String exprStr;
-    private final ExpressionType funcType;
+  @Override
+  public String getName() {
+    return name;
+  }
+  @Override
+  public String getExpressionStr() {
+    return exprStr;
+  }
+  @Override
+  public ExpressionType getExpressionType() {
+    return funcType;
+  }
+}
+class StringIfFunction extends AbstractStringValue {
+  private final BooleanValue ifExpr;
+  private final StringValue thenExpr;
+  private final StringValue elseExpr;
+  public static final String name = IfFunction.name;
+  private final String exprStr;
+  private final ExpressionType funcType;
 
-    public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
-      this.ifExpr = ifExpr;
-      this.thenExpr = thenExpr;
-      this.elseExpr = elseExpr;
-      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-    }
+  public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
+    this.ifExpr = ifExpr;
+    this.thenExpr = thenExpr;
+    this.elseExpr = elseExpr;
+    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+  }
 
-    private boolean exists = false;
+  private boolean exists = false;
 
-    @Override
-    public String getString() {
-      exists = false;
-      String value = null;
-      boolean ifValue = ifExpr.getBoolean();
-      if (ifExpr.exists()) {
-        if (ifValue) {
-          value = thenExpr.getString();
-          exists = thenExpr.exists();
-        }
-        else {
-          value = elseExpr.getString();
-          exists = elseExpr.exists();
-        }
+  @Override
+  public String getString() {
+    exists = false;
+    String value = null;
+    boolean ifValue = ifExpr.getBoolean();
+    if (ifExpr.exists()) {
+      if (ifValue) {
+        value = thenExpr.getString();
+        exists = thenExpr.exists();
+      }
+      else {
+        value = elseExpr.getString();
+        exists = elseExpr.exists();
       }
-      return value;
-    }
-    @Override
-    public boolean exists() {
-      return exists;
-    }
-
-    @Override
-    public String getName() {
-      return name;
-    }
-    @Override
-    public String getExpressionStr() {
-      return exprStr;
-    }
-    @Override
-    public ExpressionType getExpressionType() {
-      return funcType;
     }
+    return value;
+  }
+  @Override
+  public boolean exists() {
+    return exists;
   }
-}
... 258652 lines suppressed ...


[lucene] 10/10: SOLR-13350: Bringing back the assert that was disabled to wordaround tests

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

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

commit 84dec144b1fa40425920a158cbdb3b8c108a3378
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Sat Aug 15 08:09:14 2020 +0530

    SOLR-13350: Bringing back the assert that was disabled to wordaround tests
---
 solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index 663d3c9..76d48bc 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -1818,7 +1818,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
         CollectorManagerResult result = searchCollectorManagers(len, cmd, query, true, true, true);
         set = result.docSet;
         totalHits = result.totalHits;
-        //assert (totalHits == set.size()) || qr.isPartialResults();
+        assert (totalHits == set.size()) || qr.isPartialResults();
         topDocs = result.topDocs;
         maxScore = result.maxScore;
       }


[lucene] 06/10: SOLR-13350: Merging master and updating the PR

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

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

commit afd6f5a139cd8b5b16212dc9cc564656e64f09a3
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Fri Aug 14 17:38:49 2020 +0530

    SOLR-13350: Merging master and updating the PR
---
 solr/CHANGES.txt                                   |   583 +-
 solr/NOTICE.txt                                    |    15 +-
 solr/README.md                                     |   217 +
 solr/README.txt                                    |   189 -
 solr/bin/solr                                      |    47 +-
 solr/bin/solr.cmd                                  |    46 +-
 solr/bin/solr.in.cmd                               |    29 +-
 solr/bin/solr.in.sh                                |    18 +-
 solr/build.gradle                                  |     2 +
 solr/build.xml                                     |    12 +-
 solr/contrib/analysis-extras/README.md             |    26 +
 solr/contrib/analysis-extras/README.txt            |    23 -
 solr/contrib/analysis-extras/build.gradle          |     2 +
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |    13 +-
 solr/contrib/analytics/build.gradle                |     2 +
 .../apache/solr/analytics/ExpressionFactory.java   |    78 +-
 .../apache/solr/analytics/facet/PivotFacet.java    |    77 +-
 .../apache/solr/analytics/facet/QueryFacet.java    |     8 +-
 .../apache/solr/analytics/facet/RangeFacet.java    |     8 +-
 .../function/mapping/ComparisonFunction.java       |   320 +-
 .../function/mapping/DateMathFunction.java         |   171 +-
 .../function/mapping/DateParseFunction.java        |   261 +-
 .../mapping/DecimalNumericConversionFunction.java  |   283 +-
 .../analytics/function/mapping/EqualFunction.java  |   301 +-
 .../analytics/function/mapping/ExistsFunction.java |   143 +-
 .../function/mapping/FillMissingFunction.java      |  1283 +-
 .../analytics/function/mapping/FilterFunction.java |  1075 +-
 .../analytics/function/mapping/IfFunction.java     |  1268 +-
 .../analytics/function/mapping/LambdaFunction.java |  4044 +++---
 .../analytics/function/mapping/RemoveFunction.java |  1187 +-
 .../function/mapping/ReplaceFunction.java          |  1521 +--
 .../analytics/function/reduction/MaxFunction.java  |   405 +-
 .../function/reduction/MedianFunction.java         |   237 +-
 .../analytics/function/reduction/MinFunction.java  |   405 +-
 .../function/reduction/OrdinalFunction.java        |   489 +-
 .../function/reduction/PercentileFunction.java     |   453 +-
 .../stream/AnalyticsShardRequestManager.java       |     4 +-
 .../solr/analytics/util/FacetRangeGenerator.java   |   132 +-
 .../solr/analytics/util/MedianCalculator.java      |     6 +-
 .../solr/analytics/util/OldAnalyticsParams.java    |    34 +-
 .../util/OldAnalyticsRequestConverter.java         |     4 +-
 .../solr/analytics/util/OrdinalCalculator.java     |    15 +-
 .../org/apache/solr/handler/AnalyticsHandler.java  |     6 -
 .../solr/handler/component/AnalyticsComponent.java |     2 +-
 .../response/AnalyticsShardResponseWriter.java     |     2 +-
 .../analytics/legacy/facetWithDottedFields.txt     |    16 +
 .../solr/collection1/conf/schema-analytics.xml     |     2 +
 .../analytics/legacy/LegacyNoFacetCloudTest.java   |    32 +-
 .../solr/analytics/legacy/LegacyNoFacetTest.java   |    32 +-
 .../LegacyAbstractAnalyticsFacetCloudTest.java     |     2 +-
 .../facet/LegacyAbstractAnalyticsFacetTest.java    |     4 +-
 .../legacy/facet/LegacyFieldFacetTest.java         |     1 +
 .../util/OldAnalyticsRequestConverterUnitTest.java |    64 +
 solr/contrib/clustering/{README.txt => README.md}  |     0
 solr/contrib/clustering/build.gradle               |     2 +
 .../handler/clustering/ClusteringComponent.java    |    20 +-
 .../clustering/carrot2/CarrotClusteringEngine.java |    20 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |    10 +-
 .../clustering/carrot2/SolrResourceLocator.java    |     8 +-
 solr/contrib/dataimporthandler-extras/build.gradle |     2 +
 .../handler/dataimport/MailEntityProcessor.java    |   101 +-
 .../handler/dataimport/TikaEntityProcessor.java    |    19 +-
 .../src/java/overview.html                         |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimport/TestMailEntityProcessor.java        |    13 +-
 solr/contrib/dataimporthandler/README.md           |    26 +
 solr/contrib/dataimporthandler/README.txt          |    16 -
 solr/contrib/dataimporthandler/build.gradle        |     2 +
 .../solr/handler/dataimport/BinURLDataSource.java  |     6 +-
 .../solr/handler/dataimport/ClobTransformer.java   |     1 +
 .../apache/solr/handler/dataimport/Context.java    |     2 +
 .../solr/handler/dataimport/ContextImpl.java       |     7 +-
 .../solr/handler/dataimport/DataImportHandler.java |    13 +-
 .../solr/handler/dataimport/DataImporter.java      |    10 +-
 .../apache/solr/handler/dataimport/DataSource.java |     3 +-
 .../handler/dataimport/DateFormatTransformer.java  |     1 +
 .../solr/handler/dataimport/DebugLogger.java       |    12 +-
 .../apache/solr/handler/dataimport/DocBuilder.java |    76 +-
 .../solr/handler/dataimport/EntityProcessor.java   |     3 +-
 .../handler/dataimport/EntityProcessorWrapper.java |    26 +-
 .../solr/handler/dataimport/FileDataSource.java    |    12 +-
 .../handler/dataimport/HTMLStripTransformer.java   |     1 +
 .../solr/handler/dataimport/JdbcDataSource.java    |    20 +-
 .../dataimport/NumberFormatTransformer.java        |     1 +
 .../dataimport/PlainTextEntityProcessor.java       |     1 +
 .../solr/handler/dataimport/RegexTransformer.java  |     6 +-
 .../handler/dataimport/SimplePropertiesWriter.java |    10 +-
 .../apache/solr/handler/dataimport/SolrWriter.java |    10 +-
 .../handler/dataimport/SqlEntityProcessor.java     |    10 +-
 .../handler/dataimport/TemplateTransformer.java    |     5 +-
 .../solr/handler/dataimport/URLDataSource.java     |     6 +-
 .../handler/dataimport/XPathEntityProcessor.java   |    21 +-
 .../solr/handler/dataimport/XPathRecordReader.java |     3 +-
 .../handler/dataimport/ZKPropertiesWriter.java     |     4 +-
 .../dataimport/config/DIHConfiguration.java        |     8 +-
 .../dataimporthandler/src/java/overview.html       |     2 +-
 .../collection1/conf/contentstream-solrconfig.xml  |     2 +-
 .../conf/dataimport-nodatasource-solrconfig.xml    |     2 +-
 .../collection1/conf/dataimport-solrconfig.xml     |     2 +-
 .../dataimporthandler/src/test-files/log4j2.xml    |    42 +
 .../src/test-files/solr/collection1/README         |     1 +
 .../solr/configsets/dihconfigset/conf/README       |     2 +
 .../solr/configsets/dihconfigset/conf/schema.xml   |    70 +
 .../configsets/dihconfigset/conf/solrconfig.xml    |   287 +
 .../dataimporthandler/src/test-files/solr/solr.xml |    27 +
 .../dataimport/AbstractDIHCacheTestCase.java       |     2 +-
 .../AbstractDataImportHandlerTestCase.java         |     9 +-
 .../AbstractSqlEntityProcessorTestCase.java        |    23 +-
 .../dataimport/MockInitialContextFactory.java      |     2 +-
 .../handler/dataimport/TestClobTransformer.java    |     2 +
 .../dataimport/TestContentStreamDataSource.java    |     2 +-
 .../solr/handler/dataimport/TestDataConfig.java    |     1 +
 .../solr/handler/dataimport/TestDocBuilder.java    |    10 +-
 .../solr/handler/dataimport/TestDocBuilder2.java   |    16 +-
 .../handler/dataimport/TestEphemeralCache.java     |     3 +
 .../solr/handler/dataimport/TestErrorHandling.java |     1 +
 .../solr/handler/dataimport/TestFieldReader.java   |     1 +
 .../dataimport/TestFileListEntityProcessor.java    |    14 +-
 .../dataimport/TestJdbcDataSourceConvertType.java  |     2 +-
 .../dataimport/TestLineEntityProcessor.java        |    14 +-
 .../dataimport/TestPlainTextEntityProcessor.java   |     3 +
 .../handler/dataimport/TestRegexTransformer.java   |     5 +
 .../handler/dataimport/TestScriptTransformer.java  |     4 +-
 .../TestSolrEntityProcessorEndToEnd.java           |    16 +-
 .../dataimport/TestSolrEntityProcessorUnit.java    |     3 +-
 .../dataimport/TestSortedMapBackedCache.java       |     6 +-
 .../dataimport/TestSqlEntityProcessorDelta.java    |    12 +-
 .../dataimport/TestTemplateTransformer.java        |     4 +
 .../handler/dataimport/TestVariableResolver.java   |     1 +
 .../solr/handler/dataimport/TestWriterImpl.java    |     2 +
 .../dataimport/TestXPathEntityProcessor.java       |    15 +
 .../handler/dataimport/TestXPathRecordReader.java  |     1 +
 .../handler/dataimport/TestZKPropertiesWriter.java |   207 +-
 solr/contrib/extraction/README.md                  |    17 +
 solr/contrib/extraction/README.txt                 |    16 -
 solr/contrib/extraction/build.gradle               |     2 +
 .../extraction/ExtractingDocumentLoader.java       |     8 +-
 .../extraction/ExtractingRequestHandler.java       |    49 +-
 .../extraction/RegexRulesPasswordProvider.java     |     4 +-
 .../handler/extraction/XLSXResponseWriter.java     |     4 +-
 .../extraction/ExtractingRequestHandlerTest.java   |     3 +
 solr/contrib/jaegertracer-configurator/README.md   |    33 +
 solr/contrib/jaegertracer-configurator/README.txt  |    32 -
 .../contrib/jaegertracer-configurator/build.gradle |     2 +
 .../solr/jaeger/JaegerTracerConfigurator.java      |     2 +-
 .../apache/solr/jaeger/TestJaegerConfigurator.java |     4 +
 solr/contrib/langid/README.md                      |    22 +
 solr/contrib/langid/README.txt                     |    22 -
 solr/contrib/langid/build.gradle                   |     2 +
 .../LanguageIdentifierUpdateProcessor.java         |    48 +-
 .../OpenNLPLangDetectUpdateProcessorFactory.java   |     2 +-
 .../TikaLanguageIdentifierUpdateProcessor.java     |     5 +-
 solr/contrib/ltr/README.md                         |     2 +-
 solr/contrib/ltr/README.txt                        |     1 -
 solr/contrib/ltr/build.gradle                      |     2 +
 .../java/org/apache/solr/ltr/LTRThreadModule.java  |     7 +-
 .../java/org/apache/solr/ltr/feature/Feature.java  |    42 +
 .../solr/ltr/feature/OriginalScoreFeature.java     |    23 +-
 .../org/apache/solr/ltr/feature/SolrFeature.java   |   199 +-
 .../org/apache/solr/ltr/model/LTRScoringModel.java |     1 +
 .../org/apache/solr/ltr/model/LinearModel.java     |     1 +
 .../solr/ltr/model/MultipleAdditiveTreesModel.java |     4 +
 .../apache/solr/ltr/model/NeuralNetworkModel.java  |     4 +
 .../LTRFeatureLoggerTransformerFactory.java        |     1 +
 .../apache/solr/ltr/search/LTRQParserPlugin.java   |     1 +
 .../solr/ltr/store/rest/ManagedModelStore.java     |     5 +-
 .../org/apache/solr/ltr/TestLTROnSolrCloud.java    |    12 +-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  |     6 +-
 .../test/org/apache/solr/ltr/TestRerankBase.java   |    35 +-
 .../org/apache/solr/ltr/feature/TestFeature.java   |    48 +
 .../TestFeatureExtractionFromMultipleSegments.java |     2 +
 .../solr/ltr/feature/TestNoMatchSolrFeature.java   |     4 +
 .../solr/ltr/feature/TestOriginalScoreFeature.java |     6 +
 .../solr/ltr/feature/TestOriginalScoreScorer.java  |    47 -
 .../solr/ltr/model/TestNeuralNetworkModel.java     |     1 +
 .../store/rest/TestModelManagerPersistence.java    |     4 +
 solr/contrib/prometheus-exporter/README.md         |    21 +
 solr/contrib/prometheus-exporter/README.txt        |    21 -
 solr/contrib/prometheus-exporter/build.gradle      |     2 +
 .../conf/solr-exporter-config.xml                  |     8 +-
 .../collector/SchedulerMetricsCollector.java       |     7 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |     1 +
 .../exporter/PrometheusExporterSettings.java       |     4 +-
 .../solr/prometheus/exporter/SolrExporter.java     |    10 +-
 .../org/apache/solr/prometheus/scraper/Async.java  |     1 +
 .../solr/prometheus/scraper/SolrScraper.java       |     4 +-
 ...theus-solr-exporter-integration-test-config.xml |     8 +-
 .../prometheus/PrometheusExporterTestBase.java     |     4 +-
 .../prometheus/scraper/SolrCloudScraperTest.java   |     4 +-
 .../scraper/SolrStandaloneScraperTest.java         |     4 +-
 solr/contrib/velocity/build.gradle                 |     2 +
 .../solr/response/VelocityResponseWriter.java      |    14 +-
 solr/core/build.gradle                             |     7 +-
 solr/core/ivy.xml                                  |     2 +-
 .../solr/analysis/LowerCaseTokenizerFactory.java   |     5 +
 .../analysis/ReversedWildcardFilterFactory.java    |     4 +
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   252 +-
 solr/core/src/java/org/apache/solr/api/ApiBag.java |    36 +-
 .../apache/solr/api/CustomContainerPlugins.java    |   354 +
 .../src/java/org/apache/solr/api/EndPoint.java     |     2 +-
 .../src/java/org/apache/solr/api/PayloadObj.java   |    35 +-
 .../src/java/org/apache/solr/api/V2HttpCall.java   |    43 +-
 .../client/solrj/embedded/EmbeddedSolrServer.java  |    17 +-
 .../client/solrj/embedded/JettySolrRunner.java     |    15 +-
 .../apache/solr/cloud/ActiveReplicaWatcher.java    |    19 +-
 .../apache/solr/cloud/CloudConfigSetService.java   |     7 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |    16 +-
 .../solr/cloud/CurrentCoreDescriptorProvider.java  |    28 -
 .../org/apache/solr/cloud/ElectionContext.java     |   707 -
 .../apache/solr/cloud/ExclusiveSliceProperty.java  |    10 +-
 .../java/org/apache/solr/cloud/LeaderElector.java  |     2 +-
 .../src/java/org/apache/solr/cloud/LockTree.java   |    56 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   121 +-
 .../cloud/OverseerConfigSetMessageHandler.java     |    20 +-
 .../apache/solr/cloud/OverseerElectionContext.java |   110 +
 .../apache/solr/cloud/OverseerMessageHandler.java  |     7 +-
 .../apache/solr/cloud/OverseerNodePrioritizer.java |    15 +-
 .../apache/solr/cloud/OverseerSolrResponse.java    |     4 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   230 +-
 .../org/apache/solr/cloud/OverseerTaskQueue.java   |    13 +-
 .../solr/cloud/RecoveringCoreTermWatcher.java      |     4 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   109 +-
 .../org/apache/solr/cloud/ReplicateFromLeader.java |    10 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |   493 +
 .../solr/cloud/ShardLeaderElectionContextBase.java |   195 +
 .../java/org/apache/solr/cloud/SolrZkServer.java   |    80 +-
 .../java/org/apache/solr/cloud/SyncStrategy.java   |    64 +-
 .../core/src/java/org/apache/solr/cloud/ZkCLI.java |    21 +-
 .../java/org/apache/solr/cloud/ZkController.java   |   427 +-
 .../org/apache/solr/cloud/ZkDistributedQueue.java  |    17 +-
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |     1 +
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |    34 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |    81 +-
 .../solr/cloud/api/collections/AliasCmd.java       |     1 +
 .../apache/solr/cloud/api/collections/Assign.java  |   236 +-
 .../solr/cloud/api/collections/BackupCmd.java      |    15 +-
 .../cloud/api/collections/CategoryRoutedAlias.java |     4 +-
 .../solr/cloud/api/collections/CreateAliasCmd.java |     2 +-
 .../cloud/api/collections/CreateCollectionCmd.java |   153 +-
 .../solr/cloud/api/collections/CreateShardCmd.java |     3 +-
 .../cloud/api/collections/CreateSnapshotCmd.java   |    28 +-
 .../solr/cloud/api/collections/DeleteAliasCmd.java |     2 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |     3 +-
 .../solr/cloud/api/collections/DeleteNodeCmd.java  |     7 +-
 .../cloud/api/collections/DeleteReplicaCmd.java    |    16 +-
 .../solr/cloud/api/collections/DeleteShardCmd.java |    15 +-
 .../cloud/api/collections/DeleteSnapshotCmd.java   |    14 +-
 .../api/collections/MaintainRoutedAliasCmd.java    |    14 +-
 .../solr/cloud/api/collections/MigrateCmd.java     |    51 +-
 .../solr/cloud/api/collections/MoveReplicaCmd.java |    32 +-
 .../OverseerCollectionMessageHandler.java          |   125 +-
 .../cloud/api/collections/OverseerRoleCmd.java     |     6 +-
 .../cloud/api/collections/OverseerStatusCmd.java   |     7 +-
 .../api/collections/ReindexCollectionCmd.java      |    68 +-
 .../solr/cloud/api/collections/RenameCmd.java      |     2 +-
 .../solr/cloud/api/collections/ReplaceNodeCmd.java |    32 +-
 .../solr/cloud/api/collections/RestoreCmd.java     |   373 +-
 .../solr/cloud/api/collections/RoutedAlias.java    |    11 +-
 .../cloud/api/collections/SetAliasPropCmd.java     |     2 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |   118 +-
 .../cloud/api/collections/TimeRoutedAlias.java     |    12 +-
 .../solr/cloud/api/collections/UtilizeNodeCmd.java |   133 -
 .../solr/cloud/autoscaling/ActionContext.java      |    68 -
 .../autoscaling/AutoAddReplicasPlanAction.java     |    63 -
 .../apache/solr/cloud/autoscaling/AutoScaling.java |   244 -
 .../solr/cloud/autoscaling/AutoScalingHandler.java |   732 -
 .../solr/cloud/autoscaling/ComputePlanAction.java  |   305 -
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |   244 -
 .../cloud/autoscaling/HttpTriggerListener.java     |   164 -
 .../autoscaling/InactiveMarkersPlanAction.java     |   139 -
 .../cloud/autoscaling/InactiveShardPlanAction.java |   152 -
 .../solr/cloud/autoscaling/IndexSizeTrigger.java   |   557 -
 .../solr/cloud/autoscaling/LoggingListener.java    |    38 -
 .../solr/cloud/autoscaling/MetricTrigger.java      |   219 -
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |   244 -
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |   236 -
 .../cloud/autoscaling/OverseerTriggerThread.java   |   397 -
 .../solr/cloud/autoscaling/ScheduledTrigger.java   |   227 -
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |   906 --
 .../solr/cloud/autoscaling/SearchRateTrigger.java  |   797 --
 .../solr/cloud/autoscaling/SystemLogListener.java  |   219 -
 .../solr/cloud/autoscaling/TriggerAction.java      |    51 -
 .../solr/cloud/autoscaling/TriggerActionBase.java  |    87 -
 .../cloud/autoscaling/TriggerActionException.java  |    33 -
 .../apache/solr/cloud/autoscaling/TriggerBase.java |   283 -
 .../solr/cloud/autoscaling/TriggerEvent.java       |   311 -
 .../solr/cloud/autoscaling/TriggerEventQueue.java  |   119 -
 .../solr/cloud/autoscaling/TriggerListener.java    |    65 -
 .../cloud/autoscaling/TriggerListenerBase.java     |    97 -
 .../solr/cloud/autoscaling/TriggerUtils.java       |    87 -
 .../autoscaling/TriggerValidationException.java    |    74 -
 .../solr/cloud/autoscaling/package-info.java       |    21 -
 .../solr/cloud/autoscaling/sim/ActionError.java    |    24 -
 .../cloud/autoscaling/sim/FakeDocIterator.java     |    56 -
 .../autoscaling/sim/GenericDistributedQueue.java   |   599 -
 .../sim/GenericDistributedQueueFactory.java        |    45 -
 .../solr/cloud/autoscaling/sim/LiveNodesSet.java   |   113 -
 .../sim/NoopDistributedQueueFactory.java           |    94 -
 .../cloud/autoscaling/sim/SimCloudManager.java     |  1051 --
 .../autoscaling/sim/SimClusterStateProvider.java   |  2469 ----
 .../autoscaling/sim/SimDistribStateManager.java    |   646 -
 .../sim/SimDistributedQueueFactory.java            |   284 -
 .../autoscaling/sim/SimNodeStateProvider.java      |   347 -
 .../solr/cloud/autoscaling/sim/SimScenario.java    |  1108 --
 .../solr/cloud/autoscaling/sim/SimUtils.java       |   435 -
 .../autoscaling/sim/SnapshotCloudManager.java      |   257 -
 .../sim/SnapshotClusterStateProvider.java          |   130 -
 .../sim/SnapshotDistribStateManager.java           |   222 -
 .../autoscaling/sim/SnapshotNodeStateProvider.java |   200 -
 .../solr/cloud/autoscaling/sim/package-info.java   |    94 -
 .../solr/cloud/overseer/ClusterStateMutator.java   |    21 +-
 .../solr/cloud/overseer/CollectionMutator.java     |     9 +-
 .../apache/solr/cloud/overseer/NodeMutator.java    |     8 +-
 .../apache/solr/cloud/overseer/ReplicaMutator.java |    88 +-
 .../apache/solr/cloud/overseer/SliceMutator.java   |    14 +-
 .../apache/solr/cloud/overseer/ZkStateWriter.java  |    47 +-
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |    15 +-
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |    13 +-
 .../solr/cloud/rule/ServerSnitchContext.java       |     1 +
 .../solr/core/AbstractSolrEventListener.java       |     5 +-
 .../java/org/apache/solr/core/BlobRepository.java  |    17 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |    36 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |    25 +-
 .../java/org/apache/solr/core/CodecFactory.java    |     2 +-
 .../java/org/apache/solr/core/ConfigOverlay.java   |    14 +
 .../src/java/org/apache/solr/core/ConfigSet.java   |    29 +-
 .../org/apache/solr/core/ConfigSetProperties.java  |     6 +-
 .../org/apache/solr/core/ConfigSetService.java     |    17 +-
 .../java/org/apache/solr/core/CoreContainer.java   |   402 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |    10 +-
 .../apache/solr/core/CorePropertiesLocator.java    |    24 +-
 .../src/java/org/apache/solr/core/CoreSorter.java  |    77 +-
 .../src/java/org/apache/solr/core/Diagnostics.java |     2 +-
 .../org/apache/solr/core/DirectoryFactory.java     |    21 +-
 .../org/apache/solr/core/HdfsDirectoryFactory.java |    29 +-
 .../solr/core/IndexDeletionPolicyWrapper.java      |     4 +-
 .../org/apache/solr/core/IndexReaderFactory.java   |     2 +-
 .../src/java/org/apache/solr/core/InitParams.java  |    12 +-
 .../org/apache/solr/core/MMapDirectoryFactory.java |     1 +
 .../java/org/apache/solr/core/MemClassLoader.java  |   200 -
 .../solr/core/NRTCachingDirectoryFactory.java      |     1 +
 .../src/java/org/apache/solr/core/NodeConfig.java  |    86 +-
 .../src/java/org/apache/solr/core/PluginBag.java   |   261 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |    58 +-
 .../org/apache/solr/core/QuerySenderListener.java  |    54 +-
 .../java/org/apache/solr/core/RequestHandlers.java |     6 +-
 .../java/org/apache/solr/core/RequestParams.java   |    65 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |     9 +-
 .../apache/solr/core/SimpleFSDirectoryFactory.java |    42 -
 .../apache/solr/core/SimpleTextCodecFactory.java   |     1 +
 .../java/org/apache/solr/core/SolrClassLoader.java |    29 +
 .../src/java/org/apache/solr/core/SolrConfig.java  |   145 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   236 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |    33 +-
 .../org/apache/solr/core/SolrDeletionPolicy.java   |    14 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   138 +
 .../org/apache/solr/core/SolrResourceLoader.java   |   416 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |    73 +-
 .../apache/solr/core/StandardDirectoryFactory.java |     2 +-
 .../apache/solr/core/TransientSolrCoreCache.java   |    10 -
 .../solr/core/TransientSolrCoreCacheDefault.java   |    29 +-
 .../solr/core/TransientSolrCoreCacheFactory.java   |     6 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |    56 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |   105 +-
 .../org/apache/solr/core/backup/BackupManager.java |     2 +-
 .../backup/repository/HdfsBackupRepository.java    |    14 +-
 .../repository/LocalFileSystemRepository.java      |    13 +-
 .../solr/core/snapshots/SolrSnapshotManager.java   |    12 +-
 .../snapshots/SolrSnapshotMetaDataManager.java     |    10 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java     |    16 +-
 .../apache/solr/filestore/DistribPackageStore.java |    91 +-
 .../org/apache/solr/filestore/PackageStore.java    |     7 +
 .../org/apache/solr/filestore/PackageStoreAPI.java |    74 +-
 .../solr/handler/AnalysisRequestHandlerBase.java   |     3 +
 .../org/apache/solr/handler/AnalyzeEvaluator.java  |     2 +-
 .../java/org/apache/solr/handler/BlobHandler.java  |    16 +-
 .../java/org/apache/solr/handler/CatStream.java    |    92 +-
 .../solr/handler/CdcrBufferStateManager.java       |     8 +-
 .../solr/handler/CdcrLeaderStateManager.java       |     4 +-
 .../solr/handler/CdcrProcessStateManager.java      |     8 +-
 .../org/apache/solr/handler/CdcrReplicator.java    |    13 +-
 .../apache/solr/handler/CdcrReplicatorManager.java |    44 +-
 .../solr/handler/CdcrReplicatorScheduler.java      |    10 +-
 .../apache/solr/handler/CdcrReplicatorState.java   |     2 +-
 .../apache/solr/handler/CdcrRequestHandler.java    |    38 +-
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |    20 +-
 .../solr/handler/ContentStreamHandlerBase.java     |     2 +-
 .../handler/DocumentAnalysisRequestHandler.java    |     8 +-
 .../apache/solr/handler/DumpRequestHandler.java    |    10 +-
 .../org/apache/solr/handler/ExportHandler.java     |    80 +-
 .../solr/handler/FieldAnalysisRequestHandler.java  |     3 +
 .../java/org/apache/solr/handler/GraphHandler.java |    23 +-
 .../java/org/apache/solr/handler/IndexFetcher.java |   217 +-
 .../apache/solr/handler/MoreLikeThisHandler.java   |     5 +-
 .../apache/solr/handler/PingRequestHandler.java    |     2 +-
 .../apache/solr/handler/ReplicationHandler.java    |   343 +-
 .../apache/solr/handler/RequestHandlerBase.java    |     8 +-
 .../java/org/apache/solr/handler/RestoreCore.java  |     3 +-
 .../java/org/apache/solr/handler/SQLHandler.java   |    10 +-
 .../org/apache/solr/handler/SchemaHandler.java     |    62 +-
 .../java/org/apache/solr/handler/SnapShooter.java  |    28 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |    83 +-
 .../org/apache/solr/handler/StreamHandler.java     |   107 +-
 .../apache/solr/handler/UpdateRequestHandler.java  |     4 +-
 .../solr/handler/admin/AdminHandlersProxy.java     |    10 +-
 .../handler/admin/AutoscalingHistoryHandler.java   |   165 -
 .../solr/handler/admin/BaseHandlerApiSupport.java  |     5 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |    34 +-
 .../org/apache/solr/handler/admin/ColStatus.java   |     9 +-
 .../solr/handler/admin/CollectionHandlerApi.java   |     2 +-
 .../solr/handler/admin/CollectionsHandler.java     |    63 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |    16 +-
 .../solr/handler/admin/ContainerPluginsApi.java    |   179 +
 .../solr/handler/admin/CoreAdminHandler.java       |     6 +-
 .../solr/handler/admin/CoreAdminOperation.java     |     9 +-
 .../solr/handler/admin/HealthCheckHandler.java     |    82 +-
 .../solr/handler/admin/IndexSizeEstimator.java     |     7 +-
 .../org/apache/solr/handler/admin/InfoHandler.java |     2 +-
 .../apache/solr/handler/admin/LoggingHandler.java  |     9 +-
 .../solr/handler/admin/LukeRequestHandler.java     |    36 +-
 .../apache/solr/handler/admin/MergeIndexesOp.java  |     8 +-
 .../handler/admin/MetricsCollectorHandler.java     |    10 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |     7 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |    56 +-
 .../apache/solr/handler/admin/PrepRecoveryOp.java  |    22 +-
 .../solr/handler/admin/RebalanceLeaders.java       |    24 +-
 .../solr/handler/admin/RequestSyncShardOp.java     |     8 +-
 .../solr/handler/admin/SecurityConfHandler.java    |     7 +-
 .../handler/admin/SegmentsInfoRequestHandler.java  |    11 +-
 .../solr/handler/admin/ShowFileRequestHandler.java |    16 +-
 .../solr/handler/admin/SolrInfoMBeanHandler.java   |     4 +
 .../org/apache/solr/handler/admin/SplitOp.java     |    14 +-
 .../solr/handler/admin/SystemInfoHandler.java      |    57 +-
 .../solr/handler/admin/ThreadDumpHandler.java      |    54 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |   201 +-
 .../solr/handler/admin/ZookeeperReadAPI.java       |   145 +
 .../solr/handler/admin/ZookeeperStatusHandler.java |    85 +-
 .../solr/handler/component/CloudReplicaSource.java |     2 +
 .../solr/handler/component/DebugComponent.java     |    38 +-
 .../solr/handler/component/ExpandComponent.java    |   119 +-
 .../solr/handler/component/FacetComponent.java     |    22 +-
 .../solr/handler/component/FieldFacetStats.java    |     4 +-
 .../solr/handler/component/HighlightComponent.java |     9 +-
 .../solr/handler/component/HttpShardHandler.java   |   176 +-
 .../handler/component/HttpShardHandlerFactory.java |    93 +-
 .../handler/component/IterativeMergeStrategy.java  |     5 +-
 .../solr/handler/component/MergeStrategy.java      |     1 +
 .../handler/component/MoreLikeThisComponent.java   |    36 +-
 .../component/PhrasesIdentificationComponent.java  |     4 +
 .../component/PivotFacetFieldValueCollection.java  |     3 +-
 .../solr/handler/component/PivotFacetHelper.java   |     5 +
 .../handler/component/PivotFacetProcessor.java     |     4 +-
 .../solr/handler/component/QueryComponent.java     |    41 +-
 .../handler/component/QueryElevationComponent.java |    13 +-
 .../handler/component/RangeFacetProcessor.java     |     1 +
 .../solr/handler/component/RangeFacetRequest.java  |    13 +-
 .../handler/component/RealTimeGetComponent.java    |    56 +-
 .../solr/handler/component/ResponseBuilder.java    |     6 +-
 .../solr/handler/component/SearchComponent.java    |     2 +-
 .../solr/handler/component/SearchHandler.java      |    90 +-
 .../apache/solr/handler/component/ShardDoc.java    |     1 +
 .../component/ShardFieldSortedHitQueue.java        |     6 +-
 .../solr/handler/component/ShardResponse.java      |     4 +-
 .../handler/component/SortedDateStatsValues.java   |     6 +-
 .../component/SortedNumericStatsValues.java        |     6 +-
 .../handler/component/SpatialHeatmapFacets.java    |     4 +-
 .../handler/component/SpellCheckComponent.java     |    62 +-
 .../handler/component/StandaloneReplicaSource.java |     1 +
 .../solr/handler/component/StatsComponent.java     |   113 +-
 .../apache/solr/handler/component/StatsInfo.java   |   108 +
 .../apache/solr/handler/component/StatsValues.java |     2 +-
 .../solr/handler/component/StatsValuesFactory.java |  1385 +-
 .../solr/handler/component/SuggestComponent.java   |    54 +-
 .../handler/component/TermVectorComponent.java     |     6 +-
 .../solr/handler/component/TermsComponent.java     |     4 +-
 .../org/apache/solr/handler/export/DoubleCmp.java  |    43 -
 .../org/apache/solr/handler/export/DoubleComp.java |    45 +
 .../solr/handler/export/DoubleValueSortDoc.java    |     1 +
 .../apache/solr/handler/export/ExportBuffers.java  |   271 +
 .../apache/solr/handler/export/ExportWriter.java   |   306 +-
 .../solr/handler/export/ExportWriterStream.java    |   242 +
 .../org/apache/solr/handler/export/FloatCmp.java   |    44 -
 .../org/apache/solr/handler/export/FloatComp.java  |    44 +
 .../org/apache/solr/handler/export/IntComp.java    |    32 +-
 .../org/apache/solr/handler/export/LongCmp.java    |    45 -
 .../org/apache/solr/handler/export/LongComp.java   |    46 +
 .../org/apache/solr/handler/export/LongValue.java  |     4 +-
 .../apache/solr/handler/export/PriorityQueue.java  |   218 -
 .../solr/handler/export/QuadValueSortDoc.java      |     1 +
 .../solr/handler/export/SingleValueSortDoc.java    |     3 +-
 .../org/apache/solr/handler/export/SortDoc.java    |    19 +-
 .../org/apache/solr/handler/export/SortQueue.java  |   155 +-
 .../solr/handler/export/StringFieldWriter.java     |    25 +-
 .../apache/solr/handler/export/StringValue.java    |    36 +-
 .../solr/handler/export/TripleValueSortDoc.java    |     1 +
 .../apache/solr/handler/loader/JavabinLoader.java  |     6 +-
 .../org/apache/solr/handler/loader/JsonLoader.java |    19 +-
 .../org/apache/solr/handler/loader/XMLLoader.java  |    22 +-
 .../apache/solr/handler/sql/CalciteSolrDriver.java |    16 +-
 .../org/apache/solr/handler/sql/LimitStream.java   |     6 +-
 .../org/apache/solr/handler/sql/SolrAggregate.java |     1 +
 .../apache/solr/handler/sql/SolrEnumerator.java    |     3 +
 .../org/apache/solr/handler/sql/SolrFilter.java    |    16 +-
 .../org/apache/solr/handler/sql/SolrMethod.java    |     1 +
 .../org/apache/solr/handler/sql/SolrSchema.java    |    62 +-
 .../org/apache/solr/handler/sql/SolrTable.java     |    31 +-
 .../handler/sql/SolrToEnumerableConverter.java     |     3 +
 .../org/apache/solr/handler/tagger/Tagger.java     |     9 +-
 .../solr/handler/tagger/TaggerRequestHandler.java  |   119 +-
 .../solr/handler/tagger/TermPrefixCursor.java      |     1 +
 .../solr/highlight/DefaultSolrHighlighter.java     |   514 +-
 .../solr/highlight/HighlightingPluginBase.java     |     2 +-
 .../org/apache/solr/highlight/RegexFragmenter.java |     2 +-
 .../org/apache/solr/highlight/SolrEncoder.java     |     2 +-
 .../org/apache/solr/highlight/SolrFormatter.java   |     2 +-
 .../apache/solr/highlight/SolrFragListBuilder.java |     2 +-
 .../org/apache/solr/highlight/SolrFragmenter.java  |     2 +-
 .../solr/highlight/UnifiedSolrHighlighter.java     |     3 +-
 .../solr/index/WrapperMergePolicyFactory.java      |     1 +
 .../org/apache/solr/internal/csv/CSVParser.java    |     4 +
 .../org/apache/solr/internal/csv/CSVPrinter.java   |     1 +
 .../java/org/apache/solr/logging/LogWatcher.java   |    10 +-
 .../org/apache/solr/logging/MDCLoggingContext.java |    78 +-
 .../org/apache/solr/metrics/MetricSuppliers.java   |    15 +-
 .../java/org/apache/solr/metrics/MetricsMap.java   |     5 +-
 .../apache/solr/metrics/SolrCoreMetricManager.java |     4 +-
 .../org/apache/solr/metrics/SolrMetricManager.java |    75 +-
 .../apache/solr/metrics/SolrMetricProducer.java    |     9 +-
 .../apache/solr/metrics/SolrMetricReporter.java    |     4 +-
 .../metrics/reporters/ReporterClientCache.java     |     4 +-
 .../solr/metrics/reporters/SolrJmxReporter.java    |     6 +-
 .../solr/metrics/reporters/SolrSlf4jReporter.java  |     1 +
 .../metrics/reporters/jmx/JmxMetricsReporter.java  |    18 +-
 .../reporters/solr/SolrClusterReporter.java        |    10 +-
 .../solr/metrics/reporters/solr/SolrReporter.java  |    83 +-
 .../metrics/reporters/solr/SolrShardReporter.java  |    20 +-
 .../apache/solr/metrics/rrd/SolrRrdBackend.java    |     2 +-
 .../solr/metrics/rrd/SolrRrdBackendFactory.java    |    31 +-
 .../packagemanager/DefaultPackageRepository.java   |     4 +-
 .../apache/solr/packagemanager/PackageManager.java |   446 +-
 .../apache/solr/packagemanager/PackageUtils.java   |     3 +
 .../solr/packagemanager/RepositoryManager.java     |    34 +-
 .../apache/solr/packagemanager/SolrPackage.java    |     4 +
 .../solr/packagemanager/SolrPackageInstance.java   |    23 +
 .../org/apache/solr/parser/FastCharStream.java     |    12 +
 .../apache/solr/parser/SolrQueryParserBase.java    |    27 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |    62 +-
 .../java/org/apache/solr/pkg/PackageListeners.java |    58 +-
 .../solr/pkg/PackageListeningClassLoader.java      |   151 +
 .../java/org/apache/solr/pkg/PackageLoader.java    |    80 +-
 .../org/apache/solr/pkg/PackagePluginHolder.java   |    66 +-
 .../apache/solr/request/LocalSolrQueryRequest.java |    12 +-
 .../java/org/apache/solr/request/SimpleFacets.java |    27 +-
 .../apache/solr/request/SolrQueryRequestBase.java  |     1 +
 .../apache/solr/request/SolrRequestHandler.java    |     4 +-
 .../org/apache/solr/request/SolrRequestInfo.java   |    96 +-
 .../solr/request/json/JsonQueryConverter.java      |    52 +-
 .../org/apache/solr/request/json/ObjectUtil.java   |     8 +-
 .../apache/solr/response/BinaryResponseWriter.java |    13 +-
 .../apache/solr/response/CSVResponseWriter.java    |     4 +-
 .../org/apache/solr/response/DocsStreamer.java     |     1 +
 .../solr/response/GeoJSONResponseWriter.java       |    20 +-
 .../solr/response/GraphMLResponseWriter.java       |     8 +-
 .../apache/solr/response/JSONResponseWriter.java   |    25 +-
 .../java/org/apache/solr/response/JSONWriter.java  |    43 +-
 .../apache/solr/response/PHPResponseWriter.java    |     6 +-
 .../solr/response/PHPSerializedResponseWriter.java |    24 +-
 .../apache/solr/response/PythonResponseWriter.java |     4 +-
 .../apache/solr/response/QueryResponseWriter.java  |     2 +-
 .../apache/solr/response/RawResponseWriter.java    |     2 +-
 .../apache/solr/response/RubyResponseWriter.java   |     4 +-
 .../solr/response/SchemaXmlResponseWriter.java     |     2 +-
 .../org/apache/solr/response/SchemaXmlWriter.java  |    25 +-
 .../apache/solr/response/SmileResponseWriter.java  |     2 +-
 .../apache/solr/response/SolrQueryResponse.java    |     1 +
 .../solr/response/TabularResponseWriter.java       |    13 +-
 .../apache/solr/response/TextResponseWriter.java   |    16 +-
 .../apache/solr/response/XMLResponseWriter.java    |     2 +-
 .../java/org/apache/solr/response/XMLWriter.java   |    79 +-
 .../apache/solr/response/XSLTResponseWriter.java   |     4 +-
 .../response/transform/ChildDocTransformer.java    |     6 +
 .../transform/ChildDocTransformerFactory.java      |    11 +-
 .../response/transform/DocIdAugmenterFactory.java  |    31 +-
 .../transform/ExplainAugmenterFactory.java         |     2 +-
 .../response/transform/GeoTransformerFactory.java  |     1 +
 .../transform/RawValueTransformerFactory.java      |     3 +-
 .../response/transform/ShardAugmenterFactory.java  |     2 +-
 .../transform/SubQueryAugmenterFactory.java        |    64 +-
 .../response/transform/TransformerFactory.java     |     2 +-
 .../response/transform/ValueAugmenterFactory.java  |    80 +-
 .../response/transform/ValueSourceAugmenter.java   |     3 +
 .../org/apache/solr/rest/BaseSolrResource.java     |     8 +-
 .../java/org/apache/solr/rest/ManagedResource.java |    14 +-
 .../apache/solr/rest/ManagedResourceStorage.java   |    31 +-
 .../src/java/org/apache/solr/rest/RestManager.java |    21 +-
 .../analysis/BaseManagedTokenFilterFactory.java    |     5 +
 .../schema/analysis/ManagedStopFilterFactory.java  |     5 +
 .../analysis/ManagedSynonymFilterFactory.java      |    10 +-
 .../analysis/ManagedSynonymGraphFilterFactory.java |    10 +-
 .../schema/analysis/ManagedWordSetResource.java    |     7 +-
 .../org/apache/solr/schema/AbstractEnumField.java  |     5 +-
 .../solr/schema/AbstractSpatialFieldType.java      |     2 +-
 .../schema/AbstractSpatialPrefixTreeFieldType.java |     4 +-
 .../java/org/apache/solr/schema/BinaryField.java   |     2 +-
 .../src/java/org/apache/solr/schema/BoolField.java |   147 +-
 .../solr/schema/ClassicIndexSchemaFactory.java     |     2 +-
 .../org/apache/solr/schema/CurrencyFieldType.java  |     5 +-
 .../org/apache/solr/schema/DatePointField.java     |    50 +-
 .../src/java/org/apache/solr/schema/EnumField.java |     2 +-
 .../org/apache/solr/schema/ExternalFileField.java  |     3 +-
 .../solr/schema/ExternalFileFieldReloader.java     |     6 +-
 .../src/java/org/apache/solr/schema/FieldType.java |     5 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |    39 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |   184 +-
 .../org/apache/solr/schema/IndexSchemaFactory.java |     4 +-
 .../apache/solr/schema/JsonPreAnalyzedParser.java  |    10 +-
 .../solr/schema/LatLonPointSpatialField.java       |     1 +
 .../java/org/apache/solr/schema/LatLonType.java    |     4 +
 .../org/apache/solr/schema/ManagedIndexSchema.java |    98 +-
 .../solr/schema/ManagedIndexSchemaFactory.java     |   115 +-
 .../solr/schema/OpenExchangeRatesOrgProvider.java  |    16 +-
 .../java/org/apache/solr/schema/PointField.java    |     6 +-
 .../org/apache/solr/schema/PreAnalyzedField.java   |    13 +-
 .../org/apache/solr/schema/RandomSortField.java    |     2 +-
 .../src/java/org/apache/solr/schema/RankField.java |   140 +
 .../solr/schema/RptWithGeometrySpatialField.java   |     1 +
 .../java/org/apache/solr/schema/SchemaManager.java |     8 +-
 .../src/java/org/apache/solr/schema/StrField.java  |     2 +-
 .../org/apache/solr/schema/StrFieldSource.java     |     2 +-
 .../src/java/org/apache/solr/schema/TextField.java |     2 +-
 .../java/org/apache/solr/schema/TrieDateField.java |     1 +
 .../org/apache/solr/schema/TrieDoubleField.java    |     3 +-
 .../src/java/org/apache/solr/schema/TrieField.java |     3 +-
 .../org/apache/solr/schema/TrieFloatField.java     |     3 +-
 .../java/org/apache/solr/schema/TrieIntField.java  |     3 +-
 .../java/org/apache/solr/schema/TrieLongField.java |     3 +-
 .../src/java/org/apache/solr/schema/UUIDField.java |     4 +-
 .../apache/solr/schema/ZkIndexSchemaReader.java    |    16 +-
 .../apache/solr/search/AbstractReRankQuery.java    |     2 +-
 .../org/apache/solr/search/BoolQParserPlugin.java  |    53 +-
 .../java/org/apache/solr/search/CacheConfig.java   |    16 +-
 .../org/apache/solr/search/CacheRegenerator.java   |     4 +-
 .../java/org/apache/solr/search/CaffeineCache.java |     5 +-
 .../solr/search/CollapsingQParserPlugin.java       |   520 +-
 .../solr/search/ComplexPhraseQParserPlugin.java    |     2 +-
 .../java/org/apache/solr/search/CursorMark.java    |     1 +
 .../src/java/org/apache/solr/search/DocList.java   |     3 +
 .../src/java/org/apache/solr/search/DocSet.java    |    12 +-
 .../java/org/apache/solr/search/DocSetUtil.java    |    10 +-
 .../src/java/org/apache/solr/search/DocSlice.java  |    15 +-
 .../apache/solr/search/ExportQParserPlugin.java    |     5 +
 .../apache/solr/search/ExtendedDismaxQParser.java  |     5 +-
 .../solr/search/FloatPayloadValueSource.java       |     4 +-
 .../org/apache/solr/search/FunctionQParser.java    |    30 +-
 .../org/apache/solr/search/FunctionRangeQuery.java |     4 +
 .../solr/search/GraphTermsQParserPlugin.java       |    96 +-
 .../src/java/org/apache/solr/search/Grouping.java  |    58 +-
 .../solr/search/IGainTermsQParserPlugin.java       |     2 +
 .../org/apache/solr/search/JoinQParserPlugin.java  |   618 +-
 .../src/java/org/apache/solr/search/JoinQuery.java |   508 +
 .../org/apache/solr/search/MaxScoreCollector.java  |    10 +-
 .../java/org/apache/solr/search/QParserPlugin.java |     5 +-
 .../java/org/apache/solr/search/QueryCommand.java  |    10 +
 .../java/org/apache/solr/search/QueryContext.java  |     2 +
 .../java/org/apache/solr/search/QueryParsing.java  |     1 +
 .../org/apache/solr/search/QueryResultKey.java     |    15 +-
 .../java/org/apache/solr/search/QueryUtils.java    |    32 +-
 .../org/apache/solr/search/RankQParserPlugin.java  |   158 +
 .../src/java/org/apache/solr/search/RankQuery.java |     1 +
 .../org/apache/solr/search/ReRankCollector.java    |    12 +-
 .../java/org/apache/solr/search/ScoreFilter.java   |    21 -
 .../solr/search/SignificantTermsQParserPlugin.java |     6 +
 .../src/java/org/apache/solr/search/SolrCache.java |     5 +-
 .../org/apache/solr/search/SolrCacheHolder.java    |   150 -
 .../apache/solr/search/SolrConstantScoreQuery.java |     1 +
 .../org/apache/solr/search/SolrCoreParser.java     |     1 +
 .../apache/solr/search/SolrDocumentFetcher.java    |     3 +-
 .../java/org/apache/solr/search/SolrFilter.java    |     6 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  |   329 +-
 .../apache/solr/search/SurroundQParserPlugin.java  |     2 +-
 .../org/apache/solr/search/TermsQParserPlugin.java |     3 +
 .../TextLogisticRegressionQParserPlugin.java       |     4 +-
 .../org/apache/solr/search/ValueSourceParser.java  |   651 +-
 .../org/apache/solr/search/XmlQParserPlugin.java   |     3 +-
 .../java/org/apache/solr/search/facet/AggUtil.java |     8 +-
 .../apache/solr/search/facet/AggValueSource.java   |     3 +-
 .../java/org/apache/solr/search/facet/AvgAgg.java  |    22 +-
 .../org/apache/solr/search/facet/CountAgg.java     |     6 +-
 .../org/apache/solr/search/facet/CountValsAgg.java |    12 +-
 .../org/apache/solr/search/facet/DocValuesAcc.java |   575 +-
 .../org/apache/solr/search/facet/FacetBucket.java  |    15 +-
 .../org/apache/solr/search/facet/FacetContext.java |    74 +
 .../apache/solr/search/facet/FacetDebugInfo.java   |     2 +-
 .../org/apache/solr/search/facet/FacetField.java   |    45 +-
 .../apache/solr/search/facet/FacetFieldMerger.java |     7 +-
 .../solr/search/facet/FacetFieldProcessor.java     |   130 +-
 .../search/facet/FacetFieldProcessorByArray.java   |    40 +-
 .../search/facet/FacetFieldProcessorByArrayDV.java |   177 +-
 .../FacetFieldProcessorByEnumTermsStream.java      |     1 +
 .../search/facet/FacetFieldProcessorByHashDV.java  |    31 +-
 .../org/apache/solr/search/facet/FacetHeatmap.java |    12 +-
 .../org/apache/solr/search/facet/FacetModule.java  |   307 +-
 .../org/apache/solr/search/facet/FacetParser.java  |   637 +
 .../apache/solr/search/facet/FacetProcessor.java   |    24 +-
 .../org/apache/solr/search/facet/FacetQuery.java   |     3 +-
 .../org/apache/solr/search/facet/FacetRange.java   |  1038 +-
 .../apache/solr/search/facet/FacetRangeMerger.java |     4 +-
 .../apache/solr/search/facet/FacetRangeParser.java |    76 +
 .../solr/search/facet/FacetRangeProcessor.java     |  1077 ++
 .../org/apache/solr/search/facet/FacetRequest.java |   747 +-
 .../solr/search/facet/FacetRequestSorted.java      |    58 +
 .../search/facet/FacetRequestSortedMerger.java     |    10 +-
 .../java/org/apache/solr/search/facet/HLLAgg.java  |    27 +-
 .../org/apache/solr/search/facet/LegacyFacet.java  |     1 +
 .../org/apache/solr/search/facet/MinMaxAgg.java    |    21 +-
 .../org/apache/solr/search/facet/MissingAgg.java   |     6 +-
 .../apache/solr/search/facet/PercentileAgg.java    |     8 +-
 .../solr/search/facet/ReadOnlyCountSlotAcc.java    |    31 +
 .../apache/solr/search/facet/RelatednessAgg.java   |   277 +-
 .../solr/search/facet/SimpleAggValueSource.java    |     1 +
 .../apache/solr/search/facet/SingletonDISI.java    |    48 +
 .../solr/search/facet/SingletonDocIterator.java    |    52 +
 .../java/org/apache/solr/search/facet/SlotAcc.java |   967 +-
 .../org/apache/solr/search/facet/StddevAgg.java    |    20 +-
 .../java/org/apache/solr/search/facet/SumAgg.java  |    12 +-
 .../org/apache/solr/search/facet/SumsqAgg.java     |    10 +-
 .../apache/solr/search/facet/SweepCountAware.java  |   187 +
 .../org/apache/solr/search/facet/SweepDISI.java    |    85 +
 .../apache/solr/search/facet/SweepDocIterator.java |    87 +
 .../apache/solr/search/facet/UnInvertedField.java  |    73 +-
 .../solr/search/facet/UnInvertedFieldAcc.java      |   174 +-
 .../org/apache/solr/search/facet/UnionDISI.java    |   100 +
 .../apache/solr/search/facet/UnionDocIterator.java |   107 +
 .../org/apache/solr/search/facet/UniqueAgg.java    |    45 +-
 .../apache/solr/search/facet/UniqueBlockAgg.java   |    11 +-
 .../solr/search/facet/UniqueBlockFieldAgg.java     |     2 +-
 .../solr/search/facet/UniqueBlockQueryAgg.java     |     6 +-
 .../apache/solr/search/facet/UniqueSlotAcc.java    |    24 +-
 .../org/apache/solr/search/facet/VarianceAgg.java  |    20 +-
 .../search/function/CollapseScoreFunction.java     |     2 +
 .../solr/search/function/FieldNameValueSource.java |     1 +
 .../solr/search/function/FileFloatSource.java      |    37 +-
 .../solr/search/function/MultiStringFunction.java  |     3 +-
 .../solr/search/function/OrdFieldSource.java       |     1 +
 .../search/function/ReverseOrdFieldSource.java     |     1 +
 .../search/function/ValueSourceRangeFilter.java    |     5 +-
 .../distance/GeoDistValueSourceParser.java         |     4 +-
 .../search/function/distance/GeohashFunction.java  |     3 +
 .../distance/GeohashHaversineFunction.java         |     8 +-
 .../function/distance/HaversineConstFunction.java  |     8 +-
 .../function/distance/HaversineFunction.java       |     7 +-
 .../function/distance/StringDistanceFunction.java  |     3 +
 .../function/distance/VectorDistanceFunction.java  |     7 +-
 .../solr/search/grouping/CommandHandler.java       |    26 +-
 .../distributed/command/GroupConverter.java        |     6 +-
 .../grouping/distributed/command/QueryCommand.java |     1 +
 .../command/SearchGroupsFieldCommand.java          |     3 +
 .../distributed/command/TopGroupsFieldCommand.java |     2 +
 .../SearchGroupShardResponseProcessor.java         |     3 +-
 .../TopGroupsShardResponseProcessor.java           |     4 +-
 .../SearchGroupsResultTransformer.java             |     7 +-
 .../ShardResultTransformer.java                    |     2 +
 .../TopGroupsResultTransformer.java                |     3 +-
 .../GroupedEndResultTransformer.java               |     4 +-
 .../solr/search/join/BlockJoinChildQParser.java    |     7 +-
 .../solr/search/join/BlockJoinParentQParser.java   |   105 +-
 .../search/join/ChildFieldValueSourceParser.java   |     6 +-
 .../search/join/CrossCollectionJoinQParser.java    |    92 +
 .../solr/search/join/CrossCollectionJoinQuery.java |   380 +
 .../apache/solr/search/join/FiltersQParser.java    |    91 +-
 .../solr/search/join/GraphEdgeCollector.java       |   207 +
 .../org/apache/solr/search/join/GraphQuery.java    |     2 +-
 .../solr/search/join/GraphTermsCollector.java      |   202 -
 .../solr/search/join/ScoreJoinQParserPlugin.java   |    19 +-
 .../org/apache/solr/search/join/XCJFQParser.java   |    90 -
 .../apache/solr/search/join/XCJFQParserPlugin.java |    66 -
 .../org/apache/solr/search/join/XCJFQuery.java     |   380 -
 .../apache/solr/search/mlt/CloudMLTQParser.java    |     4 +
 .../apache/solr/search/mlt/SimpleMLTQParser.java   |     1 +
 .../similarities/BooleanSimilarityFactory.java     |    36 +
 .../solr/search/stats/ExactSharedStatsCache.java   |     6 +-
 .../apache/solr/search/stats/ExactStatsCache.java  |    22 +-
 .../apache/solr/search/stats/LRUStatsCache.java    |    10 +-
 .../org/apache/solr/search/stats/StatsCache.java   |     2 +-
 .../org/apache/solr/search/stats/StatsUtil.java    |    17 +-
 .../apache/solr/security/AuditLoggerPlugin.java    |    16 +-
 .../apache/solr/security/AuthenticationPlugin.java |    29 +-
 .../apache/solr/security/AuthorizationContext.java |    27 +-
 .../solr/security/AutorizationEditOperation.java   |     9 +
 .../org/apache/solr/security/BasicAuthPlugin.java  |    21 +-
 .../org/apache/solr/security/CertAuthPlugin.java   |    51 +
 .../security/DelegationTokenKerberosFilter.java    |    19 +-
 .../ExternalRoleRuleBasedAuthorizationPlugin.java  |    52 +
 .../org/apache/solr/security/HadoopAuthPlugin.java |    44 +-
 .../org/apache/solr/security/JWTAuthPlugin.java    |    52 +-
 .../org/apache/solr/security/JWTPrincipal.java     |     4 +-
 .../solr/security/JWTVerificationkeyResolver.java  |     8 +-
 .../org/apache/solr/security/KerberosFilter.java   |     6 +-
 .../org/apache/solr/security/KerberosPlugin.java   |    57 +-
 .../solr/security/MultiDestinationAuditLogger.java |     6 +-
 .../solr/security/PKIAuthenticationPlugin.java     |    42 +-
 .../java/org/apache/solr/security/Permission.java  |     9 +-
 .../solr/security/PermissionNameProvider.java      |     5 +-
 .../security/RuleBasedAuthorizationPlugin.java     |   307 +-
 .../security/RuleBasedAuthorizationPluginBase.java |   347 +
 .../security/Sha256AuthenticationProvider.java     |    13 +-
 .../solr/security/SolrLogAuditLoggerPlugin.java    |     4 +-
 .../apache/solr/servlet/DirectSolrConnection.java  |     4 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |    57 +-
 .../apache/solr/servlet/LoadAdminUiServlet.java    |    31 +-
 .../org/apache/solr/servlet/QueryRateLimiter.java  |    55 +
 .../org/apache/solr/servlet/RateLimitManager.java  |   181 +
 .../apache/solr/servlet/RequestRateLimiter.java    |   168 +
 .../org/apache/solr/servlet/ResponseUtils.java     |     5 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |   160 +-
 .../apache/solr/servlet/SolrRequestParsers.java    |   151 +-
 .../solr/spelling/AbstractLuceneSpellChecker.java  |     3 +-
 .../solr/spelling/DirectSolrSpellChecker.java      |     7 +-
 .../solr/spelling/FileBasedSpellChecker.java       |     2 +-
 .../solr/spelling/IndexBasedSpellChecker.java      |     2 +-
 .../org/apache/solr/spelling/QueryConverter.java   |     3 +-
 .../org/apache/solr/spelling/SolrSpellChecker.java |     2 +-
 .../apache/solr/spelling/SpellCheckCollator.java   |    16 +-
 .../solr/spelling/WordBreakSolrSpellChecker.java   |     8 +-
 .../solr/spelling/suggest/DictionaryFactory.java   |     3 +-
 .../DocumentExpressionDictionaryFactory.java       |    20 +-
 .../solr/spelling/suggest/LookupFactory.java       |     2 +-
 .../solr/spelling/suggest/SolrSuggester.java       |    27 +-
 .../apache/solr/spelling/suggest/Suggester.java    |    14 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |     2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |     2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |     2 +-
 .../spelling/suggest/fst/FSTLookupFactory.java     |     2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |     2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |     2 +-
 .../spelling/suggest/fst/WFSTLookupFactory.java    |     2 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |     4 +-
 .../spelling/suggest/tst/TSTLookupFactory.java     |     2 +-
 .../solr/store/blockcache/BlockDirectory.java      |     2 +-
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |    10 +-
 .../org/apache/solr/store/hdfs/HdfsFileWriter.java |     2 +
 .../solr/store/hdfs/HdfsLocalityReporter.java      |    10 +-
 .../apache/solr/store/hdfs/HdfsLockFactory.java    |     4 +
 .../org/apache/solr/update/AddUpdateCommand.java   |     1 +
 .../org/apache/solr/update/CdcrTransactionLog.java |     8 +-
 .../java/org/apache/solr/update/CdcrUpdateLog.java |     6 +-
 .../java/org/apache/solr/update/CommitTracker.java |    25 +-
 .../apache/solr/update/DefaultSolrCoreState.java   |     8 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |    37 +-
 .../org/apache/solr/update/DocumentBuilder.java    |     1 +
 .../org/apache/solr/update/HdfsTransactionLog.java |    10 +-
 .../java/org/apache/solr/update/HdfsUpdateLog.java |    25 +-
 .../org/apache/solr/update/IndexFingerprint.java   |     5 +-
 .../org/apache/solr/update/LoggingInfoStream.java  |     4 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   149 +-
 .../org/apache/solr/update/PeerSyncWithLeader.java |    56 +-
 .../org/apache/solr/update/SolrCmdDistributor.java |    12 +-
 .../java/org/apache/solr/update/SolrCoreState.java |     3 +-
 .../org/apache/solr/update/SolrIndexConfig.java    |    29 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |    28 +-
 .../org/apache/solr/update/SolrIndexWriter.java    |    12 +-
 .../apache/solr/update/StreamingSolrClients.java   |     2 +-
 .../org/apache/solr/update/TransactionLog.java     |   174 +-
 .../java/org/apache/solr/update/UpdateHandler.java |     8 +-
 .../src/java/org/apache/solr/update/UpdateLog.java |    99 +-
 .../org/apache/solr/update/UpdateShardHandler.java |    16 +-
 .../java/org/apache/solr/update/VersionInfo.java   |     4 +
 ...AbstractDefaultValueUpdateProcessorFactory.java |     2 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |    11 +-
 ...llValuesOrNoneFieldMutatingUpdateProcessor.java |     6 +-
 .../processor/AtomicUpdateDocumentMerger.java      |    58 +-
 .../processor/AtomicUpdateProcessorFactory.java    |     3 +-
 .../solr/update/processor/CdcrUpdateProcessor.java |     2 +
 .../processor/CdcrUpdateProcessorFactory.java      |     2 +-
 .../ClassificationUpdateProcessorFactory.java      |     2 +-
 .../CloneFieldUpdateProcessorFactory.java          |    17 +-
 .../ConcatFieldUpdateProcessorFactory.java         |     2 +-
 .../CountFieldValuesUpdateProcessorFactory.java    |     2 +-
 .../DefaultValueUpdateProcessorFactory.java        |     2 +-
 .../processor/DistributedUpdateProcessor.java      |    83 +-
 .../processor/DistributedZkUpdateProcessor.java    |    54 +-
 .../DocBasedVersionConstraintsProcessor.java       |     8 +-
 ...DocBasedVersionConstraintsProcessorFactory.java |     7 +-
 .../DocExpirationUpdateProcessorFactory.java       |    25 +-
 .../FieldLengthUpdateProcessorFactory.java         |     2 +-
 .../processor/FieldMutatingUpdateProcessor.java    |     7 +-
 .../FieldMutatingUpdateProcessorFactory.java       |    11 +-
 .../FieldNameMutatingUpdateProcessorFactory.java   |     2 +-
 .../FieldValueMutatingUpdateProcessor.java         |    12 +-
 ...IgnoreCommitOptimizeUpdateProcessorFactory.java |     2 +-
 .../IgnoreLargeDocumentProcessorFactory.java       |     5 +-
 .../LastFieldValueUpdateProcessorFactory.java      |     1 +
 .../processor/LogUpdateProcessorFactory.java       |    31 +-
 .../MaxFieldValueUpdateProcessorFactory.java       |     7 +-
 .../MinFieldValueUpdateProcessorFactory.java       |     7 +-
 .../ParseBooleanFieldUpdateProcessorFactory.java   |     4 +-
 .../ParseDateFieldUpdateProcessorFactory.java      |     9 +-
 .../ParseDoubleFieldUpdateProcessorFactory.java    |     6 +-
 .../ParseFloatFieldUpdateProcessorFactory.java     |     6 +-
 .../ParseIntFieldUpdateProcessorFactory.java       |     6 +-
 .../ParseLongFieldUpdateProcessorFactory.java      |     6 +-
 .../ParseNumericFieldUpdateProcessorFactory.java   |     2 +-
 .../PreAnalyzedUpdateProcessorFactory.java         |     2 +-
 .../processor/RegexReplaceProcessorFactory.java    |     2 +-
 .../update/processor/RegexpBoostProcessor.java     |    13 +-
 .../RemoveBlankFieldUpdateProcessorFactory.java    |     2 +-
 .../processor/RunUpdateProcessorFactory.java       |   123 +-
 .../processor/SignatureUpdateProcessorFactory.java |     2 +-
 .../processor/SimpleUpdateProcessorFactory.java    |     3 +-
 .../SkipExistingDocumentsProcessorFactory.java     |     2 +-
 .../StatelessScriptUpdateProcessorFactory.java     |     5 +-
 .../update/processor/TolerantUpdateProcessor.java  |     2 +-
 .../processor/TrimFieldUpdateProcessorFactory.java |     2 +-
 .../TruncateFieldUpdateProcessorFactory.java       |     2 +-
 .../update/processor/URLClassifyProcessor.java     |    60 +-
 .../processor/UUIDUpdateProcessorFactory.java      |     2 +-
 .../UniqFieldsUpdateProcessorFactory.java          |     3 +-
 .../processor/UpdateRequestProcessorChain.java     |    18 +-
 .../processor/UpdateRequestProcessorFactory.java   |     2 +-
 .../org/apache/solr/util/ConcurrentLRUCache.java   |    10 +-
 .../src/java/org/apache/solr/util/CryptoKeys.java  |     5 +-
 .../src/java/org/apache/solr/util/DOMUtil.java     |     6 +-
 .../apache/solr/util/DefaultSolrThreadFactory.java |    49 -
 .../src/java/org/apache/solr/util/DynamicMap.java  |    55 +
 .../src/java/org/apache/solr/util/ExportTool.java  |    61 +-
 .../src/java/org/apache/solr/util/FSHDFSUtils.java |    14 +-
 .../java/org/apache/solr/util/FloatConsumer.java   |    39 +
 .../org/apache/solr/util/IntFloatDynamicMap.java   |   118 +
 .../org/apache/solr/util/IntIntDynamicMap.java     |   120 +
 .../org/apache/solr/util/IntLongDynamicMap.java    |   120 +
 .../apache/solr/util/MockSearchableSolrClient.java |     3 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   126 +-
 .../src/java/org/apache/solr/util/RTimerTree.java  |     1 +
 .../src/java/org/apache/solr/util/SolrCLI.java     |  1590 +--
 .../apache/solr/util/SolrFileCleaningTracker.java  |   147 -
 .../java/org/apache/solr/util/SolrLogLayout.java   |     1 +
 .../java/org/apache/solr/util/SolrLogPostTool.java |   294 +-
 .../java/org/apache/solr/util/SolrPluginUtils.java |    27 +-
 .../org/apache/solr/util/StartupLoggingUtils.java  |     3 +-
 .../java/org/apache/solr/util/TestInjection.java   |    17 +-
 .../solr/util/circuitbreaker/CircuitBreaker.java   |    56 +
 .../util/circuitbreaker/CircuitBreakerManager.java |   134 +
 .../util/circuitbreaker/MemoryCircuitBreaker.java  |   114 +
 .../SSLCredentialProviderFactory.java              |     8 +-
 .../providers/HadoopSSLCredentialProvider.java     |     2 +-
 .../solr/util/plugin/AbstractPluginLoader.java     |    16 +-
 .../util/plugin/NamedListInitializedPlugin.java    |     2 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |    12 +-
 .../solr/util/tracing/SolrRequestCarrier.java      |     3 +-
 .../apache/solr/util/xslt/TransformerProvider.java |    10 +-
 .../resources/EditableSolrConfigAttributes.json    |     5 +-
 solr/core/src/resources/ImplicitPlugins.json       |    13 +-
 solr/core/src/test-files/log4j2.xml                |    44 +-
 solr/core/src/test-files/runtimecode/MyPlugin.java |    43 +
 .../runtimecode/containerplugin.v.1.jar.bin        |   Bin 0 -> 867 bytes
 .../runtimecode/containerplugin.v.2.jar.bin        |   Bin 0 -> 867 bytes
 .../test-files/runtimecode/schema-plugins.jar.bin  |   Bin 0 -> 6814 bytes
 solr/core/src/test-files/runtimecode/sig.txt       |    13 +
 .../collection1/conf/schema-booleansimilarity.xml  |    35 +
 .../solr/collection1/conf/schema-rank-fields.xml   |    27 +
 .../test-files/solr/collection1/conf/schema15.xml  |     3 +
 .../solr/collection1/conf/schema_latest.xml        |     4 +
 .../conf/solrconfig-cache-enable-disable.xml       |    10 +
 .../solr/collection1/conf/solrconfig-follower.xml  |    59 +
 ...rconfig-slave1.xml => solrconfig-follower1.xml} |     0
 ...rottled.xml => solrconfig-leader-throttled.xml} |     0
 .../solr/collection1/conf/solrconfig-leader.xml    |    70 +
 .../conf/solrconfig-leader1-keepOneBackup.xml      |    49 +
 .../solr/collection1/conf/solrconfig-leader1.xml   |    68 +
 .../solr/collection1/conf/solrconfig-leader2.xml   |    66 +
 .../solr/collection1/conf/solrconfig-leader3.xml   |    67 +
 .../solr/collection1/conf/solrconfig-master.xml    |    70 -
 .../conf/solrconfig-master1-keepOneBackup.xml      |    49 -
 .../solr/collection1/conf/solrconfig-master1.xml   |    68 -
 .../solr/collection1/conf/solrconfig-master2.xml   |    66 -
 .../solr/collection1/conf/solrconfig-master3.xml   |    67 -
 .../conf/solrconfig-memory-circuitbreaker.xml      |    95 +
 .../solr/collection1/conf/solrconfig-repeater.xml  |     6 +-
 .../conf/solrconfig-replication-legacy.xml         |    62 +
 .../solr/collection1/conf/solrconfig-slave.xml     |    59 -
 .../solr/collection1/conf/solrconfig-tlog.xml      |     4 -
 .../conf/solrconfig.snippet.randomindexconfig.xml  |     1 +
 .../configsets/{xcjf => ccjoin}/conf/schema.xml    |     0
 .../solr/configsets/ccjoin/conf/solrconfig.xml     |    62 +
 .../solr/configsets/xcjf/conf/solrconfig.xml       |    72 -
 .../security/hadoop_kerberos_authz_config.json     |    37 +
 .../solr/simSnapshot/autoscalingState.json         |  3923 ------
 .../test-files/solr/simSnapshot/clusterState.json  |  2854 ----
 .../test-files/solr/simSnapshot/distribState.json  |   206 -
 .../test-files/solr/simSnapshot/managerState.json  |     1 -
 .../src/test-files/solr/simSnapshot/nodeState.json |  3823 ------
 .../test-files/solr/simSnapshot/statistics.json    |  2045 ---
 solr/core/src/test-files/solr/solr-50-all.xml      |     1 +
 solr/core/src/test-files/solr/solr-jmxreporter.xml |     1 -
 .../core/src/test-files/solr/solr-solrreporter.xml |     7 +-
 .../test-files/solr/solr-trackingshardhandler.xml  |     1 -
 solr/core/src/test-files/solr/solr.xml             |     2 +-
 .../src/test/org/apache/hadoop/fs/FileUtil.java    |    33 +-
 .../datanode/fsdataset/impl/BlockPoolSlice.java    |    50 +-
 .../test/org/apache/hadoop/http/HttpServer2.java   |    55 +-
 .../test/org/apache/hadoop/util/DiskChecker.java   |     4 +-
 .../org/apache/solr/BasicFunctionalityTest.java    |    12 +-
 .../src/test/org/apache/solr/CursorPagingTest.java |     8 +
 .../apache/solr/HelloWorldSolrCloudTestCase.java   |     4 +-
 .../src/test/org/apache/solr/OutputWriterTest.java |     2 +-
 .../src/test/org/apache/solr/SolrInfoBeanTest.java |     6 +-
 .../test/org/apache/solr/TestCrossCoreJoin.java    |     4 +-
 .../org/apache/solr/TestDistributedGrouping.java   |     3 +
 .../org/apache/solr/TestDistributedSearch.java     |    46 +-
 .../test/org/apache/solr/TestGroupingSearch.java   |   207 +-
 solr/core/src/test/org/apache/solr/TestJoin.java   |    38 +-
 .../test/org/apache/solr/TestRandomDVFaceting.java |    10 +-
 .../test/org/apache/solr/TestRandomFaceting.java   |    22 +-
 .../org/apache/solr/TestSolrCoreProperties.java    |     1 +
 .../solr/analysis/TestDeprecatedFilters.java       |     2 +-
 .../apache/solr/analysis/TokenizerChainTest.java   |     1 +
 .../TestEmbeddedSolrServerAdminHandler.java        |    15 +-
 .../TestEmbeddedSolrServerConstructors.java        |     5 +-
 .../test/org/apache/solr/cloud/AddReplicaTest.java |    12 +-
 .../apache/solr/cloud/AliasIntegrationTest.java    |     2 +-
 .../cloud/AssignBackwardCompatibilityTest.java     |     5 +-
 .../apache/solr/cloud/BasicDistributedZk2Test.java |     8 +-
 .../apache/solr/cloud/BasicDistributedZkTest.java  |    18 +-
 .../test/org/apache/solr/cloud/BasicZkTest.java    |   181 -
 .../solr/cloud/ChaosMonkeyNothingIsSafeTest.java   |     8 +-
 ...aosMonkeyNothingIsSafeWithPullReplicasTest.java |    11 +-
 .../solr/cloud/ChaosMonkeySafeLeaderTest.java      |     6 +-
 .../ChaosMonkeySafeLeaderWithPullReplicasTest.java |    15 +-
 .../solr/cloud/ChaosMonkeyShardSplitTest.java      |    22 +-
 .../test/org/apache/solr/cloud/CloudTestUtils.java |   189 -
 .../apache/solr/cloud/ClusterStateMockUtil.java    |    13 +-
 .../org/apache/solr/cloud/ClusterStateTest.java    |     8 +-
 .../org/apache/solr/cloud/CollectionPropsTest.java |     9 +-
 .../solr/cloud/CollectionStateFormat2Test.java     |    71 -
 .../solr/cloud/CollectionStateZnodeTest.java       |    70 +
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |    50 +-
 .../org/apache/solr/cloud/ConfigSetsAPITest.java   |     1 +
 .../apache/solr/cloud/ConnectionManagerTest.java   |     4 +-
 .../apache/solr/cloud/CreateRoutedAliasTest.java   |     4 -
 .../solr/cloud/DeleteInactiveReplicaTest.java      |     8 +-
 .../cloud/DeleteLastCustomShardedReplicaTest.java  |     1 -
 .../test/org/apache/solr/cloud/DeleteNodeTest.java |     8 +-
 .../org/apache/solr/cloud/DeleteReplicaTest.java   |    38 +-
 .../org/apache/solr/cloud/DeleteShardTest.java     |     1 -
 .../apache/solr/cloud/DistribCursorPagingTest.java |     1 +
 .../DistribDocExpirationUpdateProcessorTest.java   |     5 +-
 .../solr/cloud/DistribJoinFromCollectionTest.java  |     8 +-
 .../apache/solr/cloud/DistributedQueueTest.java    |     4 +-
 .../solr/cloud/DistributedVersionInfoTest.java     |     8 +-
 .../apache/solr/cloud/DocValuesNotIndexedTest.java |     1 -
 .../org/apache/solr/cloud/ForceLeaderTest.java     |    26 +-
 .../solr/cloud/FullSolrCloudDistribCmdsTest.java   |     6 +-
 .../cloud/FullThrottleStoppableIndexingThread.java |     2 +-
 .../apache/solr/cloud/HealthCheckHandlerTest.java  |   179 -
 .../solr/cloud/HttpPartitionOnCommitTest.java      |    37 +-
 .../org/apache/solr/cloud/HttpPartitionTest.java   |    45 +-
 .../apache/solr/cloud/KerberosTestServices.java    |     6 +-
 .../solr/cloud/LeaderElectionContextKeyTest.java   |     1 -
 .../solr/cloud/LeaderElectionIntegrationTest.java  |     2 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |     8 +-
 .../cloud/LeaderFailoverAfterPartitionTest.java    |     6 +-
 .../cloud/LeaderFailureAfterFreshStartTest.java    |     8 +-
 .../apache/solr/cloud/LeaderTragicEventTest.java   |    17 +-
 .../solr/cloud/LeaderVoteWaitTimeoutTest.java      |     6 +-
 .../solr/cloud/LegacyCloudClusterPropTest.java     |   180 -
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |    28 +-
 .../org/apache/solr/cloud/MigrateRouteKeyTest.java |    14 +-
 .../solr/cloud/MissingSegmentRecoveryTest.java     |     1 -
 .../apache/solr/cloud/MockSimpleZkController.java  |     5 +-
 .../test/org/apache/solr/cloud/MockSolrSource.java |     2 +-
 .../solr/cloud/MoveReplicaHDFSFailoverTest.java    |     4 +
 .../org/apache/solr/cloud/MoveReplicaHDFSTest.java |     4 +
 .../org/apache/solr/cloud/MoveReplicaTest.java     |    21 +-
 .../solr/cloud/MultiSolrCloudTestCaseTest.java     |     6 +-
 .../apache/solr/cloud/MultiThreadedOCPTest.java    |    71 +-
 .../solr/cloud/NestedShardedAtomicUpdateTest.java  |     4 +
 .../org/apache/solr/cloud/NodeMutatorTest.java     |     6 +-
 .../OutOfBoxZkACLAndCredentialsProvidersTest.java  |    12 +-
 ...OverriddenZkACLAndCredentialsProvidersTest.java |    10 +-
 .../OverseerCollectionConfigSetProcessorTest.java  |    94 +-
 .../solr/cloud/OverseerModifyCollectionTest.java   |     1 +
 .../org/apache/solr/cloud/OverseerRolesTest.java   |    10 +-
 .../org/apache/solr/cloud/OverseerStatusTest.java  |     5 +-
 .../apache/solr/cloud/OverseerTaskQueueTest.java   |     1 +
 .../test/org/apache/solr/cloud/OverseerTest.java   |   199 +-
 .../apache/solr/cloud/PeerSyncReplicationTest.java |    14 +-
 .../test/org/apache/solr/cloud/RecoveryZkTest.java |     1 -
 .../apache/solr/cloud/ReindexCollectionTest.java   |     3 +-
 .../apache/solr/cloud/ReplaceNodeNoTargetTest.java |   122 -
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |    12 +-
 .../apache/solr/cloud/ReplicationFactorTest.java   |    25 +-
 .../solr/cloud/RestartWhileUpdatingTest.java       |     5 +-
 .../org/apache/solr/cloud/RollingRestartTest.java  |    12 +-
 .../test/org/apache/solr/cloud/RouteFieldTest.java |   163 +
 .../cloud/RoutingToNodesWithPropertiesTest.java    |   241 -
 .../org/apache/solr/cloud/SSLMigrationTest.java    |     3 +-
 .../apache/solr/cloud/SaslZkACLProviderTest.java   |    14 +-
 .../apache/solr/cloud/ShardRoutingCustomTest.java  |     3 -
 .../cloud/SharedFSAutoReplicaFailoverTest.java     |    32 +-
 .../test/org/apache/solr/cloud/SliceStateTest.java |     4 +-
 .../apache/solr/cloud/SolrCloudExampleTest.java    |    23 +-
 .../org/apache/solr/cloud/SolrXmlInZkTest.java     |     8 +-
 .../test/org/apache/solr/cloud/SplitShardTest.java |    15 +-
 .../test/org/apache/solr/cloud/SyncSliceTest.java  |     7 +-
 .../solr/cloud/SystemCollectionCompatTest.java     |    16 +-
 .../solr/cloud/TestAuthenticationFramework.java    |    19 +-
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |     2 +-
 .../apache/solr/cloud/TestCloudConsistency.java    |     6 +-
 .../TestCloudPhrasesIdentificationComponent.java   |     4 +
 .../org/apache/solr/cloud/TestCloudPivotFacet.java |     7 +-
 .../org/apache/solr/cloud/TestCloudRecovery.java   |     1 -
 .../org/apache/solr/cloud/TestCloudRecovery2.java  |     1 -
 .../solr/cloud/TestCloudSearcherWarming.java       |    22 +-
 .../apache/solr/cloud/TestClusterProperties.java   |    12 -
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |    41 +-
 .../solr/cloud/TestConfigSetsAPIExclusivity.java   |     4 +
 .../solr/cloud/TestConfigSetsAPIZkFailure.java     |    30 +-
 .../test/org/apache/solr/cloud/TestCryptoKeys.java |   208 -
 .../cloud/TestDeleteCollectionOnDownNodes.java     |     1 -
 .../cloud/TestDynamicFieldNamesIndexCorrectly.java |     9 +-
 .../org/apache/solr/cloud/TestHashPartitioner.java |     1 +
 .../org/apache/solr/cloud/TestLazySolrCluster.java |    97 +
 .../solr/cloud/TestLeaderElectionZkExpiry.java     |    13 +-
 .../solr/cloud/TestMiniSolrCloudClusterSSL.java    |    16 +-
 .../solr/cloud/TestOnReconnectListenerSupport.java |     5 +-
 .../org/apache/solr/cloud/TestPullReplica.java     |    32 +-
 .../solr/cloud/TestPullReplicaErrorHandling.java   |    22 +-
 .../solr/cloud/TestQueryingOnDownCollection.java   |     2 +
 .../solr/cloud/TestRandomRequestDistribution.java  |    13 +-
 .../apache/solr/cloud/TestRebalanceLeaders.java    |     2 +-
 .../apache/solr/cloud/TestRequestForwarding.java   |     1 -
 .../apache/solr/cloud/TestSSLRandomization.java    |    12 +-
 .../solr/cloud/TestSkipOverseerOperations.java     |     1 -
 .../cloud/TestSolrCloudWithDelegationTokens.java   |    50 +-
 .../solr/cloud/TestSolrCloudWithKerberosAlt.java   |    12 +-
 .../TestSolrCloudWithSecureImpersonation.java      |    21 +-
 .../cloud/TestStressCloudBlindAtomicUpdates.java   |    23 +-
 .../solr/cloud/TestStressInPlaceUpdates.java       |    19 +-
 .../org/apache/solr/cloud/TestStressLiveNodes.java |    12 +-
 .../solr/cloud/TestTlogReplayVsRecovery.java       |     4 +-
 .../org/apache/solr/cloud/TestTlogReplica.java     |   100 +-
 .../TestTolerantUpdateProcessorRandomCloud.java    |    10 +-
 .../org/apache/solr/cloud/TestUtilizeNode.java     |   181 -
 .../cloud/TestWaitForStateWithJettyShutdowns.java  |    10 +-
 .../org/apache/solr/cloud/TestWithCollection.java  |   605 -
 .../test/org/apache/solr/cloud/TestZkChroot.java   |   169 -
 .../cloud/TlogReplayBufferedWhileIndexingTest.java |     5 +-
 .../apache/solr/cloud/UnloadDistributedZkTest.java |     8 +-
 .../VMParamsZkACLAndCredentialsProvidersTest.java  |    10 +-
 .../src/test/org/apache/solr/cloud/ZkCLITest.java  |    10 +-
 .../org/apache/solr/cloud/ZkControllerTest.java    |    42 +-
 .../org/apache/solr/cloud/ZkNodePropsTest.java     |     4 +-
 .../org/apache/solr/cloud/ZkShardTermsTest.java    |     1 -
 .../org/apache/solr/cloud/ZkSolrClientTest.java    |    12 +-
 .../AbstractCloudBackupRestoreTestCase.java        |    59 +-
 .../solr/cloud/api/collections/AssignTest.java     |   203 -
 .../AsyncCallRequestStatusResponseTest.java        |     1 -
 .../api/collections/CollectionReloadTest.java      |     4 +-
 .../collections/CollectionTooManyReplicasTest.java |    68 +-
 .../CollectionsAPIAsyncDistributedZkTest.java      |    28 +-
 .../CollectionsAPIDistributedZkTest.java           |    50 +-
 .../ConcurrentCreateCollectionTest.java            |   293 -
 .../api/collections/CustomCollectionTest.java      |     8 -
 .../HdfsCollectionsAPIDistributedZkTest.java       |     4 +
 .../solr/cloud/api/collections/ShardSplitTest.java |   112 +-
 .../SimpleCollectionCreateDeleteTest.java          |     7 +-
 .../cloud/api/collections/SplitByPrefixTest.java   |     3 +-
 .../cloud/api/collections/TestCollectionAPI.java   |   136 +-
 .../TestCollectionsAPIViaSolrCloudCluster.java     |     7 +-
 .../collections/TestHdfsCloudBackupRestore.java    |     5 +
 .../collections/TestLocalFSCloudBackupRestore.java |     3 +-
 .../api/collections/TestReplicaProperties.java     |     6 +-
 .../TestRequestStatusCollectionAPI.java            |     5 +-
 .../AutoAddReplicasIntegrationTest.java            |   435 -
 .../autoscaling/AutoAddReplicasPlanActionTest.java |   258 -
 .../cloud/autoscaling/AutoScalingHandlerTest.java  |  1089 --
 .../solr/cloud/autoscaling/CapturedEvent.java      |    65 -
 .../cloud/autoscaling/ComputePlanActionTest.java   |   735 --
 .../cloud/autoscaling/ExecutePlanActionTest.java   |   380 -
 .../HdfsAutoAddReplicasIntegrationTest.java        |    57 -
 .../cloud/autoscaling/HttpTriggerListenerTest.java |   207 -
 .../IndexSizeTriggerMixedBoundsTest.java           |   372 -
 .../IndexSizeTriggerSizeEstimationTest.java        |   320 -
 .../cloud/autoscaling/IndexSizeTriggerTest.java    |   759 --
 .../autoscaling/MetricTriggerIntegrationTest.java  |   241 -
 .../solr/cloud/autoscaling/MetricTriggerTest.java  |   136 -
 .../NodeAddedTriggerIntegrationTest.java           |   316 -
 .../cloud/autoscaling/NodeAddedTriggerTest.java    |   342 -
 .../NodeLostTriggerIntegrationTest.java            |   352 -
 .../cloud/autoscaling/NodeLostTriggerTest.java     |   391 -
 .../autoscaling/NodeMarkersRegistrationTest.java   |   354 -
 .../cloud/autoscaling/RestoreTriggerStateTest.java |   166 -
 .../ScheduledMaintenanceTriggerTest.java           |   379 -
 .../ScheduledTriggerIntegrationTest.java           |   148 -
 .../cloud/autoscaling/ScheduledTriggerTest.java    |   141 -
 .../SearchRateTriggerIntegrationTest.java          |   742 --
 .../cloud/autoscaling/SearchRateTriggerTest.java   |   357 -
 .../cloud/autoscaling/SystemLogListenerTest.java   |   289 -
 .../solr/cloud/autoscaling/TestPolicyCloud.java    |   532 -
 .../TriggerCooldownIntegrationTest.java            |   227 -
 .../cloud/autoscaling/TriggerEventQueueTest.java   |    98 -
 .../cloud/autoscaling/TriggerIntegrationTest.java  |   713 -
 .../TriggerSetPropertiesIntegrationTest.java       |   259 -
 .../autoscaling/sim/SimSolrCloudTestCase.java      |   253 -
 .../sim/TestSimClusterStateProvider.java           |   228 -
 .../autoscaling/sim/TestSimComputePlanAction.java  |   378 -
 .../sim/TestSimDistribStateManager.java            |   378 -
 .../autoscaling/sim/TestSimDistributedQueue.java   |   221 -
 .../autoscaling/sim/TestSimExecutePlanAction.java  |   217 -
 .../autoscaling/sim/TestSimExtremeIndexing.java    |   144 -
 .../sim/TestSimGenericDistributedQueue.java        |    38 -
 .../cloud/autoscaling/sim/TestSimLargeCluster.java |   842 --
 .../autoscaling/sim/TestSimNodeAddedTrigger.java   |   329 -
 .../autoscaling/sim/TestSimNodeLostTrigger.java    |   347 -
 .../cloud/autoscaling/sim/TestSimPolicyCloud.java  |   376 -
 .../cloud/autoscaling/sim/TestSimScenario.java     |   166 -
 .../autoscaling/sim/TestSimTriggerIntegration.java |  1536 ---
 .../solr/cloud/autoscaling/sim/TestSimUtils.java   |    95 -
 .../autoscaling/sim/TestSnapshotCloudManager.java  |   266 -
 .../solr/cloud/cdcr/BaseCdcrDistributedZkTest.java |    28 +-
 .../solr/cloud/cdcr/CdcrBidirectionalTest.java     |    34 +-
 .../apache/solr/cloud/cdcr/CdcrBootstrapTest.java  |    31 +-
 .../solr/cloud/cdcr/CdcrOpsAndBoundariesTest.java  |     5 +-
 .../cloud/cdcr/CdcrReplicationHandlerTest.java     |    96 +-
 .../solr/cloud/cdcr/CdcrRequestHandlerTest.java    |     5 +
 .../org/apache/solr/cloud/cdcr/CdcrTestsUtil.java  |     6 +-
 .../cloud/cdcr/CdcrVersionReplicationTest.java     |     2 +-
 .../solr/cloud/hdfs/HDFSCollectionsAPITest.java    |     4 +
 .../cloud/hdfs/HdfsBasicDistributedZk2Test.java    |     4 +
 .../cloud/hdfs/HdfsBasicDistributedZkTest.java     |     4 +
 .../hdfs/HdfsChaosMonkeyNothingIsSafeTest.java     |     4 +
 .../cloud/hdfs/HdfsChaosMonkeySafeLeaderTest.java  |     4 +
 .../apache/solr/cloud/hdfs/HdfsNNFailoverTest.java |     6 +-
 .../solr/cloud/hdfs/HdfsRecoverLeaseTest.java      |     4 +
 .../apache/solr/cloud/hdfs/HdfsRecoveryZkTest.java |     4 +
 .../cloud/hdfs/HdfsRestartWhileUpdatingTest.java   |     4 +
 .../apache/solr/cloud/hdfs/HdfsSyncSliceTest.java  |     6 +-
 .../apache/solr/cloud/hdfs/HdfsThreadLeakTest.java |     4 +
 .../HdfsTlogReplayBufferedWhileIndexingTest.java   |     4 +
 .../cloud/hdfs/HdfsUnloadDistributedZkTest.java    |     4 +
 .../hdfs/HdfsWriteToMultipleCollectionsTest.java   |     6 +-
 .../org/apache/solr/cloud/hdfs/StressHdfsTest.java |    13 +-
 .../cloud/overseer/TestClusterStateMutator.java    |     9 +-
 .../overseer/ZkCollectionPropsCachingTest.java     |     4 -
 .../solr/cloud/overseer/ZkStateReaderTest.java     |   111 +-
 .../solr/cloud/overseer/ZkStateWriterTest.java     |   150 +-
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java |     3 +
 .../org/apache/solr/cloud/rule/RuleEngineTest.java |    14 +-
 .../test/org/apache/solr/cloud/rule/RulesTest.java |    78 +-
 .../solr/common/cloud/ZkDynamicConfigTest.java     |    69 +
 .../solr/core/BlobRepositoryMockingTest.java       |    10 +-
 .../test/org/apache/solr/core/CoreSorterTest.java  |   310 +-
 .../solr/core/CountUsageValueSourceParser.java     |     3 +-
 .../org/apache/solr/core/DirectoryFactoryTest.java |     9 +-
 .../apache/solr/core/DummyValueSourceParser.java   |     3 +-
 .../solr/core/ExitableDirectoryReaderTest.java     |     6 +
 .../org/apache/solr/core/FakeDeletionPolicy.java   |     6 +-
 .../apache/solr/core/HdfsDirectoryFactoryTest.java |     5 +
 .../src/test/org/apache/solr/core/HelloStream.java |    10 +-
 .../org/apache/solr/core/MockEventListener.java    |     2 +-
 .../core/MockQuerySenderListenerReqHandler.java    |     2 +-
 .../apache/solr/core/MockShardHandlerFactory.java  |     1 +
 .../org/apache/solr/core/QueryResultKeyTest.java   |    16 +-
 .../org/apache/solr/core/RequestHandlersTest.java  |     1 +
 .../org/apache/solr/core/ResourceLoaderTest.java   |    17 +-
 .../solr/core/SolrCoreCheckLockOnStartupTest.java  |     6 +-
 .../test/org/apache/solr/core/SolrCoreTest.java    |     8 +-
 .../org/apache/solr/core/TestCodecSupport.java     |     2 +-
 .../src/test/org/apache/solr/core/TestConfig.java  |    40 +-
 .../org/apache/solr/core/TestConfigOverlay.java    |     3 +
 .../apache/solr/core/TestConfigSetImmutable.java   |     3 +
 .../apache/solr/core/TestConfigSetProperties.java  |     4 +
 .../test/org/apache/solr/core/TestConfigSets.java  |    30 +-
 .../org/apache/solr/core/TestCoreContainer.java    |   104 +-
 .../org/apache/solr/core/TestCoreDiscovery.java    |    14 +-
 .../org/apache/solr/core/TestDirectoryFactory.java |     2 +-
 .../org/apache/solr/core/TestDynamicLoading.java   |   287 -
 .../apache/solr/core/TestDynamicLoadingUrl.java    |   127 -
 .../test/org/apache/solr/core/TestDynamicURP.java  |   111 -
 .../test/org/apache/solr/core/TestInitParams.java  |    12 +-
 .../org/apache/solr/core/TestJmxIntegration.java   |    13 +-
 .../test/org/apache/solr/core/TestLazyCores.java   |    78 +-
 .../apache/solr/core/TestShardHandlerFactory.java  |     1 +
 .../apache/solr/core/TestSolrConfigHandler.java    |    71 +-
 .../src/test/org/apache/solr/core/TestSolrXml.java |   130 +-
 .../repository/HdfsBackupRepositoryTest.java       |    94 +-
 .../core/snapshots/TestSolrCloudSnapshots.java     |    20 +-
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |    31 +-
 .../solr/filestore/TestDistribPackageStore.java    |    80 +-
 .../handler/AnalysisRequestHandlerTestBase.java    |     2 +-
 .../apache/solr/handler/BackupRestoreUtils.java    |    20 +-
 .../apache/solr/handler/BackupStatusChecker.java   |     4 +
 .../handler/BinaryUpdateRequestHandlerTest.java    |    30 +-
 .../DocumentAnalysisRequestHandlerTest.java        |     2 +
 .../handler/FieldAnalysisRequestHandlerTest.java   |    32 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |     4 +
 .../solr/handler/MoreLikeThisHandlerTest.java      |    11 +-
 .../solr/handler/PingRequestHandlerTest.java       |     3 +
 .../org/apache/solr/handler/TestBlobHandler.java   |     1 +
 .../org/apache/solr/handler/TestConfigReload.java  |     9 +-
 .../apache/solr/handler/TestContainerPlugin.java   |   377 +
 .../org/apache/solr/handler/TestCoreBackup.java    |    46 +-
 .../solr/handler/TestHdfsBackupRestoreCore.java    |    18 +-
 .../solr/handler/TestReplicationHandler.java       |  1299 +-
 .../solr/handler/TestReplicationHandlerBackup.java |    74 +-
 .../TestReplicationHandlerDiskOverFlow.java        |    83 +-
 .../org/apache/solr/handler/TestReqParamsAPI.java  |     2 +
 .../org/apache/solr/handler/TestRestoreCore.java   |    83 +-
 .../org/apache/solr/handler/TestSQLHandler.java    |     6 +-
 .../solr/handler/TestSolrConfigHandlerCloud.java   |     4 +-
 .../handler/TestSolrConfigHandlerConcurrent.java   |    14 +-
 .../solr/handler/TestStressThreadBackup.java       |    13 +
 .../handler/ThrowErrorOnInitRequestHandler.java    |     2 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  |    31 +-
 .../org/apache/solr/handler/V2StandaloneTest.java  |     2 +
 .../solr/handler/XsltUpdateRequestHandlerTest.java |     7 +-
 .../admin/AutoscalingHistoryHandlerTest.java       |   461 -
 .../handler/admin/CoreAdminCreateDiscoverTest.java |     2 +
 .../solr/handler/admin/CoreAdminHandlerTest.java   |     7 +-
 .../handler/admin/CoreAdminRequestStatusTest.java  |     2 +
 .../admin/CoreMergeIndexesAdminHandlerTest.java    |    13 +-
 .../solr/handler/admin/DaemonStreamApiTest.java    |     3 -
 .../solr/handler/admin/HealthCheckHandlerTest.java |   237 +
 .../solr/handler/admin/IndexSizeEstimatorTest.java |    12 +-
 .../solr/handler/admin/LukeRequestHandlerTest.java |    15 +
 .../solr/handler/admin/MBeansHandlerTest.java      |     2 +
 .../solr/handler/admin/MetricsHandlerTest.java     |    18 +
 .../handler/admin/MetricsHistoryHandlerTest.java   |    45 +-
 .../admin/PropertiesRequestHandlerTest.java        |     1 +
 .../handler/admin/SecurityConfHandlerTest.java     |     7 +-
 .../admin/SegmentsInfoRequestHandlerTest.java      |    16 +-
 .../solr/handler/admin/StatsReloadRaceTest.java    |     2 +
 .../solr/handler/admin/TestApiFramework.java       |    82 +-
 .../solr/handler/admin/TestCollectionAPIs.java     |    28 +-
 .../apache/solr/handler/admin/TestConfigsApi.java  |    20 +-
 .../solr/handler/admin/TestCoreAdminApis.java      |    12 +-
 .../solr/handler/admin/ThreadDumpHandlerTest.java  |   239 +
 .../solr/handler/admin/ZookeeperReadAPITest.java   |   101 +
 .../handler/admin/ZookeeperStatusHandlerTest.java  |    72 +-
 .../component/CustomHighlightComponentTest.java    |    25 +-
 .../component/CustomTermsComponentTest.java        |     2 +-
 .../solr/handler/component/DebugComponentTest.java |    40 +-
 .../component/DistributedDebugComponentTest.java   |     8 +-
 .../component/DistributedExpandComponentTest.java  |    49 +
 .../component/DistributedFacetPivotLargeTest.java  |     3 +-
 .../DistributedFacetPivotLongTailTest.java         |     2 +
 .../component/DistributedFacetPivotSmallTest.java  |    26 +-
 .../component/DistributedMLTComponentTest.java     |     2 +-
 .../DistributedQueryComponentOptimizationTest.java |     2 +-
 .../handler/component/InfixSuggestersTest.java     |     2 +
 .../PhrasesIdentificationComponentTest.java        |     4 +
 .../component/QueryElevationComponentTest.java     |    75 +-
 .../component/ResourceSharingTestComponent.java    |     4 +-
 .../solr/handler/component/SearchHandlerTest.java  |    74 +-
 .../handler/component/ShardsWhitelistTest.java     |     6 +-
 .../handler/component/SpellCheckComponentTest.java |     7 +-
 .../solr/handler/component/StatsComponentTest.java |   115 +-
 .../solr/handler/component/TermsComponentTest.java |    13 +-
 .../handler/component/TestExpandComponent.java     |    96 +
 .../component/TestHttpShardHandlerFactory.java     |     4 +-
 .../component/TestTrackingShardHandlerFactory.java |     4 +-
 .../solr/handler/export/TestExportWriter.java      |    80 +-
 .../org/apache/solr/handler/tagger/TaggerTest.java |    22 +-
 .../apache/solr/handler/tagger/TaggerTestCase.java |    11 +-
 .../tagger/WordLengthTaggingFilterFactory.java     |     5 +
 .../apache/solr/highlight/DummyHighlighter.java    |     1 +
 .../org/apache/solr/highlight/HighlighterTest.java |    20 +-
 .../solr/highlight/TestUnifiedSolrHighlighter.java |    16 +-
 .../apache/solr/index/hdfs/CheckHdfsIndexTest.java |     6 +
 .../org/apache/solr/logging/TestLogWatcher.java    |     1 +
 .../org/apache/solr/metrics/JvmMetricsTest.java    |     8 +-
 .../org/apache/solr/metrics/MetricsConfigTest.java |    13 +-
 .../apache/solr/metrics/SolrMetricManagerTest.java |    11 +-
 .../solr/metrics/SolrMetricsIntegrationTest.java   |     7 +-
 .../reporters/SolrGraphiteReporterTest.java        |     5 +-
 .../reporters/SolrJmxReporterCloudTest.java        |     7 +-
 .../metrics/reporters/SolrSlf4jReporterTest.java   |     4 +-
 .../reporters/solr/SolrCloudReportersTest.java     |     6 +-
 .../reporters/solr/SolrShardReporterTest.java      |    12 +
 .../solr/parser/SolrQueryParserBaseTest.java       |   137 +
 .../src/test/org/apache/solr/pkg/TestPackages.java |   318 +-
 .../org/apache/solr/request/SimpleFacetsTest.java  |     3 +-
 .../test/org/apache/solr/request/TestFaceting.java |    25 +
 .../apache/solr/request/TestIntervalFaceting.java  |     2 +-
 .../org/apache/solr/request/TestWriterPerf.java    |     5 +-
 .../solr/request/macro/TestMacroExpander.java      |     2 +
 .../org/apache/solr/response/JSONWriterTest.java   |    10 +-
 .../org/apache/solr/response/SmileWriterTest.java  |    11 +
 .../solr/response/TestBinaryResponseWriter.java    |     2 +
 .../solr/response/TestGeoJSONResponseWriter.java   |     4 +
 .../solr/response/TestGraphMLResponseWriter.java   |    22 +-
 .../response/TestJavabinTupleStreamParser.java     |     7 +-
 .../response/TestPHPSerializedResponseWriter.java  |     2 +-
 .../org/apache/solr/response/TestPushWriter.java   |    65 +-
 .../solr/response/TestRawResponseWriter.java       |     2 +
 .../solr/response/TestRetrieveFieldsOptimizer.java |     3 +
 .../solr/response/TestSolrQueryResponse.java       |     1 +
 .../transform/TestChildDocTransformer.java         |    28 +-
 .../TestChildDocTransformerHierarchy.java          |     1 +
 .../apache/solr/rest/schema/TestBulkSchemaAPI.java |    40 +-
 .../apache/solr/schema/ChangedSchemaMergeTest.java |     6 +-
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |    94 +-
 .../test/org/apache/solr/schema/DateFieldTest.java |     2 +-
 .../test/org/apache/solr/schema/DocValuesTest.java |     4 +-
 .../schema/ManagedSchemaRoundRobinCloudTest.java   |     1 -
 .../schema/OpenExchangeRatesOrgProviderTest.java   |     2 +-
 .../PreAnalyzedFieldManagedSchemaCloudTest.java    |     1 -
 .../apache/solr/schema/PrimitiveFieldTypeTest.java |     2 +-
 .../test/org/apache/solr/schema/RankFieldTest.java |   285 +
 .../solr/schema/ResolveAnalyzerByNameTest.java     |     7 +
 .../apache/solr/schema/SchemaApiFailureTest.java   |     5 +-
 .../solr/schema/SpatialRPTFieldTypeTest.java       |     2 +
 .../solr/schema/TestBulkSchemaConcurrent.java      |    23 +-
 .../apache/solr/schema/TestCloudManagedSchema.java |     3 +
 .../org/apache/solr/schema/TestManagedSchema.java  |     3 +
 .../apache/solr/schema/TestManagedSchemaAPI.java   |     2 +-
 .../solr/schema/TestManagedSchemaThreadSafety.java |     5 +-
 .../org/apache/solr/schema/TestPointFields.java    |     1 +
 .../apache/solr/schema/TestSortableTextField.java  |     6 +-
 .../solr/schema/TestUseDocValuesAsStored2.java     |     1 +
 .../apache/solr/schema/WrappedIntPointField.java   |    20 +-
 .../apache/solr/schema/WrappedTrieIntField.java    |     1 +
 .../solr/search/AnalyticsMergeStrategyTest.java    |     4 +
 .../solr/search/AnalyticsTestQParserPlugin.java    |    11 +
 .../solr/search/CurrencyRangeFacetCloudTest.java   |    93 +-
 .../org/apache/solr/search/LargeFieldTest.java     |     1 +
 .../apache/solr/search/MaxScoreCollectorTest.java  |    91 +
 .../org/apache/solr/search/MergeStrategyTest.java  |     1 +
 .../apache/solr/search/MockSearchComponent.java    |     2 +-
 .../org/apache/solr/search/QueryEqualityTest.java  |    28 +-
 .../apache/solr/search/RankQParserPluginTest.java  |   258 +
 .../apache/solr/search/RankQueryTestPlugin.java    |    25 +-
 .../apache/solr/search/SolrIndexSearcherTest.java  |   330 +
 .../solr/search/TestAddFieldRealTimeGet.java       |     8 +-
 .../solr/search/TestCollapseQParserPlugin.java     |   100 +-
 .../test/org/apache/solr/search/TestDocSet.java    |     3 +-
 .../solr/search/TestExtendedDismaxParser.java      |    60 +-
 .../apache/solr/search/TestHashQParserPlugin.java  |    26 +-
 .../org/apache/solr/search/TestIndexSearcher.java  |     8 +-
 .../solr/search/TestMaxScoreQueryParser.java       |     1 +
 .../solr/search/TestReRankQParserPlugin.java       |    95 +
 .../org/apache/solr/search/TestRealTimeGet.java    |    20 +-
 .../test/org/apache/solr/search/TestRecovery.java  |    10 +
 .../org/apache/solr/search/TestRecoveryHdfs.java   |     9 +
 .../org/apache/solr/search/TestReloadDeadlock.java |     2 +-
 .../org/apache/solr/search/TestSmileRequest.java   |     2 +
 .../org/apache/solr/search/TestSolrCachePerf.java  |     3 +
 .../src/test/org/apache/solr/search/TestSolrJ.java |     2 +
 .../apache/solr/search/TestSolrQueryParser.java    |     1 +
 .../src/test/org/apache/solr/search/TestSort.java  |     5 +-
 .../org/apache/solr/search/TestStressRecovery.java |     2 +
 .../org/apache/solr/search/TestStressReorder.java  |     6 +-
 .../apache/solr/search/TestStressUserVersions.java |     8 +-
 .../org/apache/solr/search/TestStressVersions.java |     2 +
 .../apache/solr/search/TestTermsQParserPlugin.java |     6 +
 .../org/apache/solr/search/facet/DebugAgg.java     |    16 +-
 ...stributedFacetSimpleRefinementLongTailTest.java |    49 +-
 .../solr/search/facet/RangeFacetCloudTest.java     |    56 +-
 .../search/facet/SpatialHeatmapFacetsTest.java     |     5 +
 .../search/facet/TestCloudJSONFacetJoinDomain.java |    45 +-
 .../solr/search/facet/TestCloudJSONFacetSKG.java   |   342 +-
 .../search/facet/TestCloudJSONFacetSKGEquiv.java   |  1233 ++
 .../solr/search/facet/TestJsonFacetErrors.java     |   400 +
 .../solr/search/facet/TestJsonFacetRefinement.java |    97 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |   828 +-
 .../search/facet/TestJsonFacetsStatsParsing.java   |     2 +
 .../facet/TestJsonFacetsWithNestedObjects.java     |    70 +-
 .../solr/search/facet/TestJsonRangeFacets.java     |   435 +
 .../solr/search/function/NvlValueSourceParser.java |     2 +-
 .../solr/search/function/TestFunctionQuery.java    |    32 +
 .../function/TestMinMaxOnMultiValuedField.java     |    13 +-
 .../search/join/CrossCollectionJoinQueryTest.java  |   280 +
 .../solr/search/join/TestCloudNestedDocsSort.java  |     4 +-
 .../solr/search/join/TestNestedDocsSort.java       |     1 +
 .../solr/search/join/TestScoreJoinQPNoScore.java   |    27 +-
 .../solr/search/join/TestScoreJoinQPScore.java     |    18 +-
 .../org/apache/solr/search/join/XCJFQueryTest.java |   280 -
 .../join/another/BJQFilterAccessibleTest.java      |     2 +-
 .../apache/solr/search/json/TestJsonRequest.java   |    70 +-
 .../solr/search/mlt/CloudMLTQParserTest.java       |     1 +
 .../similarities/TestBooleanSimilarityFactory.java |    39 +
 .../apache/solr/search/stats/TestDistribIDF.java   |     2 -
 .../solr/security/AuditLoggerIntegrationTest.java  |    20 +-
 .../BaseTestRuleBasedAuthorizationPlugin.java      |   617 +
 .../solr/security/BasicAuthIntegrationTest.java    |    20 +-
 .../solr/security/BasicAuthOnSingleNodeTest.java   |    45 +-
 .../solr/security/BasicAuthStandaloneTest.java     |     2 +-
 .../solr/security/CallbackAuditLoggerPlugin.java   |     4 +-
 .../apache/solr/security/CertAuthPluginTest.java   |    79 +
 .../security/HttpParamDelegationTokenPlugin.java   |     2 +-
 .../security/JWTAuthPluginIntegrationTest.java     |     6 +-
 .../apache/solr/security/JWTAuthPluginTest.java    |    22 +-
 .../security/JWTVerificationkeyResolverTest.java   |     4 +-
 .../solr/security/MockAuditLoggerPlugin.java       |     4 +-
 .../solr/security/MockAuthenticationPlugin.java    |    25 +-
 .../solr/security/MockAuthorizationPlugin.java     |     2 +-
 .../solr/security/PrincipalWithUserRoles.java      |    91 +
 .../solr/security/TestAuthorizationFramework.java  |     6 +-
 ...stExternalRoleRuleBasedAuthorizationPlugin.java |    78 +
 .../security/TestRuleBasedAuthorizationPlugin.java |   585 -
 .../security/TestSha256AuthenticationProvider.java |     4 +
 .../solr/security/hadoop/ImpersonationUtil.java    |     1 +
 .../apache/solr/security/hadoop/KerberosUtils.java |    93 +
 .../hadoop/TestDelegationWithHadoopAuth.java       |    16 +-
 .../hadoop/TestImpersonationWithHadoopAuth.java    |    13 +-
 .../TestRuleBasedAuthorizationWithKerberos.java    |    81 +
 .../hadoop/TestSolrCloudWithHadoopAuthPlugin.java  |    63 +-
 .../security/hadoop/TestZkAclsWithHadoopAuth.java  |     1 +
 .../solr/servlet/HttpSolrCallGetCoreTest.java      |     1 -
 .../apache/solr/servlet/SolrRequestParserTest.java |     2 +
 .../solr/servlet/TestRequestRateLimiter.java       |   235 +
 .../solr/spelling/DirectSolrSpellCheckerTest.java  |     3 +
 .../solr/spelling/FileBasedSpellCheckerTest.java   |     7 +
 .../solr/spelling/IndexBasedSpellCheckerTest.java  |     8 +
 .../solr/spelling/SpellCheckCollatorTest.java      |     9 +
 .../SpellCheckCollatorWithCollapseTest.java        |    37 +-
 .../solr/spelling/SpellingQueryConverterTest.java  |     6 +
 .../suggest/RandomTestDictionaryFactory.java       |     6 +-
 .../solr/spelling/suggest/SuggesterTest.java       |     2 +
 .../solr/store/blockcache/BlockCacheTest.java      |    16 +-
 .../apache/solr/store/hdfs/HdfsDirectoryTest.java  |     6 +-
 .../solr/store/hdfs/HdfsLockFactoryTest.java       |     4 +
 .../org/apache/solr/update/AddBlockUpdateTest.java |     6 +-
 .../org/apache/solr/update/CdcrUpdateLogTest.java  |     8 +
 .../solr/update/DirectUpdateHandlerTest.java       |    15 +-
 .../apache/solr/update/MaxSizeAutoCommitTest.java  |     2 +-
 .../solr/update/MockStreamingSolrClients.java      |     2 +-
 .../apache/solr/update/MockingHttp2SolrClient.java |    26 +-
 .../test/org/apache/solr/update/PeerSyncTest.java  |     1 +
 .../solr/update/PeerSyncWithBufferUpdatesTest.java |     1 +
 .../PeerSyncWithIndexFingerprintCachingTest.java   |     2 +
 ...ncWithLeaderAndIndexFingerprintCachingTest.java |     1 +
 .../apache/solr/update/PeerSyncWithLeaderTest.java |     1 +
 .../org/apache/solr/update/SoftAutoCommitTest.java |     2 +-
 .../apache/solr/update/SolrCmdDistributorTest.java |     2 +-
 .../apache/solr/update/SolrIndexConfigTest.java    |    31 +-
 .../apache/solr/update/SolrIndexSplitterTest.java  |     3 +
 .../org/apache/solr/update/TestHdfsUpdateLog.java  |     4 +
 .../update/TestInPlaceUpdateWithRouteField.java    |     1 -
 .../solr/update/TestInPlaceUpdatesDistrib.java     |    81 +-
 .../solr/update/TestInPlaceUpdatesStandalone.java  |     1 +
 .../solr/update/TestIndexingPerformance.java       |     8 +-
 .../solr/update/TestNestedUpdateProcessor.java     |     2 +
 .../test/org/apache/solr/update/TestUpdate.java    |     2 +-
 .../test/org/apache/solr/update/UpdateLogTest.java |     1 +
 .../processor/AtomicUpdateRemovalJavabinTest.java  |     2 -
 .../solr/update/processor/AtomicUpdatesTest.java   |    15 +-
 .../CategoryRoutedAliasUpdateProcessorTest.java    |    24 +-
 .../ClassificationUpdateProcessorFactoryTest.java  |     4 +
 ...assificationUpdateProcessorIntegrationTest.java |     2 -
 .../ClassificationUpdateProcessorTest.java         |     5 +
 .../CustomUpdateRequestProcessorFactory.java       |     3 +-
 .../DimensionalRoutedAliasUpdateProcessorTest.java |    12 +-
 .../IgnoreLargeDocumentProcessorFactoryTest.java   |     1 +
 .../update/processor/NestedAtomicUpdateTest.java   |     1 +
 .../processor/RoutedAliasUpdateProcessorTest.java  |     5 +-
 .../apache/solr/update/processor/RuntimeUrp.java   |    40 -
 .../SignatureUpdateProcessorFactoryTest.java       |     1 +
 .../SkipExistingDocumentsProcessorFactoryTest.java |     1 +
 .../processor/TestDocBasedVersionConstraints.java  |     4 +-
 .../processor/TestNamedUpdateProcessors.java       |   162 -
 .../TimeRoutedAliasUpdateProcessorTest.java        |    34 +-
 .../processor/TolerantUpdateProcessorTest.java     |     2 +-
 .../processor/TrackingUpdateProcessorFactory.java  |     2 +-
 .../update/processor/URLClassifyProcessorTest.java |     2 +
 .../UpdateRequestProcessorFactoryTest.java         |     2 +-
 .../test/org/apache/solr/util/DynamicMapsTest.java |    90 +
 .../org/apache/solr/util/MockCoreContainer.java    |     2 +-
 .../org/apache/solr/util/OrderedExecutorTest.java  |    28 +-
 .../org/apache/solr/util/SolrLogPostToolTest.java  |    62 +-
 .../org/apache/solr/util/SolrPluginUtilsTest.java  |     2 +-
 .../org/apache/solr/util/TestCircuitBreaker.java   |   243 +
 .../test/org/apache/solr/util/TestExportTool.java  |     2 -
 .../test/org/apache/solr/util/TestRTimerTree.java  |     3 +
 .../apache/solr/util/TestSolrCLIRunExample.java    |   132 +-
 .../solr/util/TestSolrJacksonAnnotation.java       |     2 +
 .../src/test/org/apache/solr/util/TestUtils.java   |    11 +-
 .../apache/solr/util/stats/MetricUtilsTest.java    |    10 +
 .../solr/util/tracing/TestHttpServletCarrier.java  |     2 +-
 solr/example/README.md                             |    95 +
 solr/example/README.txt                            |    78 -
 solr/example/build.gradle                          |     4 +-
 solr/example/example-DIH/README.md                 |    55 +
 solr/example/example-DIH/README.txt                |    49 -
 .../example-DIH/solr/db/conf/solrconfig.xml        |     4 +-
 .../example-DIH/solr/mail/conf/solrconfig.xml      |     4 +-
 .../example-DIH/solr/solr/conf/solrconfig.xml      |     4 +-
 solr/example/files/README.md                       |   167 +
 solr/example/files/README.txt                      |   152 -
 solr/example/files/conf/solrconfig.xml             |    42 +-
 solr/example/films/README.md                       |   161 +
 solr/example/films/README.txt                      |   138 -
 solr/licenses/caffeine-2.8.0.jar.sha1              |     1 -
 solr/licenses/caffeine-2.8.4.jar.sha1              |     1 +
 solr/licenses/commons-cli-1.2.jar.sha1             |     1 -
 solr/licenses/commons-cli-1.4.jar.sha1             |     1 +
 solr/licenses/commons-collections4-4.2.jar.sha1    |     1 -
 solr/licenses/commons-collections4-4.4.jar.sha1    |     1 +
 solr/licenses/commons-fileupload-1.3.3.jar.sha1    |     1 -
 solr/licenses/commons-fileupload-NOTICE.txt        |     5 -
 solr/licenses/commons-lang-2.6.jar.sha1            |     1 +
 ...ICENSE-ASL.txt => commons-lang-LICENSE-ASL.txt} |     0
 solr/licenses/commons-lang-NOTICE.txt              |     5 +
 solr/licenses/hamcrest-2.2.jar.sha1                |     1 +
 ...re-LICENSE-BSD.txt => hamcrest-LICENSE-BSD.txt} |     0
 ...amcrest-core-NOTICE.txt => hamcrest-NOTICE.txt} |     0
 solr/licenses/hamcrest-core-1.3.jar.sha1           |     1 -
 solr/licenses/hppc-0.8.1.jar.sha1                  |     1 -
 solr/licenses/hppc-0.8.2.jar.sha1                  |     1 +
 .../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/log4j-1.2-api-2.11.2.jar.sha1        |     1 -
 solr/licenses/log4j-1.2-api-2.13.2.jar.sha1        |     1 +
 solr/licenses/log4j-api-2.11.2.jar.sha1            |     1 -
 solr/licenses/log4j-api-2.13.2.jar.sha1            |     1 +
 solr/licenses/log4j-core-2.11.2.jar.sha1           |     1 -
 solr/licenses/log4j-core-2.13.2.jar.sha1           |     1 +
 solr/licenses/log4j-slf4j-impl-2.11.2.jar.sha1     |     1 -
 solr/licenses/log4j-slf4j-impl-2.13.2.jar.sha1     |     1 +
 solr/licenses/log4j-web-2.11.2.jar.sha1            |     1 -
 solr/licenses/log4j-web-2.13.2.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 +
 .../morfologik-ukrainian-search-3.9.0.jar.sha1     |     1 -
 .../morfologik-ukrainian-search-4.9.1.jar.sha1     |     1 +
 solr/licenses/netty-buffer-4.1.29.Final.jar.sha1   |     1 -
 solr/licenses/netty-buffer-4.1.50.Final.jar.sha1   |     1 +
 solr/licenses/netty-codec-4.1.29.Final.jar.sha1    |     1 -
 solr/licenses/netty-codec-4.1.50.Final.jar.sha1    |     1 +
 solr/licenses/netty-common-4.1.29.Final.jar.sha1   |     1 -
 solr/licenses/netty-common-4.1.50.Final.jar.sha1   |     1 +
 solr/licenses/netty-handler-4.1.29.Final.jar.sha1  |     1 -
 solr/licenses/netty-handler-4.1.50.Final.jar.sha1  |     1 +
 solr/licenses/netty-resolver-4.1.29.Final.jar.sha1 |     1 -
 solr/licenses/netty-resolver-4.1.50.Final.jar.sha1 |     1 +
 .../licenses/netty-transport-4.1.29.Final.jar.sha1 |     1 -
 .../licenses/netty-transport-4.1.50.Final.jar.sha1 |     1 +
 ...ty-transport-native-epoll-4.1.29.Final.jar.sha1 |     1 -
 ...ty-transport-native-epoll-4.1.50.Final.jar.sha1 |     1 +
 ...nsport-native-unix-common-4.1.29.Final.jar.sha1 |     1 -
 ...nsport-native-unix-common-4.1.50.Final.jar.sha1 |     1 +
 solr/licenses/org.restlet-2.4.0.jar.sha1           |     1 -
 solr/licenses/org.restlet-2.4.3.jar.sha1           |     1 +
 .../org.restlet.ext.servlet-2.4.0.jar.sha1         |     1 -
 .../org.restlet.ext.servlet-2.4.3.jar.sha1         |     1 +
 solr/licenses/snappy-java-1.1.7.6.jar.sha1         |     1 +
 ...LICENSE-ASL.txt => snappy-java-LICENSE-ASL.txt} |     0
 solr/licenses/snappy-java-NOTICE.txt               |    17 +
 solr/licenses/start.jar.sha1                       |     2 +-
 solr/licenses/tika-core-1.23.jar.sha1              |     1 -
 solr/licenses/tika-core-1.24.jar.sha1              |     1 +
 solr/licenses/tika-java7-1.23.jar.sha1             |     1 -
 solr/licenses/tika-java7-1.24.jar.sha1             |     1 +
 solr/licenses/tika-parsers-1.23.jar.sha1           |     1 -
 solr/licenses/tika-parsers-1.24.jar.sha1           |     1 +
 solr/licenses/tika-xmp-1.23.jar.sha1               |     1 -
 solr/licenses/tika-xmp-1.24.jar.sha1               |     1 +
 solr/licenses/zookeeper-3.5.5.jar.sha1             |     1 -
 solr/licenses/zookeeper-3.6.1.jar.sha1             |     1 +
 solr/licenses/zookeeper-jute-3.5.5.jar.sha1        |     1 -
 solr/licenses/zookeeper-jute-3.6.1.jar.sha1        |     1 +
 solr/packaging/build.gradle                        |    14 +-
 solr/server/README.md                              |   114 +
 solr/server/README.txt                             |   109 -
 solr/server/build.gradle                           |     4 +-
 solr/server/etc/jetty.xml                          |     8 +-
 solr/server/resources/log4j2-console.xml           |    28 +-
 solr/server/resources/log4j2.xml                   |    72 +-
 solr/server/solr/README.md                         |    79 +
 solr/server/solr/README.txt                        |    77 -
 .../solr/configsets/_default/conf/managed-schema   |     7 +
 .../solr/configsets/_default/conf/solrconfig.xml   |    63 +-
 .../clustering/carrot2/{README.txt => README.md}   |     0
 .../conf/solrconfig.xml                            |    48 +-
 .../conf/velocity/README.md                        |   116 +
 .../conf/velocity/README.txt                       |   101 -
 solr/server/solr/solr.xml                          |     1 +
 ..._REQUIREMENTS.mdtext => SYSTEM_REQUIREMENTS.md} |     0
 solr/site/index.template.md                        |    37 +
 solr/site/online-link.template.md                  |    19 +
 solr/solr-ref-guide/build.gradle                   |     5 +-
 solr/solr-ref-guide/build.xml                      |     1 -
 solr/solr-ref-guide/src/_config.yml.template       |     3 +-
 solr/solr-ref-guide/src/_includes/head.html        |    26 +-
 solr/solr-ref-guide/src/_includes/head_print.html  |    29 -
 .../src/_includes/mathjax-support.html             |    22 +
 solr/solr-ref-guide/src/_includes/sidebar.html     |    35 +-
 solr/solr-ref-guide/src/_includes/taglogic.html    |    22 -
 solr/solr-ref-guide/src/_includes/toc.html         |     9 -
 solr/solr-ref-guide/src/_includes/topnav.html      |    39 +-
 solr/solr-ref-guide/src/_layouts/default.html      |    35 +-
 .../solr-ref-guide/src/_layouts/default_print.html |    25 -
 solr/solr-ref-guide/src/_layouts/home.html         |    27 +-
 solr/solr-ref-guide/src/_layouts/page.html         |    29 +-
 solr/solr-ref-guide/src/_layouts/page_print.html   |    15 -
 solr/solr-ref-guide/src/_templates/open.html.slim  |     2 +-
 solr/solr-ref-guide/src/_templates/ulist.html.slim |     2 +-
 .../adding-custom-plugins-in-solrcloud-mode.adoc   |   333 -
 solr/solr-ref-guide/src/aliases.adoc               |     9 +-
 .../src/analytics-expression-sources.adoc          |     1 -
 .../src/analytics-mapping-functions.adoc           |     1 -
 .../src/analytics-reduction-functions.adoc         |     3 +-
 solr/solr-ref-guide/src/analytics.adoc             |     3 +-
 .../authentication-and-authorization-plugins.adoc  |     2 +-
 solr/solr-ref-guide/src/cdcr-api.adoc              |     8 +
 solr/solr-ref-guide/src/cdcr-architecture.adoc     |     8 +
 solr/solr-ref-guide/src/cdcr-config.adoc           |     9 +
 solr/solr-ref-guide/src/cdcr-operations.adoc       |     8 +
 .../src/cert-authentication-plugin.adoc            |    61 +
 solr/solr-ref-guide/src/circuit-breakers.adoc      |    68 +
 solr/solr-ref-guide/src/cloud-screens.adoc         |     2 +-
 .../src/cluster-node-management.adoc               |    57 +-
 .../src/collapse-and-expand-results.adoc           |    28 +-
 solr/solr-ref-guide/src/collection-aliasing.adoc   |     5 +-
 solr/solr-ref-guide/src/collection-management.adoc |    68 +-
 .../src/collection-specific-tools.adoc             |     2 +-
 solr/solr-ref-guide/src/collections-api.adoc       |     2 +-
 .../solr-ref-guide/src/colocating-collections.adoc |    76 -
 .../combining-distribution-and-replication.adoc    |    12 +-
 .../solr-ref-guide/src/command-line-utilities.adoc |    27 +-
 .../src/common-query-parameters.adoc               |    54 +-
 solr/solr-ref-guide/src/config-api.adoc            |    42 +-
 solr/solr-ref-guide/src/config-sets.adoc           |     4 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |     2 +-
 solr/solr-ref-guide/src/coreadmin-api.adoc         |     8 +-
 .../src/cross-data-center-replication-cdcr.adoc    |    14 +
 solr/solr-ref-guide/src/css/customstyles.css       |   919 --
 solr/solr-ref-guide/src/css/decoration.css         |   254 +
 solr/solr-ref-guide/src/css/font-awesome.min.css   |     4 -
 solr/solr-ref-guide/src/css/lavish-bootstrap.css   |  5423 --------
 solr/solr-ref-guide/src/css/navs.css               |   366 +
 solr/solr-ref-guide/src/css/printstyles.css        |   160 -
 solr/solr-ref-guide/src/css/ref-guide.css          |  2919 ++--
 solr/solr-ref-guide/src/css/search.css             |    47 +
 solr/solr-ref-guide/src/css/theme-solr.css         |   147 -
 ...datadir-and-directoryfactory-in-solrconfig.adoc |     2 +-
 solr/solr-ref-guide/src/dataimport-screen.adoc     |     2 +
 solr/solr-ref-guide/src/distributed-requests.adoc  |     6 +-
 .../distributed-search-with-index-sharding.adoc    |     2 +-
 solr/solr-ref-guide/src/enabling-ssl.adoc          |   241 +-
 solr/solr-ref-guide/src/exporting-result-sets.adoc |    30 +
 solr/solr-ref-guide/src/filter-descriptions.adoc   |    46 +-
 .../glyphicons/glyphicons-halflings-regular.eot    |   Bin 20127 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.svg    |   288 -
 .../glyphicons/glyphicons-halflings-regular.ttf    |   Bin 45404 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.woff   |   Bin 23424 -> 0 bytes
 .../glyphicons/glyphicons-halflings-regular.woff2  |   Bin 18028 -> 0 bytes
 .../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf     |   Bin 15868 -> 0 bytes
 .../fonts/mplus1mn/mplus1mn-bold_italic-ascii.ttf  |   Bin 15908 -> 0 bytes
 .../src/fonts/mplus1mn/mplus1mn-italic-ascii.ttf   |   Bin 15928 -> 0 bytes
 .../mplus1mn/mplus1mn-regular-ascii-conums.ttf     |   Bin 20024 -> 0 bytes
 .../src/fonts/mplus1p-regular-fallback.ttf         |   Bin 1405716 -> 0 bytes
 solr/solr-ref-guide/src/format-of-solr-xml.adoc    |     4 +
 solr/solr-ref-guide/src/function-queries.adoc      |     1 -
 solr/solr-ref-guide/src/highlighting.adoc          |    13 +-
 solr/solr-ref-guide/src/how-solrcloud-works.adoc   |     4 +-
 solr/solr-ref-guide/src/how-to-contribute.adoc     |    16 +-
 .../overview-of-the-solr-admin-ui/dashboard.png    |   Bin 92750 -> 172175 bytes
 .../src/implicit-requesthandlers.adoc              |    28 +-
 solr/solr-ref-guide/src/index-replication.adoc     |   177 +-
 solr/solr-ref-guide/src/index.adoc                 |    37 +-
 .../src/indexing-nested-documents.adoc             |     2 +-
 solr/solr-ref-guide/src/installing-solr.adoc       |     2 +-
 solr/solr-ref-guide/src/js/customscripts.js        |    68 +-
 solr/solr-ref-guide/src/js/ref-guide-toc.js        |    36 -
 solr/solr-ref-guide/src/js/toc.js                  |    82 -
 solr/solr-ref-guide/src/json-facet-api.adoc        |    11 +-
 .../src/json-faceting-domain-changes.adoc          |     8 +-
 solr/solr-ref-guide/src/json-query-dsl.adoc        |    38 +-
 solr/solr-ref-guide/src/jvm-settings.adoc          |    20 +-
 .../src/jwt-authentication-plugin.adoc             |     3 +-
 .../src/kerberos-authentication-plugin.adoc        |     7 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |    20 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |     2 +-
 solr/solr-ref-guide/src/libs.adoc                  |     2 +-
 .../src/major-changes-in-solr-7.adoc               |     3 -
 .../src/major-changes-in-solr-8.adoc               |    13 +-
 .../src/major-changes-in-solr-9.adoc               |   103 +-
 .../src/making-and-restoring-backups.adoc          |     2 +-
 .../src/meta-docs/asciidoc-syntax.adoc             |    45 +
 solr/solr-ref-guide/src/meta-docs/jekyll.adoc      |    72 +-
 solr/solr-ref-guide/src/meta-docs/publish.adoc     |    69 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |     2 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |     2 +-
 .../solr-ref-guide/src/migrate-to-policy-rule.adoc |   198 -
 .../src/near-real-time-searching.adoc              |     2 +-
 solr/solr-ref-guide/src/other-parsers.adoc         |   185 +-
 .../src/overview-of-the-solr-admin-ui.adoc         |    16 +-
 .../src/package-manager-internals.adoc             |   155 +-
 solr/solr-ref-guide/src/package-manager.adoc       |    56 +-
 .../src/query-settings-in-solrconfig.adoc          |    24 +-
 solr/solr-ref-guide/src/rate-limiters.adoc         |   131 +
 solr/solr-ref-guide/src/relevance.adoc             |     4 +-
 solr/solr-ref-guide/src/replica-management.adoc    |    91 +-
 solr/solr-ref-guide/src/replication-screen.adoc    |     8 +-
 .../solr-ref-guide/src/request-parameters-api.adoc |     4 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |     9 +
 solr/solr-ref-guide/src/resource-loading.adoc      |     2 +-
 solr/solr-ref-guide/src/result-clustering.adoc     |     4 +-
 .../src/rule-based-authorization-plugin.adoc       |    86 +-
 .../src/rule-based-replica-placement.adoc          |     2 +-
 solr/solr-ref-guide/src/running-solr-on-hdfs.adoc  |    41 +-
 solr/solr-ref-guide/src/schema-api.adoc            |     1 -
 solr/solr-ref-guide/src/securing-solr.adoc         |     6 +-
 .../setting-up-an-external-zookeeper-ensemble.adoc |     2 +
 solr/solr-ref-guide/src/shard-management.adoc      |    11 +-
 .../src/shards-and-indexing-data-in-solrcloud.adoc |     4 +-
 .../src/solr-control-script-reference.adoc         |    12 +-
 solr/solr-ref-guide/src/solr-glossary.adoc         |     4 +-
 solr/solr-ref-guide/src/solr-plugins.adoc          |    19 +-
 solr/solr-ref-guide/src/solr-tracing.adoc          |     2 +-
 solr/solr-ref-guide/src/solr-tutorial.adoc         |     7 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |   262 +-
 .../src/solrcloud-autoscaling-api.adoc             |   809 --
 .../solrcloud-autoscaling-auto-add-replicas.adoc   |    73 -
 .../src/solrcloud-autoscaling-fault-tolerance.adoc |    59 -
 .../src/solrcloud-autoscaling-listeners.adoc       |   220 -
 .../src/solrcloud-autoscaling-overview.adoc        |    96 -
 .../solrcloud-autoscaling-policy-preferences.adoc  |   641 -
 .../src/solrcloud-autoscaling-trigger-actions.adoc |    88 -
 .../src/solrcloud-autoscaling-triggers.adoc        |   609 -
 solr/solr-ref-guide/src/solrcloud-autoscaling.adoc |    35 -
 solr/solr-ref-guide/src/solrcloud.adoc             |     8 +-
 solr/solr-ref-guide/src/spatial-search.adoc        |     2 +-
 solr/solr-ref-guide/src/spell-checking.adoc        |     2 +-
 solr/solr-ref-guide/src/stream-api.adoc            |   216 +
 .../src/stream-decorator-reference.adoc            |    15 +-
 .../src/stream-evaluator-reference.adoc            |     3 +-
 .../src/stream-source-reference.adoc               |    66 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |     6 +-
 solr/solr-ref-guide/src/suggestions-screen.adoc    |    40 -
 .../src/the-query-elevation-component.adoc         |     2 +-
 .../src/the-standard-query-parser.adoc             |     4 +-
 solr/solr-ref-guide/src/the-stats-component.adoc   |     2 +-
 solr/solr-ref-guide/src/the-tagger-handler.adoc    |    11 +-
 solr/solr-ref-guide/src/tokenizers.adoc            |     2 +-
 .../src/updatehandlers-in-solrconfig.adoc          |     2 +-
 ...ding-data-with-solr-cell-using-apache-tika.adoc |     1 -
 ...ta-store-data-with-the-data-import-handler.adoc |     4 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |    33 +-
 ...ing-the-solr-administration-user-interface.adoc |     3 +-
 solr/solr-ref-guide/src/v2-api.adoc                |    12 +-
 solr/solrj/build.gradle                            |     2 +
 solr/solrj/ivy.xml                                 |     4 +
 .../org/apache/solr/client/solrj/SolrClient.java   |    16 +-
 .../org/apache/solr/client/solrj/SolrRequest.java  |    22 +
 .../org/apache/solr/client/solrj/SolrResponse.java |     1 +
 .../apache/solr/client/solrj/V2RequestSupport.java |     1 +
 .../client/solrj/beans/DocumentObjectBinder.java   |    13 +-
 .../client/solrj/cloud/AlreadyExistsException.java |    35 +
 .../client/solrj/cloud/BadVersionException.java    |    40 +
 .../client/solrj/cloud/DelegatingCloudManager.java |    89 +
 .../cloud/DelegatingClusterStateProvider.java      |   130 +
 .../client/solrj/cloud/DistribStateManager.java    |    11 -
 .../solr/client/solrj/cloud/NodeStateProvider.java |     5 +-
 .../solr/client/solrj/cloud/NotEmptyException.java |    35 +
 .../solr/client/solrj/cloud/SocketProxy.java       |    56 +-
 .../solr/client/solrj/cloud/SolrCloudManager.java  |     2 +-
 .../solr/client/solrj/cloud/VersionedData.java     |    99 +
 .../cloud/autoscaling/AddReplicaSuggester.java     |    81 -
 .../cloud/autoscaling/AlreadyExistsException.java  |    35 -
 .../solrj/cloud/autoscaling/AutoScalingConfig.java |   589 -
 .../cloud/autoscaling/BadVersionException.java     |    40 -
 .../solr/client/solrj/cloud/autoscaling/Cell.java  |    74 -
 .../client/solrj/cloud/autoscaling/Clause.java     |   829 --
 .../solrj/cloud/autoscaling/ComputedType.java      |    99 -
 .../client/solrj/cloud/autoscaling/Condition.java  |   125 -
 .../solrj/cloud/autoscaling/CoresVariable.java     |   125 -
 .../cloud/autoscaling/DelegatingCloudManager.java  |    93 -
 .../DelegatingClusterStateProvider.java            |   130 -
 .../autoscaling/DelegatingDistribStateManager.java |   107 -
 .../autoscaling/DelegatingNodeStateProvider.java   |    56 -
 .../cloud/autoscaling/DeleteNodeSuggester.java     |    46 -
 .../cloud/autoscaling/DeleteReplicaSuggester.java  |    74 -
 .../solrj/cloud/autoscaling/FreeDiskVariable.java  |   175 -
 .../cloud/autoscaling/MoveReplicaSuggester.java    |   112 -
 .../solrj/cloud/autoscaling/NodeVariable.java      |    44 -
 .../solrj/cloud/autoscaling/NoneSuggester.java     |    39 -
 .../solrj/cloud/autoscaling/NotEmptyException.java |    35 -
 .../client/solrj/cloud/autoscaling/Operand.java    |   209 -
 .../client/solrj/cloud/autoscaling/Policy.java     |   664 -
 .../solrj/cloud/autoscaling/PolicyHelper.java      |   603 -
 .../client/solrj/cloud/autoscaling/Preference.java |   148 -
 .../client/solrj/cloud/autoscaling/RangeVal.java   |    61 -
 .../solrj/cloud/autoscaling/ReplicaCount.java      |   128 -
 .../solrj/cloud/autoscaling/ReplicaInfo.java       |   219 -
 .../solrj/cloud/autoscaling/ReplicaVariable.java   |   175 -
 .../solr/client/solrj/cloud/autoscaling/Row.java   |   379 -
 .../solrj/cloud/autoscaling/SealedClause.java      |    29 -
 .../cloud/autoscaling/SplitShardSuggester.java     |    65 -
 .../client/solrj/cloud/autoscaling/Suggester.java  |   518 -
 .../client/solrj/cloud/autoscaling/Suggestion.java |   130 -
 .../autoscaling/TriggerEventProcessorStage.java    |    30 -
 .../solrj/cloud/autoscaling/TriggerEventType.java  |    33 -
 .../cloud/autoscaling/UnsupportedSuggester.java    |    59 -
 .../client/solrj/cloud/autoscaling/Variable.java   |   406 -
 .../solrj/cloud/autoscaling/VariableBase.java      |   211 -
 .../solrj/cloud/autoscaling/VersionedData.java     |    94 -
 .../client/solrj/cloud/autoscaling/Violation.java  |   181 -
 .../cloud/autoscaling/WithCollectionVariable.java  |   166 -
 .../solrj/cloud/autoscaling/package-info.java      |    23 -
 .../client/solrj/impl/BaseCloudSolrClient.java     |   100 +-
 .../solrj/impl/BaseHttpClusterStateProvider.java   |    22 +-
 .../solr/client/solrj/impl/BaseHttpSolrClient.java |    10 +-
 .../client/solrj/impl/BinaryRequestWriter.java     |     6 +-
 .../client/solrj/impl/BinaryResponseParser.java    |     1 +
 .../solr/client/solrj/impl/CloudSolrClient.java    |     2 +-
 .../client/solrj/impl/ClusterStateProvider.java    |     2 +
 .../impl/ConcurrentUpdateHttp2SolrClient.java      |    25 +-
 .../solrj/impl/ConcurrentUpdateSolrClient.java     |    24 +-
 .../solrj/impl/DelegationTokenHttpSolrClient.java  |     2 +-
 .../solrj/impl/Http2ClusterStateProvider.java      |     1 +
 .../solr/client/solrj/impl/Http2SolrClient.java    |   274 +-
 .../solr/client/solrj/impl/HttpClientUtil.java     |    51 +-
 .../solrj/impl/HttpClusterStateProvider.java       |     1 +
 .../solr/client/solrj/impl/HttpSolrClient.java     |   171 +-
 .../client/solrj/impl/Krb5HttpClientBuilder.java   |    13 +-
 .../solr/client/solrj/impl/LBHttp2SolrClient.java  |   141 +-
 .../solr/client/solrj/impl/LBHttpSolrClient.java   |     8 +-
 .../solr/client/solrj/impl/LBSolrClient.java       |   208 +-
 .../client/solrj/impl/SolrClientCloudManager.java  |    20 +-
 .../solrj/impl/SolrClientNodeStateProvider.java    |   248 +-
 .../solrj/impl/SolrHttpRequestRetryHandler.java    |     4 +-
 .../solrj/impl/StreamingBinaryResponseParser.java  |     3 +
 .../solr/client/solrj/impl/XMLResponseParser.java  |     6 +-
 .../solrj/impl/ZkClientClusterStateProvider.java   |     3 +-
 .../client/solrj/impl/ZkDistribStateManager.java   |    33 +-
 .../client/solrj/io/ClassificationEvaluation.java  |     8 +-
 .../java/org/apache/solr/client/solrj/io/Lang.java |   104 +-
 .../apache/solr/client/solrj/io/ModelCache.java    |     2 +-
 .../solr/client/solrj/io/SolrClientCache.java      |     2 +-
 .../org/apache/solr/client/solrj/io/Tuple.java     |   185 +-
 .../solr/client/solrj/io/comp/FieldComparator.java |     5 +
 .../solr/client/solrj/io/eq/FieldEqualitor.java    |     3 +
 .../solr/client/solrj/io/eval/AkimaEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/AnovaEvaluator.java  |    12 +-
 .../solr/client/solrj/io/eval/ArrayEvaluator.java  |     2 +
 .../solr/client/solrj/io/eval/AscEvaluator.java    |     1 +
 .../solr/client/solrj/io/eval/Attributes.java      |     1 +
 .../solrj/io/eval/BicubicSplineEvaluator.java      |     2 +
 .../solrj/io/eval/ChebyshevDistanceEvaluator.java  |     1 +
 .../solrj/io/eval/ChiSquareDataSetEvaluator.java   |    13 +-
 .../client/solrj/io/eval/ColumnAtEvaluator.java    |     2 +-
 .../client/solrj/io/eval/ConvexHullEvaluator.java  |     2 +-
 .../client/solrj/io/eval/ConvolutionEvaluator.java |     1 +
 .../client/solrj/io/eval/CorrelationEvaluator.java |     3 +-
 .../solrj/io/eval/CosineSimilarityEvaluator.java   |     2 +
 .../client/solrj/io/eval/CovarianceEvaluator.java  |     1 +
 .../solr/client/solrj/io/eval/DbscanEvaluator.java |     7 +-
 .../client/solrj/io/eval/DensityEvaluator.java     |     1 +
 .../client/solrj/io/eval/DescribeEvaluator.java    |    30 +-
 .../client/solrj/io/eval/DistanceEvaluator.java    |     1 +
 .../client/solrj/io/eval/DotProductEvaluator.java  |     2 +
 .../solr/client/solrj/io/eval/EBEAddEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBEDivideEvaluator.java   |     3 +-
 .../client/solrj/io/eval/EBEMultiplyEvaluator.java |     3 +-
 .../client/solrj/io/eval/EBESubtractEvaluator.java |     3 +-
 .../solrj/io/eval/EnclosingDiskEvaluator.java      |     5 +-
 .../io/eval/EnumeratedDistributionEvaluator.java   |     6 +
 .../solrj/io/eval/EuclideanDistanceEvaluator.java  |     1 +
 .../solr/client/solrj/io/eval/FFTEvaluator.java    |     2 +-
 .../solrj/io/eval/FeatureSelectEvaluator.java      |     5 +-
 .../client/solrj/io/eval/FieldValueEvaluator.java  |     1 +
 .../client/solrj/io/eval/FindDelayEvaluator.java   |     2 +
 .../solrj/io/eval/FrequencyTableEvaluator.java     |    17 +-
 .../client/solrj/io/eval/FuzzyKmeansEvaluator.java |     7 +-
 .../solrj/io/eval/GTestDataSetEvaluator.java       |    13 +-
 .../client/solrj/io/eval/GaussFitEvaluator.java    |     1 +
 .../solrj/io/eval/GetBaryCenterEvaluator.java      |     2 +-
 .../client/solrj/io/eval/GetCacheEvaluator.java    |     2 +
 .../client/solrj/io/eval/GetCenterEvaluator.java   |     3 +-
 .../client/solrj/io/eval/GetClusterEvaluator.java  |     4 +-
 .../client/solrj/io/eval/GetRadiusEvaluator.java   |     1 +
 .../solrj/io/eval/GetSupportPointsEvaluator.java   |     4 +-
 .../client/solrj/io/eval/HarmonicFitEvaluator.java |     3 +
 .../client/solrj/io/eval/HistogramEvaluator.java   |    24 +-
 .../solr/client/solrj/io/eval/IFFTEvaluator.java   |     2 +-
 .../client/solrj/io/eval/IndexOfEvaluator.java     |     1 +
 .../client/solrj/io/eval/IntegrateEvaluator.java   |     2 +-
 .../solr/client/solrj/io/eval/IsNullEvaluator.java |     1 +
 .../solr/client/solrj/io/eval/KmeansEvaluator.java |     9 +-
 .../solr/client/solrj/io/eval/KnnEvaluator.java    |     9 +-
 .../solrj/io/eval/KnnRegressionEvaluator.java      |     3 +
 .../solrj/io/eval/KolmogorovSmirnovEvaluator.java  |    19 +-
 .../solr/client/solrj/io/eval/L1NormEvaluator.java |     1 +
 .../client/solrj/io/eval/LInfNormEvaluator.java    |     1 +
 .../solrj/io/eval/LatLonVectorsEvaluator.java      |     6 +-
 .../solr/client/solrj/io/eval/LerpEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ListCacheEvaluator.java   |     8 +
 .../solr/client/solrj/io/eval/LoessEvaluator.java  |     3 +-
 .../solrj/io/eval/MannWhitneyUEvaluator.java       |    12 +-
 .../apache/solr/client/solrj/io/eval/Matrix.java   |     7 +-
 .../solr/client/solrj/io/eval/MatrixEvaluator.java |     1 +
 .../solrj/io/eval/MatrixMultiplyEvaluator.java     |     1 +
 .../solrj/io/eval/MeanDifferenceEvaluator.java     |     1 +
 .../solr/client/solrj/io/eval/MeanEvaluator.java   |     1 +
 .../solr/client/solrj/io/eval/MemsetEvaluator.java |     6 +-
 .../client/solrj/io/eval/MinMaxScaleEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/ModeEvaluator.java   |     3 +-
 .../client/solrj/io/eval/MonteCarloEvaluator.java  |    10 +-
 .../client/solrj/io/eval/MultiKmeansEvaluator.java |     6 +-
 .../MultiVariateNormalDistributionEvaluator.java   |     1 +
 .../client/solrj/io/eval/NaturalEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/NormEvaluator.java   |     1 +
 .../solrj/io/eval/NormalizeSumEvaluator.java       |     3 +-
 .../client/solrj/io/eval/NotNullEvaluator.java     |     1 +
 .../solrj/io/eval/OLSRegressionEvaluator.java      |     7 +-
 .../solr/client/solrj/io/eval/OnesEvaluator.java   |     2 +-
 .../client/solrj/io/eval/OscillateEvaluator.java   |     2 +
 .../client/solrj/io/eval/OutliersEvaluator.java    |     8 +-
 .../client/solrj/io/eval/PairSortEvaluator.java    |     3 +-
 .../client/solrj/io/eval/PairedTTestEvaluator.java |    10 +-
 .../client/solrj/io/eval/PercentileEvaluator.java  |     3 +-
 .../solr/client/solrj/io/eval/PivotEvaluator.java  |    13 +-
 .../solrj/io/eval/PolyFitDerivativeEvaluator.java  |     2 +
 .../client/solrj/io/eval/PolyFitEvaluator.java     |     1 +
 .../solr/client/solrj/io/eval/PowerEvaluator.java  |     9 +-
 .../client/solrj/io/eval/PredictEvaluator.java     |    11 +-
 .../solr/client/solrj/io/eval/PrimesEvaluator.java |     2 +-
 .../client/solrj/io/eval/PutCacheEvaluator.java    |     1 +
 .../client/solrj/io/eval/RecursiveEvaluator.java   |    14 +-
 .../client/solrj/io/eval/RegressionEvaluator.java  |     2 +
 .../client/solrj/io/eval/RemoveCacheEvaluator.java |     2 +
 .../solr/client/solrj/io/eval/RepeatEvaluator.java |     2 +-
 .../solr/client/solrj/io/eval/RowAtEvaluator.java  |     2 +-
 .../solr/client/solrj/io/eval/SampleEvaluator.java |     2 +-
 .../client/solrj/io/eval/ScalarAddEvaluator.java   |     3 +-
 .../solr/client/solrj/io/eval/ScaleEvaluator.java  |     2 +-
 .../solrj/io/eval/SetColumnLabelsEvaluator.java    |     3 +-
 .../solrj/io/eval/SetRowLabelsEvaluator.java       |     3 +-
 .../client/solrj/io/eval/SetValueEvaluator.java    |     8 +-
 .../solr/client/solrj/io/eval/SplineEvaluator.java |     3 +-
 .../solr/client/solrj/io/eval/SplitEvaluator.java  |     2 +-
 .../solrj/io/eval/StandardDeviationEvaluator.java  |     3 +-
 .../client/solrj/io/eval/SumColumnsEvaluator.java  |     2 +-
 .../solrj/io/eval/SumDifferenceEvaluator.java      |     1 +
 .../client/solrj/io/eval/SumRowsEvaluator.java     |     2 +-
 .../solr/client/solrj/io/eval/SumSqEvaluator.java  |     1 +
 .../solr/client/solrj/io/eval/TTestEvaluator.java  |    13 +-
 .../client/solrj/io/eval/TermVectorsEvaluator.java |    16 +-
 .../solrj/io/eval/TimeDifferencingEvaluator.java   |    97 +-
 .../client/solrj/io/eval/TopFeaturesEvaluator.java |     8 +-
 .../solr/client/solrj/io/eval/UnitEvaluator.java   |     3 +-
 .../client/solrj/io/eval/ValueAtEvaluator.java     |     1 +
 .../client/solrj/io/eval/VarianceEvaluator.java    |     3 +-
 .../solr/client/solrj/io/eval/VectorFunction.java  |     4 +
 .../solr/client/solrj/io/eval/ZerosEvaluator.java  |     2 +-
 .../client/solrj/io/graph/GatherNodesStream.java   |    56 +-
 .../apache/solr/client/solrj/io/graph/Node.java    |    20 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |    35 +-
 .../solr/client/solrj/io/graph/Traversal.java      |    11 +-
 .../client/solrj/io/graph/TraversalIterator.java   |     9 +-
 .../solr/client/solrj/io/ops/GroupOperation.java   |    17 +-
 .../client/solrj/io/sql/ResultSetMetaDataImpl.java |     2 +
 .../client/solrj/io/stream/CalculatorStream.java   |    12 +-
 .../solrj/io/stream/CartesianProductStream.java    |     1 +
 .../solr/client/solrj/io/stream/CellStream.java    |     9 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |    32 +-
 .../solr/client/solrj/io/stream/CommitStream.java  |     2 +-
 .../solr/client/solrj/io/stream/CsvStream.java     |     3 +-
 .../solr/client/solrj/io/stream/DaemonStream.java  |    31 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |    28 +-
 .../solr/client/solrj/io/stream/DrillStream.java   |   280 +
 .../solr/client/solrj/io/stream/EchoStream.java    |    11 +-
 .../solr/client/solrj/io/stream/EvalStream.java    |     2 +-
 .../client/solrj/io/stream/ExceptionStream.java    |    12 +-
 .../client/solrj/io/stream/ExecutorStream.java     |    13 +-
 .../solr/client/solrj/io/stream/Facet2DStream.java |    26 +-
 .../solr/client/solrj/io/stream/FacetStream.java   |    96 +-
 .../solrj/io/stream/FeaturesSelectionStream.java   |    37 +-
 .../solr/client/solrj/io/stream/FetchStream.java   |     4 +-
 .../solr/client/solrj/io/stream/GetStream.java     |    14 +-
 .../client/solrj/io/stream/HashRollupStream.java   |    12 +-
 .../solr/client/solrj/io/stream/JDBCStream.java    |    23 +-
 .../client/solrj/io/stream/JSONTupleStream.java    |     1 +
 .../solrj/io/stream/JavabinTupleStreamParser.java  |     3 +
 .../solr/client/solrj/io/stream/KnnStream.java     |    13 +-
 .../solr/client/solrj/io/stream/LetStream.java     |     6 +-
 .../solr/client/solrj/io/stream/ListStream.java    |     5 +-
 .../solr/client/solrj/io/stream/ModelStream.java   |     6 +-
 .../solr/client/solrj/io/stream/NoOpStream.java    |     6 +-
 .../solr/client/solrj/io/stream/NullStream.java    |     3 +-
 .../client/solrj/io/stream/ParallelListStream.java |    13 +-
 .../client/solrj/io/stream/ParallelStream.java     |    10 +-
 .../solr/client/solrj/io/stream/PlotStream.java    |    21 +-
 .../client/solrj/io/stream/PriorityStream.java     |     2 +-
 .../solr/client/solrj/io/stream/RandomStream.java  |    15 +-
 .../solr/client/solrj/io/stream/RollupStream.java  |    16 +-
 .../client/solrj/io/stream/ScoreNodesStream.java   |    15 +-
 .../solr/client/solrj/io/stream/SearchStream.java  |    16 +-
 .../solr/client/solrj/io/stream/SelectStream.java  |    15 +-
 .../solrj/io/stream/SignificantTermsStream.java    |    31 +-
 .../solr/client/solrj/io/stream/SolrStream.java    |    13 +-
 .../solr/client/solrj/io/stream/StatsStream.java   |   286 +-
 .../solr/client/solrj/io/stream/StreamContext.java |    11 +-
 .../client/solrj/io/stream/TextLogitStream.java    |    54 +-
 .../client/solrj/io/stream/TimeSeriesStream.java   |    30 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |    16 +-
 .../solr/client/solrj/io/stream/TupStream.java     |    20 +-
 .../solr/client/solrj/io/stream/TupleStream.java   |     3 +-
 .../solr/client/solrj/io/stream/UpdateStream.java  |    21 +-
 .../solr/client/solrj/io/stream/ZplotStream.java   |    38 +-
 .../client/solrj/io/stream/expr/Explanation.java   |     1 +
 .../solrj/io/stream/expr/StreamExplanation.java    |     1 +
 .../solrj/io/stream/expr/StreamExpression.java     |     6 +
 .../expr/StreamExpressionNamedParameter.java       |     7 +
 .../io/stream/expr/StreamExpressionValue.java      |     9 +-
 .../client/solrj/io/stream/expr/StreamFactory.java |   249 +-
 .../solrj/io/stream/metrics/CountMetric.java       |     4 +-
 .../solrj/io/stream/metrics/PercentileMetric.java  |    84 +
 .../client/solrj/io/stream/metrics/StdMetric.java  |    93 +
 .../solrj/request/AbstractUpdateRequest.java       |     5 +
 .../solrj/request/CollectionAdminRequest.java      |   112 +-
 .../client/solrj/request/CollectionApiMapping.java |    14 +-
 .../solrj/request/ConfigSetAdminRequest.java       |     8 +-
 .../client/solrj/request/CoreAdminRequest.java     |     5 +
 .../solr/client/solrj/request/CoreApiMapping.java  |     3 +-
 .../solrj/request/DelegationTokenRequest.java      |    15 +
 .../client/solrj/request/DirectXmlRequest.java     |     5 +
 .../solrj/request/DocumentAnalysisRequest.java     |     5 +
 .../client/solrj/request/FieldAnalysisRequest.java |     5 +
 .../client/solrj/request/GenericSolrRequest.java   |     5 +
 .../client/solrj/request/HealthCheckRequest.java   |     5 +-
 .../solrj/request/JavaBinUpdateRequestCodec.java   |    19 +-
 .../solr/client/solrj/request/LukeRequest.java     |     5 +
 .../solrj/request/MultiContentWriterRequest.java   |     7 +-
 .../solr/client/solrj/request/QueryRequest.java    |     4 +
 .../solr/client/solrj/request/RequestWriter.java   |    13 +-
 .../apache/solr/client/solrj/request/SolrPing.java |     5 +
 .../solr/client/solrj/request/UpdateRequest.java   |     2 +-
 .../solr/client/solrj/request/V1toV2ApiMapper.java |     1 +
 .../solr/client/solrj/request/V2Request.java       |     5 +
 .../client/solrj/request/beans/PluginMeta.java     |    64 +
 .../solr/client/solrj/request/json/DomainMap.java  |     3 +
 .../client/solrj/request/json/HeatmapFacetMap.java |     3 +-
 .../client/solrj/request/json/JsonFacetMap.java    |     5 +-
 .../solrj/request/json/JsonQueryRequest.java       |     8 +
 .../request/schema/AbstractSchemaRequest.java      |     4 +
 .../solrj/response/AnalysisResponseBase.java       |     3 +-
 .../solrj/response/CollectionAdminResponse.java    |     1 +
 .../solrj/response/ConfigSetAdminResponse.java     |     3 +-
 .../solrj/response/DelegationTokenResponse.java    |     3 +
 .../solr/client/solrj/response/FieldStatsInfo.java |     1 +
 .../client/solrj/response/HealthCheckResponse.java |     1 +
 .../solr/client/solrj/response/PivotField.java     |     5 +-
 .../solr/client/solrj/response/QueryResponse.java  |    11 +-
 .../solr/client/solrj/response/RangeFacet.java     |     5 +-
 .../client/solrj/response/SolrResponseBase.java    |     3 +
 .../client/solrj/response/SpellCheckResponse.java  |     1 +
 .../client/solrj/response/SuggesterResponse.java   |     1 +
 .../solrj/response/json/BucketBasedJsonFacet.java  |     1 +
 .../solrj/response/json/HeatmapJsonFacet.java      |     1 +
 .../solrj/response/json/NestableJsonFacet.java     |     1 +
 .../solrj/response/schema/SchemaResponse.java      |    32 +-
 .../RequestReplicaListTransformerGenerator.java    |     6 +-
 .../solr/client/solrj/util/AsyncListener.java      |    33 +
 .../apache/solr/client/solrj/util/Cancellable.java |    22 +
 .../apache/solr/client/solrj/util/ClientUtils.java |     2 +
 .../java/org/apache/solr/cluster/api/ApiType.java  |    31 +
 .../apache/solr/cluster/api/CollectionConfig.java  |    27 +
 .../org/apache/solr/cluster/api/HashRange.java     |    42 +
 .../java/org/apache/solr/cluster/api/Resource.java |    41 +
 .../java/org/apache/solr/cluster/api/Router.java   |    25 +
 .../java/org/apache/solr/cluster/api/Shard.java    |    39 +
 .../org/apache/solr/cluster/api/ShardReplica.java  |    57 +
 .../org/apache/solr/cluster/api/SimpleMap.java     |    80 +
 .../org/apache/solr/cluster/api/SolrCluster.java   |    48 +
 .../apache/solr/cluster/api/SolrCollection.java    |    34 +
 .../java/org/apache/solr/cluster/api/SolrNode.java |    36 +
 .../org/apache/solr/common/IteratorWriter.java     |     1 +
 .../org/apache/solr/common/LazySolrCluster.java    |   446 +
 .../apache/solr/common/LinkedHashMapWriter.java    |     2 +
 .../org/apache/solr/common/MapSerializable.java    |     1 +
 .../src/java/org/apache/solr/common/MapWriter.java |     1 +
 .../java/org/apache/solr/common/MapWriterMap.java  |     7 +-
 .../org/apache/solr/common/NavigableObject.java    |     6 +-
 .../java/org/apache/solr/common/SimpleZkMap.java   |   139 +
 .../java/org/apache/solr/common/SolrDocument.java  |     7 +-
 .../org/apache/solr/common/SolrDocumentBase.java   |     1 +
 .../org/apache/solr/common/SolrDocumentList.java   |    10 +
 .../java/org/apache/solr/common/SolrException.java |    15 +-
 .../org/apache/solr/common/SolrInputDocument.java  |     1 +
 .../org/apache/solr/common/SolrInputField.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Aliases.java |    12 +-
 .../solr/common/cloud/ClusterProperties.java       |     4 +
 .../org/apache/solr/common/cloud/ClusterState.java |    91 +-
 .../solr/common/cloud/CompositeIdRouter.java       |     2 +-
 .../solr/common/cloud/ConnectionManager.java       |     6 +-
 .../apache/solr/common/cloud/DocCollection.java    |    63 +-
 .../org/apache/solr/common/cloud/DocRouter.java    |    16 +-
 .../solr/common/cloud/NodesSysPropsCacher.java     |     4 +-
 .../java/org/apache/solr/common/cloud/Replica.java |   193 +-
 .../java/org/apache/solr/common/cloud/Slice.java   |     3 +
 .../org/apache/solr/common/cloud/SolrZkClient.java |    49 +-
 .../apache/solr/common/cloud/SolrZooKeeper.java    |     1 +
 .../apache/solr/common/cloud/ZkConfigManager.java  |     3 +-
 .../apache/solr/common/cloud/ZkDynamicConfig.java  |   145 +
 .../solr/common/cloud/ZkMaintenanceUtils.java      |    33 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |    11 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   364 +-
 .../solr/common/cloud/rule/ImplicitSnitch.java     |     5 +-
 .../org/apache/solr/common/cloud/rule/Snitch.java  |     1 +
 .../solr/common/cloud/rule/SnitchContext.java      |     1 +
 .../solr/common/params/AutoScalingParams.java      |    76 -
 .../solr/common/params/CollectionAdminParams.java  |    11 +-
 .../solr/common/params/CollectionParams.java       |    44 +-
 .../apache/solr/common/params/CommonParams.java    |    33 +-
 .../org/apache/solr/common/params/FacetParams.java |     4 +-
 .../apache/solr/common/params/MapSolrParams.java   |    22 +-
 .../solr/common/params/MultiMapSolrParams.java     |     5 +
 .../org/apache/solr/common/params/SolrParams.java  |     7 +-
 .../apache/solr/common/params/StreamParams.java    |    41 +
 .../common/util/ByteArrayUtf8CharSequence.java     |     6 +-
 .../apache/solr/common/util/CommandOperation.java  |    16 +-
 .../apache/solr/common/util/ContentStreamBase.java |     3 +-
 .../org/apache/solr/common/util/ExecutorUtil.java  |    12 +-
 .../solr/common/util/FastJavaBinDecoder.java       |     6 +
 .../src/java/org/apache/solr/common/util/Hash.java |     2 +
 .../org/apache/solr/common/util/JavaBinCodec.java  |    28 +-
 .../apache/solr/common/util/JsonRecordReader.java  |    10 +
 .../apache/solr/common/util/JsonSchemaCreator.java |     3 +-
 .../solr/common/util/JsonSchemaValidator.java      |    22 +-
 .../apache/solr/common/util/JsonTextWriter.java    |    19 +-
 .../solr/common/util/LinkedSimpleHashMap.java      |    34 +
 .../apache/solr/common/util/MapBackedCache.java    |     4 +
 .../org/apache/solr/common/util/NamedList.java     |    59 +-
 .../src/java/org/apache/solr/common/util/Pair.java |     1 +
 .../java/org/apache/solr/common/util/PathTrie.java |    50 +-
 .../apache/solr/common/util/ReflectMapWriter.java  |    29 +-
 .../org/apache/solr/common/util/RetryUtil.java     |    13 +-
 .../solr/common/util/SolrNamedThreadFactory.java   |    52 +
 .../solr/common/util/SolrjNamedThreadFactory.java  |    49 -
 .../java/org/apache/solr/common/util/StrUtils.java |     2 +-
 .../org/apache/solr/common/util/TextWriter.java    |    21 +-
 .../org/apache/solr/common/util/TimeSource.java    |     4 +-
 .../java/org/apache/solr/common/util/Utils.java    |   192 +-
 .../apache/solr/common/util/ValidatingJsonMap.java |    19 +-
 .../apache/solr/common/util/WrappedSimpleMap.java  |    49 +
 .../apache/solr/common/util/XMLErrorLogger.java    |     4 +-
 solr/solrj/src/java/org/noggit/CharArr.java        |   262 +-
 solr/solrj/src/java/org/noggit/JSONParser.java     |     2 +-
 .../resources/apispec/autoscaling.Commands.json    |   199 -
 .../src/resources/apispec/autoscaling.history.json |    61 -
 .../src/resources/apispec/cluster.Commands.json    |    28 -
 .../resources/apispec/collections.Commands.json    |    15 -
 .../apispec/collections.collection.Commands.json   |     8 +-
 .../collections.collection.Commands.modify.json    |    15 -
 ...collections.collection.shards.shard.delete.json |     2 +-
 ...ons.collection.shards.shard.replica.delete.json |     2 +-
 solr/solrj/src/test-files/log4j2.xml               |    45 +-
 .../src/test-files/solrj/javabin_backcompat.bin    |   Bin 169 -> 170 bytes
 .../solr/autoscaling/testAddMissingReplica.json    |   123 -
 .../autoscaling/testAutoScalingHandlerFailure.json |   141 -
 ...testAutoscalingPreferencesUsedWithNoPolicy.json |    53 -
 .../autoscaling/testComputePlanAfterNodeAdded.json |    16 -
 .../solr/autoscaling/testCoresSuggestions.json     |    17 -
 .../testCreateCollectionWithEmptyPolicy.json       |    20 -
 .../solrj/solr/autoscaling/testDiskSpaceHint.json  |    16 -
 .../solr/autoscaling/testEmptyCollection.json      |    27 -
 .../solrj/solr/autoscaling/testEqualOnNonNode.json |    83 -
 .../solr/autoscaling/testFreeDiskDeviation.json    |    35 -
 .../solr/autoscaling/testFreeDiskSuggestions.json  |    27 -
 .../solr/autoscaling/testFreediskPercentage.json   |    25 -
 .../solrj/solr/autoscaling/testHostAttribute.json  |   119 -
 .../solrj/solr/autoscaling/testInfiniteLoop.json   | 13196 -------------------
 .../solr/autoscaling/testMoveReplicaSuggester.json |    15 -
 .../testMoveReplicasInMultipleCollections.json     |    88 -
 .../solrj/solr/autoscaling/testPolicy.json         |    41 -
 .../solr/autoscaling/testPortSuggestions.json      |    22 -
 .../autoscaling/testReplicaCountSuggestions.json   |    15 -
 .../solr/autoscaling/testReplicaPercentage.json    |    46 -
 .../autoscaling/testReplicaZonesPercentage.json    |    15 -
 .../autoscaling/testScheduledTriggerFailure.json   |    52 -
 .../solrj/solr/autoscaling/testSortError.json      |   225 -
 .../autoscaling/testSuggestionsRebalance2.json     |   130 -
 .../autoscaling/testSuggestionsRebalanceOnly.json  |   105 -
 .../solr/autoscaling/testSysPropSuggestions.json   |   127 -
 .../solr/autoscaling/testSyspropSuggestions1.json  |    24 -
 .../solr/autoscaling/testUnresolvedSuggestion.json |   212 -
 .../solr/autoscaling/testUtilizeNodeFailure.json   |    69 -
 .../solr/autoscaling/testUtilizeNodeFailure2.json  |    66 -
 .../solr/autoscaling/testViolationOutput.json      |    22 -
 .../solrj/solr/autoscaling/testWithCollection.json |    21 -
 .../autoscaling/testWithCollectionMoveReplica.json |    28 -
 .../testWithCollectionMoveVsAddSuggestions.json    |    49 -
 .../autoscaling/testWithCollectionSuggestions.json |    21 -
 ...rconfig-slave1.xml => solrconfig-follower1.xml} |     0
 .../ref_guide_examples/JsonRequestApiTest.java     |     4 +-
 .../UsingSolrJRefGuideExamplesTest.java            |    59 +-
 .../org/apache/solr/client/solrj/GetByIdTest.java  |    27 +-
 .../solr/client/solrj/LargeVolumeTestBase.java     |    10 +-
 .../client/solrj/MergeIndexesExampleTestBase.java  |    15 +-
 .../apache/solr/client/solrj/SolrExampleTests.java |    21 +-
 .../client/solrj/SolrSchemalessExampleTest.java    |     2 +
 .../solr/client/solrj/TestLBHttp2SolrClient.java   |     9 +-
 .../solr/client/solrj/TestLBHttpSolrClient.java    |     9 +-
 .../solr/client/solrj/TestSolrJErrorHandling.java  |    20 +-
 .../solrj/beans/TestDocumentObjectBinder.java      |     1 +
 .../solrj/cloud/autoscaling/ConditionTest.java     |    80 -
 .../autoscaling/MoveReplicaSuggesterTest.java      |   104 -
 .../client/solrj/cloud/autoscaling/TestPolicy.java |  3092 -----
 .../solrj/cloud/autoscaling/TestPolicy2.java       |   505 -
 .../solrj/cloud/autoscaling/TestPolicy2Old.java    |    26 -
 .../solrj/cloud/autoscaling/TestPolicyOld.java     |    25 -
 .../solrj/embedded/SolrExampleJettyTest.java       |     1 +
 .../solrj/embedded/TestEmbeddedSolrServer.java     |     2 +-
 .../client/solrj/impl/BasicHttpSolrClientTest.java |    53 +-
 .../impl/CloudHttp2SolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/CloudHttp2SolrClientRetryTest.java  |     1 +
 .../solrj/impl/CloudHttp2SolrClientTest.java       |    45 +-
 .../solrj/impl/CloudSolrClientBadInputTest.java    |     4 +-
 .../solrj/impl/CloudSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/CloudSolrClientCacheTest.java       |    15 +-
 .../solrj/impl/CloudSolrClientRetryTest.java       |     1 +
 .../client/solrj/impl/CloudSolrClientTest.java     |    41 +-
 ...oncurrentUpdateHttp2SolrClientBadInputTest.java |     4 +-
 .../impl/ConcurrentUpdateHttp2SolrClientTest.java  |     6 +-
 .../ConcurrentUpdateSolrClientBadInputTest.java    |     4 +-
 .../ConcurrentUpdateSolrClientBuilderTest.java     |     2 +-
 .../solrj/impl/ConcurrentUpdateSolrClientTest.java |     6 +-
 .../impl/Http2SolrClientCompatibilityTest.java     |     7 +-
 .../client/solrj/impl/Http2SolrClientTest.java     |    44 +-
 .../solr/client/solrj/impl/HttpClientUtilTest.java |    16 +-
 .../solrj/impl/HttpSolrClientBadInputTest.java     |     4 +-
 .../solrj/impl/HttpSolrClientConPoolTest.java      |     4 +-
 .../solrj/impl/LBHttpSolrClientBadInputTest.java   |     4 +-
 .../solr/client/solrj/impl/LBSolrClientTest.java   |    90 +
 .../org/apache/solr/client/solrj/io/TestLang.java  |     4 +-
 .../client/solrj/io/graph/GraphExpressionTest.java |    16 +-
 .../solr/client/solrj/io/graph/GraphTest.java      |    10 +-
 .../apache/solr/client/solrj/io/sql/JdbcTest.java  |     2 +
 .../solrj/io/stream/CloudAuthStreamTest.java       |     9 +-
 .../client/solrj/io/stream/JDBCStreamTest.java     |     4 +-
 .../client/solrj/io/stream/MathExpressionTest.java |   258 +-
 .../client/solrj/io/stream/RecordCountStream.java  |     2 +-
 .../solrj/io/stream/SelectWithEvaluatorsTest.java  |    10 +-
 .../solrj/io/stream/StreamDecoratorTest.java       |    33 +-
 .../solrj/io/stream/StreamExpressionTest.java      |   417 +-
 .../solr/client/solrj/io/stream/StreamingTest.java |    15 +-
 .../solrj/io/stream/eval/AscEvaluatorTest.java     |     6 +
 .../io/stream/eval/ConversionEvaluatorsTest.java   |    27 +-
 .../solrj/io/stream/eval/ReverseEvaluatorTest.java |     1 +
 .../io/stream/eval/TemporalEvaluatorsTest.java     |     4 +-
 .../solrj/io/stream/ops/ConcatOperationTest.java   |     4 +-
 .../client/solrj/io/stream/ops/OperationsTest.java |     4 +-
 .../solr/client/solrj/request/SchemaTest.java      |    14 +-
 .../solrj/request/TestConfigSetAdminRequest.java   |     3 +-
 .../solr/client/solrj/request/TestCoreAdmin.java   |    12 +-
 .../solrj/request/TestUpdateRequestCodec.java      |     6 +-
 .../solr/client/solrj/request/TestV2Request.java   |     6 +-
 .../client/solrj/request/json/DomainMapTest.java   |     7 +
 .../solrj/response/AnlysisResponseBaseTest.java    |     6 +-
 .../response/DocumentAnalysisResponseTest.java     |     2 +
 .../solrj/response/FieldAnalysisResponseTest.java  |     2 +
 .../solrj/response/NoOpResponseParserTest.java     |     2 +
 .../client/solrj/response/QueryResponseTest.java   |     1 +
 .../response/TestDelegationTokenResponse.java      |     2 +-
 ...RequestReplicaListTransformerGeneratorTest.java |    17 +-
 .../org/apache/solr/common/SolrDocumentTest.java   |     7 +-
 .../solr/common/TestToleratedUpdateError.java      |     2 +
 .../apache/solr/common/cloud/SolrZkClientTest.java |    12 +-
 .../cloud/TestCloudCollectionsListeners.java       |   110 -
 .../common/cloud/TestCollectionStateWatchers.java  |    23 -
 .../common/cloud/TestDocCollectionWatcher.java     |    26 -
 .../solr/common/params/CommonParamsTest.java       |     2 +
 .../apache/solr/common/util/JsonValidatorTest.java |     3 +
 .../org/apache/solr/common/util/NamedListTest.java |     5 +-
 .../solr/common/util/TestFastJavabinDecoder.java   |    13 +
 .../apache/solr/common/util/TestJavaBinCodec.java  |   103 +-
 .../solr/common/util/TestJsonRecordReader.java     |     5 +
 .../solr/common/util/TestNamedListCodec.java       |    15 +
 .../org/apache/solr/common/util/TestPathTrie.java  |    10 +
 .../solr/common/util/TestSolrJsonWriter.java       |   102 +-
 .../solr/common/util/TestValidatingJsonMap.java    |     1 +
 .../solr/common/util/TestZkMaintenanceUtils.java   |    55 +
 .../solr/common/util/Utf8CharSequenceTest.java     |     6 +
 solr/test-framework/{README.txt => README.md}      |     0
 solr/test-framework/build.gradle                   |     3 +-
 solr/test-framework/build.xml                      |     2 +-
 solr/test-framework/ivy.xml                        |     2 +-
 .../apache/solr/BaseDistributedSearchTestCase.java |    31 +-
 .../src/java/org/apache/solr/JSONTestUtil.java     |     7 +
 .../org/apache/solr/SolrIgnoredThreadsFilter.java  |     5 +
 .../java/org/apache/solr/SolrJettyTestBase.java    |     2 +-
 .../src/java/org/apache/solr/SolrTestCase.java     |    12 +-
 .../src/java/org/apache/solr/SolrTestCaseHS.java   |    95 +-
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   129 +-
 .../solr/analysis/MockCharFilterFactory.java       |     5 +
 .../solr/analysis/MockTokenFilterFactory.java      |     5 +
 .../apache/solr/analysis/MockTokenizerFactory.java |     5 +
 .../solr/cloud/AbstractDistribZkTestBase.java      |    54 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |   183 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java    |    12 +-
 .../org/apache/solr/cloud/CloudInspectUtil.java    |    23 +-
 .../java/org/apache/solr/cloud/ConfigRequest.java  |     6 +
 .../src/java/org/apache/solr/cloud/IpTables.java   |     4 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |    19 +-
 .../apache/solr/cloud/MultiSolrCloudTestCase.java  |     5 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |     4 +
 .../org/apache/solr/cloud/SolrCloudTestCase.java   |     9 +-
 .../apache/solr/cloud/StoppableCommitThread.java   |     4 +-
 .../apache/solr/cloud/StoppableSearchThread.java   |     2 +-
 .../java/org/apache/solr/cloud/ZkTestServer.java   |    29 +-
 .../solr/core/MockConcurrentMergeScheduler.java    |     3 +-
 .../apache/solr/core/MockTracerConfigurator.java   |     2 +-
 .../component/TrackingShardHandlerFactory.java     |    67 +-
 .../org/apache/solr/util/RandomMergePolicy.java    |     4 +-
 .../java/org/apache/solr/util/RandomizeSSL.java    |     4 +-
 .../java/org/apache/solr/util/RestTestBase.java    |    71 +-
 .../java/org/apache/solr/util/SSLTestConfig.java   |    26 +-
 .../src/java/org/apache/solr/util/TestHarness.java |    35 +-
 solr/webapp/build.gradle                           |     2 +
 solr/webapp/web/css/angular/collections.css        |     2 +-
 solr/webapp/web/css/angular/dashboard.css          |     4 +-
 solr/webapp/web/css/angular/dataimport.css         |     3 +-
 solr/webapp/web/css/angular/index.css              |     5 +
 solr/webapp/web/css/angular/menu.css               |     3 +-
 solr/webapp/web/css/angular/replication.css        |    10 +-
 solr/webapp/web/css/angular/suggestions.css        |    64 -
 .../img/ico/{node-slave.png => node-follower.png}  |   Bin
 .../img/ico/{node-master.png => node-leader.png}   |   Bin
 solr/webapp/web/index.html                         |    31 +-
 solr/webapp/web/js/angular/app.js                  |     4 -
 solr/webapp/web/js/angular/controllers/cloud.js    |     9 +-
 .../js/angular/controllers/cluster-suggestions.js  |    62 -
 .../web/js/angular/controllers/collections.js      |     8 +-
 .../web/js/angular/controllers/core-overview.js    |     4 +-
 solr/webapp/web/js/angular/controllers/index.js    |     6 +
 solr/webapp/web/js/angular/controllers/login.js    |     2 +-
 .../web/js/angular/controllers/replication.js      |   108 +-
 solr/webapp/web/libs/angular-chosen.min.js         |     4 +-
 solr/webapp/web/partials/cloud.html                |     3 +-
 solr/webapp/web/partials/cluster_suggestions.html  |    49 -
 solr/webapp/web/partials/collection_overview.html  |     6 -
 solr/webapp/web/partials/collections.html          |    20 -
 solr/webapp/web/partials/core_overview.html        |    38 +-
 solr/webapp/web/partials/dataimport.html           |     1 +
 solr/webapp/web/partials/index.html                |    34 +
 solr/webapp/web/partials/login.html                |    17 +
 solr/webapp/web/partials/replication.html          |    62 +-
 2494 files changed, 59437 insertions(+), 124182 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index e9df9b1..9945ecb 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -6,11 +6,24 @@ https://github.com/apache/lucene-solr/blob/master/solr/solr-ref-guide/src/solr-u
 
 ==================  9.0.0 ==================
 
-Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
+
+Upgrade Notes
+---------------------
+
+* SOLR-12847: maxShardsPerNode parameter has been removed because it was broken and
+inconsistent with other replica placement strategies. Other relevant placement strategies
+should be used instead, such as autoscaling policy or rules-based placement.
+
+* SOLR-14654 : plugins cannot be loaded using "runtimeLib=true" option. Use the package manager to use
+  and load plugins
 
 New Features
 ---------------------
-(No changes)
+* SOLR-14440: Introduce new Certificate Authentication Plugin to load Principal from certificate subject. (Mike Drob)
+
+* SOLR-14588: Introduce Circuit Breaker Infrastructure and a JVM heap usage memory tracking circuit breaker implementation (Atri Sharma)
+
 
 Improvements
 ----------------------
@@ -18,8 +31,23 @@ Improvements
 
 * SOLR-14223: PKI Auth can bootstrap from existing key files instead of creating new keys on startup (Mike Drob)
 
+* SOLR-11725: Use corrected sample formula for computing stdDev and variance in JSON aggregations
+  (hossman, Munendra S N, yonik)
+
+* SOLR-14387: SolrClient.getById() will escape comma separater within ids (Markus Schuch via Mike Drob)
+
+* SOLR-10814: Add short-name feature to RuleBasedAuthz plugin (Mike Drob, Hrishikesh Gadre)
+
+* SOLR-7683 Introduce support to identify Solr internal request types (Atri Sharma, Hrishikesh Gadre)
+
+* SOLR-13528 Rate Limiting in Solr (Atri Sharma, Mike Drob)
+
 Other Changes
 ----------------------
+* SOLR-14656: Autoscaling framework removed (Ishan Chattopadhyaya, noble, Ilan Ginzburg)
+
+* LUCENE-9391: Upgrade HPPC to 0.8.2. (Haoyu Zhai)
+
 * SOLR-10288: Remove non-minified JavaScript from the webapp. (Erik Hatcher, marcussorealheis)
 
 * SOLR-13655:Upgrade Collections.unModifiableSet to Set.of and Set.copyOf (Atri Sharma via Tomás Fernández Löbbe)
@@ -40,30 +68,527 @@ Other Changes
 * SOLR-14256: Remove HashDocSet; add DocSet.getBits() instead.  DocSet is now strictly immutable and ascending order.
   It's now locked-down to external extension; only 2 impls exist.  (David Smiley)
 
+* SOLR-14197: SolrResourceLoader: remove deprecated methods and do other improvements. (David Smiley)
+
+* SOLR-14012: Return long value for unique and hll aggregations irrespective of shard count (Munendra S N, hossman)
+
+* SOLR-14322: AbstractFullDistribZkTestBase.waitForRecoveriesToFinish now takes a timeout and time unit instead of
+  assuming that we are passed value in seconds. (Mike Drob)
+
+* SOLR-13893: Remove support to read BlobRepository's max jar size from deprecated `runtme.lib.size` system property
+  (Erick Erickson, Kesharee Nandan Vishwakarma, Munendra S N)
+
+* SOLR-12720: Remove support for `autoReplicaFailoverWaitAfterExpiration`. (marcussorealheis, shalin)
+
+* SOLR-9909: The deprecated SolrjNamedThreadFactory has been removed. Use SolrNamedThreadFactory instead.
+  (Andras Salamon, shalin)
+
+* SOLR-14420: AuthenticationPlugin.authenticate accepts HttpServletRequest instead of ServletRequest. (Mike Drob)
+
+* SOLR-14429: Convert .txt files to properly formatted .md files. (Tomoko Uchida, Uwe Schindler)
+
+* SOLR-14412: Automatically set urlScheme to https when running secure solr with embedded zookeeper. (Mike Drob)
+  Do not erroneously set solr.jetty.https.port system property when running in http mode (Upendra Penegalapati)
+
+* SOLR-14014: Introducing a system property that allows users to disable the Admin UI, which is enabled by default.
+  If you have security concerns or other reasons to disable the Admin UI, you can modify `SOLR_ADMIN_UI_DISABLED`
+  `solr.in.sh`/`solr.in.cmd` at start. (marcussorealheis)
+
+* SOLR-14486: Autoscaling simulation framework no longer creates /clusterstate.json (format 1),
+  instead it creates individual per-collection /state.json files (format 2). (ab)
+
+* SOLR-12823: Remove /clusterstate.json support, including support for collections created with stateFormat=1,
+  as well as support for Collection API MIGRATESTATEFORMAT action and support for the legacyCloud flag (Ilan Ginzburg).
+
+* LUCENE-9411: Fail complation on warnings, 9x gradle-only (Erick Erickson, Dawid Weiss)
+  Deserves mention here as well as Lucene CHANGES.txt since it affects both.
+
+* SOLR-12847: Remove support for maxShardsPerNode. (ab)
+
+* SOLR-14244: Remove ReplicaInfo. (ab)
+
+* SOLR-14654: Remove plugin loading from .system collection (for 9.0) (noble)
+
+* SOLR-14702: All references to "master" and "slave" replaced with "leader" and "follower" (MarcusSorealheis, 
+  Erick Erickson, Tomás Fernández Löbbe)
+
+Bug Fixes
+---------------------
+* SOLR-14546: Fix for a relatively hard to hit issue in OverseerTaskProcessor that could lead to out of order execution
+  of Collection API tasks competing for a lock (Ilan Ginzburg).
+
+==================  8.7.0 ==================
+
+Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
+
+New Features
+---------------------
+
+* SOLR-14151 Make schema components load from packages (noble)
+
+* SOLR-14681: Introduce ability to delete .jar stored in the Package Store. (MarcusSorealheis , Mike Drob)
+
+* SOLR-14604: Add the ability to uninstall a package from with the Package CLI. (MarcusSorealheis)
+
+* SOLR-14582: Expose IWC.setMaxCommitMergeWaitMillis in Solr's index config. This is an expert config option that can be
+  set when using a custom MergePolicy (doesn't have any effect on the default MP) (Tomás Fernández Löbbe)
+
+* SOLR-13751: Add BooleanSimilarityFactory class. (Andy Webb via Christine Poerschke)
+
+Improvements
+---------------------
+
+* SOLR-14523: Enhance gradle logging calls validation: eliminate getMessage() (Andras Salamon via Erick Erickson)
+
+* SOLR-14537: Improve performance of ExportWriter. (ab, Joel Bernstein)
+
+* SOLR-14566: Request ID's ('rid') are now added by default to distributed search requests, and can be used to correlate
+  logs from the receiving coordinator node with those from downstream shard requests.  This can be disabled by providing a
+  disableRequestId=true request parameter. (Jason Gerlowski)
+
+* SOLR-14635: ThreadDumpHandler has been enhanced to show lock ownership (hossman)
+
+* SOLR-11262: Add support to stream data out using push APIs when wt=xml (yonik, Munendra S N)
+
+* SOLR-13205: Prevent StringIndexOutOfBoundsException when parsing field names in SolrQueryParserBase
+  (pramodkumar9 via Jason Gerlowski)
+
+* SOLR-14651: The MetricsHistoryHandler can more completely disable itself when you tell it to.
+  Also, it now shuts down more thoroughly. (David Smiley)
+
+Optimizations
+---------------------
+
+* SOLR-14354: HttpShardHandler send requests in async (Cao Manh Dat).
+
+* SOLR-14610: ReflectMapWriter to use MethodHandle instead of old reflection (noble)
+
+* SOLR-13132: JSON Facet perf improvements to support "sweeping" collection of "relatedness()"
+  (hossman, Michael Gibney)
+
+Bug Fixes
+---------------------
+
+* SOLR-11656: TLOG replication doesn't work properly after rebalancing leaders. (Yuki Yano via
+  Erick Erickson)
+
+* SOLR-14516: Fix NPE in JSON response writer(wt=json) with /get when writing non-stored, non-indexed docvalue field
+  from an uncommitted document (noble, Ishan Chattopadhyaya, Munendra S N)
+
+* SOLR-14657: Improve error handling in IndexReader realted metrics that were causing scary ERROR logging
+  if metrics were requested while Solr was in the process of closing/re-opening a new IndexReader. (hossman)
+
+* SOLR-14748: Fix incorrect auth/SSL startup logging (Jason Gerlowski)
+
+* SOLR-14751: Zookeeper Admin screen not working for old ZK versions (janhoy)
+
+* SOLR-14677: Improve DIH termination logic to close all DataSources, EntityProcessors (Jason Gerlowski)
+
+Other Changes
+---------------------
+
+* SOLR-14592: Upgrade Zookeeper to 3.6.1. NOTE: this required upgrading netty to 4.1.50 (Erick Erickson)
+
+* SOLR-10742: SolrCores.getNamesForCore is quite inefficient and blocks other core operations.
+  NOTE: this experimental method has been removed (Erick Erickson)
+
+* SOLR-13939: Extract any non-gradle related patches (deprecations, URL fixes, etc.) from gradle effort. NOTE:
+  this will be in several separate commits/pushes. (Erick Erickson)
+
+* SOLR-14637: Update CloudSolrClient examples to remove deprecated method. (Andras Salamon via Eric Pugh)
+
+* SOLR-14676: Update commons-collections to 4.4 and use it in Solr (Erick Erickson)
+
+* SOLR-11868: Deprecate CloudSolrClient.setIdField, use information from Zookeeper (Erick Erickson)
+
+* SOLR-14641: PeerSync, remove canHandleVersionRanges check (Cao Manh Dat)
+
+==================  8.6.1 ==================
+
+Bug Fixes
+---------------------
+
+* SOLR-14671: Parsing dynamic ZK config sometimes cause NuberFormatException (janhoy)
+
+==================  8.6.0 ==================
+
+Consult the lucene/CHANGES.txt file for additional, low level, changes in this release.
+
+New Features
+---------------------
+* SOLR-14210: HealthCheckHandler can now require that all cores are healthy before returning 'OK'
+  To enable, add &requireHealthyCores=true to enable (janhoy, Houston Putman, shalin)
+
+* SOLR-13942: A read API at /api/cluster/zk/* to fetch raw ZK data and view contents of a ZK directory (noble)
+
+* SOLR-14237: A new panel with security info in admin UI's dashboard (Ishan Chattopadhyaya, Moshe Bla)
+
+* SOLR-12131: ExternalRoleRuleBasedAuthorizationPlugin which gets user's roles from request (janhoy)
+
+* SOLR-14478: Allow the diff Stream Evaluator to operate on the rows of a matrix (Joel Bernstein)
+
+* SOLR-14476: Add percentiles and standard deviation aggregations to stats, facet and
+  timeseries Streaming Expressions (Joel Bernstein)
+
+* SOLR-14470: Add streaming expressions to /export handler. (ab, Joel Bernstein)
+
+* SOLR-14404: CoreContainer level custom requesthandlers (noble)
+
+* SOLR-13749: Join queries can now work cross-collection, even when sharded or when spanning nodes.
+  (Dan Fox, Kevin Watters, via Gus Heck, David Smiley)
+
+* SOLR-14481: Add drill Streaming Expression for efficient and accurate high cardinality aggregation.
+  (Joel Bernstein)
+
+* SOLR-14599: Package manager support for cluster level plugins (see SOLR-14404) (Ishan Chattopadhyaya)
+
+* SOLR-14590: Add support for RankFields. RankFields allow the use of per-document scoring factors in a
+  way that lets Solr skip over non-competitive documents when ranking. See SOLR-13289.
+  (Tomás Fernández Löbbe, Varun Thacker)
+
+Improvements
+---------------------
+* SOLR-14316: Remove unchecked type conversion warning in JavaBinCodec's readMapEntry's equals() method
+  (Aroop Ganguly, Tomás Fernández Löbbe, Noble Paul, Anshum Gupta)
+
+* SOLR-14260: Make SolrJ ConnectionSocketFactory pluggable via SocketFactoryRegistryProvider setting on HttpClientUtil
+  (Andy Throgmorton via David Smiley)
+
+* SOLR-14342: Load cores in an order that makes collections available sooner and reduces leaderVoteWait timeouts in
+  large SolrCloud clusters. (David Smiley)
+
+* SOLR-14329: Add support to choose collapse group to expand in ExpandComponent based on cost (Munendra S N)
+
+* SOLR-14307: User defined "<cache/>" entries in solrconfig.xml now support enabled="true|false" just like
+  core searcher caches. (hossman)
+
+* SOLR-14364: LTR's SolrFeature "fq" now supports PostFilters (e.g. collapse). (David Smiley)
+
+* SOLR-14396: TaggerRequestHandler should not error on an empty index (Trey Grainger)
+
+* SOLR-12845: Add a default autoscaling cluster policy. (shalin, varunthacker, ab)
+
+* SOLR-14433: Metrics: SolrShardReporter's default metrics list now includes TLOG and UPDATE./update (David Smiley)
+
+* SOLR-14423: Move static SolrClientCache from StreamHandler to CoreContainer for wider reuse and better life-cycle management. (ab)
+
+* SOLR-14407: Handle shards.purpose in the postlogs tool (Joel Bernstein)
+
+* SOLR-13325: ComputePlanAction now supports a collection selector of the form `collections: {policy: my_policy}`
+  which can be used to select multiple collections that match collection property/value pairs. This is useful to
+  maintain a whitelist of collections for which actions are taken without needing to hard code the collection names
+  themselves. The collection hints are pushed down to the policy engine so operations for non-matching collections
+  are not computed at all. (ab, shalin)
+
+* SOLR-14419: json.queries as well as other parameters might be referred via {"param":"ref"} in Query DSL (Mikhail Khludnev)
+
+* SOLR-11334: hl.fl and tv.fl now parse field lists when they have both commas and spaces
+  (David Smiley, Yasufumi Mizoguchi)
+
+* SOLR-14442: bin/solr and bin\solr.cmd invoke jstack <SOLR_PID> before forceful termination, if jstack is available.
+  Also, bin\solr.cmd executes forceful termination even port is unbinded  already (Christine Poerschke via Mikhail Khludnev).
+
+* SOLR-14384: SolrRequestInfo now stacks internally when a new request is set/clear'ed.
+  Also fixes SolrIndexSearcher.warm which should have re-instated previous SRI.
+  (Nazerke Seidan, David Smiley)
+
+* SOLR-14561: CoreAdminAPI's parameters instanceDir and dataDir are now validated, and must be relative to either
+  SOLR_HOME, SOLR_DATA_HOME or coreRootDir. Added new solr.xml config 'allowPaths', controlled by system property
+  'solr.allowPaths' that allows you to add other allowed paths when needed.
+
+* SOLR-13286: Metrics will no longer write a (sometimes large) log message every minute. This can be re-enabled
+  via log4j2.xml if desired, or other HttpSolrCall log messages may be quieted on a per handler basis. (Gus Heck)
+
+* SOLR-14539: Introducing {!bool excludeTags=...} for Query DSL. (Mikhail Khludnev)
+
+Optimizations
+---------------------
+* SOLR-8306: Do not collect expand documents when expand.rows=0 (Marshall Sanders, Amelia Henderson)
+
+* SOLR-14340: Remove unnecessary configset verification checks when SolrCloud merely wants to know which configset a
+  collection is using.  Improves CLUSTERSTATUS times for massive clusters.  (Mathieu Marie, David Smiley)
+
+* SOLR-14365: CollapsingQParser - Avoiding always allocate int[] and float[] with size equals to number of unique values.
+  (Cao Manh Dat)
+
+* SOLR-14376: Optimize filter queries that match all docs. (David Smiley)
+
+* LUCENE-7788: fail precommit on unparameterised log messages and examine for wasted work/objects (Erick Erickson)
+
+* SOLR-13289: When the "minExactCount" parameters is provided in queries and it's value is lower than the number of hits,
+  Solr can speedup the query resolution by using the Block-Max WAND algorithm (see LUCENE-8135). When doing this, the
+  value of matching documents in the response (numFound) will be an approximation.
+  (Ishan Chattopadhyaya, Munendra S N, Tomás Fernández Löbbe, David Smiley)
+
+* SOLR-14472: Autoscaling "cores" preference now retrieves the core count more efficiently, and counts all cores.
+  (David Smiley)
+
+* SOLR-14552: Add BlockMax-WAND support to ReRank queries (Tomás Fernández Löbbe)
+
+* SOLR-14554: Add BlockMax-WAND support for queries where the score is requested (Tomás Fernández Löbbe)
+
+* SOLR-14634: Limit the HTTP security headers to "/solr" end point (noble)
+
+Bug Fixes
+---------------------
+* SOLR-13264: IndexSizeTrigger aboveOp / belowOp properties not in valid properties.
+  (Christine Poerschke, ab)
+
+* SOLR-13199: Return proper error when invalid parentFilter is passed in ChildDocTransformer
+  (Johannes Kloos, Munendra S N, David Smiley, Mikhail Khludnev)
+
+* SOLR-14347: Autoscaling placement wrong when concurrent replica placements are calculated. (ab)
+
+* SOLR-14128: Improve distributed locking around managed schema upgrade process. (ab)
+
+* SOLR-14302: Ensure Solr always includes the stacktrace for exceptions by using '-OmitStackTraceInFastThrow'
+  (hossman)
+
+* SOLR-14317: HttpClusterStateProvider throws exception when only one node down. (Lyle Wang via Ishan Chattopadhyaya)
+
+* SOLR-14356: PeerSync should not fail with SocketTimeoutException from hanging nodes (Cao Manh Dat)
+
+* SOLR-14402: Avoid creating new exceptions for every request made to MDCAwareThreadPoolExecutor by distributed search.
+  This is a fix for incomplete optimization made by SOLR-11880 in Solr 7.4 which fixed distributed updates but not
+  distributed search. (shalin)
+
+* SOLR-14291: Handle dotted fields in legacy Analytics Component (Anatolii Siuniaev via Mikhail Khludnev)
+
+* SOLR-14371: Zk StatusHandler now parse dynamic zk server config if supported, fixing Admin UI Zookeeper Status
+  screen in case dynamic reconfig host list differs from static zkHost string (janhoy)
+
+* SOLR-14421: New examples in solr.in.cmd in Solr 8.5 don't work as provided (Colvin Cowie via janhoy)
+
+* SOLR-14431: SegmentsInfoRequestHandler does not release IndexWriter (Tiziano Degaetano, ab)
+
+* SOLR-14463: Solr Admin ZkStatus page now works with ZK 3.6, without 'For input string: "null"' error (janhoy, Bernd Wahlen)
+
+* SOLR-14456: Fix Content-Type header usage when a request is forwarded from Solr node to Solr
+  node with compression enabled (samuelgmartinez via Houston Putman)
+
+* SOLR-8394: /admin/luke was always showing 0 for indexHeapUsageBytes. It should work now.
+  (Steve Molloy, Isabelle Giguere, David Smiley)
+
+* SOLR-14492: Fix ArrayIndexOutOfBoundsException in json.facet 'terms' when FacetFieldProcessorByHashDV is
+  used with aggregations over multivalued numeric fields (hossman)
+
+* SOLR-14477: Fix incorrect 'relatedness()' calculations in json.facet 'terms' when 'prefix' option is used
+  (hossman)
+
+* SOLR-14504: ZkController LiveNodesListener has NullPointerException in startup race.
+  (Colvin Cowie via ab)
+
+* SOLR-14498: Upgrade to Caffeine 2.8.4, which fixes the cache poisoning issue. (Jakub Zytka, ab)
+
+* SOLR-14517: Dont ignore 'mm' localparam on edismax queries using operators (Yuriy Koval via Jason Gerlowski)
+
+* SOLR-14491: Intercepting internode requests in KerberosPlugin when HTTP/2 client is used (Ishan Chattopadhyaya, Moshe Bla)
+
+* SOLR-14525: SolrCoreAware, ResourceLoaderAware should be honored for plugin loaded from packages (noble)
+
+* SOLR-9679: When removing zk node /security.json, security is now disabled gracefully (janhoy)
+
+* SOLR-14520: Fixed server errors from the json.facet allBuckets:true option when combined with refine:true
+  (Michael Gibney, hossman)
+
+* SOLR-14467: Fix relatedness() stat in json.facets to no longer cause server errors (or nonsense results)
+  when combined with allBuckets:true.  (Michael Gibney, hossman)
+
+* SOLR-13203: Return 400 status code on invalid dynamic field for Edismax's user Fields
+  (Johannes Kloos, mrsoong via Munendra S N)
+
+* SOLR-14550: Fix duplicates issue in Atomic updates with add-distinct (Thomas Corthals, Munendra S N)
+
+* SOLR-14345: Return proper error message when non-BinaryResponseParser is used in solrJ (Munendra S N)
+
+* SOLR-14516: NPE in JsonTextWriter (noble)
+
+* SOLR-14577: Return 400 BAD REQUEST when field is missing on a Terms query parser request
+  (Tomás Fernández Löbbe)
+
+* SOLR-14409: Existing violations allow bypassing policy rules when adding new replicas (noble, ab)
+
+* SOLR-14584: Correct SOLR_SSL_KEY_STORE and SOLR_SSL_TRUST_STORE example comments in solr.in.sh and solr.in.cmd files
+  (Aren Cambre via Christine Poerschke)
+
+* SOLR-14628: hl.fragsizeIsMinimum now defaults to true, thus fragments size like previous to Solr 8.5 and addresses a
+  significant performance regression. (David Smiley, Michal Hlavac)
+
+Other Changes
+---------------------
+* SOLR-14197: SolrResourceLoader: marked many methods as deprecated, and in some cases rerouted exiting logic to avoid
+  them. (David Smiley)
+
+* SOLR-14312: Upgrade Zookeeper to 3.5.7 (Erick Erickson)
+
+* SOLR-14296: Update netty to 4.1.46 (Andras Solaman via Erick Erickson)
+
+* SOLR-10157: Improve error messages when unknown aggregations are specified in the request (hossman, Munendra S N)
+
+* SOLR-13944: Remove redundant checks in SpellCheckCollator and add tests for spellcheck with collapse
+  (Stefan, Munendra S N, Tomas Eduardo Fernandez Lobbe)
+
+* SOLR-12353: SolrDispatchFilter expensive non-conditional debug line degrades performance (Pascal Proulx via Erick Erickson)
+
+* SOLR-13842: Remove redundant defaults from ImplicitPlugins.json (Munendra S N)
+
+* SOLR-13893: BlobRepository reads max jar size from `runtime.lib.size` system property. Old `runtme.lib.size` is Deprecated
+  (Erick Erickson, Kesharee Nandan Vishwakarma, Munendra S N)
+
+* SOLR-14367: Upgrade Tika to 1.24 (Mibo via Erick Erickson)
+
+* SOLR-14351: Hardened MDC logging; sometimes info was absent (David Smiley)
+
+* SOLR-14386: Update Jetty to 9.4.27 and dropwizard-metrics version to 4.1.5 (Erick Erickson)
+
+* SOLR-9909: 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. (Andras Salamon, shalin)
+
+* SOLR-14391: Removed internal-ish ScoreFilter marker interface; only used by {!collapse}.  Removed needless code in
+  SolrIndexSearcher.getDocSet(List<Query>) (processes some filter queries).  (David Smiley)
+
+* SOLR-13886: HDFSSyncSliceTest and SyncSliceTest started failing frequently (Kevin Risden)
+
+* SOLR-14173: Major redesign of the Solr Reference Guide (Cassandra Targett)
+
+* SOLR-14461: Replaced commons-fileupload dependency with using Jetty's facilities. (David Smiley)
+
+* SOLR-14466: Upgrade log4j2 to latest release (2.13.2) (Erick Erickson)
+
+* SOLR-11934: Visit Solr logging, it's too noisy. Note particularly that the messages for
+  opening a new searcher have changed and include the autowarm time. (Erick Erickson)
+
+* SOLR-7880: Update commons-cli to 1.4 (Erick Erickson)
+
+* SOLR-14226: Fix or suppress 14 resource leak warnings in apache/solr/core (Andras Salaman via
+  Erick Erickson)
+
+* SOLR-14482: Fix or suppress warnings in solr/search/facet (Erick Erickson)
+
+* SOLR-14485: Fix or suppress 11 resource leak warnings in apache/solr/cloud (Andras Salaman via
+  Erick Erickson)
+
+* SOLR-14495: Fix or suppress warnings in solr/search/function (Erick Erickson)
+
+* SOLR-14280: Improve error reporting in SolrConfig (Andras Salamon via Jason Gerlowski)
+
+* SOLR-14474: Fix remaining auxilliary class warnings in Solr (Erick Erickson)
+
+* SOLR-14519: Fix or suppress warnings in solr/cloud/autoscaling/ (Erick Erickson)
+
+* SOLR-14526: fix or suppress warnings in apache/solr/core (Erick Erickson)
+
+* SOLR-14533: Fix or suppress warnings in solr/handler/admin (Andras Salamon, Erick Erickson)
+
+* SOLR-14535: Fix or suppress warnings in apache/solr/handler/component (Erick Erickson)
+
+* SOLR-14538: Fix or suppress remaining warnings in apache/solr/handler (Erick Erickson)
+
+* SOLR-14536: Fix or suppress warnings in apache/solr/common (Erick Erickson)
+
+* SOLR-14480: Fix or suppress warnings in solr/cloud/api (Erick Erickson)
+
+* SOLR-13492: Ensure explicit GCs are concurrent by adding '+ExplicitGCInvokesConcurrent'.
+  (Guna Sekhar Dora, Shawn Heisey, Munendra S N)
+
+* SOLR-14542: Fix or suppress warnings in solr/handler/dataimport (Erick Erickson)
+
+* SOLR-14544: Fix or suppress warnings in solr/client/solrj/io/eval (Erick Erickson)
+
+* SOLR-14543: Fix or suppress warnings in apache/solr/search (Erick Erickson)
+
+* SOLR-14545: Fix or suppress warnings in apache/solr/update (Erick Erickson)
+
+* SOLR-14548: Address warning: static member should be qualified by type name (Mike Drob)
+
+* SOLR-14547: Fix or suppress warnings in solr/client/solrj/io/stream (Erick Erickson)
+
+* SOLR-14455: Fix or suppress warnings in solr/test-framework (Erick Erickson)
+
+* SOLR-14559: Fix or suppress warnings in solr/core/src/java/org/apache/solr/util,
+  response, cloud, security, schema, api (Erick Erickson)
+
+* SOLR-14563: Fix or suppress warnings in solr/contrib (Erick Erickson)
+
+* SOLR-14565: Fix or suppress warnings in solrj/impl and solrj/io/graph (Erick Erickson)
+
+* SOLR-14564: Fix or suppress remaining warnings in solr/core (Erick Erickson)
+
+* SOLR-14567: Fix or suppress remaining warnings in solrj (Erick Erickson)
+
+* SOLR-14556: Fix or suppress warnings in solrj/cloud/autoscaling (Erick Erickson)
+
+* SOLR-14573: Fix or suppress warnings in solrj/src/test (Erick Erickson)
+
+* SOLR-14574: Fix or suppress warnings in solr/core/src/test (parts 1 and 2) (Erick Erickson)
+
+* SOLR-13268: Clean up any test failures resulting from defaulting to async logging (Erick Erickson)
+
+* LUCENE-9411: Fail complation on warnings, 9x gradle-only (Erick Erickson, Dawid Weiss)
+  Only mentioned in 8.6 because I backported some more warning suppressions but not
+  the fail-on-warnings.
+
+* SOLR-14589: Remove IntelliJ //noinspection comments (Erick Erickson)
+
+* SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings
+  (gezapeti, Ilan Ginsburg, Erick Erickson)
+
+* SOLR-14022: Deprecate CDCR (Joel Bernstein, Ishan Chattopadhyaya)
+
+* SOLR-14066: Data Import Handler is deprecated. It is scheduled to be removed as of 9.0 and a community supported
+  package for the same may now be used instead. (Ishan Chattopadhyaya, janhoy)
+
+* SOLR-14021: HDFS support is deprecated. It is scheduled to be removed as of 9.0. Please see JIRA for more details.
+  (Joel Bernstein, Ishan Chattopadhyaya)
+
+* SOLR-14603: Upgrade Restlet to 2.4.3 (marcussorealheis)
+
+==================  8.5.2 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Bug Fixes
+---------------------
+
+* SOLR-14411: Fix Admin UI collection/core drop-downs placeholder text. Completes work started in SOLR-14359 (janhoy)
+
+* SOLR-14471: Fix bug in shards.preference behavior, base replica selection strategy not applied to the last group of
+  equivalent replicas. (Michael Gibney via Tomás Fernández Löbbe)
+
+==================  8.5.1 ==================
+
+Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
+
+Bug Fixes
+---------------------
+
+* SOLR-14359: Admin UI collection/core drop-downs had wrong placeholder text. Fixed by upgrading angular-chosen
+  This fix was incomplete, see SOLR-14411 for the followup (janhoy)
+
 ==================  8.5.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
 
 New Features
 ---------------------
- * SOLR-12490: Introducing json.queries in JSON Request API. Every property of this object holds one or many named 
-   Query DSL queries. It's optional and doesn't impact response without explicit referencing these queries by names 
+* SOLR-12490: Introducing json.queries in JSON Request API. Every property of this object holds one or many named
+   Query DSL queries. It's optional and doesn't impact response without explicit referencing these queries by names
    (Anatolii Siuniaev via Mikhail Khludnev)
 
- * SOLR-14130: Add postlogs command line tool for indexing Solr logs (Joel Bernstein)
+* SOLR-14130: Add postlogs command line tool for indexing Solr logs (Joel Bernstein)
 
- * SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
+* SOLR-13749: New cross collection join filter (XCJF) (Dan Fox, Kevin Watters, via Gus Heck)
 
- * SOLR-13892: New "top-level" docValues join implementation (Jason Gerlowski, Joel Bernstein)
+* SOLR-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)
 
- * SOLR-12325: Introducing uniqueBlock({!v=type:parent}) aggregation (Anatolii Siuniaev via Mikhail Khludnev)
+* SOLR-14241: New delete() Stream Decorator (hossman)
 
- * SOLR-14242: HdfsDirectory now supports indexing geo-points, ranges or shapes. (Adrien Grand)
+* SOLR-14139: Support backtick phrase queries in Streaming Expressions (Joel Bernstein)
 
- * SOLR-14241: New delete() Stream Decorator (hossman)
-
- * SOLR-13965: In GraphHandler, support <expressible> configuration and deprecate <streamFunctions> configuration.
-   (Eric Pugh via Christine Poerschke)
+* SOLR-12238: Synonyms can be individually boosted by marking them with '|<boost>' in
+  the synonyms file, and adding a DelimitedBoostTokenFilter to the analysis chain
+  (Alessandro Benedetti, Alan Woodward)
 
 Improvements
 ---------------------
@@ -88,8 +613,6 @@ Improvements
 * SOLR-13984: Java's SecurityManager sandbox can be enabled via environment variable,
   SOLR_SECURITY_MANAGER_ENABLED=true. (rmuir)
 
-* SOLR-13808: filter in BoolQParser and {"bool":{"filter":..}} in Query DSL are cached by default (Mikhail Khludnev)
-
 * SOLR-14129: Reuse Jackson ObjectMapper in AuditLoggerPlugin (janhoy)
 
 * LUCENE-9093: The Unified highlighter has two new passage sizing parameters, hl.fragAlignRatio and
@@ -111,13 +634,18 @@ Improvements
 
 * SOLR-14270: export command to have an option to write to a zip file (noble)
 
-* SOLR-14114: Add WARN to Solr log that embedded ZK is not supported in production (janhoy)
-
 * SOLR-14286: Upgrade Jaegar to 1.1.0 (Cao Manh Dat)
 
 * SOLR-14281: Make sharedLib configurable through system property. Also allow multiple paths, separated by comma.
   See Reference Guide 'format-of-solr-xml.adoc' and comment in 'solr.in.sh' for details (janhoy)
 
+* SOLR-13892: New "top-level" docValues join implementation (Jason Gerlowski, Joel Bernstein)
+
+* SOLR-14242: HdfsDirectory now supports indexing geo-points, ranges or shapes. (Adrien Grand)
+
+* SOLR-13965: In GraphHandler, support <expressible> configuration and deprecate <streamFunctions> configuration.
+   (Eric Pugh via Christine Poerschke)
+
 Optimizations
 ---------------------
 
@@ -126,6 +654,8 @@ Optimizations
   terms queries that are searching 500 or more terms.  Users wishing to ignore this heuristic can choose the
   docValuesTermsFilterTopLevel or docValuesTermsFilterPerSegment methods directly. (Jason Gerlowski, Joel Bernstein, David Smiley)
 
+* SOLR-13808: filter in BoolQParser and {"bool":{"filter":..}} in Query DSL are cached by default (Mikhail Khludnev)
+
 * SOLR-14040: The shareSchema solr.xml option now supports SolrCloud.  shareSchema is useful when you have many
   cores per node and large schemas.  (David Smiley)
 
@@ -194,6 +724,10 @@ Bug Fixes
 
 * SOLR-14287: Admin UI Properties screen does not show colons (janhoy)
 
+* SOLR-14299: IndexFetcher doesn't reset error count to 0 after the last packet is received (Pushkar Raste via Mike Drob)
+
+* SOLR-14073: Fix segment look ahead NPE in CollapsingQParserPlugin (Joel Bernstein)
+
 Other Changes
 ---------------------
 
@@ -228,6 +762,11 @@ Other Changes
 
 * SOLR-10306: Document in Reference Guide how to disable or reduce swapping (janhoy)
 
+* SOLR-13983: Process execution is removed from SystemInfoHandler. A best-effort attempt to
+execute `uname -a` and "`uptime`" on non-Windows platforms is no longer made. (rmuir)
+
+* SOLR-14114: Add WARN to Solr log that embedded ZK is not supported in production (janhoy)
+
 ==================  8.4.1 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
@@ -2442,7 +2981,7 @@ Upgrade Notes
   start scripts will no longer attempt this nor move existing console or GC logs into logs/archived either (SOLR-12144).
 
 * SOLR-11673: Slave doesn't commit empty index when completely new index is detected on master during replication.
-  To return the previous behavior pass false to skipCommitOnMasterVersionZero in slave section of replication
+  To return the previous behavior pass false to skipCommitOnLeaderVersionZero in slave section of replication
   handler configuration, or pass it to the fetchindex command.
 
 * SOLR-11453: Configuring slowQueryThresholdMillis now logs slow requests to a separate file - solr_slow_requests.log.
@@ -2602,7 +3141,7 @@ Bug Fixes
 * SOLR-12155: Exception from UnInvertedField constructor puts threads to infinite wait.
  (Andrey Kudryavtsev, Mikhail Khludnev)
 
-* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnMasterRestart(): handle unexpected replication failures
+* SOLR-12201: TestReplicationHandler.doTestIndexFetchOnLeaderRestart(): handle unexpected replication failures
   (Steve Rowe)
 
 * SOLR-12190: Need to properly escape output in GraphMLResponseWriter. (yonik)
@@ -3238,7 +3777,7 @@ Other Changes
 * SOLR-12067: Increase autoAddReplicas default 30 second wait time to 120 seconds.
   (Varun Thacker, Mark Miller via shalin)
 
-* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnMasterRestart that happened
+* SOLR-12078: Fixed reproducable Failure in TestReplicationHandler.doTestIndexFetchOnLeaderRestart that happened
   due to using stale http connections. (Gus Heck, shalin)
 
 * SOLR-12099: Remove reopenReaders attribute from 'IndexConfig in SolrConfig' page in ref guide. (shalin)
@@ -6577,8 +7116,8 @@ Other Changes
   (David Smiley)
 
 * SOLR-8842: security rules made more foolproof by asking the requesthandler  about the well known
-  permission name.
  The APIs are also modified to ue 'index' as the unique identifier instead of name.
-  Name is an optional attribute
  now and only to be used when specifying well-known permissions (noble)
+  permission name.  The APIs are also modified to ue 'index' as the unique identifier instead of name.
+  Name is an optional attribute  now and only to be used when specifying well-known permissions (noble)
 
 * SOLR-5616: Simplifies grouping code to use ResponseBuilder.needDocList() to determine if it needs to
   generate a doc list for grouped results. (Steven Bower, Keith Laban, Dennis Gove)
diff --git a/solr/NOTICE.txt b/solr/NOTICE.txt
index c3213f8..f60d6b4 100644
--- a/solr/NOTICE.txt
+++ b/solr/NOTICE.txt
@@ -49,7 +49,7 @@ Copyright (C) 2010-2014 James Burke, https://github.com/jrburke/requirejs
 This product includes angular-utf8-base64.js Javascript library created by Andrey Bezyazychniy
 Copyright (c) 2014 Andrey Bezyazychniy, https://github.com/stranger82/angular-utf8-base64
 
-This product includes code copied and modified from the www-authenticate Javascript library 
+This product includes code copied and modified from the www-authenticate Javascript library
 Copyright (c) 2013 Randy McLaughlin, MIT-license, https://github.com/randymized/www-authenticate
 
 This product includes fugue icons created by Yusuke Kamiyamane
@@ -76,10 +76,6 @@ the Apache Blur incubating project and are Apache License 2.0.
 ASM (Java bytecode manipulation and analysis framework): http://asm.ow2.org/
 Copyright (c) 2000-2005 INRIA, France Telecom
 
-This project includes portions of the Jekyll Documentation Theme
-Copyright (c) 2016 Tom Johnson
-License: MIT https://github.com/tomjohnson1492/documentation-theme-jekyll/blob/gh-pages/licenses/LICENSE
-
 This project includes templates from the Asciidoctor HTML5 backend converter
 Copyright (c) 2014-2018 Jakub Jirutka
 License: MIT https://github.com/jirutka/asciidoctor-html5s/blob/master/LICENSE
@@ -88,6 +84,10 @@ This project includes the Navgoco JQuery plugin
 Copyright (c) 2013 Christopher Tsoulloftas, http://www.komposta.net
 License: BSD https://github.com/tefra/navgoco/blob/master/LICENSE-BSD
 
+This project includes the Malihu Custom Scrollbar Plugin
+Copyright (c) Manos Malihutsakis, http://manos.malihu.gr/
+License: MIT https://github.com/malihu/malihu-custom-scrollbar-plugin/blob/master/LICENSE.txt
+
 =========================================================================
 ==  Antlr2 Notice                                                       ==
 =========================================================================
@@ -160,6 +160,11 @@ http://bitbucket.org/jpbarrette/moman/overview/
 The class org.apache.lucene.util.WeakIdentityMap was derived from
 the Apache CXF project and is Apache License 2.0.
 
+The class org.apache.lucene.util.compress.LZ4 is a Java rewrite of the LZ4
+compression library (https://github.com/lz4/lz4/tree/dev/lib) that is licensed
+under the 2-clause BSD license.
+(https://opensource.org/licenses/bsd-license.php)
+
 The Google Code Prettify is Apache License 2.0.
 See http://code.google.com/p/google-code-prettify/
 
diff --git a/solr/README.md b/solr/README.md
new file mode 100644
index 0000000..66e2fff
--- /dev/null
+++ b/solr/README.md
@@ -0,0 +1,217 @@
+<!--
+  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.
+-->
+
+Welcome to the Apache Solr project!
+-----------------------------------
+
+Solr is the popular, blazing fast open source enterprise search platform
+from the Apache Lucene project.
+
+For a complete description of the Solr project, team composition, source
+code repositories, and other details, please see the Solr web site at
+https://lucene.apache.org/solr
+
+
+Getting Started
+---------------
+
+To start Solr for the first time after installation, simply do:
+
+```
+  bin/solr start
+```
+
+This will launch a standalone Solr server in the background of your shell,
+listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
+which allows you to scale out using sharding and replication. To launch Solr
+in cloud mode, do:
+
+```
+  bin/solr start -cloud
+```
+
+To see all available options for starting Solr, please do:
+
+```
+  bin/solr start -help
+```
+
+After starting Solr, create either a core or collection depending on whether
+Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
+
+```
+  bin/solr create -c <name>
+```
+
+This will create a collection that uses a data-driven schema which tries to guess
+the correct field type when you add documents to the index. To see all available
+options for creating a new collection, execute:
+
+```
+  bin/solr create -help
+```
+
+After starting Solr, direct your Web browser to the Solr Admin Console at:
+
+```
+  http://localhost:8983/solr/
+```
+
+When finished with your Solr installation, shut it down by executing:
+
+```
+  bin/solr stop -all
+```
+
+The `-p PORT` option can also be used to identify the Solr instance to shutdown,
+where more than one Solr is running on the machine.
+
+
+Solr Examples
+---------------
+
+Solr includes a few examples to help you get started. To run a specific example, do:
+
+```
+  bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
+
+    cloud        : SolrCloud example
+    dih          : Data Import Handler (rdbms, mail, atom, tika)
+    schemaless   : Schema-less example (schema is inferred from data during indexing)
+    techproducts : Kitchen sink example providing comprehensive examples of Solr features
+```
+
+For instance, if you want to run the Solr Data Import Handler example, do:
+
+```
+  bin/solr -e dih
+```
+
+Indexing Documents
+---------------
+
+To add documents to the index, use bin/post.  For example:
+
+```
+     bin/post -c <collection_name> example/exampledocs/*.xml
+```
+
+For more information about Solr examples please read...
+
+ * [example/README.md](example/README.md)
+   
+For more information about the "Solr Home" and Solr specific configuration
+ 
+ * https://lucene.apache.org/solr/guide/solr-tutorial.html
+   
+For a Solr tutorial
+ 
+ * https://lucene.apache.org/solr/resources.html
+
+For a list of other tutorials and introductory articles.
+
+or linked from "docs/index.html" in a binary distribution.
+
+Also, there are Solr clients for many programming languages, see
+
+  * https://wiki.apache.org/solr/IntegratingSolr
+
+
+Files included in an Apache Solr binary distribution
+----------------------------------------------------
+
+```
+server/
+  A self-contained Solr instance, complete with a sample
+  configuration and documents to index. Please see: bin/solr start -help
+  for more information about starting a Solr server.
+
+example/
+  Contains example documents and an alternative Solr home
+  directory containing examples of how to use the Data Import Handler,
+  see example/example-DIH/README.md for more information.
+
+dist/solr-<component>-XX.jar
+  The Apache Solr libraries.  To compile Apache Solr Plugins,
+  one or more of these will be required.  The core library is
+  required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
+  for more information).
+
+docs/index.html
+  A link to the online version of Apache Solr Javadoc API documentation and Tutorial
+```
+
+Instructions for Building Apache Solr from Source
+-------------------------------------------------
+
+1. Download the Java 11 JDK (Java Development Kit) or later from https://jdk.java.net/
+   You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
+   folder included on your command path. To test this, issue a "java -version" command
+   from your shell (command prompt) and verify that the Java version is 11 or later.
+
+2. Download the Apache Ant binary distribution (1.8.2+) from
+   http://ant.apache.org/  You will need Ant installed and the $ANT_HOME/bin (Windows:
+   %ANT_HOME%\bin) folder included on your command path. To test this, issue a
+   "ant -version" command from your shell (command prompt) and verify that Ant is
+   available.
+
+   You will also need to install Apache Ivy binary distribution (2.2.0) from
+   http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
+   this step, the Solr build system will offer to do it for you.
+
+3. Download the Apache Solr distribution, linked from the above web site.
+   Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
+   Alternately, you can obtain a copy of the latest Apache Solr source code
+   directly from the GIT repository:
+
+     https://lucene.apache.org/solr/versioncontrol.html
+
+4. Navigate to the "solr" folder and issue an "ant" command to see the available options
+   for building, testing, and packaging Solr.
+
+   NOTE:
+   To see Solr in action, you may want to use the "ant server" command to build
+   and package Solr into the server directory. See also server/README.md.
+
+
+Export control
+-------------------------------------------------
+This distribution includes cryptographic software.  The country in
+which you currently reside may have restrictions on the import,
+possession, use, and/or re-export to another country, of
+encryption software.  BEFORE using any encryption software, please
+check your country's laws, regulations and policies concerning the
+import, possession, or use, and re-export of encryption software, to
+see if this is permitted.  See <http://www.wassenaar.org/> for more
+information.
+
+The U.S. Government Department of Commerce, Bureau of Industry and
+Security (BIS), has classified this software as Export Commodity
+Control Number (ECCN) 5D002.C.1, which includes information security
+software using or performing cryptographic functions with asymmetric
+algorithms.  The form and manner of this Apache Software Foundation
+distribution makes it eligible for export under the License Exception
+ENC Technology Software Unrestricted (TSU) exception (see the BIS
+Export Administration Regulations, Section 740.13) for both object
+code and source code.
+
+The following provides more details on the included cryptographic
+software:
+
+Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
+extracting text content and metadata from encrypted PDF files.
+See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr/README.txt b/solr/README.txt
deleted file mode 100644
index 80d26d5..0000000
--- a/solr/README.txt
+++ /dev/null
@@ -1,189 +0,0 @@
-# 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.
-
-
-Welcome to the Apache Solr project!
------------------------------------
-
-Solr is the popular, blazing fast open source enterprise search platform
-from the Apache Lucene project.
-
-For a complete description of the Solr project, team composition, source
-code repositories, and other details, please see the Solr web site at
-http://lucene.apache.org/solr
-
-
-Getting Started
----------------
-
-To start Solr for the first time after installation, simply do:
-
-  bin/solr start
-
-This will launch a standalone Solr server in the background of your shell,
-listening on port 8983. Alternatively, you can launch Solr in "cloud" mode,
-which allows you to scale out using sharding and replication. To launch Solr
-in cloud mode, do:
-
-  bin/solr start -cloud
-
-To see all available options for starting Solr, please do:
-
-  bin/solr start -help
-
-After starting Solr, create either a core or collection depending on whether
-Solr is running in standalone (core) or SolrCloud mode (collection) by doing:
-
-  bin/solr create -c <name>
-
-This will create a collection that uses a data-driven schema which tries to guess
-the correct field type when you add documents to the index. To see all available
-options for creating a new collection, execute:
-
-  bin/solr create -help
-
-After starting Solr, direct your Web browser to the Solr Admin Console at:
-
-  http://localhost:8983/solr/
-
-When finished with your Solr installation, shut it down by executing:
-
-  bin/solr stop -all
-
-The `-p PORT` option can also be used to identify the Solr instance to shutdown,
-where more than one Solr is running on the machine.
-
-
-Solr Examples
----------------
-
-Solr includes a few examples to help you get started. To run a specific example, do:
-
-  bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:
-
-    cloud        : SolrCloud example
-    dih          : Data Import Handler (rdbms, mail, atom, tika)
-    schemaless   : Schema-less example (schema is inferred from data during indexing)
-    techproducts : Kitchen sink example providing comprehensive examples of Solr features
-
-For instance, if you want to run the Solr Data Import Handler example, do:
-
-  bin/solr -e dih
-
-
-Indexing Documents
----------------
-
-To add documents to the index, use bin/post.  For example:
-
-     bin/post -c <collection_name> example/exampledocs/*.xml
-
-For more information about Solr examples please read...
-
- * example/README.txt
-   For more information about the "Solr Home" and Solr specific configuration
- * https://lucene.apache.org/solr/guide/solr-tutorial.html
-   For a Solr tutorial
- * http://lucene.apache.org/solr/resources.html
-   For a list of other tutorials and introductory articles.
-
-or linked from "docs/index.html" in a binary distribution.
-
-Also, there are Solr clients for many programming languages, see
-   http://wiki.apache.org/solr/IntegratingSolr
-
-
-Files included in an Apache Solr binary distribution
-----------------------------------------------------
-
-server/
-  A self-contained Solr instance, complete with a sample
-  configuration and documents to index. Please see: bin/solr start -help
-  for more information about starting a Solr server.
-
-example/
-  Contains example documents and an alternative Solr home
-  directory containing examples of how to use the Data Import Handler,
-  see example/example-DIH/README.txt for more information.
-
-dist/solr-<component>-XX.jar
-  The Apache Solr libraries.  To compile Apache Solr Plugins,
-  one or more of these will be required.  The core library is
-  required at a minimum. (see http://wiki.apache.org/solr/SolrPlugins
-  for more information).
-
-docs/index.html
-  A link to the online version of Apache Solr Javadoc API documentation and Tutorial
-
-
-Instructions for Building Apache Solr from Source
--------------------------------------------------
-
-1. Download the Java 11 JDK (Java Development Kit) or later from https://jdk.java.net/
-   You will need the JDK installed, and the $JAVA_HOME/bin (Windows: %JAVA_HOME%\bin)
-   folder included on your command path. To test this, issue a "java -version" command
-   from your shell (command prompt) and verify that the Java version is 11 or later.
-
-2. Download the Apache Ant binary distribution (1.8.2+) from
-   http://ant.apache.org/  You will need Ant installed and the $ANT_HOME/bin (Windows:
-   %ANT_HOME%\bin) folder included on your command path. To test this, issue a
-   "ant -version" command from your shell (command prompt) and verify that Ant is
-   available.
-
-   You will also need to install Apache Ivy binary distribution (2.2.0) from
-   http://ant.apache.org/ivy/ and place ivy-2.2.0.jar file in ~/.ant/lib -- if you skip
-   this step, the Solr build system will offer to do it for you.
-
-3. Download the Apache Solr distribution, linked from the above web site.
-   Unzip the distribution to a folder of your choice, e.g. C:\solr or ~/solr
-   Alternately, you can obtain a copy of the latest Apache Solr source code
-   directly from the GIT repository:
-
-     http://lucene.apache.org/solr/versioncontrol.html
-
-4. Navigate to the "solr" folder and issue an "ant" command to see the available options
-   for building, testing, and packaging Solr.
-
-   NOTE:
-   To see Solr in action, you may want to use the "ant server" command to build
-   and package Solr into the server directory. See also server/README.txt.
-
-
-Export control
--------------------------------------------------
-This distribution includes cryptographic software.  The country in
-which you currently reside may have restrictions on the import,
-possession, use, and/or re-export to another country, of
-encryption software.  BEFORE using any encryption software, please
-check your country's laws, regulations and policies concerning the
-import, possession, or use, and re-export of encryption software, to
-see if this is permitted.  See <http://www.wassenaar.org/> for more
-information.
-
-The U.S. Government Department of Commerce, Bureau of Industry and
-Security (BIS), has classified this software as Export Commodity
-Control Number (ECCN) 5D002.C.1, which includes information security
-software using or performing cryptographic functions with asymmetric
-algorithms.  The form and manner of this Apache Software Foundation
-distribution makes it eligible for export under the License Exception
-ENC Technology Software Unrestricted (TSU) exception (see the BIS
-Export Administration Regulations, Section 740.13) for both object
-code and source code.
-
-The following provides more details on the included cryptographic
-software:
-    Apache Solr uses the Apache Tika which uses the Bouncy Castle generic encryption libraries for
-    extracting text content and metadata from encrypted PDF files.
-    See http://www.bouncycastle.org/ for more details on Bouncy Castle.
diff --git a/solr/bin/solr b/solr/bin/solr
index 11f5081..7e3cf0c6 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -103,10 +103,17 @@ fi
 
 if [ -n "$SOLR_JAVA_HOME" ]; then
   JAVA="$SOLR_JAVA_HOME/bin/java"
+  JSTACK="$SOLR_JAVA_HOME/bin/jstack"
 elif [ -n "$JAVA_HOME" ]; then
-  for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do
-    if [ -x "$java" ]; then
-      JAVA="$java"
+  for java in "$JAVA_HOME"/bin/amd64 "$JAVA_HOME"/bin; do
+    if [ -x "$java/java" ]; then
+      JAVA="$java/java"
+      if [ -x "$java/jstack" ]; then
+        JSTACK="$java/jstack"
+      else
+        echo >&2 "The currently defined JAVA_HOME ($JAVA_HOME) refers to a location"
+        echo >&2 "where java was found but jstack was not found. Continuing."
+      fi
       break
     fi
   done
@@ -119,6 +126,7 @@ elif [ -n "$JAVA_HOME" ]; then
   fi
 else
   JAVA=java
+  JSTACK=jstack
 fi
 
 if [ -z "$SOLR_STOP_WAIT" ]; then
@@ -322,7 +330,7 @@ function print_usage() {
   if [ -z "$CMD" ]; then
     echo ""
     echo "Usage: solr COMMAND OPTIONS"
-    echo "       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling, export"
+    echo "       where COMMAND is one of: start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, export"
     echo ""
     echo "  Standalone server example (start Solr running in the background on port 8984):"
     echo ""
@@ -821,6 +829,7 @@ function run_package() {
 
 # tries to gracefully stop Solr using the Jetty
 # stop command and if that fails, then uses kill -9
+# (will attempt to jstack before killing)
 function stop_solr() {
 
   DIR="$1"
@@ -857,11 +866,15 @@ function stop_solr() {
 
   CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
   if [ "$CHECK_PID" != "" ]; then
+    if [ "$JSTACK" != "" ]; then
+      echo -e "Solr process $SOLR_PID is still running; jstacking it now."
+      $JSTACK $SOLR_PID
+    fi
     echo -e "Solr process $SOLR_PID is still running; forcefully killing it now."
     kill -9 $SOLR_PID
     echo "Killed process $SOLR_PID"
     rm -f "$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
-    sleep 1
+    sleep 10
   fi
 
   CHECK_PID=`ps auxww | awk '{print $2}' | grep -w $SOLR_PID | sort -r | tr -d ' '`
@@ -1404,11 +1417,6 @@ if [[ "$SCRIPT_CMD" == "zk" ]]; then
 fi
 
 
-if [[ "$SCRIPT_CMD" == "autoscaling" ]]; then
-  run_tool autoscaling $@
-  exit $?
-fi
-
 if [[ "$SCRIPT_CMD" == "export" ]]; then
   run_tool export $@
   exit $?
@@ -2097,6 +2105,14 @@ else
   SECURITY_MANAGER_OPTS=()
 fi
 
+# Enable ADMIN UI by default, and give the option for users to disable it
+if [ "$SOLR_ADMIN_UI_DISABLED" == "true" ]; then
+  SOLR_ADMIN_UI="-DdisableAdminUI=true"
+  echo -e "ADMIN UI Disabled"
+else
+  SOLR_ADMIN_UI="-DdisableAdminUI=false"
+fi
+
 JAVA_MEM_OPTS=()
 if [ -z "$SOLR_HEAP" ] && [ -n "$SOLR_JAVA_MEM" ]; then
   JAVA_MEM_OPTS=($SOLR_JAVA_MEM)
@@ -2131,7 +2147,8 @@ function start_solr() {
         '-XX:+ParallelRefProcEnabled' \
         '-XX:MaxGCPauseMillis=250' \
         '-XX:+UseLargePages' \
-        '-XX:+AlwaysPreTouch')
+        '-XX:+AlwaysPreTouch' \
+        '-XX:+ExplicitGCInvokesConcurrent')
   else
     GC_TUNE=($GC_TUNE)
   fi
@@ -2142,7 +2159,7 @@ function start_solr() {
   fi
 
   # If SSL-related system props are set, add them to SOLR_OPTS
-  if [ "$SOLR_SSL_ENABLED" ]; then
+  if [ "$SOLR_SSL_ENABLED" == "true" ]; then
     # If using SSL and solr.jetty.https.port not set explicitly, use the jetty.port
     SSL_PORT_PROP="-Dsolr.jetty.https.port=$SOLR_PORT"
     SOLR_OPTS+=($SOLR_SSL_OPTS "$SSL_PORT_PROP")
@@ -2204,9 +2221,11 @@ function start_solr() {
   SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE[@]}" "${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \
     "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" $SOLR_LOG_LEVEL_OPT -Dsolr.log.dir="$SOLR_LOGS_DIR" \
     "-Djetty.port=$SOLR_PORT" "-DSTOP.PORT=$stop_port" "-DSTOP.KEY=$STOP_KEY" \
-    "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" \
+    # '-OmitStackTraceInFastThrow' ensures stack traces in errors,
+    # users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
+    "${SOLR_HOST_ARG[@]}" "-Duser.timezone=$SOLR_TIMEZONE" "-XX:-OmitStackTraceInFastThrow" \
     "-Djetty.home=$SOLR_SERVER_DIR" "-Dsolr.solr.home=$SOLR_HOME" "-Dsolr.data.home=$SOLR_DATA_HOME" "-Dsolr.install.dir=$SOLR_TIP" \
-    "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}")
+    "-Dsolr.default.confdir=$DEFAULT_CONFDIR" "${LOG4J_CONFIG[@]}" "${SOLR_OPTS[@]}" "${SECURITY_MANAGER_OPTS[@]}" "${SOLR_ADMIN_UI}")
 
   if [ "$SOLR_MODE" == "solrcloud" ]; then
     IN_CLOUD_MODE=" in SolrCloud mode"
diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd
index 2f28bd6..8fb5e7a 100755
--- a/solr/bin/solr.cmd
+++ b/solr/bin/solr.cmd
@@ -224,7 +224,6 @@ IF "%1"=="version" goto get_version
 IF "%1"=="-v" goto get_version
 IF "%1"=="-version" goto get_version
 IF "%1"=="assert" goto run_assert
-IF "%1"=="autoscaling" goto run_autoscaling
 IF "%1"=="export" goto run_export
 IF "%1"=="package" goto run_package
 
@@ -303,7 +302,7 @@ goto done
 :script_usage
 @echo.
 @echo Usage: solr COMMAND OPTIONS
-@echo        where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, autoscaling, export
+@echo        where COMMAND is one of: start, stop, restart, healthcheck, create, create_core, create_collection, delete, version, zk, auth, assert, config, export
 @echo.
 @echo   Standalone server example (start Solr running in the background on port 8984):
 @echo.
@@ -1042,13 +1041,10 @@ IF "%SCRIPT_CMD%"=="stop" (
                 del "%SOLR_TIP%"\bin\solr-!SOME_SOLR_PORT!.port
                 timeout /T 5
                 REM Kill it if it is still running after the graceful shutdown
-                For /f "tokens=2,5" %%M in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":!SOME_SOLR_PORT! "') do (
-                  IF "%%N"=="%%k" (
-                    IF "%%M"=="%SOLR_JETTY_HOST%:!SOME_SOLR_PORT!" (
-                      @echo Forcefully killing process %%N
-                      taskkill /f /PID %%N
-                    )
-                  )
+                IF EXIST "%JAVA_HOME%\bin\jstack.exe" (
+                  qprocess "%%k" >nul 2>nul && "%JAVA_HOME%\bin\jstack.exe" %%k && taskkill /f /PID %%k
+                ) else (
+                  qprocess "%%k" >nul 2>nul && taskkill /f /PID %%k
                 )
               )
             )
@@ -1072,13 +1068,10 @@ IF "%SCRIPT_CMD%"=="stop" (
           del "%SOLR_TIP%"\bin\solr-%SOLR_PORT%.port
           timeout /T 5
           REM Kill it if it is still running after the graceful shutdown
-          For /f "tokens=2,5" %%j in ('netstat -nao ^| find "TCP " ^| find ":0 " ^| find ":%SOLR_PORT% "') do (
-            IF "%%N"=="%%k" (
-              IF "%%j"=="%SOLR_JETTY_HOST%:%SOLR_PORT%" (
-                @echo Forcefully killing process %%N
-                taskkill /f /PID %%N
-              )
-            )
+          IF EXIST "%JAVA_HOME%\bin\jstack.exe" (
+            qprocess "%%N" >nul 2>nul && "%JAVA_HOME%\bin\jstack.exe" %%N && taskkill /f /PID %%N
+          ) else (
+            qprocess "%%N" >nul 2>nul && taskkill /f /PID %%N
           )
         )
       )
@@ -1199,6 +1192,13 @@ IF "%SOLR_SECURITY_MANAGER_ENABLED%"=="true" (
 -Dsolr.internal.network.permission=*
 )
 
+REM Enable ADMIN UI by default, and give the option for users to disable it
+IF "%SOLR_ADMIN_UI_DISABLED%"=="true" (
+  set DISABLE_ADMIN_UI="true"
+) else (
+  set DISABLE_ADMIN_UI="false"
+)
+
 IF NOT "%SOLR_HEAP%"=="" set SOLR_JAVA_MEM=-Xms%SOLR_HEAP% -Xmx%SOLR_HEAP%
 IF "%SOLR_JAVA_MEM%"=="" set SOLR_JAVA_MEM=-Xms512m -Xmx512m
 IF "%SOLR_JAVA_STACK_SIZE%"=="" set SOLR_JAVA_STACK_SIZE=-Xss256k
@@ -1211,7 +1211,8 @@ IF "%GC_TUNE%"=="" (
     -XX:+ParallelRefProcEnabled ^
     -XX:MaxGCPauseMillis=250 ^
     -XX:+UseLargePages ^
-    -XX:+AlwaysPreTouch
+    -XX:+AlwaysPreTouch ^
+    -XX:+ExplicitGCInvokesConcurrent
 )
 
 if !JAVA_MAJOR_VERSION! GEQ 9  (
@@ -1284,7 +1285,11 @@ IF "%verbose%"=="1" (
 )
 
 set START_OPTS=-Duser.timezone=%SOLR_TIMEZONE%
+REM '-OmitStackTraceInFastThrow' ensures stack traces in errors,
+REM users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
+set "START_OPTS=%START_OPTS% -XX:-OmitStackTraceInFastThrow"
 set START_OPTS=%START_OPTS% !GC_TUNE! %GC_LOG_OPTS%
+set START_OPTS=%START_OPTS% -DdisableAdminUI=%DISABLE_ADMIN_UI%
 IF NOT "!CLOUD_MODE_OPTS!"=="" set "START_OPTS=%START_OPTS% !CLOUD_MODE_OPTS!"
 IF NOT "!IP_ACL_OPTS!"=="" set "START_OPTS=%START_OPTS% !IP_ACL_OPTS!"
 IF NOT "%REMOTE_JMX_OPTS%"=="" set "START_OPTS=%START_OPTS% %REMOTE_JMX_OPTS%"
@@ -1448,13 +1453,6 @@ if errorlevel 1 (
 )
 goto done
 
-:run_autoscaling
-"%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
-  -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
-  -classpath "%DEFAULT_SERVER_DIR%\solr-webapp\webapp\WEB-INF\lib\*;%DEFAULT_SERVER_DIR%\lib\ext\*" ^
-  org.apache.solr.util.SolrCLI %* 
-goto done:
-
 :run_export
 "%JAVA%" %SOLR_SSL_OPTS% %AUTHC_OPTS% %SOLR_ZK_CREDS_AND_ACLS% -Dsolr.install.dir="%SOLR_TIP%" ^
   -Dlog4j.configurationFile="file:///%DEFAULT_SERVER_DIR%\resources\log4j2-console.xml" ^
diff --git a/solr/bin/solr.in.cmd b/solr/bin/solr.in.cmd
index f018f31..0c752da 100755
--- a/solr/bin/solr.in.cmd
+++ b/solr/bin/solr.in.cmd
@@ -35,6 +35,7 @@ REM set GC_LOG_OPTS=-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+Prin
 
 REM Various GC settings have shown to work well for a number of common Solr workloads.
 REM See solr.cmd GC_TUNE for the default list.
+REM set GC_TUNE=-XX:+ExplicitGCInvokesConcurrent
 REM set GC_TUNE=-XX:SurvivorRatio=4
 REM set GC_TUNE=%GC_TUNE% -XX:TargetSurvivorRatio=90
 REM set GC_TUNE=%GC_TUNE% -XX:MaxTenuringThreshold=8
@@ -47,8 +48,7 @@ REM set GC_TUNE=%GC_TUNE% -XX:+UseCMSInitiatingOccupancyOnly
 REM set GC_TUNE=%GC_TUNE% -XX:CMSInitiatingOccupancyFraction=50
 REM set GC_TUNE=%GC_TUNE% -XX:CMSMaxAbortablePrecleanTime=6000
 REM set GC_TUNE=%GC_TUNE% -XX:+CMSParallelRemarkEnabled
-REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled
-REM set GC_TUNE=%GC_TUNE% -XX:-OmitStackTraceInFastThrow    etc.
+REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled      etc.
 
 REM Set the ZooKeeper connection string if using an external ZooKeeper ensemble
 REM e.g. host1:2181,host2:2181/chroot
@@ -132,9 +132,9 @@ REM to enable https module with custom jetty configuration.
 REM set SOLR_SSL_ENABLED=true
 REM Uncomment to set SSL-related system properties
 REM Be sure to update the paths to the correct keystore for your environment
-REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
+REM set SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12
 REM set SOLR_SSL_KEY_STORE_PASSWORD=secret
-REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
+REM set SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12
 REM set SOLR_SSL_TRUST_STORE_PASSWORD=secret
 REM Require clients to authenticate
 REM set SOLR_SSL_NEED_CLIENT_AUTH=false
@@ -168,13 +168,13 @@ REM * javax.net.ssl.keyStorePassword
 REM * javax.net.ssl.trustStorePassword
 REM More info: https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html
 REM set SOLR_HADOOP_CREDENTIAL_PROVIDER_PATH=localjceks://file/home/solr/hadoop-credential-provider.jceks
-REM set SOLR_OPTS=" -Dsolr.ssl.credential.provider.chain=hadoop"
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.ssl.credential.provider.chain=hadoop
 
 REM Settings for authentication
 REM Please configure only one of SOLR_AUTHENTICATION_CLIENT_BUILDER or SOLR_AUTH_TYPE parameters
 REM set SOLR_AUTHENTICATION_CLIENT_BUILDER=org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory
 REM set SOLR_AUTH_TYPE=basic
-REM set SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
+REM set SOLR_AUTHENTICATION_OPTS=-Dbasicauth=solr:SolrRocks
 
 REM Settings for ZK ACL
 REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider ^
@@ -187,20 +187,29 @@ REM When running Solr in non-cloud mode and if planning to do distributed search
 REM list of hosts needs to be whitelisted or Solr will forbid the request. The whitelist can be configured in solr.xml,
 REM or if you are using the OOTB solr.xml, can be specified using the system property "solr.shardsWhitelist". Alternatively
 REM host checking can be disabled by using the system property "solr.disable.shardsWhitelist"
-REM set SOLR_OPTS="%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984"
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.shardsWhitelist=http://localhost:8983,http://localhost:8984
 
 REM For a visual indication in the Admin UI of what type of environment this cluster is, configure
 REM a -Dsolr.environment property below. Valid values are prod, stage, test, dev, with an optional
 REM label or color, e.g. -Dsolr.environment=test,label=Functional+test,color=brown
-REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.environment=prod"
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.environment=prod
 
 REM Specifies the path to a common library directory that will be shared across all cores.
 REM Any JAR files in this directory will be added to the search path for Solr plugins.
 REM If the specified path is not absolute, it will be relative to `%SOLR_HOME%`.
-REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.sharedLib=/path/to/lib"
+REM set SOLR_OPTS=%SOLR_OPTS% -Dsolr.sharedLib=/path/to/lib
 
 REM Runs solr in a java security manager sandbox. This can protect against some attacks.
 REM Runtime properties are passed to the security policy file (server\etc\security.policy)
 REM You can also tweak via standard JDK files such as ~\.java.policy, see https://s.apache.org/java8policy
 REM This is experimental! It may not work at all with Hadoop/HDFS features.
-REM set SOLR_SECURITY_MANAGER_ENABLED=true
\ No newline at end of file
+REM set SOLR_SECURITY_MANAGER_ENABLED=true
+REM This variable provides you with the option to disable the Admin UI. if you uncomment the variable below and
+REM change the value to true. The option is configured as a system property as defined in SOLR_START_OPTS in the start
+REM scripts.
+REM set SOLR_ADMIN_UI_DISABLED=false
+
+REM Solr is by default allowed to read and write data from/to SOLR_HOME and a few other well defined locations
+REM Sometimes it may be necessary to place a core or a backup on a different location or a different disk
+REM This parameter lets you specify file system path(s) to explicitly allow. The special value of '*' will allow any path
+REM SOLR_OPTS="%SOLR_OPTS% -Dsolr.allowPaths=D:\,E:\other\path"
diff --git a/solr/bin/solr.in.sh b/solr/bin/solr.in.sh
index 3b31cdc..2192aa4 100644
--- a/solr/bin/solr.in.sh
+++ b/solr/bin/solr.in.sh
@@ -47,6 +47,7 @@
 
 # These GC settings have shown to work well for a number of common Solr workloads
 #GC_TUNE=" \
+#-XX:+ExplicitGCInvokesConcurrent \
 #-XX:SurvivorRatio=4 \
 #-XX:TargetSurvivorRatio=90 \
 #-XX:MaxTenuringThreshold=8 \
@@ -58,8 +59,7 @@
 #-XX:CMSInitiatingOccupancyFraction=50 \
 #-XX:CMSMaxAbortablePrecleanTime=6000 \
 #-XX:+CMSParallelRemarkEnabled \
-#-XX:+ParallelRefProcEnabled \
-#-XX:-OmitStackTraceInFastThrow  etc.
+#-XX:+ParallelRefProcEnabled        etc.
 
 # Set the ZooKeeper connection string if using an external ZooKeeper ensemble
 # e.g. host1:2181,host2:2181/chroot
@@ -152,9 +152,9 @@
 #SOLR_SSL_ENABLED=true
 # Uncomment to set SSL-related system properties
 # Be sure to update the paths to the correct keystore for your environment
-#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.jks
+#SOLR_SSL_KEY_STORE=etc/solr-ssl.keystore.p12
 #SOLR_SSL_KEY_STORE_PASSWORD=secret
-#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.jks
+#SOLR_SSL_TRUST_STORE=etc/solr-ssl.keystore.p12
 #SOLR_SSL_TRUST_STORE_PASSWORD=secret
 # Require clients to authenticate
 #SOLR_SSL_NEED_CLIENT_AUTH=false
@@ -235,4 +235,12 @@
 # You can also tweak via standard JDK files such as ~/.java.policy, see https://s.apache.org/java8policy
 # This is experimental! It may not work at all with Hadoop/HDFS features.
 #SOLR_SECURITY_MANAGER_ENABLED=true
-
+# This variable provides you with the option to disable the Admin UI. if you uncomment the variable below and
+# change the value to true. The option is configured as a system property as defined in SOLR_START_OPTS in the start
+# scripts.
+# SOLR_ADMIN_UI_DISABLED=false
+
+# Solr is by default allowed to read and write data from/to SOLR_HOME and a few other well defined locations
+# Sometimes it may be necessary to place a core or a backup on a different location or a different disk
+# This parameter lets you specify file system path(s) to explicitly allow. The special value of '*' will allow any path
+#SOLR_OPTS="$SOLR_OPTS -Dsolr.allowPaths=/mnt/bigdisk,/other/path"
diff --git a/solr/build.gradle b/solr/build.gradle
index 148c8e8..9edc4d1 100644
--- a/solr/build.gradle
+++ b/solr/build.gradle
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+description = 'Parent project for Apache Solr'
+
 subprojects {
   group "org.apache.solr"
 }
\ No newline at end of file
diff --git a/solr/build.xml b/solr/build.xml
index f20727e..c3cf6bc 100644
--- a/solr/build.xml
+++ b/solr/build.xml
@@ -57,7 +57,7 @@
         <attribute name="Main-Class" value="org.apache.solr.util.SimplePostTool"/>
       </manifest>
     </jar>
-    <echo>See ${common-solr.dir}/README.txt for how to run the Solr server.</echo>
+    <echo>See ${common-solr.dir}/README.md for how to run the Solr server.</echo>
   </target>
   
   <target name="run-example" depends="server"
@@ -207,8 +207,8 @@
     </xslt>
     
     <markdown todir="${javadoc.dir}">
-      <fileset dir="site" includes="**/*.mdtext"/>
-      <globmapper from="*.mdtext" to="*.html"/>
+      <fileset dir="site" includes="**/*.md" excludes="**/*.template.md"/>
+      <globmapper from="*.md" to="*.html"/>
     </markdown>
 
     <copy todir="${javadoc.dir}">
@@ -459,7 +459,7 @@
                   fullpath="${fullnamever}/solr/LUCENE_CHANGES.txt" />
       <tarfileset dir="${src.export.dir}"
                   prefix="${fullnamever}"
-                  excludes="solr/example/**/*.sh solr/example/**/bin/ solr/scripts/**"/>
+                  excludes="solr/example/**/*.sh solr/example/**/bin/ solr/scripts/** gradle/wrapper/gradle-wrapper.jar"/>
       <tarfileset dir="${src.export.dir}"
                   prefix="${fullnamever}"
                   filemode="755"
@@ -530,8 +530,8 @@
                   fullpath="${fullnamever}/LUCENE_CHANGES.txt" />
       <tarfileset dir="."
                   prefix="${fullnamever}"
-                  includes="LICENSE.txt NOTICE.txt CHANGES.txt README.txt SYSTEM_REQUIREMENTS.txt
-                            bin/** server/** example/** contrib/**/lib/** contrib/**/conf/** contrib/**/README.txt
+                  includes="LICENSE.txt NOTICE.txt CHANGES.txt README.md site/SYSTEM_REQUIREMENTS.md
+                            bin/** server/** example/** contrib/**/lib/** contrib/**/conf/** contrib/**/README.md
                             licenses/**"
                   excludes="licenses/README.committers.txt **/data/ **/logs/* 
                             **/classes/ **/*.sh **/ivy.xml **/build.xml
diff --git a/solr/contrib/analysis-extras/README.md b/solr/contrib/analysis-extras/README.md
new file mode 100644
index 0000000..29f4219
--- /dev/null
+++ b/solr/contrib/analysis-extras/README.md
@@ -0,0 +1,26 @@
+Apache Solr - Analysis Extras
+=============================
+
+The analysis-extras plugin provides additional analyzers that rely
+upon large dependencies/dictionaries.
+
+It includes integration with ICU for multilingual support,
+analyzers for Chinese and Polish, and integration with
+OpenNLP for multilingual tokenization, part-of-speech tagging
+lemmatization, phrase chunking, and named-entity recognition.
+
+Each of the jars below relies upon including `/dist/solr-analysis-extras-X.Y.jar`
+in the `solrconfig.xml`
+
+* ICU relies upon `lucene-libs/lucene-analyzers-icu-X.Y.jar`
+and `lib/icu4j-X.Y.jar`
+
+* Smartcn relies upon `lucene-libs/lucene-analyzers-smartcn-X.Y.jar`
+
+* Stempel relies on `lucene-libs/lucene-analyzers-stempel-X.Y.jar`
+
+* Morfologik relies on `lucene-libs/lucene-analyzers-morfologik-X.Y.jar`
+and `lib/morfologik-*.jar`
+
+* OpenNLP relies on `lucene-libs/lucene-analyzers-opennlp-X.Y.jar`
+and `lib/opennlp-*.jar`
diff --git a/solr/contrib/analysis-extras/README.txt b/solr/contrib/analysis-extras/README.txt
deleted file mode 100644
index 236195e..0000000
--- a/solr/contrib/analysis-extras/README.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-The analysis-extras plugin provides additional analyzers that rely
-upon large dependencies/dictionaries.
-
-It includes integration with ICU for multilingual support,
-analyzers for Chinese and Polish, and integration with
-OpenNLP for multilingual tokenization, part-of-speech tagging
-lemmatization, phrase chunking, and named-entity recognition.
-
-Each of the jars below relies upon including /dist/solr-analysis-extras-X.Y.jar 
-in the solrconfig.xml
-
-ICU relies upon lucene-libs/lucene-analyzers-icu-X.Y.jar
-and lib/icu4j-X.Y.jar
-
-Smartcn relies upon lucene-libs/lucene-analyzers-smartcn-X.Y.jar
-
-Stempel relies on lucene-libs/lucene-analyzers-stempel-X.Y.jar
-
-Morfologik relies on lucene-libs/lucene-analyzers-morfologik-X.Y.jar
-and lib/morfologik-*.jar
-
-OpenNLP relies on lucene-libs/lucene-analyzers-opennlp-X.Y.jar
-and lib/opennlp-*.jar
diff --git a/solr/contrib/analysis-extras/build.gradle b/solr/contrib/analysis-extras/build.gradle
index 1a3a423..c39629a 100644
--- a/solr/contrib/analysis-extras/build.gradle
+++ b/solr/contrib/analysis-extras/build.gradle
@@ -18,6 +18,8 @@
 
 apply plugin: 'java-library'
 
+description = 'Additional analysis components'
+
 dependencies {
   api project(':solr:core')
 
diff --git a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
index d69c367..2fdbd01 100644
--- a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
+++ b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
@@ -215,7 +215,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
 
   @SuppressWarnings("unchecked")
   @Override
-  public void init(NamedList args) {
+  public void init(@SuppressWarnings({"rawtypes"})NamedList args) {
 
     // high level (loose) check for which type of config we have.
     //
@@ -260,7 +260,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
    * "source" and "dest" init params do <em>not</em> exist.
    */
   @SuppressWarnings("unchecked")
-  private void initSimpleRegexReplacement(NamedList args) {
+  private void initSimpleRegexReplacement(@SuppressWarnings({"rawtypes"})NamedList args) {
     // The syntactic sugar for the case where there is only one regex pattern for source and the same pattern
     // is used for the destination pattern...
     //
@@ -316,7 +316,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
    * "source" and "dest" init params <em>do</em> exist.
    */
   @SuppressWarnings("unchecked")
-  private void initSourceSelectorSyntax(NamedList args) {
+  private void initSourceSelectorSyntax(@SuppressWarnings({"rawtypes"})NamedList args) {
     // Full and complete syntax where source and dest are mandatory.
     //
     // source may be a single string or a selector.
@@ -340,6 +340,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
     if (1 == sources.size()) {
       if (sources.get(0) instanceof NamedList) {
         // nested set of selector options
+        @SuppressWarnings({"rawtypes"})
         NamedList selectorConfig = (NamedList) args.remove(SOURCE_PARAM);
 
         srcInclusions = parseSelectorParams(selectorConfig);
@@ -355,6 +356,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
             throw new SolrException(SERVER_ERROR, "Init param '" + SOURCE_PARAM +
                 "' child 'exclude' must be <lst/>");
           }
+          @SuppressWarnings({"rawtypes"})
           NamedList exc = (NamedList) excObj;
           srcExclusions.add(parseSelectorParams(exc));
           if (0 < exc.size()) {
@@ -387,6 +389,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
     }
 
     if (d instanceof NamedList) {
+      @SuppressWarnings({"rawtypes"})
       NamedList destList = (NamedList) d;
 
       Object patt = destList.remove(PATTERN_PARAM);
@@ -489,7 +492,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
             if (matcher.find()) {
               resolvedDest = matcher.replaceAll(dest);
             } else {
-              log.debug("srcSelector.shouldMutate(\"{}\") returned true, " +
+              log.debug("srcSelector.shouldMutate('{}') returned true, " +
                   "but replacement pattern did not match, field skipped.", fname);
               continue;
             }
@@ -571,7 +574,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
   }
 
   /** macro */
-  private static SelectorParams parseSelectorParams(NamedList args) {
+  private static SelectorParams parseSelectorParams(@SuppressWarnings({"rawtypes"})NamedList args) {
     return FieldMutatingUpdateProcessorFactory.parseSelectorParams(args);
   }
 }
diff --git a/solr/contrib/analytics/build.gradle b/solr/contrib/analytics/build.gradle
index 9f975d2..91e165a 100644
--- a/solr/contrib/analytics/build.gradle
+++ b/solr/contrib/analytics/build.gradle
@@ -17,6 +17,8 @@
 
 apply plugin: 'java-library'
 
+description = 'Analytics Package'
+
 dependencies {
   implementation project(':solr:core')
   testImplementation project(':solr:test-framework')
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
index 9407d1d..1bd4334 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
@@ -849,43 +849,43 @@ public class ExpressionFactory {
   public static interface ConstantFunction {
     AnalyticsValueStream apply(String t) throws SolrException;
   }
+  static class VariableFunctionInfo {
+    public String[] params;
+    public String returnSignature;
+  }
+  static class WeightedMeanVariableFunction {
+    public static final String name = "wmean";
+    public static final String params = "a,b";
+    public static final String function = DivideFunction.name+"("+SumFunction.name+"("+MultFunction.name+"(a,b)),"+SumFunction.name+"("+FilterFunction.name+"(b,"+ExistsFunction.name+"(a))))";
+  }
+  static class SumOfSquaresVariableFunction {
+    public static final String name = "sumofsquares";
+    public static final String params = "a";
+    public static final String function = SumFunction.name+"("+PowerFunction.name+"(a,2))";
+  }
+  static class SquareRootVariableFunction {
+    public static final String name = "sqrt";
+    public static final String params = "a";
+    public static final String function = PowerFunction.name+"(a,0.5)";
+  }
+  static class VarianceVariableFunction {
+    public static final String name = "variance";
+    public static final String params = "a";
+    public static final String function = SubtractFunction.name+"("+MeanFunction.name+"("+PowerFunction.name+"(a,2)),"+PowerFunction.name+"("+MeanFunction.name+"(a),2))";
+  }
+  static class SandardDeviationVariableFunction {
+    public static final String name = "stddev";
+    public static final String params = "a";
+    public static final String function = SquareRootVariableFunction.name+"("+VarianceVariableFunction.name+"(a))";
+  }
+  static class CSVVariableFunction {
+    public static final String name = "csv";
+    public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
+    public static final String function = SeparatedConcatFunction.name+"(',',a)";
+  }
+  static class CSVOutputVariableFunction {
+    public static final String name = "csv_output";
+    public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
+    public static final String function = "concat_sep(',',a"+ExpressionFactory.variableForEachSep+FillMissingFunction.name+"("+SeparatedConcatFunction.name+"(';',"+ExpressionFactory.variableForEachParam+"),''))";
+  }
 }
-class VariableFunctionInfo {
-  public String[] params;
-  public String returnSignature;
-}
-class WeightedMeanVariableFunction {
-  public static final String name = "wmean";
-  public static final String params = "a,b";
-  public static final String function = DivideFunction.name+"("+SumFunction.name+"("+MultFunction.name+"(a,b)),"+SumFunction.name+"("+FilterFunction.name+"(b,"+ExistsFunction.name+"(a))))";
-}
-class SumOfSquaresVariableFunction {
-  public static final String name = "sumofsquares";
-  public static final String params = "a";
-  public static final String function = SumFunction.name+"("+PowerFunction.name+"(a,2))";
-}
-class SquareRootVariableFunction {
-  public static final String name = "sqrt";
-  public static final String params = "a";
-  public static final String function = PowerFunction.name+"(a,0.5)";
-}
-class VarianceVariableFunction {
-  public static final String name = "variance";
-  public static final String params = "a";
-  public static final String function = SubtractFunction.name+"("+MeanFunction.name+"("+PowerFunction.name+"(a,2)),"+PowerFunction.name+"("+MeanFunction.name+"(a),2))";
-}
-class SandardDeviationVariableFunction {
-  public static final String name = "stddev";
-  public static final String params = "a";
-  public static final String function = SquareRootVariableFunction.name+"("+VarianceVariableFunction.name+"(a))";
-}
-class CSVVariableFunction {
-  public static final String name = "csv";
-  public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
-  public static final String function = SeparatedConcatFunction.name+"(',',a)";
-}
-class CSVOutputVariableFunction {
-  public static final String name = "csv_output";
-  public static final String params = "a"+ExpressionFactory.variableLengthParamSuffix;
-  public static final String function = "concat_sep(',',a"+ExpressionFactory.variableForEachSep+FillMissingFunction.name+"("+SeparatedConcatFunction.name+"(';',"+ExpressionFactory.variableForEachParam+"),''))";
-}
\ No newline at end of file
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
index d06bba8..d6ff05e 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/PivotFacet.java
@@ -72,43 +72,44 @@ public class PivotFacet extends AnalyticsFacet implements StreamingFacet {
   public Iterable<Map<String,Object>> createResponse() {
     return pivotHead.createResponse();
   }
-}
-/**
- * Typed Pivot class that stores the overall Pivot data and head of the Pivot node chain.
- *
- * This class exists so that the {@link PivotFacet} class doesn't have to be typed ( {@code <T>} ).
- */
-class PivotHead<T> implements StreamingFacet {
-  private final PivotNode<T> topPivot;
-  private final Map<String, T> pivotValues;
-
-  public PivotHead(PivotNode<T> topPivot) {
-    this.topPivot = topPivot;
-    this.pivotValues = new HashMap<>();
-  }
-
-  public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
-    topPivot.setReductionCollectionManager(collectionManager);
-  }
-
-  public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
-    topPivot.setExpressionCalculator(expressionCalculator);
-  }
 
-  @Override
-  public void addFacetValueCollectionTargets() {
-    topPivot.addFacetValueCollectionTargets(pivotValues);
-  }
-
-  public void importShardData(DataInput input) throws IOException {
-    topPivot.importPivot(input, pivotValues);
-  }
-
-  public void exportShardData(DataOutput output) throws IOException {
-    topPivot.exportPivot(output, pivotValues);
-  }
-
-  public Iterable<Map<String,Object>> createResponse() {
-    return topPivot.getPivotedResponse(pivotValues);
+  /**
+   * Typed Pivot class that stores the overall Pivot data and head of the Pivot node chain.
+   *
+   * This class exists so that the {@link PivotFacet} class doesn't have to be typed ( {@code <T>} ).
+   */
+  private static class PivotHead<T> implements StreamingFacet {
+    private final PivotNode<T> topPivot;
+    private final Map<String, T> pivotValues;
+
+    public PivotHead(PivotNode<T> topPivot) {
+      this.topPivot = topPivot;
+      this.pivotValues = new HashMap<>();
+    }
+
+    public void setReductionCollectionManager(ReductionCollectionManager collectionManager) {
+      topPivot.setReductionCollectionManager(collectionManager);
+    }
+
+    public void setExpressionCalculator(ExpressionCalculator expressionCalculator) {
+      topPivot.setExpressionCalculator(expressionCalculator);
+    }
+
+    @Override
+    public void addFacetValueCollectionTargets() {
+      topPivot.addFacetValueCollectionTargets(pivotValues);
+    }
+
+    public void importShardData(DataInput input) throws IOException {
+      topPivot.importPivot(input, pivotValues);
+    }
+
+    public void exportShardData(DataOutput output) throws IOException {
+      topPivot.exportPivot(output, pivotValues);
+    }
+
+    public Iterable<Map<String,Object>> createResponse() {
+      return topPivot.getPivotedResponse(pivotValues);
+    }
   }
-}
\ No newline at end of file
+}
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
index f344d8b..2e82f62 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/QueryFacet.java
@@ -19,15 +19,14 @@ package org.apache.solr.analytics.facet;
 import java.util.Map;
 import java.util.function.Consumer;
 
-import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.Filter;
 import org.apache.solr.search.QParser;
+import org.apache.solr.search.QueryUtils;
 
 /**
  * A facet that breaks down the data by additional Solr Queries.
@@ -51,10 +50,7 @@ public class QueryFacet extends AbstractSolrQueryFacet {
       }
       // The searcher sends docIds to the QueryFacetAccumulator which forwards
       // them to <code>collectQuery()</code> in this class for collection.
-      Query queryQuery = new BooleanQuery.Builder()
-          .add(q, Occur.MUST)
-          .add(filter, Occur.FILTER)
-          .build();
+      Query queryQuery = QueryUtils.combineQueryAndFilter(q, filter);
 
       ReductionDataCollection dataCol = collectionManager.newDataCollection();
       reductionData.put(queryName, dataCol);
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
index defc9d9..ac9bf16 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/facet/RangeFacet.java
@@ -20,9 +20,7 @@ import java.util.EnumSet;
 import java.util.List;
 import java.util.function.Consumer;
 
-import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.solr.analytics.function.ReductionCollectionManager.ReductionDataCollection;
 import org.apache.solr.analytics.util.FacetRangeGenerator;
 import org.apache.solr.analytics.util.FacetRangeGenerator.FacetRange;
@@ -31,6 +29,7 @@ import org.apache.solr.common.params.FacetParams.FacetRangeOther;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.Filter;
+import org.apache.solr.search.QueryUtils;
 
 /**
  * A facet that groups data by a discrete set of ranges.
@@ -66,10 +65,7 @@ public class RangeFacet extends AbstractSolrQueryFacet {
       Query q = sf.getType().getRangeQuery(null, sf, range.lower, range.upper, range.includeLower,range.includeUpper);
       // The searcher sends docIds to the RangeFacetAccumulator which forwards
       // them to <code>collectRange()</code> in this class for collection.
-      Query rangeQuery = new BooleanQuery.Builder()
-          .add(q, Occur.MUST)
-          .add(filter, Occur.FILTER)
-          .build();
+      Query rangeQuery = QueryUtils.combineQueryAndFilter(q, filter);
 
       ReductionDataCollection dataCol = collectionManager.newDataCollection();
       reductionData.put(range.toString(), dataCol);
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
index 1ecc930..4b7497d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ComparisonFunction.java
@@ -17,7 +17,6 @@
 package org.apache.solr.analytics.function.mapping;
 
 import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
-import org.apache.solr.analytics.function.mapping.ComparisonFunction.CompResultFunction;
 import org.apache.solr.analytics.util.function.BooleanConsumer;
 import org.apache.solr.analytics.value.AnalyticsValue;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
@@ -141,178 +140,183 @@ public class ComparisonFunction {
   private static CompResultFunction reverse(CompResultFunction original) {
     return val -> original.apply(val*-1);
   }
-}
-/**
- * A comparison function for two {@link DoubleValue}s.
- */
-class CompareDoubleValueFunction extends AbstractBooleanValue {
-  private final DoubleValue exprA;
-  private final DoubleValue exprB;
-  private final CompResultFunction comp;
-  private final String name;
-  private final String funcStr;
-  private final ExpressionType funcType;
 
-  public CompareDoubleValueFunction(String name, DoubleValue exprA, DoubleValue exprB, CompResultFunction comp) {
-    this.name = name;
-    this.exprA = exprA;
-    this.exprB = exprB;
-    this.comp = comp;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-  }
+  /**
+   * A comparison function for two {@link DoubleValue}s.
+   */
+  static class CompareDoubleValueFunction extends AbstractBooleanValue {
+    private final DoubleValue exprA;
+    private final DoubleValue exprB;
+    private final CompResultFunction comp;
+    private final String name;
+    private final String funcStr;
+    private final ExpressionType funcType;
 
-  private boolean exists = false;
-  @Override
-  public boolean getBoolean() {
-    double valueA = exprA.getDouble();
-    double valueB = exprB.getDouble();
-    exists = exprA.exists() && exprB.exists();
-    return exists ? comp.apply(Double.compare(valueA,valueB)) : false;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    public CompareDoubleValueFunction(String name, DoubleValue exprA, DoubleValue exprB, CompResultFunction comp) {
+      this.name = name;
+      this.exprA = exprA;
+      this.exprB = exprB;
+      this.comp = comp;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A comparison function for a {@link DoubleValue} and a {@link DoubleValueStream}.
- */
-class CompareDoubleStreamFunction extends AbstractBooleanValueStream {
-  private final DoubleValue baseExpr;
-  private final DoubleValueStream compExpr;
-  private final CompResultFunction comp;
-  private final String name;
-  private final String funcStr;
-  private final ExpressionType funcType;
+    private boolean exists = false;
+    @Override
+    public boolean getBoolean() {
+      double valueA = exprA.getDouble();
+      double valueB = exprB.getDouble();
+      exists = exprA.exists() && exprB.exists();
+      return exists ? comp.apply(Double.compare(valueA,valueB)) : false;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
 
-  public CompareDoubleStreamFunction(String name, DoubleValue baseExpr, DoubleValueStream compExpr, CompResultFunction comp) throws SolrException {
-    this.name = name;
-    this.baseExpr = baseExpr;
-    this.compExpr = compExpr;
-    this.comp = comp;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    double baseValue = baseExpr.getDouble();
-    if (baseExpr.exists()) {
-      compExpr.streamDoubles(compValue -> cons.accept(comp.apply(Double.compare(baseValue,compValue))));
+  /**
+   * A comparison function for a {@link DoubleValue} and a {@link DoubleValueStream}.
+   */
+  static class CompareDoubleStreamFunction extends AbstractBooleanValueStream {
+    private final DoubleValue baseExpr;
+    private final DoubleValueStream compExpr;
+    private final CompResultFunction comp;
+    private final String name;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public CompareDoubleStreamFunction(String name, DoubleValue baseExpr, DoubleValueStream compExpr, CompResultFunction comp) throws SolrException {
+      this.name = name;
+      this.baseExpr = baseExpr;
+      this.compExpr = compExpr;
+      this.comp = comp;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A comparison function for two {@link DateValue}s.
- */
-class CompareDateValueFunction extends AbstractBooleanValue {
-  private final DateValue exprA;
-  private final DateValue exprB;
-  private final CompResultFunction comp;
-  private final String name;
-  private final String funcStr;
-  private final ExpressionType funcType;
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      double baseValue = baseExpr.getDouble();
+      if (baseExpr.exists()) {
+        compExpr.streamDoubles(compValue -> cons.accept(comp.apply(Double.compare(baseValue,compValue))));
+      }
+    }
 
-  public CompareDateValueFunction(String name, DateValue exprA, DateValue exprB, CompResultFunction comp) {
-    this.name = name;
-    this.exprA = exprA;
-    this.exprB = exprB;
-    this.comp = comp;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  private boolean exists = false;
-  @Override
-  public boolean getBoolean() {
-    long valueA = exprA.getLong();
-    long valueB = exprB.getLong();
-    exists = exprA.exists() && exprB.exists();
-    return exists ? comp.apply(Long.compare(valueA,valueB)) : false;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+  /**
+   * A comparison function for two {@link DateValue}s.
+   */
+  static class CompareDateValueFunction extends AbstractBooleanValue {
+    private final DateValue exprA;
+    private final DateValue exprB;
+    private final CompResultFunction comp;
+    private final String name;
+    private final String funcStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A comparison function for a {@link DateValue} and a {@link DateValueStream}.
- */
-class CompareDateStreamFunction extends AbstractBooleanValueStream {
-  private final DateValue baseExpr;
-  private final DateValueStream compExpr;
-  private final CompResultFunction comp;
-  private final String name;
-  private final String funcStr;
-  private final ExpressionType funcType;
+    public CompareDateValueFunction(String name, DateValue exprA, DateValue exprB, CompResultFunction comp) {
+      this.name = name;
+      this.exprA = exprA;
+      this.exprB = exprB;
+      this.comp = comp;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+    }
 
-  public CompareDateStreamFunction(String name, DateValue baseExpr, DateValueStream compExpr, CompResultFunction comp) throws SolrException {
-    this.name = name;
-    this.baseExpr = baseExpr;
-    this.compExpr = compExpr;
-    this.comp = comp;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-  }
+    private boolean exists = false;
+    @Override
+    public boolean getBoolean() {
+      long valueA = exprA.getLong();
+      long valueB = exprB.getLong();
+      exists = exprA.exists() && exprB.exists();
+      return exists ? comp.apply(Long.compare(valueA,valueB)) : false;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
 
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    long baseValue = baseExpr.getLong();
-    if (baseExpr.exists()) {
-      compExpr.streamLongs(compValue -> cons.accept(comp.apply(Long.compare(baseValue,compValue))));
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+  /**
+   * A comparison function for a {@link DateValue} and a {@link DateValueStream}.
+   */
+  static class CompareDateStreamFunction extends AbstractBooleanValueStream {
+    private final DateValue baseExpr;
+    private final DateValueStream compExpr;
+    private final CompResultFunction comp;
+    private final String name;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public CompareDateStreamFunction(String name, DateValue baseExpr, DateValueStream compExpr, CompResultFunction comp) throws SolrException {
+      this.name = name;
+      this.baseExpr = baseExpr;
+      this.compExpr = compExpr;
+      this.comp = comp;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+    }
+
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      long baseValue = baseExpr.getLong();
+      if (baseExpr.exists()) {
+        compExpr.streamLongs(compValue -> cons.accept(comp.apply(Long.compare(baseValue,compValue))));
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
\ No newline at end of file
+}
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
index 8a57561..93fee3e 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateMathFunction.java
@@ -62,97 +62,100 @@ public class DateMathFunction {
       throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires a date as the first parameter.");
     }
   });
-}
-/**
- * DateMath function that supports {@link DateValue}s.
- */
-class DateMathValueFunction extends AbstractDateValue {
-  private final DateValue dateParam;
-  private final String mathParam;
-  DateMathParser parser = new DateMathParser();
-  public static final String name = DateMathFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public DateMathValueFunction(DateValue dateParam, ConstantStringValue mathParam) throws SolrException {
-    this.dateParam = dateParam;
-    this.mathParam = "NOW" + mathParam.getString();
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
-  }
+  /**
+   * DateMath function that supports {@link DateValue}s.
+   */
+  static class DateMathValueFunction extends AbstractDateValue {
+    private final DateValue dateParam;
+    private final String mathParam;
+    DateMathParser parser = new DateMathParser();
+    public static final String name = DateMathFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  private boolean exists = false;
+    public DateMathValueFunction(DateValue dateParam, ConstantStringValue mathParam) throws SolrException {
+      this.dateParam = dateParam;
+      this.mathParam = "NOW" + mathParam.getString();
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
+    }
 
-  @Override
-  public long getLong() {
-    Date date = getDate();
-    return (exists) ? date.getTime() : 0;
-  }
-  @Override
-  public Date getDate() {
-    Date date = dateParam.getDate();
-    if (dateParam.exists()) {
-      exists = true;
-      return DateMathParser.parseMath(date,mathParam);
-    } else {
-      exists = false;
-      return null;
+    private boolean exists = false;
+
+    @Override
+    public long getLong() {
+      Date date = getDate();
+      return (exists) ? date.getTime() : 0;
+    }
+    @Override
+    public Date getDate() {
+      Date date = dateParam.getDate();
+      if (dateParam.exists()) {
+        exists = true;
+        return DateMathParser.parseMath(date,mathParam);
+      } else {
+        exists = false;
+        return null;
+      }
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-/**
- * DateMath function that supports {@link DateValueStream}s.
- */
-class DateMathStreamFunction extends AbstractDateValueStream {
-  private final DateValueStream dateParam;
-  private final String mathParam;
-  public static final String name = DateMathFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public DateMathStreamFunction(DateValueStream dateParam, ConstantStringValue mathParam) throws SolrException {
-    this.dateParam = dateParam;
-    this.mathParam = "NOW" + mathParam.getString();
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
-  }
+  /**
+   * DateMath function that supports {@link DateValueStream}s.
+   */
+  static class DateMathStreamFunction extends AbstractDateValueStream {
+    private final DateValueStream dateParam;
+    private final String mathParam;
+    public static final String name = DateMathFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    streamDates(value -> cons.accept(value.getTime()));
-  }
-  @Override
-  public void streamDates(Consumer<Date> cons) {
-    dateParam.streamDates(value -> cons.accept(DateMathParser.parseMath(value, mathParam)));
-  }
+    public DateMathStreamFunction(DateValueStream dateParam, ConstantStringValue mathParam) throws SolrException {
+      this.dateParam = dateParam;
+      this.mathParam = "NOW" + mathParam.getString();
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,dateParam,mathParam);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,dateParam);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      streamDates(value -> cons.accept(value.getTime()));
+    }
+    @Override
+    public void streamDates(Consumer<Date> cons) {
+      dateParam.streamDates(value -> cons.accept(DateMathParser.parseMath(value, mathParam)));
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
\ No newline at end of file
+}
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
index 83c0ba7..9462e43 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DateParseFunction.java
@@ -61,146 +61,151 @@ public class DateParseFunction {
           "Incorrect parameter: "+params[0].getExpressionStr());
     }
   });
-}
-class LongToDateParseFunction extends AbstractDateValue {
-  private final LongValue param;
-  public static final String name = DateParseFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public LongToDateParseFunction(LongValue param) throws SolrException {
-    this.param = param;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-  }
 
-  @Override
-  public long getLong() {
-    return param.getLong();
-  }
-  @Override
-  public boolean exists() {
-    return param.exists();
-  }
+  static class LongToDateParseFunction extends AbstractDateValue {
+    private final LongValue param;
+    public static final String name = DateParseFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongStreamToDateParseFunction extends AbstractDateValueStream {
-  private final LongValueStream param;
-  public static final String name = DateParseFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public LongStreamToDateParseFunction(LongValueStream param) throws SolrException {
-    this.param = param;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-  }
+    public LongToDateParseFunction(LongValue param) throws SolrException {
+      this.param = param;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    }
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    param.streamLongs(cons);
-  }
+    @Override
+    public long getLong() {
+      return param.getLong();
+    }
+    @Override
+    public boolean exists() {
+      return param.exists();
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringToDateParseFunction extends AbstractDateValue {
-  private final StringValue param;
-  public static final String name = DateParseFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StringToDateParseFunction(StringValue param) throws SolrException {
-    this.param = param;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  private boolean exists = false;
-  @Override
-  public long getLong() {
-    long value = 0;
-    try {
-      String paramStr = param.getString();
-      exists = param.exists();
-      if (exists) {
-        value = Instant.parse(paramStr).toEpochMilli();
-      }
-    } catch (DateTimeParseException e) {
-      exists = false;
+  static class LongStreamToDateParseFunction extends AbstractDateValueStream {
+    private final LongValueStream param;
+    public static final String name = DateParseFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public LongStreamToDateParseFunction(LongValueStream param) throws SolrException {
+      this.param = param;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringStreamToDateParseFunction extends AbstractDateValueStream {
-  private final StringValueStream param;
-  public static final String name = DateParseFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StringStreamToDateParseFunction(StringValueStream param) throws SolrException {
-    this.param = param;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      param.streamLongs(cons);
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    param.streamStrings(value -> {
+  static class StringToDateParseFunction extends AbstractDateValue {
+    private final StringValue param;
+    public static final String name = DateParseFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StringToDateParseFunction(StringValue param) throws SolrException {
+      this.param = param;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    }
+
+    private boolean exists = false;
+    @Override
+    public long getLong() {
+      long value = 0;
       try {
-        cons.accept(Instant.parse(value).toEpochMilli());
-      } catch (DateTimeParseException e) {}
-    });
-  }
+        String paramStr = param.getString();
+        exists = param.exists();
+        if (exists) {
+          value = Instant.parse(paramStr).toEpochMilli();
+        }
+      } catch (DateTimeParseException e) {
+        exists = false;
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
 
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+
+  static class StringStreamToDateParseFunction extends AbstractDateValueStream {
+    private final StringValueStream param;
+    public static final String name = DateParseFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StringStreamToDateParseFunction(StringValueStream param) throws SolrException {
+      this.param = param;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    }
+
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      param.streamStrings(value -> {
+        try {
+          cons.accept(Instant.parse(value).toEpochMilli());
+        } catch (DateTimeParseException e) {}
+      });
+    }
+
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 }
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
index c8881ee..fcc8400 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/DecimalNumericConversionFunction.java
@@ -20,8 +20,6 @@ import java.util.function.IntConsumer;
 import java.util.function.LongConsumer;
 
 import org.apache.solr.analytics.ExpressionFactory.CreatorFunction;
-import org.apache.solr.analytics.function.mapping.DecimalNumericConversionFunction.ConvertDoubleFunction;
-import org.apache.solr.analytics.function.mapping.DecimalNumericConversionFunction.ConvertFloatFunction;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
 import org.apache.solr.analytics.value.DoubleValue;
 import org.apache.solr.analytics.value.DoubleValueStream;
@@ -103,7 +101,7 @@ public class DecimalNumericConversionFunction {
   public static class RoundFunction {
     public static final String name = "round";
     public static final CreatorFunction creatorFunction = (params -> {
-      return DecimalNumericConversionFunction.createDecimalConversionFunction(name, val -> (int)Math.round(val), val -> (long)Math.round(val), params);
+      return DecimalNumericConversionFunction.createDecimalConversionFunction(name, val -> Math.round(val), val -> Math.round(val), params);
     });
   }
 
@@ -116,156 +114,161 @@ public class DecimalNumericConversionFunction {
   public static interface ConvertDoubleFunction {
     public long convert(double value);
   }
-}
-/**
- * A function to convert a {@link FloatValue} to a {@link IntValue}.
- */
-class ConvertFloatValueFunction extends AbstractIntValue {
-  private final String name;
-  private final FloatValue param;
-  private final ConvertFloatFunction conv;
-  private final String funcStr;
-  private final ExpressionType funcType;
 
-  public ConvertFloatValueFunction(String name, FloatValue param, ConvertFloatFunction conv) {
-    this.name = name;
-    this.param = param;
-    this.conv = conv;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-  }
+  /**
+   * A function to convert a {@link FloatValue} to a {@link IntValue}.
+   */
+  static class ConvertFloatValueFunction extends AbstractIntValue {
+    private final String name;
+    private final FloatValue param;
+    private final ConvertFloatFunction conv;
+    private final String funcStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public int getInt() {
-    return conv.convert(param.getFloat());
-  }
-  @Override
-  public boolean exists() {
-    return param.exists();
-  }
+    public ConvertFloatValueFunction(String name, FloatValue param, ConvertFloatFunction conv) {
+      this.name = name;
+      this.param = param;
+      this.conv = conv;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A function to convert a {@link FloatValueStream} to a {@link IntValueStream}.
- */
-class ConvertFloatStreamFunction extends AbstractIntValueStream {
-  private final String name;
-  private final FloatValueStream param;
-  private final ConvertFloatFunction conv;
-  private final String funcStr;
-  private final ExpressionType funcType;
+    @Override
+    public int getInt() {
+      return conv.convert(param.getFloat());
+    }
+    @Override
+    public boolean exists() {
+      return param.exists();
+    }
 
-  public ConvertFloatStreamFunction(String name, FloatValueStream param, ConvertFloatFunction conv) {
-    this.name = name;
-    this.param = param;
-    this.conv = conv;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public void streamInts(IntConsumer cons) {
-    param.streamFloats( value -> cons.accept(conv.convert(value)));
-  }
+  /**
+   * A function to convert a {@link FloatValueStream} to a {@link IntValueStream}.
+   */
+  static class ConvertFloatStreamFunction extends AbstractIntValueStream {
+    private final String name;
+    private final FloatValueStream param;
+    private final ConvertFloatFunction conv;
+    private final String funcStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A function to convert a {@link DoubleValue} to a {@link LongValue}.
- */
-class ConvertDoubleValueFunction extends AbstractLongValue {
-  private final String name;
-  private final DoubleValue param;
-  private final ConvertDoubleFunction conv;
-  private final String funcStr;
-  private final ExpressionType funcType;
+    public ConvertFloatStreamFunction(String name, FloatValueStream param, ConvertFloatFunction conv) {
+      this.name = name;
+      this.param = param;
+      this.conv = conv;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+    }
 
-  public ConvertDoubleValueFunction(String name, DoubleValue param, ConvertDoubleFunction conv) {
-    this.name = name;
-    this.param = param;
-    this.conv = conv;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-  }
+    @Override
+    public void streamInts(IntConsumer cons) {
+      param.streamFloats( value -> cons.accept(conv.convert(value)));
+    }
 
-  @Override
-  public long getLong() {
-    return conv.convert(param.getDouble());
-  }
-  @Override
-  public boolean exists() {
-    return param.exists();
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A function to convert a {@link DoubleValueStream} to a {@link LongValueStream}.
- */
-class ConvertDoubleStreamFunction extends AbstractLongValueStream {
-  private final String name;
-  private final DoubleValueStream param;
-  private final ConvertDoubleFunction conv;
-  private final String funcStr;
-  private final ExpressionType funcType;
+  /**
+   * A function to convert a {@link DoubleValue} to a {@link LongValue}.
+   */
+  static class ConvertDoubleValueFunction extends AbstractLongValue {
+    private final String name;
+    private final DoubleValue param;
+    private final ConvertDoubleFunction conv;
+    private final String funcStr;
+    private final ExpressionType funcType;
 
-  public ConvertDoubleStreamFunction(String name, DoubleValueStream param, ConvertDoubleFunction conv) {
-    this.name = name;
-    this.param = param;
-    this.conv = conv;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
-  }
+    public ConvertDoubleValueFunction(String name, DoubleValue param, ConvertDoubleFunction conv) {
+      this.name = name;
+      this.param = param;
+      this.conv = conv;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+    }
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    param.streamDoubles( value -> cons.accept(conv.convert(value)));
-  }
+    @Override
+    public long getLong() {
+      return conv.convert(param.getDouble());
+    }
+    @Override
+    public boolean exists() {
+      return param.exists();
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+
+  /**
+   * A function to convert a {@link DoubleValueStream} to a {@link LongValueStream}.
+   */
+  static class ConvertDoubleStreamFunction extends AbstractLongValueStream {
+    private final String name;
+    private final DoubleValueStream param;
+    private final ConvertDoubleFunction conv;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public ConvertDoubleStreamFunction(String name, DoubleValueStream param, ConvertDoubleFunction conv) {
+      this.name = name;
+      this.param = param;
+      this.conv = conv;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,param);
+    }
+
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      param.streamDoubles( value -> cons.accept(conv.convert(value)));
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
\ No newline at end of file
+}
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
index 18a8bce..9d1bbf2 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/EqualFunction.java
@@ -73,166 +73,171 @@ public class EqualFunction {
     }
     throw new SolrException(ErrorCode.BAD_REQUEST,"The "+name+" function requires that at least 1 parameter be single-valued.");
   });
-}
-/**
- * An equal function for two {@link BooleanValue}s.
- */
-class BooleanValueEqualFunction extends AbstractBooleanValue {
-  private final BooleanValue exprA;
-  private final BooleanValue exprB;
-  public static final String name = EqualFunction.name;
-  private final String funcStr;
-  private final ExpressionType funcType;
-
-  public BooleanValueEqualFunction(BooleanValue exprA, BooleanValue exprB) {
-    this.exprA = exprA;
-    this.exprB = exprB;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-  }
 
-  private boolean exists = false;
-  @Override
-  public boolean getBoolean() {
-    boolean valueA = exprA.getBoolean();
-    boolean valueB = exprB.getBoolean();
-    exists = exprA.exists() && exprB.exists();
-    return exists ? valueA == valueB : false;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+  /**
+   * An equal function for two {@link BooleanValue}s.
+   */
+  static class BooleanValueEqualFunction extends AbstractBooleanValue {
+    private final BooleanValue exprA;
+    private final BooleanValue exprB;
+    public static final String name = EqualFunction.name;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public BooleanValueEqualFunction(BooleanValue exprA, BooleanValue exprB) {
+      this.exprA = exprA;
+      this.exprB = exprB;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * An equal function for a {@link BooleanValue} and a {@link BooleanValueStream}.
- */
-class BooleanStreamEqualFunction extends AbstractBooleanValueStream {
-  private final BooleanValue baseExpr;
-  private final BooleanValueStream compExpr;
-  public static final String name = EqualFunction.name;
-  private final String funcStr;
-  private final ExpressionType funcType;
-
-  public BooleanStreamEqualFunction(BooleanValue baseExpr, BooleanValueStream compExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.compExpr = compExpr;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
-  }
+    private boolean exists = false;
+    @Override
+    public boolean getBoolean() {
+      boolean valueA = exprA.getBoolean();
+      boolean valueB = exprB.getBoolean();
+      exists = exprA.exists() && exprB.exists();
+      return exists ? valueA == valueB : false;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
 
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    boolean baseValue = baseExpr.getBoolean();
-    if (baseExpr.exists()) {
-      compExpr.streamBooleans(compValue -> cons.accept(baseValue == compValue));
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A catch-all equal function for two {@link AnalyticsValue}s.
- */
-class ValueEqualFunction extends AbstractBooleanValue {
-  private final AnalyticsValue exprA;
-  private final AnalyticsValue exprB;
-  public static final String name = EqualFunction.name;
-  private final String funcStr;
-  private final ExpressionType funcType;
-
-  public ValueEqualFunction(AnalyticsValue exprA, AnalyticsValue exprB) {
-    this.exprA = exprA;
-    this.exprB = exprB;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
-  }
+  /**
+   * An equal function for a {@link BooleanValue} and a {@link BooleanValueStream}.
+   */
+  static class BooleanStreamEqualFunction extends AbstractBooleanValueStream {
+    private final BooleanValue baseExpr;
+    private final BooleanValueStream compExpr;
+    public static final String name = EqualFunction.name;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public BooleanStreamEqualFunction(BooleanValue baseExpr, BooleanValueStream compExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.compExpr = compExpr;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+    }
 
-  private boolean exists = false;
-  @Override
-  public boolean getBoolean() {
-    Object valueA = exprA.getObject();
-    Object valueB = exprB.getObject();
-    exists = exprA.exists() && exprB.exists();
-    return exists ? valueA.equals(valueB) : false;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      boolean baseValue = baseExpr.getBoolean();
+      if (baseExpr.exists()) {
+        compExpr.streamBooleans(compValue -> cons.accept(baseValue == compValue));
+      }
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * A catch-all equal function for an {@link AnalyticsValue} and an {@link AnalyticsValueStream}.
- */
-class StreamEqualFunction extends AbstractBooleanValueStream {
-  private final AnalyticsValue baseExpr;
-  private final AnalyticsValueStream compExpr;
-  public static final String name = EqualFunction.name;
-  private final String funcStr;
-  private final ExpressionType funcType;
-
-  public StreamEqualFunction(AnalyticsValue baseExpr, AnalyticsValueStream compExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.compExpr = compExpr;
-    this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    Object baseValue = baseExpr.getObject();
-    if (baseExpr.exists()) {
-      compExpr.streamObjects(compValue -> cons.accept(baseValue.equals(compValue)));
+  /**
+   * A catch-all equal function for two {@link AnalyticsValue}s.
+   */
+  static class ValueEqualFunction extends AbstractBooleanValue {
+    private final AnalyticsValue exprA;
+    private final AnalyticsValue exprB;
+    public static final String name = EqualFunction.name;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public ValueEqualFunction(AnalyticsValue exprA, AnalyticsValue exprB) {
+      this.exprA = exprA;
+      this.exprB = exprB;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,exprA,exprB);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,exprA,exprB);
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return funcStr;
+    private boolean exists = false;
+    @Override
+    public boolean getBoolean() {
+      Object valueA = exprA.getObject();
+      Object valueB = exprB.getObject();
+      exists = exprA.exists() && exprB.exists();
+      return exists ? valueA.equals(valueB) : false;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+
+  /**
+   * A catch-all equal function for an {@link AnalyticsValue} and an {@link AnalyticsValueStream}.
+   */
+  static class StreamEqualFunction extends AbstractBooleanValueStream {
+    private final AnalyticsValue baseExpr;
+    private final AnalyticsValueStream compExpr;
+    public static final String name = EqualFunction.name;
+    private final String funcStr;
+    private final ExpressionType funcType;
+
+    public StreamEqualFunction(AnalyticsValue baseExpr, AnalyticsValueStream compExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.compExpr = compExpr;
+      this.funcStr = AnalyticsValueStream.createExpressionString(name,baseExpr,compExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(funcStr,baseExpr,compExpr);
+    }
+
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      Object baseValue = baseExpr.getObject();
+      if (baseExpr.exists()) {
+        compExpr.streamObjects(compValue -> cons.accept(baseValue.equals(compValue)));
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return funcStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 }
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
index 0e28917..44f571d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/ExistsFunction.java
@@ -42,82 +42,85 @@ public class ExistsFunction {
     }
     return new ValueStreamExistsFunction(param);
   });
-}
-/**
- * Exists function that supports {@link AnalyticsValueStream}s.
- */
-class ValueStreamExistsFunction extends AbstractBooleanValue {
-  private final AnalyticsValueStream param;
-  public static final String name = ExistsFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public ValueStreamExistsFunction(AnalyticsValueStream param) throws SolrException {
-    this.param = param;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
-  }
+  /**
+   * Exists function that supports {@link AnalyticsValueStream}s.
+   */
+  static class ValueStreamExistsFunction extends AbstractBooleanValue {
+    private final AnalyticsValueStream param;
+    public static final String name = ExistsFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  private boolean exists;
-  @Override
-  public boolean getBoolean() {
-    exists = false;
-    param.streamObjects(val -> exists = true);
-    return exists;
-  }
-  @Override
-  public boolean exists() {
-    return true;
-  }
+    public ValueStreamExistsFunction(AnalyticsValueStream param) throws SolrException {
+      this.param = param;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-/**
- * Exists function that supports {@link AnalyticsValue}s.
- */
-class ValueExistsFunction extends AbstractBooleanValue {
-  private final AnalyticsValue param;
-  public static final String name = ExistsFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
+    private boolean exists;
+    @Override
+    public boolean getBoolean() {
+      exists = false;
+      param.streamObjects(val -> exists = true);
+      return exists;
+    }
+    @Override
+    public boolean exists() {
+      return true;
+    }
 
-  public ValueExistsFunction(AnalyticsValue param) throws SolrException {
-    this.param = param;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public boolean getBoolean() {
-    param.getObject();
-    return param.exists();
-  }
-  @Override
-  public boolean exists() {
-    return true;
-  }
+  /**
+   * Exists function that supports {@link AnalyticsValue}s.
+   */
+  static class ValueExistsFunction extends AbstractBooleanValue {
+    private final AnalyticsValue param;
+    public static final String name = ExistsFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    public ValueExistsFunction(AnalyticsValue param) throws SolrException {
+      this.param = param;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,param);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,param);
+    }
+
+    @Override
+    public boolean getBoolean() {
+      param.getObject();
+      return param.exists();
+    }
+    @Override
+    public boolean exists() {
+      return true;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 }
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
index 7bc38fd..592fc1a 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FillMissingFunction.java
@@ -128,716 +128,733 @@ public class FillMissingFunction {
     }
     return new StreamFillMissingFunction(baseExpr,fillExpr);
   });
-}
-class StreamFillMissingFunction extends AbstractAnalyticsValueStream implements Consumer<Object> {
-  private final AnalyticsValueStream baseExpr;
-  private final AnalyticsValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StreamFillMissingFunction(AnalyticsValueStream baseExpr, AnalyticsValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
 
-  boolean exists = false;
-  Consumer<Object> cons;
+  static class StreamFillMissingFunction extends AbstractAnalyticsValueStream implements Consumer<Object> {
+    private final AnalyticsValueStream baseExpr;
+    private final AnalyticsValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public void streamObjects(Consumer<Object> cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamObjects(this);
-    if (!exists) {
-      fillExpr.streamObjects(cons);
+    public StreamFillMissingFunction(AnalyticsValueStream baseExpr, AnalyticsValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
     }
-  }
-  @Override
-  public void accept(Object value) {
-    exists = true;
-    cons.accept(value);
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class ValueFillMissingFunction extends AbstractAnalyticsValue {
-  private final AnalyticsValue baseExpr;
-  private final AnalyticsValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public ValueFillMissingFunction(AnalyticsValue baseExpr, AnalyticsValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+    boolean exists = false;
+    Consumer<Object> cons;
 
-  boolean exists = false;
+    @Override
+    public void streamObjects(Consumer<Object> cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamObjects(this);
+      if (!exists) {
+        fillExpr.streamObjects(cons);
+      }
+    }
+    @Override
+    public void accept(Object value) {
+      exists = true;
+      cons.accept(value);
+    }
 
-  @Override
-  public Object getObject() {
-    Object value = baseExpr.getObject();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getObject();
-      exists = fillExpr.exists();
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanStreamFillMissingFunction extends AbstractBooleanValueStream implements BooleanConsumer {
-  private final BooleanValueStream baseExpr;
-  private final BooleanValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public BooleanStreamFillMissingFunction(BooleanValueStream baseExpr, BooleanValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+  static class ValueFillMissingFunction extends AbstractAnalyticsValue {
+    private final AnalyticsValue baseExpr;
+    private final AnalyticsValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public ValueFillMissingFunction(AnalyticsValue baseExpr, AnalyticsValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
 
-  boolean exists = false;
-  BooleanConsumer cons;
+    boolean exists = false;
 
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamBooleans(this);
-    if (!exists) {
-      fillExpr.streamBooleans(cons);
+    @Override
+    public Object getObject() {
+      Object value = baseExpr.getObject();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getObject();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-  }
-  @Override
-  public void accept(boolean value) {
-    exists = true;
-    cons.accept(value);
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanFillMissingFunction extends AbstractBooleanValue {
-  private final BooleanValue baseExpr;
-  private final BooleanValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public BooleanFillMissingFunction(BooleanValue baseExpr, BooleanValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class BooleanStreamFillMissingFunction extends AbstractBooleanValueStream implements BooleanConsumer {
+    private final BooleanValueStream baseExpr;
+    private final BooleanValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public boolean getBoolean() {
-    boolean value = baseExpr.getBoolean();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getBoolean();
-      exists = fillExpr.exists();
+    public BooleanStreamFillMissingFunction(BooleanValueStream baseExpr, BooleanValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntStreamFillMissingFunction extends AbstractIntValueStream implements IntConsumer {
-  private final IntValueStream baseExpr;
-  private final IntValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public IntStreamFillMissingFunction(IntValueStream baseExpr, IntValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+    boolean exists = false;
+    BooleanConsumer cons;
 
-  boolean exists = false;
-  IntConsumer cons;
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamBooleans(this);
+      if (!exists) {
+        fillExpr.streamBooleans(cons);
+      }
+    }
+    @Override
+    public void accept(boolean value) {
+      exists = true;
+      cons.accept(value);
+    }
 
-  @Override
-  public void streamInts(IntConsumer cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamInts(this);
-    if (!exists) {
-      fillExpr.streamInts(cons);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
-  }
-  @Override
-  public void accept(int value) {
-    exists = true;
-    cons.accept(value);
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntFillMissingFunction extends AbstractIntValue {
-  private final IntValue baseExpr;
-  private final IntValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public IntFillMissingFunction(IntValue baseExpr, IntValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+  static class BooleanFillMissingFunction extends AbstractBooleanValue {
+    private final BooleanValue baseExpr;
+    private final BooleanValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public BooleanFillMissingFunction(BooleanValue baseExpr, BooleanValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
 
-  boolean exists = false;
+    boolean exists = false;
 
-  @Override
-  public int getInt() {
-    int value = baseExpr.getInt();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getInt();
-      exists = fillExpr.exists();
+    @Override
+    public boolean getBoolean() {
+      boolean value = baseExpr.getBoolean();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getBoolean();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongStreamFillMissingFunction extends AbstractLongValueStream implements LongConsumer {
-  private final LongValueStream baseExpr;
-  private final LongValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public LongStreamFillMissingFunction(LongValueStream baseExpr, LongValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
-  LongConsumer cons;
+  static class IntStreamFillMissingFunction extends AbstractIntValueStream implements IntConsumer {
+    private final IntValueStream baseExpr;
+    private final IntValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamLongs(this);
-    if (!exists) {
-      fillExpr.streamLongs(cons);
+    public IntStreamFillMissingFunction(IntValueStream baseExpr, IntValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
     }
-  }
-  @Override
-  public void accept(long value) {
-    exists = true;
-    cons.accept(value);
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongFillMissingFunction extends AbstractLongValue {
-  private final LongValue baseExpr;
-  private final LongValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public LongFillMissingFunction(LongValue baseExpr, LongValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+    boolean exists = false;
+    IntConsumer cons;
 
-  boolean exists = false;
+    @Override
+    public void streamInts(IntConsumer cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamInts(this);
+      if (!exists) {
+        fillExpr.streamInts(cons);
+      }
+    }
+    @Override
+    public void accept(int value) {
+      exists = true;
+      cons.accept(value);
+    }
 
-  @Override
-  public long getLong() {
-    long value = baseExpr.getLong();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getLong();
-      exists = fillExpr.exists();
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatStreamFillMissingFunction extends AbstractFloatValueStream implements FloatConsumer {
-  private final FloatValueStream baseExpr;
-  private final FloatValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public FloatStreamFillMissingFunction(FloatValueStream baseExpr, FloatValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+  static class IntFillMissingFunction extends AbstractIntValue {
+    private final IntValue baseExpr;
+    private final IntValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public IntFillMissingFunction(IntValue baseExpr, IntValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
 
-  boolean exists = false;
-  FloatConsumer cons;
+    boolean exists = false;
 
-  @Override
-  public void streamFloats(FloatConsumer cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamFloats(this);
-    if (!exists) {
-      fillExpr.streamFloats(cons);
+    @Override
+    public int getInt() {
+      int value = baseExpr.getInt();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getInt();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-  }
-  @Override
-  public void accept(float value) {
-    exists = true;
-    cons.accept(value);
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatFillMissingFunction extends AbstractFloatValue {
-  private final FloatValue baseExpr;
-  private final FloatValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public FloatFillMissingFunction(FloatValue baseExpr, FloatValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class LongStreamFillMissingFunction extends AbstractLongValueStream implements LongConsumer {
+    private final LongValueStream baseExpr;
+    private final LongValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public float getFloat() {
-    float value = baseExpr.getFloat();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getFloat();
-      exists = fillExpr.exists();
+    public LongStreamFillMissingFunction(LongValueStream baseExpr, LongValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleStreamFillMissingFunction extends AbstractDoubleValueStream implements DoubleConsumer {
-  private final DoubleValueStream baseExpr;
-  private final DoubleValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DoubleStreamFillMissingFunction(DoubleValueStream baseExpr, DoubleValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+    boolean exists = false;
+    LongConsumer cons;
 
-  boolean exists = false;
-  DoubleConsumer cons;
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamLongs(this);
+      if (!exists) {
+        fillExpr.streamLongs(cons);
+      }
+    }
+    @Override
+    public void accept(long value) {
+      exists = true;
+      cons.accept(value);
+    }
 
-  @Override
-  public void streamDoubles(DoubleConsumer cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamDoubles(this);
-    if (!exists) {
-      fillExpr.streamDoubles(cons);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
-  }
-  @Override
-  public void accept(double value) {
-    exists = true;
-    cons.accept(value);
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleFillMissingFunction extends AbstractDoubleValue {
-  private final DoubleValue baseExpr;
-  private final DoubleValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DoubleFillMissingFunction(DoubleValue baseExpr, DoubleValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+  static class LongFillMissingFunction extends AbstractLongValue {
+    private final LongValue baseExpr;
+    private final LongValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public LongFillMissingFunction(LongValue baseExpr, LongValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
 
-  boolean exists = false;
+    boolean exists = false;
 
-  @Override
-  public double getDouble() {
-    double value = baseExpr.getDouble();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getDouble();
-      exists = fillExpr.exists();
+    @Override
+    public long getLong() {
+      long value = baseExpr.getLong();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getLong();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateStreamFillMissingFunction extends AbstractDateValueStream implements LongConsumer {
-  private final DateValueStream baseExpr;
-  private final DateValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DateStreamFillMissingFunction(DateValueStream baseExpr, DateValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
-  LongConsumer cons;
+  static class FloatStreamFillMissingFunction extends AbstractFloatValueStream implements FloatConsumer {
+    private final FloatValueStream baseExpr;
+    private final FloatValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamLongs(this);
-    if (!exists) {
-      fillExpr.streamLongs(cons);
+    public FloatStreamFillMissingFunction(FloatValueStream baseExpr, FloatValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
     }
-  }
-  @Override
-  public void accept(long value) {
-    exists = true;
-    cons.accept(value);
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateFillMissingFunction extends AbstractDateValue {
-  private final DateValue baseExpr;
-  private final DateValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DateFillMissingFunction(DateValue baseExpr, DateValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+    boolean exists = false;
+    FloatConsumer cons;
 
-  boolean exists = false;
+    @Override
+    public void streamFloats(FloatConsumer cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamFloats(this);
+      if (!exists) {
+        fillExpr.streamFloats(cons);
+      }
+    }
+    @Override
+    public void accept(float value) {
+      exists = true;
+      cons.accept(value);
+    }
 
-  @Override
-  public long getLong() {
-    long value = baseExpr.getLong();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getLong();
-      exists = fillExpr.exists();
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringStreamFillMissingFunction extends AbstractStringValueStream implements Consumer<String> {
-  private final StringValueStream baseExpr;
-  private final StringValueStream fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StringStreamFillMissingFunction(StringValueStream baseExpr, StringValueStream fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
-  }
+  static class FloatFillMissingFunction extends AbstractFloatValue {
+    private final FloatValue baseExpr;
+    private final FloatValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  boolean exists = false;
-  Consumer<String> cons;
+    public FloatFillMissingFunction(FloatValue baseExpr, FloatValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
 
-  @Override
-  public void streamStrings(Consumer<String> cons) {
-    exists = false;
-    this.cons = cons;
-    baseExpr.streamStrings(this);
-    if (!exists) {
-      fillExpr.streamStrings(cons);
+    boolean exists = false;
+
+    @Override
+    public float getFloat() {
+      float value = baseExpr.getFloat();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getFloat();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-  }
-  @Override
-  public void accept(String value) {
-    exists = true;
-    cons.accept(value);
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class StringFillMissingFunction extends AbstractStringValue {
-  private final StringValue baseExpr;
-  private final StringValue fillExpr;
-  public static final String name = FillMissingFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StringFillMissingFunction(StringValue baseExpr, StringValue fillExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.fillExpr = fillExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+
+  static class DoubleStreamFillMissingFunction extends AbstractDoubleValueStream implements DoubleConsumer {
+    private final DoubleValueStream baseExpr;
+    private final DoubleValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DoubleStreamFillMissingFunction(DoubleValueStream baseExpr, DoubleValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
+
+    boolean exists = false;
+    DoubleConsumer cons;
+
+    @Override
+    public void streamDoubles(DoubleConsumer cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamDoubles(this);
+      if (!exists) {
+        fillExpr.streamDoubles(cons);
+      }
+    }
+    @Override
+    public void accept(double value) {
+      exists = true;
+      cons.accept(value);
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class DoubleFillMissingFunction extends AbstractDoubleValue {
+    private final DoubleValue baseExpr;
+    private final DoubleValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public String getString() {
-    String value = baseExpr.getString();
-    exists = true;
-    if (!baseExpr.exists()) {
-      value = fillExpr.getString();
-      exists = fillExpr.exists();
+    public DoubleFillMissingFunction(DoubleValue baseExpr, DoubleValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public double getDouble() {
+      double value = baseExpr.getDouble();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getDouble();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
-    return value;
   }
-  @Override
-  public boolean exists() {
-    return exists;
+
+  static class DateStreamFillMissingFunction extends AbstractDateValueStream implements LongConsumer {
+    private final DateValueStream baseExpr;
+    private final DateValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DateStreamFillMissingFunction(DateValueStream baseExpr, DateValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
+
+    boolean exists = false;
+    LongConsumer cons;
+
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamLongs(this);
+      if (!exists) {
+        fillExpr.streamLongs(cons);
+      }
+    }
+    @Override
+    public void accept(long value) {
+      exists = true;
+      cons.accept(value);
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public String getName() {
-    return name;
+  static class DateFillMissingFunction extends AbstractDateValue {
+    private final DateValue baseExpr;
+    private final DateValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DateFillMissingFunction(DateValue baseExpr, DateValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public long getLong() {
+      long value = baseExpr.getLong();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getLong();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
+
+  static class StringStreamFillMissingFunction extends AbstractStringValueStream implements Consumer<String> {
+    private final StringValueStream baseExpr;
+    private final StringValueStream fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StringStreamFillMissingFunction(StringValueStream baseExpr, StringValueStream fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
+
+    boolean exists = false;
+    Consumer<String> cons;
+
+    @Override
+    public void streamStrings(Consumer<String> cons) {
+      exists = false;
+      this.cons = cons;
+      baseExpr.streamStrings(this);
+      if (!exists) {
+        fillExpr.streamStrings(cons);
+      }
+    }
+    @Override
+    public void accept(String value) {
+      exists = true;
+      cons.accept(value);
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+
+  static class StringFillMissingFunction extends AbstractStringValue {
+    private final StringValue baseExpr;
+    private final StringValue fillExpr;
+    public static final String name = FillMissingFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StringFillMissingFunction(StringValue baseExpr, StringValue fillExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.fillExpr = fillExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,fillExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,fillExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public String getString() {
+      String value = baseExpr.getString();
+      exists = true;
+      if (!baseExpr.exists()) {
+        value = fillExpr.getString();
+        exists = fillExpr.exists();
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
\ No newline at end of file
+}
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
index 6dac746..f266e79 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/FilterFunction.java
@@ -128,596 +128,613 @@ public class FilterFunction {
     }
     return new StreamFilterFunction(baseExpr,filterExpr);
   });
-}
-class StreamFilterFunction extends AbstractAnalyticsValueStream {
-  private final AnalyticsValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
 
-  @Override
-  public void streamObjects(Consumer<Object> cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamObjects(cons);
+  static class StreamFilterFunction extends AbstractAnalyticsValueStream {
+    private final AnalyticsValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StreamFilterFunction(AnalyticsValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class ValueFilterFunction extends AbstractAnalyticsValue {
-  private final AnalyticsValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    @Override
+    public void streamObjects(Consumer<Object> cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamObjects(cons);
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class ValueFilterFunction extends AbstractAnalyticsValue {
+    private final AnalyticsValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public Object getObject() {
-    Object value = baseExpr.getObject();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    public ValueFilterFunction(AnalyticsValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
-  private final BooleanValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+    boolean exists = false;
 
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamBooleans(cons);
+    @Override
+    public Object getObject() {
+      Object value = baseExpr.getObject();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanFilterFunction extends AbstractBooleanValue {
-  private final BooleanValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class BooleanStreamFilterFunction extends AbstractBooleanValueStream {
+    private final BooleanValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public boolean getBoolean() {
-    boolean value = baseExpr.getBoolean();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    public BooleanStreamFilterFunction(BooleanValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntStreamFilterFunction extends AbstractIntValueStream {
-  private final IntValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamBooleans(cons);
+      }
+    }
 
-  @Override
-  public void streamInts(IntConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamInts(cons);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class IntFilterFunction extends AbstractIntValue {
-  private final IntValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+  static class BooleanFilterFunction extends AbstractBooleanValue {
+    private final BooleanValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  boolean exists = false;
+    public BooleanFilterFunction(BooleanValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
 
-  @Override
-  public int getInt() {
-    int value = baseExpr.getInt();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    boolean exists = false;
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongStreamFilterFunction extends AbstractLongValueStream {
-  private final LongValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+    @Override
+    public boolean getBoolean() {
+      boolean value = baseExpr.getBoolean();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamLongs(cons);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class LongFilterFunction extends AbstractLongValue {
-  private final LongValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+  static class IntStreamFilterFunction extends AbstractIntValueStream {
+    private final IntValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  boolean exists = false;
+    public IntStreamFilterFunction(IntValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
 
-  @Override
-  public long getLong() {
-    long value = baseExpr.getLong();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    @Override
+    public void streamInts(IntConsumer cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamInts(cons);
+      }
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatStreamFilterFunction extends AbstractFloatValueStream {
-  private final FloatValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public void streamFloats(FloatConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamFloats(cons);
+  static class IntFilterFunction extends AbstractIntValue {
+    private final IntValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public IntFilterFunction(IntValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class FloatFilterFunction extends AbstractFloatValue {
-  private final FloatValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+    boolean exists = false;
 
-  boolean exists = false;
+    @Override
+    public int getInt() {
+      int value = baseExpr.getInt();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
 
-  @Override
-  public float getFloat() {
-    float value = baseExpr.getFloat();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
-  private final DoubleValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+  static class LongStreamFilterFunction extends AbstractLongValueStream {
+    private final LongValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public void streamDoubles(DoubleConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamDoubles(cons);
+    public LongStreamFilterFunction(LongValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DoubleFilterFunction extends AbstractDoubleValue {
-  private final DoubleValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamLongs(cons);
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class LongFilterFunction extends AbstractLongValue {
+    private final LongValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public double getDouble() {
-    double value = baseExpr.getDouble();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    public LongFilterFunction(LongValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateStreamFilterFunction extends AbstractDateValueStream {
-  private final DateValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+    boolean exists = false;
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamLongs(cons);
+    @Override
+    public long getLong() {
+      long value = baseExpr.getLong();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class DateFilterFunction extends AbstractDateValue {
-  private final DateValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class FloatStreamFilterFunction extends AbstractFloatValueStream {
+    private final FloatValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public long getLong() {
-    long value = baseExpr.getLong();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
+    public FloatStreamFilterFunction(FloatValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class StringStreamFilterFunction extends AbstractStringValueStream {
-  private final StringValueStream baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
-  }
+    @Override
+    public void streamFloats(FloatConsumer cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamFloats(cons);
+      }
+    }
 
-  @Override
-  public void streamStrings(Consumer<String> cons) {
-    if (filterExpr.getBoolean() && filterExpr.exists()) {
-      baseExpr.streamStrings(cons);
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+  static class FloatFilterFunction extends AbstractFloatValue {
+    private final FloatValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public FloatFilterFunction(FloatValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public float getFloat() {
+      float value = baseExpr.getFloat();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class StringFilterFunction extends AbstractStringValue {
-  private final StringValue baseExpr;
-  private final BooleanValue filterExpr;
-  public static final String name = FilterFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
-    this.baseExpr = baseExpr;
-    this.filterExpr = filterExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+
+  static class DoubleStreamFilterFunction extends AbstractDoubleValueStream {
+    private final DoubleValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DoubleStreamFilterFunction(DoubleValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    @Override
+    public void streamDoubles(DoubleConsumer cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamDoubles(cons);
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  boolean exists = false;
+  static class DoubleFilterFunction extends AbstractDoubleValue {
+    private final DoubleValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public String getString() {
-    String value = baseExpr.getString();
-    exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
-    return value;
+    public DoubleFilterFunction(DoubleValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public double getDouble() {
+      double value = baseExpr.getDouble();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public boolean exists() {
-    return exists;
+
+  static class DateStreamFilterFunction extends AbstractDateValueStream {
+    private final DateValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DateStreamFilterFunction(DateValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamLongs(cons);
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
 
-  @Override
-  public String getName() {
-    return name;
+  static class DateFilterFunction extends AbstractDateValue {
+    private final DateValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DateFilterFunction(DateValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public long getLong() {
+      long value = baseExpr.getLong();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
+
+  static class StringStreamFilterFunction extends AbstractStringValueStream {
+    private final StringValueStream baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StringStreamFilterFunction(StringValueStream baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    @Override
+    public void streamStrings(Consumer<String> cons) {
+      if (filterExpr.getBoolean() && filterExpr.exists()) {
+        baseExpr.streamStrings(cons);
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+
+  static class StringFilterFunction extends AbstractStringValue {
+    private final StringValue baseExpr;
+    private final BooleanValue filterExpr;
+    public static final String name = FilterFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public StringFilterFunction(StringValue baseExpr, BooleanValue filterExpr) throws SolrException {
+      this.baseExpr = baseExpr;
+      this.filterExpr = filterExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,baseExpr,filterExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,baseExpr,filterExpr);
+    }
+
+    boolean exists = false;
+
+    @Override
+    public String getString() {
+      String value = baseExpr.getString();
+      exists = baseExpr.exists() && filterExpr.getBoolean() && filterExpr.exists();
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
\ No newline at end of file
+}
+
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
index ff28b90..a506e46 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/function/mapping/IfFunction.java
@@ -172,722 +172,738 @@ public class IfFunction extends AbstractAnalyticsValueStream {
   public ExpressionType getExpressionType() {
     return funcType;
   }
-}
-class ValueIfFunction extends AbstractAnalyticsValue {
-  private final BooleanValue ifExpr;
-  private final AnalyticsValue thenExpr;
-  private final AnalyticsValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
-
-  public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  private boolean exists = false;
 
-  @Override
-  public Object getObject() {
-    exists = false;
-    Object value = null;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getObject();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getObject();
-        exists = elseExpr.exists();
-      }
+  static class ValueIfFunction extends AbstractAnalyticsValue {
+    private final BooleanValue ifExpr;
+    private final AnalyticsValue thenExpr;
+    private final AnalyticsValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public ValueIfFunction(BooleanValue ifExpr, AnalyticsValue thenExpr, AnalyticsValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
-  }
-}
-class BooleanStreamIfFunction extends AbstractBooleanValueStream {
-  private final BooleanValue ifExpr;
-  private final BooleanValueStream thenExpr;
-  private final BooleanValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
+    private boolean exists = false;
 
-  public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
-
-  @Override
-  public void streamBooleans(BooleanConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamBooleans(cons);
-      }
-      else {
-        elseExpr.streamBooleans(cons);
-      }
+    @Override
+    public Object getObject() {
+      exists = false;
+      Object value = null;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getObject();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getObject();
+          exists = elseExpr.exists();
+        }
+      }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
     }
   }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+  static class BooleanStreamIfFunction extends AbstractBooleanValueStream {
+    private final BooleanValue ifExpr;
+    private final BooleanValueStream thenExpr;
+    private final BooleanValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public BooleanStreamIfFunction(BooleanValue ifExpr, BooleanValueStream thenExpr, BooleanValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
+
+    @Override
+    public void streamBooleans(BooleanConsumer cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamBooleans(cons);
+        }
+        else {
+          elseExpr.streamBooleans(cons);
+        }
+      }
+    }
+
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class BooleanIfFunction extends AbstractBooleanValue {
-  private final BooleanValue ifExpr;
-  private final BooleanValue thenExpr;
-  private final BooleanValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class BooleanIfFunction extends AbstractBooleanValue {
+    private final BooleanValue ifExpr;
+    private final BooleanValue thenExpr;
+    private final BooleanValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public BooleanIfFunction(BooleanValue ifExpr, BooleanValue thenExpr, BooleanValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  private boolean exists = false;
+    private boolean exists = false;
 
-  @Override
-  public boolean getBoolean() {
-    exists = false;
-    boolean value = false;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getBoolean();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getBoolean();
-        exists = elseExpr.exists();
+    @Override
+    public boolean getBoolean() {
+      exists = false;
+      boolean value = false;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getBoolean();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getBoolean();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class IntStreamIfFunction extends AbstractIntValueStream {
-  private final BooleanValue ifExpr;
-  private final IntValueStream thenExpr;
-  private final IntValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class IntStreamIfFunction extends AbstractIntValueStream {
+    private final BooleanValue ifExpr;
+    private final IntValueStream thenExpr;
+    private final IntValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public IntStreamIfFunction(BooleanValue ifExpr, IntValueStream thenExpr, IntValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  @Override
-  public void streamInts(IntConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamInts(cons);
-      }
-      else {
-        elseExpr.streamInts(cons);
+    @Override
+    public void streamInts(IntConsumer cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamInts(cons);
+        }
+        else {
+          elseExpr.streamInts(cons);
+        }
       }
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class IntIfFunction extends AbstractIntValue {
-  private final BooleanValue ifExpr;
-  private final IntValue thenExpr;
-  private final IntValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class IntIfFunction extends AbstractIntValue {
+    private final BooleanValue ifExpr;
+    private final IntValue thenExpr;
+    private final IntValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public IntIfFunction(BooleanValue ifExpr, IntValue thenExpr, IntValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  private boolean exists = false;
+    private boolean exists = false;
 
-  @Override
-  public int getInt() {
-    exists = false;
-    int value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getInt();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getInt();
-        exists = elseExpr.exists();
+    @Override
+    public int getInt() {
+      exists = false;
+      int value = 0;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getInt();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getInt();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class LongStreamIfFunction extends AbstractLongValueStream {
-  private final BooleanValue ifExpr;
-  private final LongValueStream thenExpr;
-  private final LongValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class LongStreamIfFunction extends AbstractLongValueStream {
+    private final BooleanValue ifExpr;
+    private final LongValueStream thenExpr;
+    private final LongValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public LongStreamIfFunction(BooleanValue ifExpr, LongValueStream thenExpr, LongValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamLongs(cons);
-      }
-      else {
-        elseExpr.streamLongs(cons);
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamLongs(cons);
+        }
+        else {
+          elseExpr.streamLongs(cons);
+        }
       }
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class LongIfFunction extends AbstractLongValue {
-  private final BooleanValue ifExpr;
-  private final LongValue thenExpr;
-  private final LongValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class LongIfFunction extends AbstractLongValue {
+    private final BooleanValue ifExpr;
+    private final LongValue thenExpr;
+    private final LongValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public LongIfFunction(BooleanValue ifExpr, LongValue thenExpr, LongValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  private boolean exists = false;
+    private boolean exists = false;
 
-  @Override
-  public long getLong() {
-    exists = false;
-    long value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getLong();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getLong();
-        exists = elseExpr.exists();
+    @Override
+    public long getLong() {
+      exists = false;
+      long value = 0;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getLong();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getLong();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class FloatStreamIfFunction extends AbstractFloatValueStream {
-  private final BooleanValue ifExpr;
-  private final FloatValueStream thenExpr;
-  private final FloatValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class FloatStreamIfFunction extends AbstractFloatValueStream {
+    private final BooleanValue ifExpr;
+    private final FloatValueStream thenExpr;
+    private final FloatValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public FloatStreamIfFunction(BooleanValue ifExpr, FloatValueStream thenExpr, FloatValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  @Override
-  public void streamFloats(FloatConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamFloats(cons);
-      }
-      else {
-        elseExpr.streamFloats(cons);
+    @Override
+    public void streamFloats(FloatConsumer cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamFloats(cons);
+        }
+        else {
+          elseExpr.streamFloats(cons);
+        }
       }
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class FloatIfFunction extends AbstractFloatValue {
-  private final BooleanValue ifExpr;
-  private final FloatValue thenExpr;
-  private final FloatValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class FloatIfFunction extends AbstractFloatValue {
+    private final BooleanValue ifExpr;
+    private final FloatValue thenExpr;
+    private final FloatValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public FloatIfFunction(BooleanValue ifExpr, FloatValue thenExpr, FloatValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  private boolean exists = false;
+    private boolean exists = false;
 
-  @Override
-  public float getFloat() {
-    exists = false;
-    float value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getFloat();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getFloat();
-        exists = elseExpr.exists();
+    @Override
+    public float getFloat() {
+      exists = false;
+      float value = 0;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getFloat();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getFloat();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class DoubleStreamIfFunction extends AbstractDoubleValueStream {
-  private final BooleanValue ifExpr;
-  private final DoubleValueStream thenExpr;
-  private final DoubleValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class DoubleStreamIfFunction extends AbstractDoubleValueStream {
+    private final BooleanValue ifExpr;
+    private final DoubleValueStream thenExpr;
+    private final DoubleValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DoubleStreamIfFunction(BooleanValue ifExpr, DoubleValueStream thenExpr, DoubleValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  @Override
-  public void streamDoubles(DoubleConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamDoubles(cons);
-      }
-      else {
-        elseExpr.streamDoubles(cons);
+    @Override
+    public void streamDoubles(DoubleConsumer cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamDoubles(cons);
+        }
+        else {
+          elseExpr.streamDoubles(cons);
+        }
       }
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class DoubleIfFunction extends AbstractDoubleValue {
-  private final BooleanValue ifExpr;
-  private final DoubleValue thenExpr;
-  private final DoubleValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class DoubleIfFunction extends AbstractDoubleValue {
+    private final BooleanValue ifExpr;
+    private final DoubleValue thenExpr;
+    private final DoubleValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DoubleIfFunction(BooleanValue ifExpr, DoubleValue thenExpr, DoubleValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  private boolean exists = false;
+    private boolean exists = false;
 
-  @Override
-  public double getDouble() {
-    exists = false;
-    double value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getDouble();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getDouble();
-        exists = elseExpr.exists();
+    @Override
+    public double getDouble() {
+      exists = false;
+      double value = 0;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getDouble();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getDouble();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class DateStreamIfFunction extends AbstractDateValueStream {
-  private final BooleanValue ifExpr;
-  private final DateValueStream thenExpr;
-  private final DateValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class DateStreamIfFunction extends AbstractDateValueStream {
+    private final BooleanValue ifExpr;
+    private final DateValueStream thenExpr;
+    private final DateValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DateStreamIfFunction(BooleanValue ifExpr, DateValueStream thenExpr, DateValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  @Override
-  public void streamLongs(LongConsumer cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamLongs(cons);
-      }
-      else {
-        elseExpr.streamLongs(cons);
+    @Override
+    public void streamLongs(LongConsumer cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamLongs(cons);
+        }
+        else {
+          elseExpr.streamLongs(cons);
+        }
       }
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class DateIfFunction extends AbstractDateValue {
-  private final BooleanValue ifExpr;
-  private final DateValue thenExpr;
-  private final DateValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class DateIfFunction extends AbstractDateValue {
+    private final BooleanValue ifExpr;
+    private final DateValue thenExpr;
+    private final DateValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
+
+    public DateIfFunction(BooleanValue ifExpr, DateValue thenExpr, DateValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  private boolean exists = false;
+    private boolean exists = false;
 
-  @Override
-  public long getLong() {
-    exists = false;
-    long value = 0;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getLong();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getLong();
-        exists = elseExpr.exists();
+    @Override
+    public long getLong() {
+      exists = false;
+      long value = 0;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getLong();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getLong();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class StringStreamIfFunction extends AbstractStringValueStream {
-  private final BooleanValue ifExpr;
-  private final StringValueStream thenExpr;
-  private final StringValueStream elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class StringStreamIfFunction extends AbstractStringValueStream {
+    private final BooleanValue ifExpr;
+    private final StringValueStream thenExpr;
+    private final StringValueStream elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  @Override
-  public void streamStrings(Consumer<String> cons) {
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        thenExpr.streamStrings(cons);
-      }
-      else {
-        elseExpr.streamStrings(cons);
+    public StringStreamIfFunction(BooleanValue ifExpr, StringValueStream thenExpr, StringValueStream elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
+
+    @Override
+    public void streamStrings(Consumer<String> cons) {
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          thenExpr.streamStrings(cons);
+        }
+        else {
+          elseExpr.streamStrings(cons);
+        }
       }
     }
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
+    @Override
+    public String getExpressionStr() {
+      return exprStr;
+    }
+    @Override
+    public ExpressionType getExpressionType() {
+      return funcType;
+    }
   }
-}
-class StringIfFunction extends AbstractStringValue {
-  private final BooleanValue ifExpr;
-  private final StringValue thenExpr;
-  private final StringValue elseExpr;
-  public static final String name = IfFunction.name;
-  private final String exprStr;
-  private final ExpressionType funcType;
 
-  public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
-    this.ifExpr = ifExpr;
-    this.thenExpr = thenExpr;
-    this.elseExpr = elseExpr;
-    this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
-    this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
-  }
+  static class StringIfFunction extends AbstractStringValue {
+    private final BooleanValue ifExpr;
+    private final StringValue thenExpr;
+    private final StringValue elseExpr;
+    public static final String name = IfFunction.name;
+    private final String exprStr;
+    private final ExpressionType funcType;
 
-  private boolean exists = false;
+    public StringIfFunction(BooleanValue ifExpr, StringValue thenExpr, StringValue elseExpr) throws SolrException {
+      this.ifExpr = ifExpr;
+      this.thenExpr = thenExpr;
+      this.elseExpr = elseExpr;
+      this.exprStr = AnalyticsValueStream.createExpressionString(name,ifExpr,thenExpr,elseExpr);
+      this.funcType = AnalyticsValueStream.determineMappingPhase(exprStr,ifExpr,thenExpr,elseExpr);
+    }
 
-  @Override
-  public String getString() {
-    exists = false;
-    String value = null;
-    boolean ifValue = ifExpr.getBoolean();
-    if (ifExpr.exists()) {
-      if (ifValue) {
-        value = thenExpr.getString();
-        exists = thenExpr.exists();
-      }
-      else {
-        value = elseExpr.getString();
-        exists = elseExpr.exists();
+    private boolean exists = false;
+
+    @Override
+    public String getString() {
+      exists = false;
+      String value = null;
+      boolean ifValue = ifExpr.getBoolean();
+      if (ifExpr.exists()) {
+        if (ifValue) {
+          value = thenExpr.getString();
+          exists = thenExpr.exists();
+        }
+        else {
+          value = elseExpr.getString();
+          exists = elseExpr.exists();
+        }
       }
+      return value;
+    }
+    @Override
+    public boolean exists() {
+      return exists;
     }
-    return value;
-  }
-  @Override
-  public boolean exists() {
-    return exists;
-  }
 
-  @Override
-  public String getName() {
-    return name;
-  }
-  @Override
-  public String getExpressionStr() {
-    return exprStr;
-  }
-  @Override
-  public ExpressionType getExpressionType() {
-    return funcType;
+    @Override
+    public String getName() {
+      return name;
+    }
... 258391 lines suppressed ...


[lucene] 03/10: SOLR-13350: Fixing query component for multi-threaded case

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

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

commit b1bfe2ef8028e6ab3ba224a23fc50e5643dabe90
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Tue Mar 3 11:56:19 2020 +0530

    SOLR-13350: Fixing query component for multi-threaded case
---
 .../core/src/java/org/apache/solr/handler/component/QueryComponent.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index 5da1fac..67d6539 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -912,7 +912,7 @@ public class QueryComponent extends SearchComponent
         numFound += docs.getNumFound();
 
         NamedList sortFieldValues = (NamedList)(srsp.getSolrResponse().getResponse().get("sort_values"));
-        if (sortFieldValues.size()==0 && // we bypass merging this response only if it's partial itself
+        if (sortFieldValues == null || sortFieldValues.size()==0 && // we bypass merging this response only if it's partial itself
                             thisResponseIsPartial) { // but not the previous one!!
           continue; //fsv timeout yields empty sort_vlaues
         }


[lucene] 02/10: SOLR-13350: Adding collectors executors to CoreContainer

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

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

commit 3477c1fef477d2aa283f7789983c565add60a29f
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Tue Mar 3 11:39:41 2020 +0530

    SOLR-13350: Adding collectors executors to CoreContainer
---
 .../java/org/apache/solr/core/CoreContainer.java   | 10 +++++++
 .../src/java/org/apache/solr/core/NodeConfig.java  | 18 +++++++++++--
 .../org/apache/solr/search/SolrIndexSearcher.java  |  2 +-
 .../test/org/apache/solr/search/TestFiltering.java | 31 +++++++++++++---------
 4 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 901ff78..fc59fc7 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -184,6 +184,8 @@ public class CoreContainer {
   private volatile ExecutorService coreContainerWorkExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(
       new DefaultSolrThreadFactory("coreContainerWorkExecutor"));
 
+  final private ExecutorService collectorExecutor;
+
   private final OrderedExecutor replayUpdatesExecutor;
 
   protected volatile LogWatcher logging = null;
@@ -353,6 +355,8 @@ public class CoreContainer {
         ExecutorUtil.newMDCAwareCachedThreadPool(
             cfg.getReplayUpdatesThreads(),
             new DefaultSolrThreadFactory("replayUpdatesExecutor")));
+    this.collectorExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(cfg.getCollectorsPoolSize(),
+        new DefaultSolrThreadFactory("searcherCollectorExecutor"));
   }
 
   private synchronized void initializeAuthorizationPlugin(Map<String, Object> authorizationConf) {
@@ -543,6 +547,7 @@ public class CoreContainer {
     cfg = null;
     containerProperties = null;
     replayUpdatesExecutor = null;
+    this.collectorExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(new DefaultSolrThreadFactory("searcherCollectorExecutor"));
   }
 
   public static CoreContainer createAndLoad(Path solrHome) {
@@ -960,6 +965,7 @@ public class CoreContainer {
     }
     log.info("Shutting down CoreContainer instance=" + System.identityHashCode(this));
 
+    ExecutorUtil.shutdownAndAwaitTermination(collectorExecutor);
     ExecutorUtil.shutdownAndAwaitTermination(coreContainerAsyncTaskExecutor);
     ExecutorService customThreadPool = ExecutorUtil.newMDCAwareCachedThreadPool(new SolrjNamedThreadFactory("closeThreadPool"));
 
@@ -2055,6 +2061,10 @@ public class CoreContainer {
   public void runAsync(Runnable r) {
     coreContainerAsyncTaskExecutor.submit(r);
   }
+  
+  public ExecutorService getCollectorExecutor() {
+    return collectorExecutor;
+  }
 }
 
 class CloserThread extends Thread {
diff --git a/solr/core/src/java/org/apache/solr/core/NodeConfig.java b/solr/core/src/java/org/apache/solr/core/NodeConfig.java
index e03cdb1..a701beb 100644
--- a/solr/core/src/java/org/apache/solr/core/NodeConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/NodeConfig.java
@@ -64,6 +64,8 @@ public class NodeConfig {
 
   private final int replayUpdatesThreads;
 
+  private final int collectorsPoolSize;
+
   @Deprecated
   // This should be part of the transientCacheConfig, remove in 7.0
   private final int transientCacheSize;
@@ -86,7 +88,7 @@ public class NodeConfig {
                      String coreAdminHandlerClass, String collectionsAdminHandlerClass,
                      String healthCheckHandlerClass, String infoHandlerClass, String configSetsHandlerClass,
                      LogWatcherConfig logWatcherConfig, CloudConfig cloudConfig, Integer coreLoadThreads, int replayUpdatesThreads,
-                     int transientCacheSize, boolean useSchemaCache, String managementPath, SolrResourceLoader loader,
+                     int collectorsPoolSize, int transientCacheSize, boolean useSchemaCache, String managementPath, SolrResourceLoader loader,
                      Properties solrProperties, PluginInfo[] backupRepositoryPlugins,
                      MetricsConfig metricsConfig, PluginInfo transientCacheConfig, PluginInfo tracerConfig) {
     this.nodeName = nodeName;
@@ -106,6 +108,7 @@ public class NodeConfig {
     this.cloudConfig = cloudConfig;
     this.coreLoadThreads = coreLoadThreads;
     this.replayUpdatesThreads = replayUpdatesThreads;
+    this.collectorsPoolSize = collectorsPoolSize;
     this.transientCacheSize = transientCacheSize;
     this.useSchemaCache = useSchemaCache;
     this.managementPath = managementPath;
@@ -161,6 +164,10 @@ public class NodeConfig {
     return replayUpdatesThreads;
   }
 
+  public int getCollectorsPoolSize() {
+    return collectorsPoolSize;
+  }
+
   /**
    * Returns a directory, optionally a comma separated list of directories
    * that will be added to Solr's class path for searching for classes and plugins.
@@ -259,6 +266,7 @@ public class NodeConfig {
     private CloudConfig cloudConfig;
     private int coreLoadThreads = DEFAULT_CORE_LOAD_THREADS;
     private int replayUpdatesThreads = Runtime.getRuntime().availableProcessors();
+    private int collectorsPoolSize = DEFAULT_COLLECTORS_POOL_SIZE;
     @Deprecated
     //Remove in 7.0 and put it all in the transientCache element in solrconfig.xml
     private int transientCacheSize = DEFAULT_TRANSIENT_CACHE_SIZE;
@@ -274,6 +282,7 @@ public class NodeConfig {
     private final String nodeName;
 
     public static final int DEFAULT_CORE_LOAD_THREADS = 3;
+    public static final int DEFAULT_COLLECTORS_POOL_SIZE = 32768;
     //No:of core load threads in cloud mode is set to a default of 8
     public static final int DEFAULT_CORE_LOAD_THREADS_IN_CLOUD = 8;
 
@@ -389,6 +398,11 @@ public class NodeConfig {
       return this;
     }
 
+    public NodeConfigBuilder setCollectorsPoolSize(int collectorsPoolSize) {
+      this.collectorsPoolSize = collectorsPoolSize;
+      return this;
+    }
+
     // Remove in Solr 7.0
     @Deprecated
     public NodeConfigBuilder setTransientCacheSize(int transientCacheSize) {
@@ -435,7 +449,7 @@ public class NodeConfig {
       return new NodeConfig(nodeName, coreRootDirectory, solrDataHome, booleanQueryMaxClauseCount,
                             configSetBaseDirectory, sharedLibDirectory, shardHandlerFactoryConfig,
                             updateShardHandlerConfig, coreAdminHandlerClass, collectionsAdminHandlerClass, healthCheckHandlerClass, infoHandlerClass, configSetsHandlerClass,
-                            logWatcherConfig, cloudConfig, coreLoadThreads, replayUpdatesThreads, transientCacheSize, useSchemaCache, managementPath, loader, solrProperties,
+                            logWatcherConfig, cloudConfig, coreLoadThreads, replayUpdatesThreads, collectorsPoolSize, transientCacheSize, useSchemaCache, managementPath, loader, solrProperties,
                             backupRepositoryPlugins, metricsConfig, transientCacheConfig, tracerConfig);
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index e671b89..2f7ad6c 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -231,7 +231,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
   public SolrIndexSearcher(SolrCore core, String path, IndexSchema schema, String name, DirectoryReader r,
       boolean closeReader, boolean enableCache, boolean reserveDirectory, DirectoryFactory directoryFactory)
           throws IOException {
-    super(wrapReader(core, r));
+    super(wrapReader(core, r), core.getCoreContainer().getCollectorExecutor());
 
     this.path = path;
     this.directoryFactory = directoryFactory;
diff --git a/solr/core/src/test/org/apache/solr/search/TestFiltering.java b/solr/core/src/test/org/apache/solr/search/TestFiltering.java
index 6d5e081..392e8bc 100644
--- a/solr/core/src/test/org/apache/solr/search/TestFiltering.java
+++ b/solr/core/src/test/org/apache/solr/search/TestFiltering.java
@@ -24,7 +24,6 @@ import java.util.Locale;
 
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.search.Query;
-import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrException;
@@ -87,19 +86,14 @@ public class TestFiltering extends SolrTestCaseJ4 {
         QueryResult res = new QueryResult();
         searcher.search(res, cmd);
         set = res.getDocSet();
-        System.out.println("Live: "+bitsString(live.getFixedBitSet()));
-        System.out.println("Set: "+bitsString(set.getFixedBitSet()));
-        FixedBitSet xor = live.getFixedBitSet().clone();
-        xor.xor(set.getFixedBitSet());
-        System.out.println("xor: "+bitsString(xor));
-        assertTrue( set.equals(live) );
+        assertTrue( equals(live, set) );
 
         cmd.setQuery( QParser.getParser(qstr + " OR id:0", null, req).getQuery() );
         cmd.setFilterList( QParser.getParser(qstr + " OR id:1", null, req).getQuery() );
         res = new QueryResult();
         searcher.search(res, cmd);
         set = res.getDocSet();
-        assertTrue( set.equals(live) );
+        assertTrue( equals(live, set) );
       }
 
     } finally {
@@ -107,12 +101,23 @@ public class TestFiltering extends SolrTestCaseJ4 {
     }
   }
 
-  private String bitsString(Bits bits) {
-    String s = "";
-    for (int i=0; i<bits.length(); i++)
-      s+=bits.get(i)? 1: 0;
-    return s;
+  boolean equals(DocSet ds1, DocSet ds2) {
+    DocSet smaller = ds1.getFixedBitSet().length() < ds2.getFixedBitSet().length() ? ds1: ds2;
+    DocSet larger = ds1.getFixedBitSet().length() > ds2.getFixedBitSet().length() ? ds1: ds2;
+    for (int i=0; i<Math.max(smaller.getFixedBitSet().length(), larger.getFixedBitSet().length()); i++) {
+      if (i>=smaller.getFixedBitSet().length()) {
+        if (larger.getFixedBitSet().get(i) == true) {
+          return false;
+        }
+      } else {
+        if (larger.getFixedBitSet().get(i) != smaller.getFixedBitSet().get(i)) {
+          return false;
+        }
+      }
+    }
+    return true;
   }
+
     public void testCaching() throws Exception {
     clearIndex();
     assertU(adoc("id","4", "val_i","1"));


[lucene] 09/10: SOLR-13350: More fixes and review comments

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

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

commit 4b4514bde1186652ee7940182c3572dbb87be0d5
Author: Atri Sharma <at...@gmail.com>
AuthorDate: Thu Aug 13 10:46:21 2020 +0530

    SOLR-13350: More fixes and review comments
---
 solr/core/src/java/org/apache/solr/core/CoreContainer.java | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 1203eb7..b6cf862 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -198,7 +198,7 @@ public class CoreContainer {
   private volatile ExecutorService coreContainerWorkExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(
       new SolrNamedThreadFactory("coreContainerWorkExecutor"));
 
-  final private ExecutorService collectorExecutor;
+  private final ExecutorService collectorExecutor;
 
   private final OrderedExecutor replayUpdatesExecutor;
 
@@ -348,8 +348,8 @@ public class CoreContainer {
             cfg.getReplayUpdatesThreads(),
             new SolrNamedThreadFactory("replayUpdatesExecutor")));
     this.collectorExecutor = ExecutorUtil.newMDCAwareCachedThreadPool(cfg.getCollectorsPoolSize(),
-            new SolrNamedThreadFactory("searcherCollectorExecutor"));
-    
+            new SolrNamedThreadFactory("searcherCollector"));
+        
     this.allowPaths = new java.util.HashSet<>();
     this.allowPaths.add(cfg.getSolrHome());
     this.allowPaths.add(cfg.getCoreRootDirectory());


[lucene] 05/10: SOLR-13350: GraphQuery shouldn't use multi-threaded search

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

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

commit bde29b5858158887240f428e4a036d3aca6bf5a9
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Wed Mar 4 02:07:11 2020 +0530

    SOLR-13350: GraphQuery shouldn't use multi-threaded search
---
 solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index 2f7ad6c..034a488 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -76,6 +76,7 @@ import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.facet.UnInvertedField;
+import org.apache.solr.search.join.GraphQuery;
 import org.apache.solr.search.stats.StatsCache;
 import org.apache.solr.search.stats.StatsSource;
 import org.apache.solr.uninverting.UninvertingReader;
@@ -1615,7 +1616,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       TopDocs topDocs;
       log.info("calling from 2, query: "+query.getClass()); // nocommit
       if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0 
-          || query instanceof RankQuery) {
+          || query instanceof RankQuery || query instanceof GraphQuery) {
         log.debug("skipping collector manager");
         final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
         MaxScoreCollector maxScoreCollector = null;
@@ -1806,7 +1807,8 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
       qr.setNextCursorMark(cmd.getCursorMark());
     } else {
       TopDocs topDocs;
-      if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0 || query instanceof RankQuery) {
+      if (pf.postFilter != null || cmd.getSegmentTerminateEarly() || cmd.getTimeAllowed() > 0
+          || query instanceof RankQuery || query instanceof GraphQuery) {
   
         final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
         DocSetCollector setCollector = new DocSetCollector(maxDoc);