You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by is...@apache.org on 2020/12/05 04:37:27 UTC

[lucene-solr] branch jira/solr14827 updated (499d6ab -> 54c6f22)

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

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


    omit 499d6ab  unused imp[ort
    omit d86fa09  merging with master
    omit 4f88e13  Merge branch 'master' into jira/solr14827
    omit 8fcdfeb  merging with masster
    omit a07ec61  merge with master
    omit 5e5d92f  merging with master
    omit c826752  javadocs fix
    omit 2c4af54  merging with master
    omit f77cc53  Merge branch 'master' into jira/solr14827
    omit 4418768  javadocs and other review comments
    omit 4772a5c  test failure
    omit 1b991ed  merging with master
    omit 519d806  cache and reuse
    omit 35eae14  substitute properties real time
    omit 0cfa31d  unused import
    omit 69ed069  unused import
    omit 6e024d1  bug fix
    omit f130ca4  bug fix
    omit 46e6191  preload conf
    omit e1bc674  SOLR-14827: Refactor schema loading to not use XPath
     add 7362c4c  LUCENE-6831: start removing LinkedList in favor of ArrayList or De/Queues (#1969)
     add c5cf132  LUCENE-9562: All binary analysis packages (and corresponding Maven artifacts) with names containing '-analyzers-' have been renamed to '-analysis-'. (#1968)
     add e444df1  SOLR-14922: Include solr-ref-guide tasks in sourceSets for IntelliJ (#1973)
     add b4f0442  SOLR-14870: refactor ref-guide build.gradle logic to re-enable guide->javadoc link checking
     add 9594ab3  SOLR-14776: Precompute the fingerprint during PeerSync (#1814)
     add bcd9cbe  SOLR-14907: Support single file upload/overwrite in configSet API (#1977)
     add cf6e831  SOLR-14887 Upgrade JQuery to 3.5.1 (#1947)
     add 03fe8e5  SOLR-14654: remove ref guide refernces
     add 2f651b1  SOLR-14654: remove all references of runtime lib
     add fa3e1ad  SOLR-14869: ChildDocTransformer should have omitted deleted child documents. Closes #1970
     add a7a6757  SOLR-14654: ref guide error
     add b43c389  Include missing commands in package tool help section (#1975)
     add ab5671d  LUCENE-9574 Add DropIfFlaggedFilterFactory (#1979)
     add 9805b12  LUCENE-9579 Update to JUnit 4.13.1 (#1981)
     add 2a3da99  SOLR-14914: Add option to disable metrics collection.
     add 321b4fa  SOLR-14930: Deprecate rulebased replica placement strategy (remove in 9.0) (#1980)
     add 737cf98  SOLR-14924: Some ReplicationHandler metrics are reported using incorrect types.
     add 0bd2f31  SOLR-14930: fix precommit
     add d7e58ed  SOLR-14483 (#1988)
     add 9877085  LUCENE-9572 - TypeAsSynonymFilter gains selective flag transfer and an ignore list. (#1965)
     add 6a330e6  SOLR-14651: improve metrics history docs When the MHH is disabled, it is *not* possible to retrieve history.
     add 744934c  SOLR-14933: Ability to add T and P type replica from admin UI (#1991)
     add 6990109  LUCENE-9524: Fix NPE in SpanWeight#explain when no scoring is require… (#1978)
     add 48348ae  LUCENE-9578: TermRangeQuery empty string lower bound edge case (#1976)
     add 72a5541  Update CHANGES.txt to align with release versions
     add c3a7a58  LUCENE-9578: Add CHANGES entry.
     add f7be9e8  LUCENE-9524: Fix CHANGES entry version.
     add 85b58c2  LUCENE-9576: nuke SSD detection, modernize CMS defaults
     add c02f07f  LUCENE-9322: Add Lucene90 codec, including VectorFormat
     add dbcbcd0  Add CHANGES entry for LUCENE-9322
     add e9ff918  fix javadoc
     add 4c42cbc  LUCENE-9576: give solr back its getFileStoreAttributes permission
     add 9ab9d20  SOLR-14944: Remove the "spins" metrics.
     add 6e25728  Fix 'an[d]' typo in three solrconfig.xml comments.
     add b47ccbc  Fix a highlight in query-settings-in-solrconfig.adoc file.
     add 43edf37  SOLR-14943 Rework Monitoring Solr with Prometheus and Grafana ref guide page to be clearer (#1999)
     add 44c1bd4  LUCENE-9318: Clean up package name conflicts for backward-codecs (#2000)
     add 3bc873e  SOLR-14936: Fixed Grafana dashboard filters for collection, shard, replica and core (#1986)
     add 6ac5747  SOLR-14549: Fix listing of Files in a Directory on Solr Admin UI
     add 6177be7  Harden TestVectorValues.testAddIndexesDirectory01
     add 0746d30  SOLR-14877: Add github action for running SolrJ tests. (#1891)
     add 0bc494e  LUCENE-9524: Fix test failure.
     add c587bf8  Reduce chances of _very_ slow tests in nightly builds.
     add 67ecd8f  SOLR-14749: Improve support for arbitrary container-level plugins. Add ClusterSingleton support for plugins that require only one active instance in the cluster.
     add e826b1f  refactor method names
     add 052efd6  Revert "refactor method names"
     add 62de8f9  Add example for ConfigSet create with properties map. (#2005)
     add 43c087f  SOLR-14956: correct (socket|conn)Timeout casing in 'Configuring the ShardHandlerFactory' example (Yevhen Tienkaiev via Christine Poerschke)
     add c680a6e  Move upgrade notes from CHANGES.txt to the Ref Guide.
     add 3bfe9d8  SOLR-14947: Print out image info after gradle docker task. (#2007)
     add 840a353  LUCENE-9582: rename VectorValues.ScoreFunction to SearchStrategy (#2018)
     add 706f284  SOLR-14942: Reduce leader election time on node shutdown (#2004)
     add 56eac7c  Fix random TestVectorValues failures by use of forceMerge (and getOnlyLeafReader)
     add 2d3a221  .gitignore clean up (#1993)
     add 98594b5  LUCENE-9455: ExitableTermsEnum should sample timeout and interruption check before calling next()
     add 7a09cc1  SOLR-14937: Correct client.queryDefaults().set(...) calls in some JSON facet tests. (#1987)
     add 4bf2541  Rename ConfigSetsAPITest to TestConfigSetsAPIShareSchema (#1890)
     add 37c7d15  LUCENE-9322: Make sure to account for vectors in SortingCodecReader. (#2028)
     add 38f0286  Remove sleeps from SolrZkClientTest.testWrappingWatches (#1936)
     add c29b008  SOLR-14954: Heavily edit reindexing.adoc
     add b649f3f  SOLR-14964: remove Autoscaling related withCollection and COLOCATED_WITH (#2034)
     add 4fe4f37  SOLR-14957: Add Prometheus Exporter to docker PATH. Fix classpath issues. (#2017)
     add 521ca54  SOLR-14844: Upgrade Jetty to 9.4.32.v20200930
     add 3730719  Fix CHANGES entry for LUCENE-9455
     add 6d00843  SOLR-14940: Fix ReplicationHandler memory leak through SolrCore.closeHooks
     add 9ce4b98  LUCENE-9587: Add '--illegal-access=deny' to test runner (#2039)
     add 462c6c7  Graduate the release wizard from ALPHA (#2041)
     add d0ba0f3  Enhance Javadocs for ExternalFileField on how to return values as part of document fields. SOLR-14968
     add 57729c9  LUCENE-8626: Standardize Lucene Test Files (#2026)
     add f3fdd9b  SOLR-14946: fix responseHeader returned in resp with omitHeader=true (#2029)
     add e1698bd  SOLR-14955: Add env var options to Prometheus Export scripts. (#2038)
     add 2c49c4a  SOLR-14969: Prevent creating multiple cores with the same name which leads to instabilities (race condition)
     add 0fb21e2  Fix a typo in IndexWriter (#2054)
     add 0c3f2f4  SOLR-14972: Change default port of prometheus exporter to 8989 (#2046)
     add da00048  SOLR-14865: 'Index Merge Metrics' documentation correction (#1870)
     add 8f004f7  LUCENE-9536: Optimize OrdinalMap when one segment contains all distinct values. (#1948)
     add 2a2e612  LUCENE-9536: CHANGES entry.
     add 0729746  Rename TestSolrTestCaseJ4 to SolrTestCaseJ4DeleteCoreTest. (#2032)
     add 5091e75  SOLR-14907: Adding V2 API for ConfigSet Upload. (#1996)
     add e7f0294  SOLR-14961 ZkMaintenanceUtils.clean doesn't remove zk nodes with same length
     add 6a7131e  LUCENE-9319: Clean up package name conflicts for sandbox module (#2023)
     add 8bfbed8  LUCENE-9552: Adds a LatLonPoint query that accepts an array of LatLonGeometries (#1940)
     add 5c02737   LUCENE-9553: Adds a XYPoint query that accepts an array of XYGeometries (#1939)
     add 0f871b2  SOLR-14926: Modernize and clean up search results clustering contrib.
     add 63c4dfa  LUCENE-9596: Reproduce line for failed tests should have method-level accuracy
     add a29d7c7  LUCENE-9597: checkWorkingCopyClean shouldn't complain about untracked empty folders (similar to git status). Piggybacking jgit update. (#2061)
     add 32bf7ba  Correct sandbox link failing the check.
     add 22296f2  SOLR-14912: Unify solr-contrib-extraction with the artifact it produces (#2060)
     add f777933  Correct sandbox class name.
     add 656ce93  DOAP changes for release 8.7.0
     add 7c1ff28  SOLR-14978 OOM Killer in Foreground (#2055)
     add bcd9711  LUCENE-9536: Address test failure.
     add bdc6e82  SOLR-14749: Provide a clean API for cluster-level event processing.
     add 0bfa2a6  SOLR-14749: Restructure the docs + add some examples.
     add be19432  SOLR-14969: Prevent creating multiple cores with the same name which leads to instabilities (race condition) changed error code
     add 8be0cea  LUCENE-9583: extract separate RandomAccessVectorValues interface (#2037)
     add ec9a659  LUCENE-9322: fix minor cosmetic refactoring error in logging string in IndexWriter's infoStream logging. It was always printing 'vector values' for all merging times instead of the other parts of Lucene index ('doc values', 'stored fields', etc.)
     add 42c5206  LUCENE-9322: Some fixes to SimpleTextVectorFormat. (#2071)
     add 849a28e  LUCENE-9536: Correct the OrdinalMap optimization. (#2070)
     add 514c363  LUCENE-9322: Move Solr to Lucene90Codec.
     add fd98f67  Remove unused imports.
     add bac4309  SOLR-14749: Use h2 instead of h3 so that the javadoc tool doesn't complain about out-or-sequence headers.
     add 7ec1737  SOLR-14683: Metrics API should ensure consistent placeholders for missing values.
     add 36f6359  LUCENE-9023: GlobalOrdinalsWithScore should not compute occurrences when the provided min is 1 (#964)
     add d111039  LUCENE-9600: Clean up package name conflicts between misc and core modules (#2064)
     add 426a9c2  LUCENE-9499: migrate package.html files into package-info.java (#2072)
     add 212b0f8  SOLR-14949: Ability to customize Solr Docker build (#2020)
     add 863a388f SOLR-14683: Move the CHANGES.txt entry to the right place. Fix wrong type of null value.
     add d650413  SOLR-14949: Adding githubUrl option for docker build. (#2074)
     add 5897d14  LUCENE-9594 Add linear function for FeatureField
     add 67f9245  SOLR-14975: Optimize CoreContainer.getAllCoreNames and getLoadedCoreNames. Also optimize getCoreDescriptors.
     add 91ee53d  SOLR-14975: Add entry in CHANGES.txt
     add a7197ac  SOLR-14971: Handle atomic-removes on uncommitted docs (#2056)
     add 66e285e  SOLR-14995 Update Jetty to latest version
     add 2f02040  SOLR-14983: Fix response returning original score instead of reranked score due to query and filter combining. (Krishan Goyal, Jason Baik, Christine Poerschke)
     add d1297e5  Remove redundant fieldType.stored() check during indexing (#2076)
     add 06877b2  LUCENE-9378: Make it possible to configure how to trade speed for compression on doc values. (#2069)
     add 3f8f84f  LUCENE-9450 Switch to BinaryDocValues instead of stored fields in Lucene's facet implementation, yielding ~4-5% red-line QPS gain in pure faceting benchmarks (#1733)
     add af47cb7  LUCENE-9600: Fix wrong link
     add 8bac4e7  LUCENE-9499: javadoc split package workaroud should be applied only to test-framework.
     add 80a0154  LUCENE-9608: add a hand-triggered test error class.
     add b36b4af  LUCENE-9004: KNN vector search using NSW graphs (#2022)
     add 03c1910  LUCENE-9004: CHANGES.txt entry
     add 93ecd0f  SOLR-14986: Add warning to ref guide that using 'properties.name' is an expert option
     add 52f581e  LUCENE-9605: update snowball to d8cf01ddf37a, adds Yiddish (#2077)
     add 09f78e2  LUCENE-9610: fix TestKnnGraph.testMerge
     add 3ae0ca2  LUCENE-9610: fix bug in previous test fix
     add ebc87a8  LUCENE-8982: Separate out native code to another module to allow cpp build with gradle (#2068)
     add 73d5e7a  SOLR-14977 :  ContainerPlugins should be configurable (#2065)
     add fd3ffd0  LUCENE-8982: make native builds disabled by default (CI complains).
     add 2d583ea  SOLR-14998: logging: info->debug in CollectionsHandler (#2079)
     add 8503efd  LUCENE-9413: Add CJKWidthCharFilter and its factory. (#2081)
     add 4735b4c  LUCENE-9378: Fix test failure.
     add b9a93cf  LUCENE-8626: Standardize Lucene test file naming Part 2 (#2053)
     add 02514e5  Remove h3 from HnswGraph javadoc; doclet doesn't seem to like it
     add 2b5b0f9  SOLR-14683: move "Missing Metrics" section down to config section; add short blurb to intro text
     add cb0d0cf  Use h2 for top-level headers in HnswGraph javadoc, following jdk14 rule
     add ea4dd05  SOLR-14792: remove leftover /browse UI screenshot from ref guide docs
     add af0455a  SOLR-14560: Interleaving for Learning To Rank (#1571)
     add c4d4767  SOLR-14035: Remove deprecated preferLocalShards=true support in favour of the shards.preference=replica.location:local alternative. (Alex Bulygin via Christine Poerschke)
     add 8c7b709  LUCENE-9592: Loosen equality checks in TestVectorUtil. (#2084)
     add 77a2053  SOLR-14993: Unable to download zookeeper files of 1byte in size
     add a5d0654  LUCENE-9581: Japanese tokenizer should discard the compound token instead of disabling the decomposition of long tokens when discardCompoundToken is activated.
     add 44be9f9  LUCENE-9595: Make Component2D#withinPoint implementations consistent with ShapeQuery logic (#2059)
     add ca04040  SOLR-15015: added support to parametric Interleaving algorithm (#2096)
     add 4d05e72  [SOLR-15015] added support to parametric Interleaving algorithm + tests (#2096)
     add 7d54c28  Merge remote-tracking branch 'origin/master'
     add c71f119  LUCENE-9508: Fix DocumentsWriter to block threads until unstalled (#2085)
     add b63c37d  LUCENE-9606: Wrap boolean queries generated by shape fields with a Constant score query (#2093)
     add 99c38ee  SOLR-14851 Http2SolrClient doesn't handle keystore type (#2098)
     add 1e0ae2f  SOLR-15001 Docker: require init_var_solr.sh (#2083)
     add 021de9f  SOLR-14915: Prometheus-exporter should not depend on Solr-core (#1972)
     add 2da3d1f  fix duplicate compute on maxUnpatchedValue (#2106)
     add 37a6163  SOLR-14958: Refactor zkHost config logic to make testing easier and reduce risk of incorrect value being used
     add cb5ba42  SOLR-15009 Propogate IOException from DF.exists
     add a049284  SOLR-12182: Don't persist base_url in ZK as the scheme is variable, compute from node_name instead (#2010)
     add 689e56f  Ref Guide: fix wrong class name in CSS to toggle the icon shown in sidebar nav when a section is open
     add 663655d  SOLR-15013: Prevent merges since test asserts doc order
     add 3df7250  SOLR-15004: tests for the replica placement API + placement plugin fixes and light refactoring (#2110)
     add feb897a  SOLR-15017: Core's lib/ dir was ignored sometimes (#2107)
     add d99c166  SOLR-14942: Move request registration to ContentStreamHandlerBase (#2112)
     add 2e6a023  SOLR-14934: Refactored duplicate "Solr Home" logic into a single place to eliminate risk of tests using divergent values for a single solr node.
     add 8732df8  SOLR-14934: test workaround for SOLR-15026
     add 05a8477  SOLR-14934: Fix some additional test helper methods that aren't used on master but triggered problems when when backporting to branch_8x
     add d50bdba  Remove obsolete dev-tools scripts (#2105)
     add e3572d0  Reconcile upgrade notes in master (#2103)
     add 5208d47  SOLR-14934: Remove redundent deprecated "solr.solr.home" logic
     add 4c100a0  SOLR-12182: Fix Changes.txt in master (#2116)
     add a9e180b  LUCENE-9631: Properly override slice() on subclasses of OffsetRange.
     add f24b497  LUCENE-9618: Do not call IntervalIterator.nextInterval after NO_MORE_DOCS returned (#2095)
     add 69de1a4  LUCENE-9599 Disable sort optim on index sort (#2075)
     add cef9281  SOLR-14992 Wait for node down before checking for node up (#2115)
     add 19ed903  SOLR-14965: add overseer queue size metrics (#2040)
     add 21b8890  SOLR: Remove CHANGES.md; use solr/CHANGES.txt
     new 74c98f0  SOLR-14827: Refactor schema loading to not use XPath
     new 976608d  preload conf
     new a6f6330  bug fix
     new 70b5ad3  bug fix
     new def7db5  unused import
     new f313d6c  unused import
     new cecf1f9  substitute properties real time
     new a73c2c5  cache and reuse
     new 6319582  test failure
     new 504740f  javadocs and other review comments
     new 5746fee  merging with master
     new e49e3a5  javadocs fix
     new f3ac2e9  merging with master
     new 12d492a  merge with master
     new ac536c4  merging with masster
     new 6ad7716  merging with master
     new 491f172  unused imp[ort
     new 54c6f22  Fixing imports

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (499d6ab)
            \
             N -- N -- N   refs/heads/jira/solr14827 (54c6f22)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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


Summary of changes:
 .dir-locals.el                                     |    3 +
 .github/workflows/docker-test.yml                  |    4 +
 .github/workflows/solrj-test.yml                   |   35 +
 .gitignore                                         |   60 +-
 build.gradle                                       |    7 +-
 dev-tools/doap/lucene.rdf                          |    7 +
 dev-tools/doap/solr.rdf                            |    7 +
 dev-tools/scripts/LUCENE-3753.patch.hack.pl        |  111 -
 dev-tools/scripts/addVersion.py                    |    1 +
 dev-tools/scripts/crawl.maven.release.dist.sh      |   68 -
 dev-tools/scripts/gitignore-gen.sh                 |   21 -
 dev-tools/scripts/releaseWizard.py                 |   10 +-
 dev-tools/scripts/releaseWizard.yaml               |    7 +-
 dev-tools/scripts/write.stage.maven.build.xml.pl   |  180 --
 .../test-patch/lucene-solr-yetus-personality.sh    |    2 +-
 gradle/ant-compat/artifact-naming.gradle           |   11 -
 gradle/documentation/render-javadoc.gradle         |   28 +-
 gradle/generation/snowball.gradle                  |    6 +-
 gradle/generation/snowball.patch                   |   10 +-
 gradle/help.gradle                                 |    1 +
 gradle/ide/intellij-idea.gradle                    |   16 -
 gradle/native/disable-native.gradle                |   82 +
 gradle/solr/packaging.gradle                       |    3 +-
 gradle/testing/defaults-tests.gradle               |    1 +
 gradle/testing/failed-tests-at-end.gradle          |    2 +-
 .../randomization/policies/solr-tests.policy       |    2 +-
 gradle/testing/randomization/policies/tests.policy |    7 +-
 gradle/validation/git-status.gradle                |   39 +-
 .../owasp-dependency-check/exclusions.xml          |   15 -
 help/docker.txt                                    |   58 +
 lucene/CHANGES.txt                                 |   99 +-
 lucene/MIGRATE.md                                  |   37 +-
 lucene/NOTICE.txt                                  |    2 +-
 lucene/analysis/README.txt                         |   18 +-
 .../lucene/analysis/cjk/CJKWidthCharFilter.java    |  148 ++
 .../analysis/cjk/CJKWidthCharFilterFactory.java    |   57 +
 .../lucene/analysis/classic/package-info.java      |   29 +
 .../apache/lucene/analysis/classic/package.html    |   37 -
 .../apache/lucene/analysis/email/package-info.java |   34 +
 .../org/apache/lucene/analysis/email/package.html  |   39 -
 .../miscellaneous/DropIfFlaggedFilter.java         |   51 +
 .../miscellaneous/DropIfFlaggedFilterFactory.java  |   71 +
 .../miscellaneous/TypeAsSynonymFilter.java         |   37 +-
 .../miscellaneous/TypeAsSynonymFilterFactory.java  |   17 +-
 .../org/tartarus/snowball/ext/SerbianStemmer.java  |  235 +-
 .../org/tartarus/snowball/ext/YiddishStemmer.java  | 1381 ++++++++++++
 .../org.apache.lucene.analysis.CharFilterFactory   |    1 +
 .../org.apache.lucene.analysis.TokenFilterFactory  |    1 +
 .../analysis/cjk/TestCJKWidthCharFilter.java       |  118 +
 .../cjk/TestCJKWidthCharFilterFactory.java         |   43 +
 .../miscellaneous/TestDropIfFlaggedFilter.java     |   73 +
 .../TestDropIfFlaggedFilterFactory.java            |   48 +
 .../miscellaneous/TestTypeAsSynonymFilter.java     |  106 +
 .../TestTypeAsSynonymFilterFactory.java            |    7 +
 .../apache/lucene/analysis/snowball/languages.txt  |    1 +
 .../lucene/analysis/ja/JapaneseTokenizer.java      |   59 +-
 .../lucene/analysis/ja/TestJapaneseAnalyzer.java   |   14 +-
 .../lucene/analysis/ja/TestJapaneseTokenizer.java  |    6 +
 .../apache/lucene/analysis/ja/TestSearchMode.java  |    5 -
 lucene/analysis/phonetic/src/java/overview.html    |    2 +-
 .../org/apache/lucene/analysis/pl/stopwords.txt    |    2 +-
 .../apache/lucene/backward_codecs/Placeholder.java |   23 +
 .../lucene/backward_codecs/lucene50/ForUtil.java   |  246 +++
 .../lucene50/Lucene50PostingsFormat.java           |  480 ++++
 .../lucene50/Lucene50PostingsReader.java           | 1786 +++++++++++++++
 .../lucene50/Lucene50ScoreSkipReader.java          |  159 ++
 .../lucene50/Lucene50SkipReader.java               |  211 ++
 .../lucene50/Lucene50StoredFieldsFormat.java       |  152 ++
 .../backward_codecs/lucene50/package-info.java     |   19 +
 .../lucene60/Lucene60PointsFormat.java             |  110 +
 .../lucene60/Lucene60PointsReader.java             |  146 ++
 .../backward_codecs/lucene60/package-info.java     |   19 +
 .../lucene70/Lucene70SegmentInfoFormat.java        |  281 +++
 .../backward_codecs/lucene70/package-info.java     |   22 +
 .../backward_codecs/lucene80/Lucene80Codec.java    |  138 ++
 .../backward_codecs/lucene80/package-info.java     |   19 +
 .../backward_codecs/lucene84/Lucene84Codec.java    |  185 ++
 .../backward_codecs/lucene84/package-info.java     |   19 +
 .../backward_codecs/lucene86/Lucene86Codec.java    |  186 ++
 .../backward_codecs/lucene86/package-info.java     |   19 +
 .../backward_codecs/lucene87/Lucene87Codec.java    |  193 ++
 .../backward_codecs/lucene87/package-info.java     |   19 +
 .../lucene/backward_codecs/package-info.java       |   19 +
 .../java/org/apache/lucene/codecs/Placeholder.java |   23 -
 .../org/apache/lucene/codecs/lucene50/ForUtil.java |  246 ---
 .../codecs/lucene50/Lucene50PostingsFormat.java    |  480 ----
 .../codecs/lucene50/Lucene50PostingsReader.java    | 1786 ---------------
 .../codecs/lucene50/Lucene50ScoreSkipReader.java   |  159 --
 .../lucene/codecs/lucene50/Lucene50SkipReader.java |  211 --
 .../lucene50/Lucene50StoredFieldsFormat.java       |  152 --
 .../org/apache/lucene/codecs/lucene50/package.html |   25 -
 .../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/lucene80/Lucene80Codec.java      |  131 --
 .../org/apache/lucene/codecs/lucene80/package.html |   25 -
 .../lucene/codecs/lucene84/Lucene84Codec.java      |  178 --
 .../org/apache/lucene/codecs/lucene84/package.html |   25 -
 .../lucene/codecs/lucene86/Lucene86Codec.java      |  178 --
 .../org/apache/lucene/codecs/lucene86/package.html |   25 -
 .../src/java/org/apache/lucene/codecs/package.html |   26 -
 .../services/org.apache.lucene.codecs.Codec        |    7 +-
 .../org.apache.lucene.codecs.PostingsFormat        |    2 +-
 .../lucene50/Lucene50PostingsWriter.java           |  507 +++++
 .../lucene50/Lucene50RWPostingsFormat.java         |   47 +
 .../lucene50/Lucene50RWStoredFieldsFormat.java     |   51 +
 .../lucene50/Lucene50SkipWriter.java               |  224 ++
 .../lucene50/TestBlockPostingsFormat.java          |  132 ++
 .../lucene50/TestBlockPostingsFormat2.java         |  135 ++
 .../lucene50/TestBlockPostingsFormat3.java         |  463 ++++
 .../backward_codecs/lucene50/TestForUtil.java      |   96 +
 .../lucene50/TestLucene50StoredFieldsFormat.java   |   29 +
 ...tLucene50StoredFieldsFormatHighCompression.java |   80 +
 ...estLucene50StoredFieldsFormatMergeInstance.java |   29 +
 .../lucene60/Lucene60PointsWriter.java             |  272 +++
 .../lucene60/Lucene60RWPointsFormat.java           |   35 +
 .../lucene60/TestLucene60PointsFormat.java         |  354 +++
 .../lucene70/Lucene70RWSegmentInfoFormat.java      |  204 ++
 .../lucene70/TestLucene70SegmentInfoFormat.java    |   36 +
 .../backward_codecs/lucene84/Lucene84RWCodec.java  |   46 +
 .../backward_codecs/lucene86/Lucene86RWCodec.java  |   45 +
 .../backward_index/TestBackwardsCompatibility.java | 1836 +++++++++++++++
 .../backward_index/TestIndexWriterOnOldIndex.java  |   58 +
 .../backward_index/TestManyPointsInOldIndex.java   |   75 +
 .../{index => backward_index}/dvupdates.8.0.0.zip  |  Bin
 .../{index => backward_index}/empty.8.0.0.zip      |  Bin
 .../{index => backward_index}/index.8.0.0-cfs.zip  |  Bin
 .../index.8.0.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.1.0-cfs.zip  |  Bin
 .../index.8.1.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.1.1-cfs.zip  |  Bin
 .../index.8.1.1-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.2.0-cfs.zip  |  Bin
 .../index.8.2.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.3.0-cfs.zip  |  Bin
 .../index.8.3.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.3.1-cfs.zip  |  Bin
 .../index.8.3.1-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.4.0-cfs.zip  |  Bin
 .../index.8.4.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.4.1-cfs.zip  |  Bin
 .../index.8.4.1-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.5.0-cfs.zip  |  Bin
 .../index.8.5.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.5.1-cfs.zip  |  Bin
 .../index.8.5.1-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.5.2-cfs.zip  |  Bin
 .../index.8.5.2-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.6.0-cfs.zip  |  Bin
 .../index.8.6.0-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.6.1-cfs.zip  |  Bin
 .../index.8.6.1-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.6.2-cfs.zip  |  Bin
 .../index.8.6.2-nocfs.zip                          |  Bin
 .../{index => backward_index}/index.8.6.3-cfs.zip  |  Bin
 .../index.8.6.3-nocfs.zip                          |  Bin
 .../{index => backward_index}/moreterms.8.0.0.zip  |  Bin
 .../{index => backward_index}/sorted.8.0.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.1.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.1.1.zip     |  Bin
 .../{index => backward_index}/sorted.8.2.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.3.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.3.1.zip     |  Bin
 .../{index => backward_index}/sorted.8.4.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.4.1.zip     |  Bin
 .../{index => backward_index}/sorted.8.5.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.5.1.zip     |  Bin
 .../{index => backward_index}/sorted.8.5.2.zip     |  Bin
 .../{index => backward_index}/sorted.8.6.0.zip     |  Bin
 .../{index => backward_index}/sorted.8.6.1.zip     |  Bin
 .../{index => backward_index}/sorted.8.6.2.zip     |  Bin
 .../{index => backward_index}/sorted.8.6.3.zip     |  Bin
 .../unsupported.1.9.0-cfs.zip                      |  Bin
 .../unsupported.1.9.0-nocfs.zip                    |  Bin
 .../unsupported.2.0.0-cfs.zip                      |  Bin
 .../unsupported.2.0.0-nocfs.zip                    |  Bin
 .../unsupported.2.1.0-cfs.zip                      |  Bin
 .../unsupported.2.1.0-nocfs.zip                    |  Bin
 .../unsupported.2.2.0-cfs.zip                      |  Bin
 .../unsupported.2.2.0-nocfs.zip                    |  Bin
 .../unsupported.2.3.0-cfs.zip                      |  Bin
 .../unsupported.2.3.0-nocfs.zip                    |  Bin
 .../unsupported.2.4.0-cfs.zip                      |  Bin
 .../unsupported.2.4.0-nocfs.zip                    |  Bin
 .../unsupported.2.4.1-cfs.zip                      |  Bin
 .../unsupported.2.4.1-nocfs.zip                    |  Bin
 .../unsupported.2.9.0-cfs.zip                      |  Bin
 .../unsupported.2.9.0-nocfs.zip                    |  Bin
 .../unsupported.2.9.1-cfs.zip                      |  Bin
 .../unsupported.2.9.1-nocfs.zip                    |  Bin
 .../unsupported.2.9.2-cfs.zip                      |  Bin
 .../unsupported.2.9.2-nocfs.zip                    |  Bin
 .../unsupported.2.9.3-cfs.zip                      |  Bin
 .../unsupported.2.9.3-nocfs.zip                    |  Bin
 .../unsupported.2.9.4-cfs.zip                      |  Bin
 .../unsupported.2.9.4-nocfs.zip                    |  Bin
 .../unsupported.3.0.0-cfs.zip                      |  Bin
 .../unsupported.3.0.0-nocfs.zip                    |  Bin
 .../unsupported.3.0.1-cfs.zip                      |  Bin
 .../unsupported.3.0.1-nocfs.zip                    |  Bin
 .../unsupported.3.0.2-cfs.zip                      |  Bin
 .../unsupported.3.0.2-nocfs.zip                    |  Bin
 .../unsupported.3.0.3-cfs.zip                      |  Bin
 .../unsupported.3.0.3-nocfs.zip                    |  Bin
 .../unsupported.3.1.0-cfs.zip                      |  Bin
 .../unsupported.3.1.0-nocfs.zip                    |  Bin
 .../unsupported.3.2.0-cfs.zip                      |  Bin
 .../unsupported.3.2.0-nocfs.zip                    |  Bin
 .../unsupported.3.3.0-cfs.zip                      |  Bin
 .../unsupported.3.3.0-nocfs.zip                    |  Bin
 .../unsupported.3.4.0-cfs.zip                      |  Bin
 .../unsupported.3.4.0-nocfs.zip                    |  Bin
 .../unsupported.3.5.0-cfs.zip                      |  Bin
 .../unsupported.3.5.0-nocfs.zip                    |  Bin
 .../unsupported.3.6.0-cfs.zip                      |  Bin
 .../unsupported.3.6.0-nocfs.zip                    |  Bin
 .../unsupported.3.6.1-cfs.zip                      |  Bin
 .../unsupported.3.6.1-nocfs.zip                    |  Bin
 .../unsupported.3.6.2-cfs.zip                      |  Bin
 .../unsupported.3.6.2-nocfs.zip                    |  Bin
 .../unsupported.4.0.0-cfs.zip                      |  Bin
 .../unsupported.4.0.0-nocfs.zip                    |  Bin
 .../unsupported.4.0.0.1-cfs.zip                    |  Bin
 .../unsupported.4.0.0.1-nocfs.zip                  |  Bin
 .../unsupported.4.0.0.2-cfs.zip                    |  Bin
 .../unsupported.4.0.0.2-nocfs.zip                  |  Bin
 .../unsupported.4.1.0-cfs.zip                      |  Bin
 .../unsupported.4.1.0-nocfs.zip                    |  Bin
 .../unsupported.4.10.0-cfs.zip                     |  Bin
 .../unsupported.4.10.0-nocfs.zip                   |  Bin
 .../unsupported.4.10.1-cfs.zip                     |  Bin
 .../unsupported.4.10.1-nocfs.zip                   |  Bin
 .../unsupported.4.10.2-cfs.zip                     |  Bin
 .../unsupported.4.10.2-nocfs.zip                   |  Bin
 .../unsupported.4.10.3-cfs.zip                     |  Bin
 .../unsupported.4.10.3-nocfs.zip                   |  Bin
 .../unsupported.4.10.4-cfs.zip                     |  Bin
 .../unsupported.4.10.4-nocfs.zip                   |  Bin
 .../unsupported.4.2.0-cfs.zip                      |  Bin
 .../unsupported.4.2.0-nocfs.zip                    |  Bin
 .../unsupported.4.2.1-cfs.zip                      |  Bin
 .../unsupported.4.2.1-nocfs.zip                    |  Bin
 .../unsupported.4.3.0-cfs.zip                      |  Bin
 .../unsupported.4.3.0-nocfs.zip                    |  Bin
 .../unsupported.4.3.1-cfs.zip                      |  Bin
 .../unsupported.4.3.1-nocfs.zip                    |  Bin
 .../unsupported.4.4.0-cfs.zip                      |  Bin
 .../unsupported.4.4.0-nocfs.zip                    |  Bin
 .../unsupported.4.5.0-cfs.zip                      |  Bin
 .../unsupported.4.5.0-nocfs.zip                    |  Bin
 .../unsupported.4.5.1-cfs.zip                      |  Bin
 .../unsupported.4.5.1-nocfs.zip                    |  Bin
 .../unsupported.4.6.0-cfs.zip                      |  Bin
 .../unsupported.4.6.0-nocfs.zip                    |  Bin
 .../unsupported.4.6.1-cfs.zip                      |  Bin
 .../unsupported.4.6.1-nocfs.zip                    |  Bin
 .../unsupported.4.7.0-cfs.zip                      |  Bin
 .../unsupported.4.7.0-nocfs.zip                    |  Bin
 .../unsupported.4.7.1-cfs.zip                      |  Bin
 .../unsupported.4.7.1-nocfs.zip                    |  Bin
 .../unsupported.4.7.2-cfs.zip                      |  Bin
 .../unsupported.4.7.2-nocfs.zip                    |  Bin
 .../unsupported.4.8.0-cfs.zip                      |  Bin
 .../unsupported.4.8.0-nocfs.zip                    |  Bin
 .../unsupported.4.8.1-cfs.zip                      |  Bin
 .../unsupported.4.8.1-nocfs.zip                    |  Bin
 .../unsupported.4.9.0-cfs.zip                      |  Bin
 .../unsupported.4.9.0-nocfs.zip                    |  Bin
 .../unsupported.4.9.1-cfs.zip                      |  Bin
 .../unsupported.4.9.1-nocfs.zip                    |  Bin
 .../unsupported.5.0.0-cfs.zip                      |  Bin
 .../unsupported.5.0.0-nocfs.zip                    |  Bin
 .../unsupported.5.0.0.singlesegment-cfs.zip        |  Bin
 .../unsupported.5.0.0.singlesegment-nocfs.zip      |  Bin
 .../unsupported.5.1.0-cfs.zip                      |  Bin
 .../unsupported.5.1.0-nocfs.zip                    |  Bin
 .../unsupported.5.2.0-cfs.zip                      |  Bin
 .../unsupported.5.2.0-nocfs.zip                    |  Bin
 .../unsupported.5.2.1-cfs.zip                      |  Bin
 .../unsupported.5.2.1-nocfs.zip                    |  Bin
 .../unsupported.5.3.0-cfs.zip                      |  Bin
 .../unsupported.5.3.0-nocfs.zip                    |  Bin
 .../unsupported.5.3.1-cfs.zip                      |  Bin
 .../unsupported.5.3.1-nocfs.zip                    |  Bin
 .../unsupported.5.3.2-cfs.zip                      |  Bin
 .../unsupported.5.3.2-nocfs.zip                    |  Bin
 .../unsupported.5.4.0-cfs.zip                      |  Bin
 .../unsupported.5.4.0-nocfs.zip                    |  Bin
 .../unsupported.5.4.1-cfs.zip                      |  Bin
 .../unsupported.5.4.1-nocfs.zip                    |  Bin
 .../unsupported.5.5.0-cfs.zip                      |  Bin
 .../unsupported.5.5.0-nocfs.zip                    |  Bin
 .../unsupported.5.5.1-cfs.zip                      |  Bin
 .../unsupported.5.5.1-nocfs.zip                    |  Bin
 .../unsupported.5.5.2-cfs.zip                      |  Bin
 .../unsupported.5.5.2-nocfs.zip                    |  Bin
 .../unsupported.5.5.3-cfs.zip                      |  Bin
 .../unsupported.5.5.3-nocfs.zip                    |  Bin
 .../unsupported.5.5.4-cfs.zip                      |  Bin
 .../unsupported.5.5.4-nocfs.zip                    |  Bin
 .../unsupported.5.5.5-cfs.zip                      |  Bin
 .../unsupported.5.5.5-nocfs.zip                    |  Bin
 .../unsupported.5x-with-4x-segments-cfs.zip        |  Bin
 .../unsupported.5x-with-4x-segments-nocfs.zip      |  Bin
 .../unsupported.6.0.0-cfs.zip                      |  Bin
 .../unsupported.6.0.0-nocfs.zip                    |  Bin
 .../unsupported.6.0.1-cfs.zip                      |  Bin
 .../unsupported.6.0.1-nocfs.zip                    |  Bin
 .../unsupported.6.1.0-cfs.zip                      |  Bin
 .../unsupported.6.1.0-nocfs.zip                    |  Bin
 .../unsupported.6.2.0-cfs.zip                      |  Bin
 .../unsupported.6.2.0-nocfs.zip                    |  Bin
 .../unsupported.6.2.1-cfs.zip                      |  Bin
 .../unsupported.6.2.1-nocfs.zip                    |  Bin
 .../unsupported.6.3.0-cfs.zip                      |  Bin
 .../unsupported.6.3.0-nocfs.zip                    |  Bin
 .../unsupported.6.4.0-cfs.zip                      |  Bin
 .../unsupported.6.4.0-nocfs.zip                    |  Bin
 .../unsupported.6.4.1-cfs.zip                      |  Bin
 .../unsupported.6.4.1-nocfs.zip                    |  Bin
 .../unsupported.6.4.2-cfs.zip                      |  Bin
 .../unsupported.6.4.2-nocfs.zip                    |  Bin
 .../unsupported.6.5.0-cfs.zip                      |  Bin
 .../unsupported.6.5.0-nocfs.zip                    |  Bin
 .../unsupported.6.5.1-cfs.zip                      |  Bin
 .../unsupported.6.5.1-nocfs.zip                    |  Bin
 .../unsupported.6.6.0-cfs.zip                      |  Bin
 .../unsupported.6.6.0-nocfs.zip                    |  Bin
 .../unsupported.6.6.1-cfs.zip                      |  Bin
 .../unsupported.6.6.1-nocfs.zip                    |  Bin
 .../unsupported.6.6.2-cfs.zip                      |  Bin
 .../unsupported.6.6.2-nocfs.zip                    |  Bin
 .../unsupported.6.6.3-cfs.zip                      |  Bin
 .../unsupported.6.6.3-nocfs.zip                    |  Bin
 .../unsupported.6.6.4-cfs.zip                      |  Bin
 .../unsupported.6.6.4-nocfs.zip                    |  Bin
 .../unsupported.6.6.5-cfs.zip                      |  Bin
 .../unsupported.6.6.5-nocfs.zip                    |  Bin
 .../unsupported.6.6.6-cfs.zip                      |  Bin
 .../unsupported.6.6.6-nocfs.zip                    |  Bin
 .../unsupported.7.0.0-cfs.zip                      |  Bin
 .../unsupported.7.0.0-nocfs.zip                    |  Bin
 .../unsupported.7.0.1-cfs.zip                      |  Bin
 .../unsupported.7.0.1-nocfs.zip                    |  Bin
 .../unsupported.7.1.0-cfs.zip                      |  Bin
 .../unsupported.7.1.0-nocfs.zip                    |  Bin
 .../unsupported.7.2.0-cfs.zip                      |  Bin
 .../unsupported.7.2.0-nocfs.zip                    |  Bin
 .../unsupported.7.2.1-cfs.zip                      |  Bin
 .../unsupported.7.2.1-nocfs.zip                    |  Bin
 .../unsupported.7.3.0-cfs.zip                      |  Bin
 .../unsupported.7.3.0-nocfs.zip                    |  Bin
 .../unsupported.7.3.1-cfs.zip                      |  Bin
 .../unsupported.7.3.1-nocfs.zip                    |  Bin
 .../unsupported.7.4.0-cfs.zip                      |  Bin
 .../unsupported.7.4.0-nocfs.zip                    |  Bin
 .../unsupported.7.5.0-cfs.zip                      |  Bin
 .../unsupported.7.5.0-nocfs.zip                    |  Bin
 .../unsupported.7.6.0-cfs.zip                      |  Bin
 .../unsupported.7.6.0-nocfs.zip                    |  Bin
 .../unsupported.7.7.0-cfs.zip                      |  Bin
 .../unsupported.7.7.0-nocfs.zip                    |  Bin
 .../unsupported.7.7.1-cfs.zip                      |  Bin
 .../unsupported.7.7.1-nocfs.zip                    |  Bin
 .../unsupported.7.7.2-cfs.zip                      |  Bin
 .../unsupported.7.7.2-nocfs.zip                    |  Bin
 .../unsupported.7.7.3-cfs.zip                      |  Bin
 .../unsupported.7.7.3-nocfs.zip                    |  Bin
 .../unsupported.dvupdates.7.0.0.zip                |  Bin
 .../unsupported.empty.7.0.0.zip                    |  Bin
 .../unsupported.moreterms.7.0.0.zip                |  Bin
 .../unsupported.sorted-invalid.7.5.0.zip           |  Bin
 .../unsupported.sorted.7.0.0.zip                   |  Bin
 .../unsupported.sorted.7.0.1.zip                   |  Bin
 .../unsupported.sorted.7.1.0.zip                   |  Bin
 .../unsupported.sorted.7.2.0.zip                   |  Bin
 .../unsupported.sorted.7.2.1.zip                   |  Bin
 .../unsupported.sorted.7.3.0.zip                   |  Bin
 .../unsupported.sorted.7.3.1.zip                   |  Bin
 .../unsupported.sorted.7.4.0.zip                   |  Bin
 .../unsupported.sorted.7.5.0.zip                   |  Bin
 .../unsupported.sorted.7.6.0.zip                   |  Bin
 .../unsupported.sorted.7.7.3.zip                   |  Bin
 .../codecs/lucene50/Lucene50PostingsWriter.java    |  507 -----
 .../codecs/lucene50/Lucene50RWPostingsFormat.java  |   47 -
 .../lucene50/Lucene50RWStoredFieldsFormat.java     |   51 -
 .../lucene/codecs/lucene50/Lucene50SkipWriter.java |  224 --
 .../codecs/lucene50/TestBlockPostingsFormat.java   |  132 --
 .../codecs/lucene50/TestBlockPostingsFormat2.java  |  135 --
 .../codecs/lucene50/TestBlockPostingsFormat3.java  |  463 ----
 .../apache/lucene/codecs/lucene50/TestForUtil.java |   96 -
 .../lucene50/TestLucene50StoredFieldsFormat.java   |   29 -
 ...tLucene50StoredFieldsFormatHighCompression.java |   80 -
 ...estLucene50StoredFieldsFormatMergeInstance.java |   29 -
 .../codecs/lucene60/Lucene60PointsWriter.java      |  272 ---
 .../codecs/lucene60/Lucene60RWPointsFormat.java    |   35 -
 .../codecs/lucene60/TestLucene60PointsFormat.java  |  354 ---
 .../lucene70/Lucene70RWSegmentInfoFormat.java      |  204 --
 .../lucene70/TestLucene70SegmentInfoFormat.java    |   36 -
 .../lucene/codecs/lucene84/Lucene84RWCodec.java    |   46 -
 .../lucene/codecs/lucene86/Lucene86RWCodec.java    |   45 -
 .../lucene/index/TestBackwardsCompatibility.java   | 1810 ---------------
 .../lucene/index/TestIndexWriterOnOldIndex.java    |   56 -
 .../lucene/index/TestManyPointsInOldIndex.java     |   73 -
 .../benchmark/byTask/tasks/CreateIndexTask.java    |    4 +-
 .../lucene/codecs/simpletext/SimpleTextCodec.java  |    7 +
 .../simpletext/SimpleTextFieldInfosFormat.java     |   27 +-
 .../simpletext/SimpleTextTermVectorsWriter.java    |    2 +-
 .../codecs/simpletext/SimpleTextVectorFormat.java  |   51 +
 .../codecs/simpletext/SimpleTextVectorReader.java  |  306 +++
 .../codecs/simpletext/SimpleTextVectorWriter.java  |  148 ++
 .../codecs/uniformsplit/TestBlockWriter.java       |    3 +
 .../sharedterms/TestSTBlockReader.java             |    3 +
 .../org/apache/lucene/analysis/package-info.java   |    4 +-
 .../src/java/org/apache/lucene/codecs/Codec.java   |    6 +-
 .../java/org/apache/lucene/codecs/FilterCodec.java |    5 +
 .../org/apache/lucene/codecs/VectorFormat.java     |   76 +
 .../org/apache/lucene/codecs/VectorReader.java     |   55 +
 .../org/apache/lucene/codecs/VectorWriter.java     |  288 +++
 .../codecs/lucene50/Lucene50FieldInfosFormat.java  |    4 +-
 .../lucene/codecs/lucene50/package-info.java       |    2 +-
 .../codecs/lucene60/Lucene60FieldInfosFormat.java  |    4 +-
 .../lucene/codecs/lucene60/package-info.java       |    2 +-
 .../codecs/lucene80/Lucene80DocValuesConsumer.java |   80 +-
 .../codecs/lucene80/Lucene80DocValuesFormat.java   |   24 +-
 .../codecs/lucene80/Lucene80DocValuesProducer.java |   36 +-
 .../lucene/codecs/lucene80/package-info.java       |    2 +-
 .../apache/lucene/codecs/lucene84/PForUtil.java    |    2 +-
 .../lucene/codecs/lucene84/package-info.java       |    2 +-
 .../lucene/codecs/lucene86/package-info.java       |  398 +---
 .../lucene/codecs/lucene87/Lucene87Codec.java      |  179 --
 .../lucene/codecs/lucene87/package-info.java       |  398 +---
 .../lucene/codecs/lucene90/Lucene90Codec.java      |  202 ++
 .../codecs/lucene90/Lucene90FieldInfosFormat.java  |  340 +++
 .../codecs/lucene90/Lucene90VectorFormat.java      |   59 +
 .../codecs/lucene90/Lucene90VectorReader.java      |  470 ++++
 .../codecs/lucene90/Lucene90VectorWriter.java      |  179 ++
 .../lucene/codecs/lucene90/package-info.java       |  429 ++++
 .../org/apache/lucene/document/FeatureField.java   |   68 +-
 .../java/org/apache/lucene/document/FieldType.java |   28 +
 .../apache/lucene/document/InetAddressPoint.java   |    0
 .../apache/lucene/document/InetAddressRange.java   |    0
 .../document/LatLonDocValuesDistanceQuery.java     |  148 --
 .../lucene/document/LatLonDocValuesField.java      |   28 +-
 .../LatLonDocValuesPointInGeometryQuery.java       |  150 ++
 .../LatLonDocValuesPointInPolygonQuery.java        |  147 --
 .../org/apache/lucene/document/LatLonPoint.java    |   28 +-
 .../document/LatLonPointInGeometryQuery.java       |  260 +++
 .../lucene/document/LatLonPointInPolygonQuery.java |  258 ---
 .../org/apache/lucene/document/LatLonShape.java    |    3 +-
 .../document/LatLonShapeBoundingBoxQuery.java      |   35 +-
 .../apache/lucene/document/RangeFieldQuery.java    |    8 +-
 .../org/apache/lucene/document/VectorField.java    |   99 +
 .../apache/lucene/document/XYDocValuesField.java   |   22 +-
 .../org/apache/lucene/document/XYPointField.java   |   15 +-
 .../java/org/apache/lucene/document/XYShape.java   |    3 +-
 .../src/java/org/apache/lucene/geo/Circle.java     |   10 +-
 .../src/java/org/apache/lucene/geo/Circle2D.java   |    2 +-
 .../org/apache/lucene/geo/GeoEncodingUtils.java    |   12 +-
 .../src/java/org/apache/lucene/geo/Line2D.java     |    6 +-
 .../src/java/org/apache/lucene/geo/Polygon2D.java  |    2 +-
 .../java/org/apache/lucene/geo/Rectangle2D.java    |   25 +-
 .../java/org/apache/lucene/index/CheckIndex.java   |   85 +-
 .../java/org/apache/lucene/index/CodecReader.java  |   19 +
 .../lucene/index/ConcurrentMergeScheduler.java     |   45 +-
 .../apache/lucene/index/DocValuesLeafReader.java   |    5 +
 .../org/apache/lucene/index/DocumentsWriter.java   |   20 +-
 .../lucene/index/DocumentsWriterFlushQueue.java    |    4 +-
 .../lucene/index/DocumentsWriterStallControl.java  |    4 +
 .../lucene/index/ExitableDirectoryReader.java      |   26 +-
 .../java/org/apache/lucene/index/FieldInfo.java    |   57 +-
 .../java/org/apache/lucene/index/FieldInfos.java   |   76 +-
 .../org/apache/lucene/index/FilterCodecReader.java |    6 +
 .../org/apache/lucene/index/FilterLeafReader.java  |    5 +
 .../org/apache/lucene/index/IndexUpgrader.java     |    3 +-
 .../java/org/apache/lucene/index/IndexWriter.java  |   16 +-
 .../apache/lucene/index/IndexableFieldType.java    |   36 +-
 .../org/apache/lucene/index/IndexingChain.java     |  101 +-
 .../org/apache/lucene/index/KnnGraphValues.java    |   58 +
 .../java/org/apache/lucene/index/LeafReader.java   |    4 +
 .../apache/lucene/index/MergeReaderWrapper.java    |    5 +
 .../java/org/apache/lucene/index/MergeState.java   |   11 +
 .../java/org/apache/lucene/index/OrdinalMap.java   |   38 +-
 .../apache/lucene/index/ParallelLeafReader.java    |    7 +
 .../java/org/apache/lucene/index/PointValues.java  |    5 +-
 .../lucene/index/RandomAccessVectorValues.java     |   60 +
 .../index/RandomAccessVectorValuesProducer.java    |   32 +
 .../org/apache/lucene/index/ReadersAndUpdates.java |    3 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |   11 +-
 .../org/apache/lucene/index/SegmentMerger.java     |  142 +-
 .../org/apache/lucene/index/SegmentReader.java     |    6 +
 .../lucene/index/SlowCodecReaderWrapper.java       |   32 +-
 .../apache/lucene/index/SortingCodecReader.java    |   27 +
 .../java/org/apache/lucene/index/VectorValues.java |  203 ++
 .../apache/lucene/index/VectorValuesWriter.java    |  325 +++
 .../apache/lucene/search/ExactPhraseMatcher.java   |    8 +-
 .../org/apache/lucene/search/FieldComparator.java  |   11 +
 .../java/org/apache/lucene/search/HitQueue.java    |    7 +-
 .../apache/lucene/search/LeafFieldComparator.java  |    2 +-
 .../org/apache/lucene/search/MultiPhraseQuery.java |   15 +-
 .../java/org/apache/lucene/search/Multiset.java    |    4 +-
 .../org/apache/lucene/search/PhraseMatcher.java    |    3 +-
 .../java/org/apache/lucene/search/PhraseQuery.java |    8 +-
 .../org/apache/lucene/search/PhraseWeight.java     |    6 +-
 .../apache/lucene/search/SloppyPhraseMatcher.java  |    6 +-
 .../java/org/apache/lucene/search/TermScorer.java  |    8 +-
 .../org/apache/lucene/search/TopDocsCollector.java |    6 +-
 .../apache/lucene/search/TopFieldCollector.java    |   56 +-
 .../apache/lucene/search/TopScoreDocCollector.java |    5 +-
 .../search/comparators/NumericComparator.java      |   17 +-
 .../org/apache/lucene/search/spans/SpanWeight.java |   21 +-
 .../src/java/org/apache/lucene/util/IOUtils.java   |  147 --
 .../java/org/apache/lucene/util/VectorUtil.java    |   74 +
 .../org/apache/lucene/util/automaton/Automata.java |   27 +-
 .../org/apache/lucene/util/hnsw/BoundsChecker.java |   74 +
 .../org/apache/lucene/util/hnsw/HnswGraph.java     |  223 ++
 .../apache/lucene/util/hnsw/HnswGraphBuilder.java  |  194 ++
 .../java/org/apache/lucene/util/hnsw/Neighbor.java |   70 +
 .../org/apache/lucene/util/hnsw/Neighbors.java     |   93 +
 .../org/apache/lucene/util/hnsw/package-info.java  |   22 +
 lucene/core/src/java/overview.html                 |    6 +-
 .../services/org.apache.lucene.codecs.Codec        |    2 +-
 .../BaseLucene80DocValuesFormatTestCase.java       |  740 +++++++
 ...TestBestCompressionLucene80DocValuesFormat.java |   33 +
 .../TestBestSpeedLucene80DocValuesFormat.java      |   33 +
 .../lucene80/TestLucene80DocValuesFormat.java      |  747 -------
 ...tLucene87StoredFieldsFormatHighCompression.java |    9 +-
 .../lucene/document/BaseLatLonShapeTestCase.java   |    4 +-
 .../apache/lucene/document/BaseShapeTestCase.java  |   31 +-
 .../apache/lucene/document/TestFeatureField.java   |   25 +
 .../lucene/document/TestInetAddressPoint.java      |    0
 .../document/TestLatLonPointShapeQueries.java      |   19 +-
 .../apache/lucene/document/TestLatLonShape.java    |   82 +-
 .../org/apache/lucene/document/TestXYShape.java    |   73 +
 .../src/test/org/apache/lucene/geo/TestCircle.java |    6 +-
 .../lucene/index/TestExitableDirectoryReader.java  |   75 +-
 .../org/apache/lucene/index/TestIndexWriter.java   |   43 +
 .../apache/lucene/index/TestIndexableField.java    |   10 +
 .../test/org/apache/lucene/index/TestKnnGraph.java |  382 ++++
 .../org/apache/lucene/index/TestOrdinalMap.java    |   60 +-
 .../lucene/index/TestPendingSoftDeletes.java       |   12 +-
 .../lucene/index/TestSegmentToThreadMapping.java   |    3 +
 .../lucene/index/TestSortingCodecReader.java       |   10 +
 .../org/apache/lucene/index/TestVectorValues.java  |  774 +++++++
 .../lucene/search/TestInetAddressRangeQueries.java |    0
 .../lucene/search/TestLatLonDocValuesQueries.java  |   11 +-
 .../lucene/search/TestLatLonPointQueries.java      |    6 +
 .../lucene/search/TestXYDocValuesQueries.java      |    6 +
 .../apache/lucene/search/TestXYPointQueries.java   |    6 +
 .../lucene/search/spans/TestSpanExplanations.java  |   38 +
 .../test/org/apache/lucene/util/TestIOUtils.java   |  385 ----
 .../org/apache/lucene/util/TestVectorUtil.java     |   83 +
 .../lucene/util/automaton/TestAutomaton.java       |   36 +
 .../test/org/apache/lucene/util/fst/TestFSTs.java  |    2 +-
 .../apache/lucene/util/hnsw/KnnGraphTester.java    |  494 +++++
 .../test/org/apache/lucene/util/hnsw/TestHnsw.java |  465 ++++
 lucene/demo/src/java/overview.html                 |    2 +-
 lucene/facet/build.gradle                          |    2 +
 .../directory/DirectoryTaxonomyReader.java         |   24 +-
 .../directory/DirectoryTaxonomyWriter.java         |    7 +-
 .../directory/TestBackwardsCompatibility.java      |  110 +
 .../taxonomy/directory/taxonomy.8.6.3-cfs.zip      |  Bin 0 -> 3058 bytes
 .../grouping/AllGroupHeadsCollectorTest.java       |  558 -----
 .../search/grouping/AllGroupsCollectorTest.java    |  134 --
 .../lucene/search/grouping/BlockGroupingTest.java  |  225 --
 .../grouping/DistinctValuesCollectorTest.java      |  481 ----
 .../grouping/DoubleRangeGroupSelectorTest.java     |   59 -
 .../search/grouping/GroupFacetCollectorTest.java   |  771 -------
 .../lucene/search/grouping/GroupingSearchTest.java |  247 ---
 .../grouping/LongRangeGroupSelectorTest.java       |   59 -
 .../search/grouping/TermGroupSelectorTest.java     |   60 -
 .../grouping/TestAllGroupHeadsCollector.java       |  558 +++++
 .../search/grouping/TestAllGroupsCollector.java    |  134 ++
 .../lucene/search/grouping/TestBlockGrouping.java  |  225 ++
 .../grouping/TestDistinctValuesCollector.java      |  481 ++++
 .../grouping/TestDoubleRangeGroupSelector.java     |   59 +
 .../search/grouping/TestGroupFacetCollector.java   |  771 +++++++
 .../lucene/search/grouping/TestGroupingSearch.java |  247 +++
 .../grouping/TestLongRangeGroupSelector.java       |   59 +
 .../search/grouping/TestTermGroupSelector.java     |   60 +
 .../lucene/search/grouping/TestTopGroups.java      |  231 ++
 .../grouping/TestValueSourceGroupSelector.java     |   51 +
 .../lucene/search/grouping/TopGroupsTest.java      |  231 --
 .../grouping/ValueSourceGroupSelectorTest.java     |   51 -
 .../search/highlight/LimitTokenOffsetFilter.java   |    2 +-
 .../search/highlight/TermVectorLeafReader.java     |    8 +-
 .../search/matchhighlight/MatchHighlighter.java    |   12 +-
 .../lucene/search/matchhighlight/Passage.java      |    9 +
 .../search/highlight/HighlighterPhraseTest.java    |  424 ----
 .../lucene/search/highlight/HighlighterTest.java   | 2328 --------------------
 .../apache/lucene/search/highlight/MissesTest.java |   79 -
 .../highlight/OffsetLimitTokenFilterTest.java      |   58 -
 .../lucene/search/highlight/TestHighlighter.java   | 2328 ++++++++++++++++++++
 .../search/highlight/TestHighlighterPhrase.java    |  424 ++++
 .../apache/lucene/search/highlight/TestMisses.java |   79 +
 .../highlight/TestOffsetLimitTokenFilter.java      |   58 +
 .../lucene/search/highlight/TestTokenSources.java  |  497 +++++
 .../lucene/search/highlight/TokenSourcesTest.java  |  497 -----
 .../highlight/custom/HighlightCustomQueryTest.java |  196 --
 .../highlight/custom/TestHighlightCustomQuery.java |  196 ++
 .../uhighlight/LengthGoalBreakIteratorTest.java    |  199 --
 .../uhighlight/TestLengthGoalBreakIterator.java    |  199 ++
 .../BreakIteratorBoundaryScannerTest.java          |   92 -
 .../vectorhighlight/FastVectorHighlighterTest.java |  790 -------
 .../vectorhighlight/FieldPhraseListTest.java       |  290 ---
 .../search/vectorhighlight/FieldQueryTest.java     |  961 --------
 .../search/vectorhighlight/FieldTermStackTest.java |  210 --
 .../vectorhighlight/IndexTimeSynonymTest.java      |  315 ---
 .../ScoreOrderFragmentsBuilderTest.java            |   49 -
 .../vectorhighlight/SimpleBoundaryScannerTest.java |   58 -
 .../vectorhighlight/SimpleFragListBuilderTest.java |  182 --
 .../SimpleFragmentsBuilderTest.java                |  336 ---
 .../vectorhighlight/SingleFragListBuilderTest.java |   52 -
 .../TestBreakIteratorBoundaryScanner.java          |   92 +
 .../vectorhighlight/TestFastVectorHighlighter.java |  790 +++++++
 .../vectorhighlight/TestFieldPhraseList.java       |  290 +++
 .../search/vectorhighlight/TestFieldQuery.java     |  961 ++++++++
 .../search/vectorhighlight/TestFieldTermStack.java |  210 ++
 .../vectorhighlight/TestIndexTimeSynonym.java      |  315 +++
 .../TestScoreOrderFragmentsBuilder.java            |   49 +
 .../vectorhighlight/TestSimpleBoundaryScanner.java |   58 +
 .../vectorhighlight/TestSimpleFragListBuilder.java |  182 ++
 .../TestSimpleFragmentsBuilder.java                |  336 +++
 .../vectorhighlight/TestSingleFragListBuilder.java |   52 +
 .../TestWeightedFragListBuilder.java               |   63 +
 .../WeightedFragListBuilderTest.java               |   63 -
 .../join/GlobalOrdinalsWithScoreCollector.java     |    2 +-
 .../search/join/GlobalOrdinalsWithScoreQuery.java  |    2 +-
 .../org/apache/lucene/search/join/JoinUtil.java    |    2 +-
 .../apache/lucene/search/join/TestJoinUtil.java    |   16 +-
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |    1 -
 .../jetty-continuation-9.4.34.v20201102.jar.sha1   |    1 +
 .../licenses/jetty-http-9.4.27.v20200227.jar.sha1  |    1 -
 .../licenses/jetty-http-9.4.34.v20201102.jar.sha1  |    1 +
 lucene/licenses/jetty-io-9.4.27.v20200227.jar.sha1 |    1 -
 lucene/licenses/jetty-io-9.4.34.v20201102.jar.sha1 |    1 +
 .../jetty-server-9.4.27.v20200227.jar.sha1         |    1 -
 .../jetty-server-9.4.34.v20201102.jar.sha1         |    1 +
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |    1 -
 .../jetty-servlet-9.4.34.v20201102.jar.sha1        |    1 +
 .../licenses/jetty-util-9.4.27.v20200227.jar.sha1  |    1 -
 .../licenses/jetty-util-9.4.34.v20201102.jar.sha1  |    1 +
 lucene/licenses/junit-4.12.jar.sha1                |    1 -
 lucene/licenses/junit-4.13.1.jar.sha1              |    1 +
 .../apache/lucene/index/memory/MemoryIndex.java    |    9 +-
 lucene/misc/build.gradle                           |    4 +-
 lucene/misc/native/build.gradle                    |   69 +
 .../misc/native/src/main/posix/NativePosixUtil.cpp |  346 +++
 .../native/src/main/windows/WindowsDirectory.cpp   |  175 ++
 .../org/apache/lucene/document/LazyDocument.java   |  195 --
 .../java/org/apache/lucene/document/package.html   |   22 -
 .../org/apache/lucene/index/IndexSplitter.java     |  159 --
 .../lucene/index/MultiPassIndexSplitter.java       |  266 ---
 .../org/apache/lucene/index/PKIndexSplitter.java   |  182 --
 .../src/java/org/apache/lucene/index/package.html  |   22 -
 .../apache/lucene/misc/CollectorMemoryTracker.java |    2 +-
 .../org/apache/lucene/misc/IndexMergeTool.java     |    2 +-
 .../apache/lucene/misc/document/LazyDocument.java  |  196 ++
 .../apache/lucene/misc/document/package-info.java  |   19 +
 .../apache/lucene/misc/index/IndexSplitter.java    |  154 ++
 .../lucene/misc/index/MultiPassIndexSplitter.java  |  280 +++
 .../apache/lucene/misc/index/PKIndexSplitter.java  |  189 ++
 .../org/apache/lucene/misc/index/package-info.java |   19 +
 .../misc/search/DiversifiedTopDocsCollector.java   |  251 +++
 .../apache/lucene/misc/search/DocValuesStats.java  |  409 ++++
 .../misc/search/DocValuesStatsCollector.java       |   68 +
 .../search/MemoryAccountingBitsetCollector.java    |   60 +
 .../apache/lucene/misc/search/package-info.java    |   19 +
 .../search/similarity/LegacyBM25Similarity.java    |  104 +
 .../misc/search/similarity/package-info.java       |   19 +
 .../misc/store/HardlinkCopyDirectoryWrapper.java   |  100 +
 .../apache/lucene/misc/store/NativePosixUtil.java  |   52 +
 .../lucene/misc/store/NativeUnixDirectory.java     |  437 ++++
 .../org/apache/lucene/misc/store/RAFDirectory.java |  184 ++
 .../apache/lucene/misc/store/WindowsDirectory.java |  141 ++
 .../org/apache/lucene/misc/store/package-info.java |   19 +
 .../org/apache/lucene/misc/util/MemoryTracker.java |   26 +
 .../apache/lucene/misc/util/fst/ListOfOutputs.java |  233 ++
 .../misc/util/fst/UpToTwoPositiveIntOutputs.java   |  252 +++
 .../apache/lucene/misc/util/fst/package-info.java  |   19 +
 .../org/apache/lucene/misc/util/package-info.java  |   20 +
 .../lucene/search/DiversifiedTopDocsCollector.java |  244 --
 .../org/apache/lucene/search/DocValuesStats.java   |  409 ----
 .../lucene/search/DocValuesStatsCollector.java     |   64 -
 .../search/MemoryAccountingBitsetCollector.java    |   58 -
 .../src/java/org/apache/lucene/search/package.html |   22 -
 .../search/similarity/LegacyBM25Similarity.java    |  104 -
 .../apache/lucene/search/similarity/package.html   |   22 -
 .../lucene/store/HardlinkCopyDirectoryWrapper.java |   95 -
 .../org/apache/lucene/store/NativePosixUtil.cpp    |  346 ---
 .../org/apache/lucene/store/NativePosixUtil.java   |   52 -
 .../apache/lucene/store/NativeUnixDirectory.java   |  429 ----
 .../java/org/apache/lucene/store/RAFDirectory.java |  176 --
 .../org/apache/lucene/store/WindowsDirectory.cpp   |  175 --
 .../org/apache/lucene/store/WindowsDirectory.java  |  137 --
 .../src/java/org/apache/lucene/store/package.html  |   22 -
 .../java/org/apache/lucene/util/MemoryTracker.java |   26 -
 .../org/apache/lucene/util/fst/ListOfOutputs.java  |  231 --
 .../lucene/util/fst/UpToTwoPositiveIntOutputs.java |  250 ---
 .../java/org/apache/lucene/util/fst/package.html   |   22 -
 .../src/java/org/apache/lucene/util/package.html   |   23 -
 lucene/misc/src/java/overview.html                 |   25 +-
 .../apache/lucene/document/TestLazyDocument.java   |  223 --
 .../org/apache/lucene/index/TestIndexSplitter.java |   96 -
 .../lucene/index/TestMultiPassIndexSplitter.java   |  139 --
 .../apache/lucene/index/TestPKIndexSplitter.java   |  117 -
 .../lucene/misc/document/TestLazyDocument.java     |  227 ++
 .../lucene/misc/index/TestIndexSplitter.java       |  103 +
 .../misc/index/TestMultiPassIndexSplitter.java     |  146 ++
 .../lucene/misc/index/TestPKIndexSplitter.java     |  123 ++
 .../search/TestDiversifiedTopDocsCollector.java    |  565 +++++
 .../misc/search/TestDocValuesStatsCollector.java   |  467 ++++
 .../TestMemoryAccountingBitsetCollector.java       |   73 +
 .../similarity/TestLegacyBM25Similarity.java       |  123 ++
 .../lucene/misc/store/NativeLibEnableRule.java     |   54 +
 .../lucene/misc/store/NativeUnixDirectoryTest.java |   46 +
 .../store/TestHardLinkCopyDirectoryWrapper.java    |  136 ++
 .../apache/lucene/misc/store/TestRAFDirectory.java |   35 +
 .../lucene/misc/store/WindowsDirectoryTest.java    |   40 +
 .../misc/util/TestCollectorMemoryTracker.java      |   43 +
 .../apache/lucene/misc/util/fst/TestFSTsMisc.java  |  238 ++
 .../search/TestDiversifiedTopDocsCollector.java    |  551 -----
 .../lucene/search/TestDocValuesStatsCollector.java |  463 ----
 .../TestMemoryAccountingBitsetCollector.java       |   69 -
 .../similarity/TestLegacyBM25Similarity.java       |  123 --
 .../store/TestHardLinkCopyDirectoryWrapper.java    |  126 --
 .../org/apache/lucene/store/TestRAFDirectory.java  |   32 -
 .../lucene/util/TestCollectorMemoryTracker.java    |   42 -
 .../org/apache/lucene/util/fst/TestFSTsMisc.java   |  236 --
 lucene/packaging/build.gradle                      |    4 +-
 .../intervals/ConjunctionIntervalIterator.java     |    8 +-
 .../lucene/queries/intervals/IntervalIterator.java |    6 +
 .../lucene/queries/intervals/IntervalQuery.java    |    2 +-
 .../lucene/queries/CommonTermsQueryTest.java       |  552 -----
 .../lucene/queries/TestCommonTermsQuery.java       |  552 +++++
 .../queries/intervals/OneTimeIntervalSource.java   |  189 ++
 .../queries/intervals/TestIntervalQuery.java       |    6 +
 .../IndexAndTaxonomyReplicationClientTest.java     |  460 ----
 .../replicator/IndexAndTaxonomyRevisionTest.java   |  171 --
 .../replicator/IndexReplicationClientTest.java     |  336 ---
 .../lucene/replicator/IndexRevisionTest.java       |  154 --
 .../lucene/replicator/LocalReplicatorTest.java     |  182 --
 .../apache/lucene/replicator/SessionTokenTest.java |   64 -
 .../TestIndexAndTaxonomyReplicationClient.java     |  460 ++++
 .../replicator/TestIndexAndTaxonomyRevision.java   |  171 ++
 .../replicator/TestIndexReplicationClient.java     |  336 +++
 .../lucene/replicator/TestIndexRevision.java       |  154 ++
 .../lucene/replicator/TestLocalReplicator.java     |  182 ++
 .../apache/lucene/replicator/TestSessionToken.java |   64 +
 .../lucene/replicator/http/HttpReplicatorTest.java |  153 --
 .../lucene/replicator/http/TestHttpReplicator.java |  153 ++
 .../codecs/idversion/IDVersionPostingsFormat.java  |  142 --
 .../codecs/idversion/IDVersionPostingsReader.java  |  109 -
 .../codecs/idversion/IDVersionPostingsWriter.java  |  169 --
 .../idversion/IDVersionSegmentTermsEnum.java       | 1061 ---------
 .../idversion/IDVersionSegmentTermsEnumFrame.java  |  724 ------
 .../codecs/idversion/IDVersionTermState.java       |   40 -
 .../lucene/codecs/idversion/SingleDocsEnum.java    |   90 -
 .../codecs/idversion/SinglePostingsEnum.java       |  101 -
 .../idversion/VersionBlockTreeTermsReader.java     |  253 ---
 .../idversion/VersionBlockTreeTermsWriter.java     |  861 --------
 .../codecs/idversion/VersionFieldReader.java       |  176 --
 .../lucene/codecs/idversion/package-info.java      |   22 -
 .../apache/lucene/document/BigIntegerPoint.java    |  250 ---
 .../document/DoublePointMultiRangeBuilder.java     |   54 -
 .../document/FloatPointMultiRangeBuilder.java      |   55 -
 .../lucene/document/FloatPointNearestNeighbor.java |  311 ---
 .../org/apache/lucene/document/HalfFloatPoint.java |  425 ----
 .../lucene/document/IntPointMultiRangeBuilder.java |   53 -
 .../apache/lucene/document/LatLonBoundingBox.java  |  232 --
 .../document/LongPointMultiRangeBuilder.java       |   53 -
 .../java/org/apache/lucene/document/package.html   |   32 -
 .../codecs/idversion/IDVersionPostingsFormat.java  |  142 ++
 .../codecs/idversion/IDVersionPostingsReader.java  |  109 +
 .../codecs/idversion/IDVersionPostingsWriter.java  |  169 ++
 .../idversion/IDVersionSegmentTermsEnum.java       | 1061 +++++++++
 .../idversion/IDVersionSegmentTermsEnumFrame.java  |  724 ++++++
 .../codecs/idversion/IDVersionTermState.java       |   40 +
 .../sandbox/codecs/idversion/SingleDocsEnum.java   |   90 +
 .../codecs/idversion/SinglePostingsEnum.java       |  101 +
 .../idversion/VersionBlockTreeTermsReader.java     |  253 +++
 .../idversion/VersionBlockTreeTermsWriter.java     |  861 ++++++++
 .../codecs/idversion/VersionFieldReader.java       |  176 ++
 .../sandbox/codecs/idversion/package-info.java     |   22 +
 .../lucene/sandbox/document/BigIntegerPoint.java   |  252 +++
 .../document/DoublePointMultiRangeBuilder.java     |   54 +
 .../document/FloatPointMultiRangeBuilder.java      |   55 +
 .../document/FloatPointNearestNeighbor.java        |  312 +++
 .../lucene/sandbox/document/HalfFloatPoint.java    |  429 ++++
 .../document/IntPointMultiRangeBuilder.java        |   53 +
 .../lucene/sandbox/document/LatLonBoundingBox.java |  236 ++
 .../document/LongPointMultiRangeBuilder.java       |   53 +
 .../lucene/sandbox/document/package-info.java      |   25 +
 .../apache/lucene/sandbox/search/BM25FQuery.java   |  474 ++++
 .../lucene/sandbox/search/CoveringQuery.java       |  232 ++
 .../lucene/sandbox/search/CoveringScorer.java      |  233 ++
 .../sandbox/search/DocValuesNumbersQuery.java      |  159 ++
 .../lucene/sandbox/search/DocValuesTermsQuery.java |  255 +++
 .../IndexSortSortedNumericDocValuesRangeQuery.java |  315 +++
 .../search/LargeNumHitsTopDocsCollector.java       |  166 ++
 .../search/LatLonPointPrototypeQueries.java        |  119 +
 .../apache/lucene/sandbox/search/LongHashSet.java  |  165 ++
 .../sandbox/search/MultiNormsLeafSimScorer.java    |  157 ++
 .../lucene/sandbox/search/MultiRangeQuery.java     |  399 ++++
 .../lucene/sandbox/search/NearestNeighbor.java     |  340 +++
 .../lucene/sandbox/search/PhraseWildcardQuery.java | 1063 +++++++++
 .../lucene/sandbox/search/TermAutomatonQuery.java  |  524 +++++
 .../lucene/sandbox/search/TermAutomatonScorer.java |  390 ++++
 .../search/TokenStreamToTermAutomatonQuery.java    |  114 +
 .../apache/lucene/sandbox/search/package-info.java |   19 +
 .../java/org/apache/lucene/search/BM25FQuery.java  |  454 ----
 .../org/apache/lucene/search/CoveringQuery.java    |  219 --
 .../org/apache/lucene/search/CoveringScorer.java   |  225 --
 .../lucene/search/DocValuesNumbersQuery.java       |  150 --
 .../apache/lucene/search/DocValuesTermsQuery.java  |  246 ---
 .../IndexSortSortedNumericDocValuesRangeQuery.java |  301 ---
 .../search/LargeNumHitsTopDocsCollector.java       |  157 --
 .../lucene/search/LatLonPointPrototypeQueries.java |  113 -
 .../java/org/apache/lucene/search/LongHashSet.java |  165 --
 .../lucene/search/MultiNormsLeafSimScorer.java     |  155 --
 .../org/apache/lucene/search/MultiRangeQuery.java  |  389 ----
 .../org/apache/lucene/search/NearestNeighbor.java  |  340 ---
 .../apache/lucene/search/PhraseWildcardQuery.java  | 1045 ---------
 .../apache/lucene/search/TermAutomatonQuery.java   |  510 -----
 .../apache/lucene/search/TermAutomatonScorer.java  |  387 ----
 .../search/TokenStreamToTermAutomatonQuery.java    |  113 -
 .../src/java/org/apache/lucene/search/package.html |   28 -
 .../org.apache.lucene.codecs.PostingsFormat        |    2 +-
 .../codecs/idversion/StringAndPayloadField.java    |  100 -
 .../idversion/TestIDVersionPostingsFormat.java     |  834 -------
 .../lucene/document/TestBigIntegerPoint.java       |  119 -
 .../lucene/document/TestDoubleRangeField.java      |   67 -
 .../document/TestFloatPointNearestNeighbor.java    |  248 ---
 .../apache/lucene/document/TestHalfFloatPoint.java |  244 --
 .../codecs/idversion/StringAndPayloadField.java    |  100 +
 .../idversion/TestIDVersionPostingsFormat.java     |  834 +++++++
 .../sandbox/document/TestBigIntegerPoint.java      |  121 +
 .../sandbox/document/TestDoubleRangeField.java     |   69 +
 .../document/TestFloatPointNearestNeighbor.java    |  253 +++
 .../sandbox/document/TestHalfFloatPoint.java       |  246 +++
 .../sandbox/queries/FuzzyLikeThisQueryTest.java    |  154 --
 .../sandbox/queries/TestFuzzyLikeThisQuery.java    |  154 ++
 .../lucene/sandbox/search/LongHashSetTests.java    |  101 +
 .../lucene/sandbox/search/TestBM25FQuery.java      |  179 ++
 .../lucene/sandbox/search/TestCoveringQuery.java   |  165 ++
 .../sandbox/search/TestDocValuesNumbersQuery.java  |  196 ++
 .../sandbox/search/TestDocValuesTermsQuery.java    |  193 ++
 .../sandbox/search/TestFieldCacheTermsFilter.java  |   77 +
 ...tIndexSortSortedNumericDocValuesRangeQuery.java |  460 ++++
 .../search/TestLargeNumHitsTopDocsCollector.java   |  169 ++
 .../search/TestLatLonBoundingBoxQueries.java       |  308 +++
 .../sandbox/search/TestMultiRangeQueries.java      |  592 +++++
 .../apache/lucene/sandbox/search/TestNearest.java  |  258 +++
 .../sandbox/search/TestPhraseWildcardQuery.java    |  603 +++++
 .../sandbox/search/TestTermAutomatonQuery.java     | 1000 +++++++++
 .../org/apache/lucene/search/LongHashSetTests.java |  100 -
 .../org/apache/lucene/search/TestBM25FQuery.java   |  169 --
 .../apache/lucene/search/TestCoveringQuery.java    |  157 --
 .../lucene/search/TestDocValuesNumbersQuery.java   |  187 --
 .../lucene/search/TestDocValuesTermsQuery.java     |  184 --
 .../lucene/search/TestFieldCacheTermsFilter.java   |   74 -
 ...tIndexSortSortedNumericDocValuesRangeQuery.java |  446 ----
 .../search/TestLargeNumHitsTopDocsCollector.java   |  158 --
 .../search/TestLatLonBoundingBoxQueries.java       |  305 ---
 .../lucene/search/TestMultiRangeQueries.java       |  590 -----
 .../test/org/apache/lucene/search/TestNearest.java |  251 ---
 .../lucene/search/TestPhraseWildcardQuery.java     |  589 -----
 .../lucene/search/TestTermAutomatonQuery.java      |  982 ---------
 .../lucene/spatial/DistanceStrategyTest.java       |  118 -
 .../org/apache/lucene/spatial/PortedSolr3Test.java |  174 --
 .../lucene/spatial/QueryEqualsHashCodeTest.java    |  119 -
 .../org/apache/lucene/spatial/SpatialArgsTest.java |   50 -
 .../lucene/spatial/TestDistanceStrategy.java       |  118 +
 .../org/apache/lucene/spatial/TestPortedSolr3.java |  174 ++
 .../lucene/spatial/TestQueryEqualsHashCode.java    |  119 +
 .../org/apache/lucene/spatial/TestSpatialArgs.java |   50 +
 .../spatial/composite/CompositeStrategyTest.java   |  135 --
 .../spatial/composite/TestCompositeStrategy.java   |  135 ++
 .../lucene/spatial/prefix/DateNRStrategyTest.java  |  155 --
 .../spatial/prefix/HeatmapFacetCounterTest.java    |  265 ---
 .../lucene/spatial/prefix/JtsPolygonTest.java      |  117 -
 .../spatial/prefix/NumberRangeFacetsTest.java      |  275 ---
 .../RandomSpatialOpFuzzyPrefixTree50Test.java      |   31 -
 .../prefix/RandomSpatialOpFuzzyPrefixTreeTest.java |  558 -----
 .../lucene/spatial/prefix/TestDateNRStrategy.java  |  155 ++
 .../spatial/prefix/TestHeatmapFacetCounter.java    |  265 +++
 .../lucene/spatial/prefix/TestJtsPolygon.java      |  117 +
 .../spatial/prefix/TestNumberRangeFacets.java      |  275 +++
 .../prefix/TestRandomSpatialOpFuzzyPrefixTree.java |  558 +++++
 .../TestRandomSpatialOpFuzzyPrefixTree50.java      |   31 +
 .../prefix/tree/DateRangePrefixTreeTest.java       |  289 ---
 .../spatial/prefix/tree/S2PrefixTreeTest.java      |  113 -
 .../spatial/prefix/tree/SpatialPrefixTreeTest.java |  114 -
 .../prefix/tree/TestDateRangePrefixTree.java       |  289 +++
 .../spatial/prefix/tree/TestS2PrefixTree.java      |  113 +
 .../spatial/prefix/tree/TestSpatialPrefixTree.java |  114 +
 .../spatial/query/SpatialArgsParserTest.java       |   77 -
 .../spatial/query/TestSpatialArgsParser.java       |   77 +
 .../spatial/serialized/SerializedStrategyTest.java |   61 -
 .../spatial/serialized/TestSerializedStrategy.java |   61 +
 .../lucene/spatial/spatial4j/Geo3dRptTest.java     |  167 --
 .../Geo3dShapeSphereModelRectRelationTest.java     |   95 -
 .../Geo3dShapeWGS84ModelRectRelationTest.java      |  137 --
 .../apache/lucene/spatial/spatial4j/Geo3dTest.java |   85 -
 .../apache/lucene/spatial/spatial4j/TestGeo3d.java |   85 +
 .../lucene/spatial/spatial4j/TestGeo3dRpt.java     |  167 ++
 .../TestGeo3dShapeSphereModelRectRelation.java     |   95 +
 .../TestGeo3dShapeWGS84ModelRectRelation.java      |  137 ++
 .../geom/CompositeGeoPolygonRelationshipsTest.java |  842 -------
 .../apache/lucene/spatial3d/geom/GeoBBoxTest.java  |  390 ----
 .../lucene/spatial3d/geom/GeoCircleTest.java       |  429 ----
 .../spatial3d/geom/GeoConvexPolygonTest.java       |   91 -
 .../lucene/spatial3d/geom/GeoExactCircleTest.java  |  253 ---
 .../apache/lucene/spatial3d/geom/GeoModelTest.java |  110 -
 .../apache/lucene/spatial3d/geom/GeoPathTest.java  |  435 ----
 .../apache/lucene/spatial3d/geom/GeoPointTest.java |  110 -
 .../lucene/spatial3d/geom/GeoPolygonTest.java      | 1932 ----------------
 .../apache/lucene/spatial3d/geom/PlaneTest.java    |   92 -
 .../spatial3d/geom/RandomBinaryCodecTest.java      |   69 -
 .../spatial3d/geom/RandomGeoPolygonTest.java       |  271 ---
 .../geom/RandomGeoShapeRelationshipTest.java       |  282 ---
 .../lucene/spatial3d/geom/RandomPlaneTest.java     |  101 -
 .../geom/SimpleGeoPolygonRelationshipsTest.java    |  875 --------
 .../geom/TestCompositeGeoPolygonRelationships.java |  842 +++++++
 .../apache/lucene/spatial3d/geom/TestGeoBBox.java  |  390 ++++
 .../lucene/spatial3d/geom/TestGeoCircle.java       |  429 ++++
 .../spatial3d/geom/TestGeoConvexPolygon.java       |   91 +
 .../lucene/spatial3d/geom/TestGeoExactCircle.java  |  253 +++
 .../apache/lucene/spatial3d/geom/TestGeoModel.java |  110 +
 .../apache/lucene/spatial3d/geom/TestGeoPath.java  |  435 ++++
 .../apache/lucene/spatial3d/geom/TestGeoPoint.java |  110 +
 .../lucene/spatial3d/geom/TestGeoPolygon.java      | 1932 ++++++++++++++++
 .../apache/lucene/spatial3d/geom/TestPlane.java    |   92 +
 .../spatial3d/geom/TestRandomBinaryCodec.java      |   69 +
 .../spatial3d/geom/TestRandomGeoPolygon.java       |  271 +++
 .../geom/TestRandomGeoShapeRelationship.java       |  282 +++
 .../lucene/spatial3d/geom/TestRandomPlane.java     |  101 +
 .../geom/TestSimpleGeoPolygonRelationships.java    |  875 ++++++++
 .../apache/lucene/spatial3d/geom/TestXYZSolid.java |  239 ++
 .../apache/lucene/spatial3d/geom/XYZSolidTest.java |  239 --
 .../search/suggest/document/TestSuggestField.java  |    4 +-
 .../lucene/analysis/BaseTokenStreamTestCase.java   |  122 +-
 .../codecs/compressing/CompressingCodec.java       |    2 +-
 .../apache/lucene/geo/BaseGeoPointTestCase.java    |  415 ++--
 .../org/apache/lucene/geo/BaseXYPointTestCase.java |  402 ++--
 .../java/org/apache/lucene/geo/GeoTestUtil.java    |    2 +-
 .../lucene/index/BaseIndexFileFormatTestCase.java  |    3 +-
 .../java/org/apache/lucene/index/DocHelper.java    |    3 +-
 .../apache/lucene/index/MismatchedLeafReader.java  |    2 +
 .../java/org/apache/lucene/index/RandomCodec.java  |    3 +-
 .../apache/lucene/index/RandomPostingsTester.java  |    4 +-
 .../java/org/apache/lucene/search/QueryUtils.java  |    6 +
 .../org/apache/lucene/util/LuceneTestCase.java     |   13 -
 .../util/TestRuleSetupAndRestoreClassEnv.java      |    7 +-
 .../src/java/org/apache/lucene/util/TestUtil.java  |    9 +-
 .../java/org/apache/lucene/util/fst/FSTTester.java |    8 +-
 .../org/apache/lucene/util/TestPleaseFail.java     |   36 +
 settings.gradle                                    |    3 +-
 solr/.gitignore                                    |    5 +-
 solr/CHANGES.txt                                   |  162 +-
 solr/NOTICE.txt                                    |    9 +-
 solr/bin/oom_solr.sh                               |   14 +-
 solr/bin/solr                                      |   39 +-
 solr/bin/solr.in.sh                                |   10 +
 solr/contrib/clustering/build.gradle               |    6 +-
 .../handler/clustering/ClusteringComponent.java    |  652 +++---
 .../solr/handler/clustering/ClusteringEngine.java  |   41 -
 .../solr/handler/clustering/ClusteringParams.java  |   35 -
 .../clustering/DocumentClusteringEngine.java       |   47 -
 .../org/apache/solr/handler/clustering/Engine.java |  195 ++
 .../solr/handler/clustering/EngineContext.java     |  177 ++
 .../solr/handler/clustering/EngineEntry.java       |   80 +
 .../solr/handler/clustering/EngineParameters.java  |  353 +++
 .../handler/clustering/FlatKeysAttrVisitor.java    |  194 ++
 .../solr/handler/clustering/InputDocument.java     |   67 +
 .../handler/clustering/PathResourceLookup.java     |   80 +
 .../handler/clustering/SearchClusteringEngine.java |   52 -
 .../clustering/carrot2/CarrotClusteringEngine.java |  565 -----
 .../handler/clustering/carrot2/CarrotParams.java   |   73 -
 .../carrot2/LuceneCarrot2StemmerFactory.java       |  246 ---
 .../carrot2/LuceneCarrot2TokenizerFactory.java     |  167 --
 .../clustering/carrot2/SolrResourceLocator.java    |  142 --
 .../SolrStopwordsCarrot2LexicalDataFactory.java    |  140 --
 .../handler/clustering/carrot2/package-info.java   |   25 -
 .../solr/handler/clustering/package-info.java      |   12 +-
 ....carrot2.clustering.ClusteringAlgorithmProvider |    3 +
 .../carrot2/mock-external-attrs-attributes.xml     |   10 -
 .../conf/clustering/carrot2/stoplabels.mt          |    1 -
 .../conf/clustering/carrot2/stopwords.mt           |    1 -
 .../conf/clustering/custom/stoplabels.mt           |    1 -
 .../conf/clustering/custom/stopwords.mt            |    1 -
 .../collection1/conf/mapping-ISOLatin1Accent.txt   |  246 ---
 .../clustering/solr/collection1/conf/schema.xml    |  335 +--
 .../solr/collection1/conf/solrconfig.xml           |  423 +---
 .../clustering/solr/collection1/conf/spellings.txt |    2 -
 .../clustering/solr/collection1/conf/stopwords.txt |    5 +-
 .../clustering/solr/collection1/conf/synonyms.txt  |   31 -
 .../english.stoplabels.utf8                        |    1 +
 .../english.stopwords.utf8                         |    2 +
 solr/contrib/clustering/src/test-files/log4j2.xml  |   43 +
 ...ComponentDistributedTest-testLingoAlgorithm.txt |   17 +
 ...ngComponentDistributedTest-testStcAlgorithm.txt |   10 +
 ...ngComponentTest-testCustomLanguageResources.txt |    2 +
 ...steringComponentTest-testDefaultEngineOrder.txt |    2 +
 ...ClusteringComponentTest-testKmeansAlgorithm.txt |    8 +
 .../ClusteringComponentTest-testLingoAlgorithm.txt |   17 +
 ...eringComponentTest-testParamDefaultLanguage.txt |    2 +
 ...steringComponentTest-testParamLanguageField.txt |    9 +
 ...lusteringComponentTest-testParamOtherTopics.txt |   12 +
 ...eringComponentTest-testParamSubclusters-off.txt |    4 +
 ...teringComponentTest-testParamSubclusters-on.txt |   13 +
 ...usteringComponentTest-testPassingAttributes.txt |    2 +
 ...nentTest-testPassingAttributesViaSolrConfig.txt |    2 +
 .../ClusteringComponentTest-testStcAlgorithm.txt   |   10 +
 .../clustering/AbstractClusteringTestCase.java     |  250 ---
 .../ClusteringComponentDistributedTest.java        |  130 ++
 .../clustering/ClusteringComponentTest.java        |  442 +++-
 .../DistributedClusteringComponentTest.java        |   54 -
 .../clustering/EchoClusteringAlgorithm.java        |   62 +
 .../EchoClusteringAlgorithmProvider.java           |   34 +
 .../clustering/MockClusteringAlgorithm.java        |  129 ++
 .../MockClusteringAlgorithmProvider.java           |   31 +
 .../clustering/MockDocumentClusteringEngine.java   |   42 -
 .../handler/clustering/ResourceCheckAlgorithm.java |   74 +
 .../clustering/ResourceCheckAlgorithmProvider.java |   31 +
 .../apache/solr/handler/clustering/SampleData.java |  146 ++
 .../carrot2/CarrotClusteringEngineTest.java        |  542 -----
 .../carrot2/DuplicatingStemmerFactory.java         |   33 -
 .../carrot2/DuplicatingTokenizerFactory.java       |   51 -
 .../carrot2/EchoClusteringAlgorithm.java           |   76 -
 .../carrot2/EchoStemsClusteringAlgorithm.java      |   74 -
 .../carrot2/EchoTokensClusteringAlgorithm.java     |   68 -
 .../LexicalResourcesCheckClusteringAlgorithm.java  |   79 -
 .../carrot2/MockClusteringAlgorithm.java           |  103 -
 .../src/java/org/apache/solr/ltr/LTRRescorer.java  |  153 +-
 .../java/org/apache/solr/ltr/LTRScoringQuery.java  |    4 +
 .../solr/ltr/SolrQueryRequestContextUtils.java     |   12 +-
 .../apache/solr/ltr/interleaving/Interleaving.java |   46 +
 .../solr/ltr/interleaving/InterleavingResult.java  |   42 +
 .../ltr/interleaving/LTRInterleavingQuery.java     |   75 +
 .../ltr/interleaving/LTRInterleavingRescorer.java  |  162 ++
 .../interleaving/LTRInterleavingScoringQuery.java  |   53 +
 .../OriginalRankingLTRScoringQuery.java            |   33 +
 .../algorithms/TeamDraftInterleaving.java          |  127 ++
 .../ltr/interleaving/algorithms/package-info.java  |   21 +
 .../apache/solr/ltr/interleaving/package-info.java |   21 +
 .../LTRFeatureLoggerTransformerFactory.java        |  187 +-
 .../LTRInterleavingTransformerFactory.java         |  114 +
 .../apache/solr/ltr/search/LTRQParserPlugin.java   |  155 +-
 .../java/org/apache/solr/ltr/search/LTRQuery.java  |   80 +
 solr/contrib/ltr/src/java/overview.html            |    2 +-
 .../solr/collection1/conf/solrconfig-ltr.xml       |    9 +
 .../org/apache/solr/ltr/TestLTRQParserExplain.java |  160 ++
 .../org/apache/solr/ltr/TestLTRQParserPlugin.java  |   16 +-
 .../apache/solr/ltr/TestLTRReRankingPipeline.java  |    3 +-
 .../org/apache/solr/ltr/TestLTRScoringQuery.java   |    3 +-
 .../test/org/apache/solr/ltr/TestLTRWithSort.java  |  103 +
 .../test/org/apache/solr/ltr/TestRerankBase.java   |    3 +-
 .../interleaving/TestLTRQParserInterleaving.java   |  206 ++
 .../algorithms/TeamDraftInterleavingTest.java      |  170 ++
 .../apache/solr/ltr/norm/TestMinMaxNormalizer.java |    5 +-
 .../solr/ltr/norm/TestStandardNormalizer.java      |    5 +-
 .../transform/TestFeatureLoggerTransformer.java    |  400 ++++
 .../transform/TestInterleavingTransformer.java     |  277 +++
 solr/contrib/prometheus-exporter/bin/solr-exporter |   45 +-
 .../prometheus-exporter/bin/solr-exporter.cmd      |   15 +-
 solr/contrib/prometheus-exporter/build.gradle      |   51 +-
 .../conf/grafana-solr-dashboard.json               |   87 +-
 solr/contrib/prometheus-exporter/conf/log4j2.xml   |   40 +
 .../conf/solr-exporter-config.xml                  |   34 +
 .../prometheus/exporter/MetricsConfiguration.java  |   72 +-
 .../solr/prometheus/exporter/SolrExporter.java     |   19 +-
 .../solr/prometheus/scraper/SolrCloudScraper.java  |   16 +-
 .../prometheus/PrometheusExporterTestBase.java     |    1 +
 .../org/apache/solr/prometheus/utils/Helpers.java  |   13 +-
 .../src/java/org/apache/solr/api/AnnotatedApi.java |   20 +-
 .../org/apache/solr/api/ConfigurablePlugin.java    |   33 +
 .../apache/solr/api/ContainerPluginsRegistry.java  |  488 ++++
 .../apache/solr/api/CustomContainerPlugins.java    |  362 ---
 .../src/java/org/apache/solr/api/V2HttpCall.java   |    2 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |   18 +-
 .../org/apache/solr/cloud/ClusterSingleton.java    |   73 +
 .../src/java/org/apache/solr/cloud/Overseer.java   |   31 +-
 .../OverseerCollectionConfigSetProcessor.java      |   11 +-
 .../apache/solr/cloud/OverseerTaskProcessor.java   |   21 +-
 .../org/apache/solr/cloud/RecoveryStrategy.java    |   13 +-
 .../org/apache/solr/cloud/ReplicateFromLeader.java |   13 +-
 .../solr/cloud/ShardLeaderElectionContext.java     |    2 +-
 .../solr/cloud/ShardLeaderElectionContextBase.java |    4 +-
 .../java/org/apache/solr/cloud/ZkController.java   |   62 +-
 .../solr/cloud/api/collections/AddReplicaCmd.java  |   26 -
 .../apache/solr/cloud/api/collections/Assign.java  |   72 +-
 .../cloud/api/collections/CreateCollectionCmd.java |   51 -
 .../cloud/api/collections/DeleteCollectionCmd.java |   21 -
 .../solr/cloud/api/collections/MoveReplicaCmd.java |   21 -
 .../OverseerCollectionMessageHandler.java          |   23 +-
 .../solr/cloud/api/collections/SplitShardCmd.java  |   10 +-
 .../apache/solr/cloud/overseer/SliceMutator.java   |   18 +-
 .../org/apache/solr/cloud/rule/ImplicitSnitch.java |   65 -
 .../apache/solr/cloud/rule/ReplicaAssigner.java    |  452 ----
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |  395 ----
 .../solr/cloud/rule/ServerSnitchContext.java       |   59 -
 .../org/apache/solr/cloud/rule/package-info.java   |   23 -
 .../src/java/org/apache/solr/cluster/Replica.java  |   12 +-
 .../org/apache/solr/cluster/SolrCollection.java    |   33 +-
 .../apache/solr/cluster/events/ClusterEvent.java   |   47 +
 .../solr/cluster/events/ClusterEventListener.java  |   36 +
 .../solr/cluster/events/ClusterEventProducer.java  |   62 +
 .../cluster/events/ClusterEventProducerBase.java   |  107 +
 .../events/ClusterPropertiesChangedEvent.java      |   33 +
 .../solr/cluster/events/CollectionsAddedEvent.java |   33 +
 .../cluster/events/CollectionsRemovedEvent.java    |   32 +
 .../apache/solr/cluster/events/NoOpProducer.java   |   51 +
 .../apache/solr/cluster/events/NodesDownEvent.java |   32 +
 .../apache/solr/cluster/events/NodesUpEvent.java   |   32 +
 .../events/impl/ClusterEventProducerFactory.java   |  195 ++
 .../impl/CollectionsRepairEventListener.java       |  264 +++
 .../events/impl/DefaultClusterEventProducer.java   |  231 ++
 .../impl/DelegatingClusterEventProducer.java       |  141 ++
 .../solr/cluster/events/impl/package-info.java     |   23 +
 .../apache/solr/cluster/events/package-info.java   |   23 +
 .../solr/cluster/placement/AttributeFetcher.java   |   49 +-
 .../solr/cluster/placement/AttributeValues.java    |   60 +-
 .../solr/cluster/placement/PlacementPlan.java      |    2 +-
 .../solr/cluster/placement/PlacementPlugin.java    |   14 +-
 .../cluster/placement/PlacementPluginConfig.java   |   10 +
 .../solr/cluster/placement/PlacementRequest.java   |   54 +-
 .../placement/impl/AttributeFetcherImpl.java       |  376 ++--
 .../placement/impl/AttributeValuesImpl.java        |  146 +-
 .../placement/impl/PlacementPlanFactoryImpl.java   |   18 +-
 .../cluster/placement/impl/PlacementPlanImpl.java  |   10 +
 .../impl/PlacementPluginAssignStrategy.java        |    4 +-
 .../placement/impl/PlacementPluginConfigImpl.java  |   34 +-
 .../placement/impl/PlacementRequestImpl.java       |   18 +-
 .../placement/impl/ReplicaPlacementImpl.java       |    5 +
 .../impl/SimpleClusterAbstractionsImpl.java        |  120 +-
 .../plugins/AffinityPlacementFactory.java          |  577 +++++
 .../plugins/MinimizeCoresPlacementFactory.java     |  126 ++
 .../SamplePluginAffinityReplicaPlacement.java      |  509 -----
 .../plugins/SamplePluginMinimizeCores.java         |  138 --
 .../plugins/SamplePluginRandomPlacement.java       |   88 -
 .../cluster/placement/plugins/package-info.java    |    2 +-
 .../java/org/apache/solr/core/BlobRepository.java  |    3 +-
 .../apache/solr/core/CachingDirectoryFactory.java  |   15 +-
 .../src/java/org/apache/solr/core/CloudConfig.java |    2 +-
 .../org/apache/solr/core/ClusterSingletons.java    |  193 ++
 .../java/org/apache/solr/core/CoreContainer.java   |  284 ++-
 .../java/org/apache/solr/core/MetricsConfig.java   |  127 +-
 .../src/java/org/apache/solr/core/NodeConfig.java  |   38 +-
 .../org/apache/solr/core/SchemaCodecFactory.java   |    6 +-
 .../src/java/org/apache/solr/core/SolrConfig.java  |   68 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   34 +-
 .../src/java/org/apache/solr/core/SolrCores.java   |  226 +-
 .../src/java/org/apache/solr/core/SolrPaths.java   |   59 -
 .../org/apache/solr/core/SolrResourceLoader.java   |   20 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |   86 +-
 .../apache/solr/core/StandardDirectoryFactory.java |   15 +-
 .../apache/solr/core/TransientSolrCoreCache.java   |    4 +
 .../solr/core/TransientSolrCoreCacheDefault.java   |   16 +-
 .../solr/core/TransientSolrCoreCacheFactory.java   |   16 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |    8 +-
 .../src/java/org/apache/solr/core/ZkContainer.java |   32 +-
 .../apache/solr/filestore/DistribPackageStore.java |    2 +-
 .../java/org/apache/solr/handler/ClusterAPI.java   |   40 +-
 .../solr/handler/ContentStreamHandlerBase.java     |   65 +-
 .../apache/solr/handler/ReplicationHandler.java    |  153 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |   33 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |   26 +-
 .../solr/handler/admin/CollectionsHandler.java     |   56 +-
 .../solr/handler/admin/ConfigSetsHandler.java      |   76 +-
 .../solr/handler/admin/ContainerPluginsApi.java    |   39 +-
 .../solr/handler/admin/HealthCheckHandler.java     |    2 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |   18 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |   18 +-
 .../solr/handler/admin/RebalanceLeaders.java       |    2 +-
 .../solr/handler/admin/RequestSyncShardOp.java     |    1 -
 .../org/apache/solr/handler/admin/StatusOp.java    |    5 +-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |   10 +-
 .../handler/component/RealTimeGetComponent.java    |    2 +-
 .../solr/index/SlowCompositeReaderWrapper.java     |    6 +
 .../org/apache/solr/metrics/MetricSuppliers.java   |  267 ++-
 .../org/apache/solr/metrics/SolrMetricManager.java |   43 +-
 .../apache/solr/metrics/SolrMetricsContext.java    |   28 +
 .../apache/solr/packagemanager/PackageManager.java |    3 +-
 .../apache/solr/response/BinaryResponseWriter.java |    3 +
 .../response/transform/ChildDocTransformer.java    |   11 +-
 .../org/apache/solr/schema/ExternalFileField.java  |    5 +-
 .../org/apache/solr/schema/ManagedIndexSchema.java |    2 +-
 .../java/org/apache/solr/schema/SchemaField.java   |   11 +
 .../solr/search/CollapsingQParserPlugin.java       |    2 +
 .../src/java/org/apache/solr/search/Insanity.java  |    3 +-
 .../org/apache/solr/search/SolrCoreParser.java     |   13 +-
 .../apache/solr/search/SolrDocumentFetcher.java    |    2 +-
 .../org/apache/solr/search/SolrIndexSearcher.java  |   18 +-
 .../org/apache/solr/search/TermsQParserPlugin.java |    1 +
 .../solr/search/join/GraphEdgeCollector.java       |    2 +-
 .../similarities/LegacyBM25SimilarityFactory.java  |    2 +-
 .../similarities/SchemaSimilarityFactory.java      |    2 +-
 .../java/org/apache/solr/servlet/HttpSolrCall.java |   19 +-
 .../apache/solr/servlet/SolrDispatchFilter.java    |  163 +-
 .../apache/solr/uninverting/UninvertingReader.java |    3 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |   30 +-
 .../java/org/apache/solr/update/SolrCoreState.java |   75 +-
 .../org/apache/solr/update/SolrIndexSplitter.java  |    2 +-
 .../processor/AtomicUpdateDocumentMerger.java      |  121 +-
 .../src/java/org/apache/solr/util/PackageTool.java |   12 +-
 .../src/java/org/apache/solr/util/SolrCLI.java     |    3 +
 .../apache/solr/util/plugin/MapPluginLoader.java   |    1 +
 .../solr/util/plugin/NamedListPluginLoader.java    |    2 +-
 .../MyPatternReplaceCharFilterFactory.java.txt     |    1 +
 .../src/test-files/solr/solr-metricsconfig.xml     |    2 +-
 .../src/test-files/solr/solr-metricsconfig1.xml    |   28 +
 solr/core/src/test-files/solr/solr.xml             |    2 +
 .../org/apache/solr/BasicFunctionalityTest.java    |    2 +-
 .../apache/solr/SolrTestCaseJ4DeleteCoreTest.java  |   36 +
 .../test/org/apache/solr/TestRandomDVFaceting.java |    1 +
 .../test/org/apache/solr/TestSolrTestCaseJ4.java   |   36 -
 .../solr/backcompat/TestLuceneIndexBackCompat.java |    2 +-
 .../solr/cloud/ClusterStateMockUtilTest.java       |    1 +
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |    1 +
 .../org/apache/solr/cloud/ConfigSetsAPITest.java   |   94 -
 .../org/apache/solr/cloud/DeleteReplicaTest.java   |    6 +-
 .../org/apache/solr/cloud/LeaderElectionTest.java  |   32 +-
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |    1 +
 .../MetricsHistoryWithAuthIntegrationTest.java     |    2 +-
 .../org/apache/solr/cloud/NodeMutatorTest.java     |    2 +
 .../OverseerCollectionConfigSetProcessorTest.java  |   16 +-
 .../test/org/apache/solr/cloud/OverseerTest.java   |   98 +-
 .../org/apache/solr/cloud/ReplaceNodeTest.java     |   39 +
 .../test/org/apache/solr/cloud/SplitShardTest.java |    1 +
 .../apache/solr/cloud/TestBaseStatsCacheCloud.java |    1 +
 .../org/apache/solr/cloud/TestCloudRecovery.java   |    1 +
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   |  384 +++-
 .../solr/cloud/TestConfigSetsAPIShareSchema.java   |   94 +
 .../cloud/TestLeaderElectionWithEmptyReplica.java  |    4 +-
 .../solr/cloud/TestMiniSolrCloudClusterSSL.java    |    3 +
 .../solr/cloud/TestPullReplicaErrorHandling.java   |   23 +-
 .../solr/cloud/TestRandomRequestDistribution.java  |    5 +-
 .../org/apache/solr/cloud/TestTlogReplica.java     |    1 +
 .../org/apache/solr/cloud/ZkControllerTest.java    |   11 +-
 .../CollectionsAPIDistributedZkTest.java           |    5 +-
 .../solr/cloud/api/collections/ShardSplitTest.java |    5 +-
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java |  244 --
 .../org/apache/solr/cloud/rule/RuleEngineTest.java |  323 ---
 .../test/org/apache/solr/cloud/rule/RulesTest.java |  328 ---
 .../solr/cluster/events/AllEventsListener.java     |   61 +
 .../cluster/events/ClusterEventProducerTest.java   |  370 ++++
 .../impl/CollectionsRepairEventListenerTest.java   |  164 ++
 .../cluster/placement/AttributeFetcherForTest.java |   93 +
 .../apache/solr/cluster/placement/Builders.java    |  452 ++++
 .../placement/ClusterAbstractionsForTest.java      |  316 +++
 .../impl/PlacementPluginIntegrationTest.java       |  112 +
 .../impl/SimpleClusterAbstractionsTest.java        |   89 +
 .../plugins/AffinityPlacementFactoryTest.java      |  730 ++++++
 .../org/apache/solr/core/ResourceLoaderTest.java   |    7 +-
 .../org/apache/solr/core/TestCodecSupport.java     |    2 +-
 .../org/apache/solr/core/TestCoreContainer.java    |  128 +-
 .../org/apache/solr/core/TestCoreDiscovery.java    |    3 +-
 .../org/apache/solr/core/TestCustomStream.java     |   19 -
 .../test/org/apache/solr/core/TestLazyCores.java   |   10 +-
 .../org/apache/solr/core/TestMinimalConfig.java    |   45 +
 .../core/snapshots/TestSolrCloudSnapshots.java     |   13 +-
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |    6 +-
 .../org/apache/solr/handler/TestBlobHandler.java   |    3 +-
 .../org/apache/solr/handler/TestConfigReload.java  |    2 +-
 .../apache/solr/handler/TestContainerPlugin.java   |  190 +-
 .../solr/handler/TestHdfsBackupRestoreCore.java    |    7 +-
 .../org/apache/solr/handler/TestReqParamsAPI.java  |    2 +-
 .../solr/handler/TestSolrConfigHandlerCloud.java   |    4 +-
 .../handler/TestSolrConfigHandlerConcurrent.java   |    2 +-
 .../solr/handler/admin/AdminHandlersProxyTest.java |    1 +
 .../handler/admin/MetricsHistoryHandlerTest.java   |    1 +
 .../solr/handler/admin/TestCollectionAPIs.java     |    4 -
 .../handler/component/CloudReplicaSourceTest.java  |    1 +
 .../solr/index/WrapperMergePolicyFactoryTest.java  |    2 +-
 .../apache/solr/index/hdfs/CheckHdfsIndexTest.java |    2 +
 .../org/apache/solr/metrics/MetricsConfigTest.java |   36 +-
 .../solr/metrics/MetricsDisabledCloudTest.java     |   72 +
 .../apache/solr/metrics/SolrMetricManagerTest.java |   94 +-
 .../solr/metrics/SolrMetricsIntegrationTest.java   |   18 +-
 .../solr/response/TestBinaryResponseWriter.java    |   16 +
 .../TestChildDocTransformerHierarchy.java          |   47 +
 .../org/apache/solr/search/LargeFieldTest.java     |    2 +-
 .../apache/solr/search/SolrIndexSearcherTest.java  |  123 ++
 .../test/org/apache/solr/search/TestDocSet.java    |    6 +
 .../org/apache/solr/search/TestSolrCoreParser.java |   14 +-
 .../org/apache/solr/search/TestXmlQParser.java     |   18 +-
 .../solr/search/facet/TestJsonFacetRefinement.java |   12 +-
 .../apache/solr/search/facet/TestJsonFacets.java   |    6 +-
 .../solr/search/facet/TestJsonRangeFacets.java     |   10 +-
 .../TestLegacyBM25SimilarityFactory.java           |    2 +-
 .../solr/search/stats/TestDefaultStatsCache.java   |    1 +
 .../security/MultiDestinationAuditLoggerTest.java  |    5 +-
 .../solr/uninverting/TestFieldCacheSort.java       |    3 +-
 .../apache/solr/update/SolrCmdDistributorTest.java |   25 +-
 .../update/processor/AtomicUpdateJavabinTest.java  |  370 ++++
 .../processor/AtomicUpdateRemovalJavabinTest.java  |  132 --
 .../solr/update/processor/AtomicUpdatesTest.java   |   32 +
 solr/dev-docs/overseer/overseer.adoc               |    9 +-
 solr/dev-docs/plugins/container-plugins.adoc       |  143 ++
 solr/docker/Dockerfile                             |   11 +-
 solr/docker/build.gradle                           |   41 +-
 solr/docker/include/scripts/docker-entrypoint.sh   |    3 +
 solr/docker/include/scripts/init-var-solr          |   16 +-
 solr/docker/include/scripts/oom_solr.sh            |   38 -
 solr/docker/include/scripts/solr-create            |    3 -
 solr/docker/include/scripts/solr-fg                |   29 +-
 solr/docker/include/scripts/solr-foreground        |    3 -
 solr/docker/include/scripts/solr-precreate         |    3 -
 .../cases/empty-varsolr-vol-solr-nocopy/test.sh    |    1 +
 solr/docker/tests/cases/version/test.sh            |   45 -
 solr/licenses/attributes-binder-1.3.3.jar.sha1     |    1 -
 solr/licenses/attributes-binder-LICENSE-ASL.txt    |  202 --
 solr/licenses/attributes-binder-NOTICE.txt         |    9 -
 solr/licenses/carrot2-LICENSE-BSD_LIKE.txt         |   36 +
 solr/licenses/carrot2-NOTICE.txt                   |   10 +
 solr/licenses/carrot2-core-4.0.4.jar.sha1          |    1 +
 solr/licenses/carrot2-guava-18.0.jar.sha1          |    1 -
 solr/licenses/carrot2-guava-LICENSE-ASL.txt        |  202 --
 solr/licenses/carrot2-guava-NOTICE.txt             |    5 -
 solr/licenses/carrot2-mini-3.16.2.jar.sha1         |    1 -
 solr/licenses/carrot2-mini-LICENSE-BSD_LIKE.txt    |   36 -
 solr/licenses/carrot2-mini-NOTICE.txt              |   10 -
 .../http2-client-9.4.27.v20200227.jar.sha1         |    1 -
 .../http2-client-9.4.34.v20201102.jar.sha1         |    1 +
 .../http2-common-9.4.27.v20200227.jar.sha1         |    1 -
 .../http2-common-9.4.34.v20201102.jar.sha1         |    1 +
 .../licenses/http2-hpack-9.4.27.v20200227.jar.sha1 |    1 -
 .../licenses/http2-hpack-9.4.34.v20201102.jar.sha1 |    1 +
 ...http-client-transport-9.4.27.v20200227.jar.sha1 |    1 -
 ...http-client-transport-9.4.34.v20201102.jar.sha1 |    1 +
 .../http2-server-9.4.27.v20200227.jar.sha1         |    1 -
 .../http2-server-9.4.34.v20201102.jar.sha1         |    1 +
 .../jetty-alpn-client-9.4.27.v20200227.jar.sha1    |    1 -
 .../jetty-alpn-client-9.4.34.v20201102.jar.sha1    |    1 +
 ...etty-alpn-java-client-9.4.27.v20200227.jar.sha1 |    1 -
 ...etty-alpn-java-client-9.4.34.v20201102.jar.sha1 |    1 +
 ...etty-alpn-java-server-9.4.27.v20200227.jar.sha1 |    1 -
 ...etty-alpn-java-server-9.4.34.v20201102.jar.sha1 |    1 +
 .../jetty-alpn-server-9.4.27.v20200227.jar.sha1    |    1 -
 .../jetty-alpn-server-9.4.34.v20201102.jar.sha1    |    1 +
 .../jetty-client-9.4.27.v20200227.jar.sha1         |    1 -
 .../jetty-client-9.4.34.v20201102.jar.sha1         |    1 +
 .../jetty-continuation-9.4.27.v20200227.jar.sha1   |    1 -
 .../jetty-continuation-9.4.34.v20201102.jar.sha1   |    1 +
 .../jetty-deploy-9.4.27.v20200227.jar.sha1         |    1 -
 .../jetty-deploy-9.4.34.v20201102.jar.sha1         |    1 +
 solr/licenses/jetty-http-9.4.27.v20200227.jar.sha1 |    1 -
 solr/licenses/jetty-http-9.4.34.v20201102.jar.sha1 |    1 +
 solr/licenses/jetty-io-9.4.27.v20200227.jar.sha1   |    1 -
 solr/licenses/jetty-io-9.4.34.v20201102.jar.sha1   |    1 +
 solr/licenses/jetty-jmx-9.4.27.v20200227.jar.sha1  |    1 -
 solr/licenses/jetty-jmx-9.4.34.v20201102.jar.sha1  |    1 +
 .../jetty-rewrite-9.4.27.v20200227.jar.sha1        |    1 -
 .../jetty-rewrite-9.4.34.v20201102.jar.sha1        |    1 +
 .../jetty-security-9.4.27.v20200227.jar.sha1       |    1 -
 .../jetty-security-9.4.34.v20201102.jar.sha1       |    1 +
 .../jetty-server-9.4.27.v20200227.jar.sha1         |    1 -
 .../jetty-server-9.4.34.v20201102.jar.sha1         |    1 +
 .../jetty-servlet-9.4.27.v20200227.jar.sha1        |    1 -
 .../jetty-servlet-9.4.34.v20201102.jar.sha1        |    1 +
 .../jetty-servlets-9.4.27.v20200227.jar.sha1       |    1 -
 .../jetty-servlets-9.4.34.v20201102.jar.sha1       |    1 +
 .../jetty-start-9.4.27.v20200227-shaded.jar.sha1   |    1 -
 .../jetty-start-9.4.34.v20201102-shaded.jar.sha1   |    1 +
 solr/licenses/jetty-util-9.4.27.v20200227.jar.sha1 |    1 -
 solr/licenses/jetty-util-9.4.34.v20201102.jar.sha1 |    1 +
 .../jetty-webapp-9.4.27.v20200227.jar.sha1         |    1 -
 .../jetty-webapp-9.4.34.v20201102.jar.sha1         |    1 +
 solr/licenses/jetty-xml-9.4.27.v20200227.jar.sha1  |    1 -
 solr/licenses/jetty-xml-9.4.34.v20201102.jar.sha1  |    1 +
 solr/licenses/junit-4.12.jar.sha1                  |    1 -
 solr/licenses/junit-4.13.1.jar.sha1                |    1 +
 solr/licenses/simple-xml-safe-2.7.1.jar.sha1       |    1 -
 solr/licenses/simple-xml-safe-LICENSE-ASL.txt      |  202 --
 solr/licenses/simple-xml-safe-NOTICE.txt           |    2 -
 solr/server/etc/security.policy                    |    2 +-
 .../solr/configsets/_default/conf/solrconfig.xml   |    2 +-
 .../conf/clustering/carrot2/README.md              |   11 -
 .../conf/clustering/carrot2/kmeans-attributes.xml  |   19 -
 .../conf/clustering/carrot2/lingo-attributes.xml   |   24 -
 .../conf/clustering/carrot2/stc-attributes.xml     |   19 -
 .../conf/solrconfig.xml                            |   70 +-
 solr/server/solr/solr.xml                          |    2 +
 solr/solr-ref-guide/build.gradle                   |  281 ++-
 solr/solr-ref-guide/src/_config.yml.template       |    2 +-
 solr/solr-ref-guide/src/_includes/head.html        |    5 +-
 .../authentication-and-authorization-plugins.adoc  |    2 +-
 solr/solr-ref-guide/src/blob-store-api.adoc        |  274 ---
 solr/solr-ref-guide/src/codec-factory.adoc         |    4 +-
 solr/solr-ref-guide/src/collection-management.adoc |   12 +-
 .../src/common-query-parameters.adoc               |    3 +-
 solr/solr-ref-guide/src/config-api.adoc            |    3 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |   94 +-
 solr/solr-ref-guide/src/configuration-apis.adoc    |    5 +-
 solr/solr-ref-guide/src/css/navs.css               |    2 +-
 ...datadir-and-directoryfactory-in-solrconfig.adoc |    6 +-
 solr/solr-ref-guide/src/distributed-requests.adoc  |    8 +-
 solr/solr-ref-guide/src/enabling-ssl.adoc          |    2 +
 solr/solr-ref-guide/src/faceting.adoc              |    7 +-
 .../src/field-types-included-with-solr.adoc        |    2 +-
 solr/solr-ref-guide/src/filter-descriptions.adoc   |    4 +-
 solr/solr-ref-guide/src/highlighting.adoc          |    2 +-
 .../prometheus-solr-ping.png                       |  Bin 0 -> 425471 bytes
 .../result-clustering/carrot2-docs-attrs1.png      |  Bin 0 -> 132866 bytes
 .../result-clustering/carrot2-docs-attrs2.png      |  Bin 0 -> 133160 bytes
 .../images/result-clustering/carrot2-workbench.png |  Bin 210974 -> 0 bytes
 .../src/images/result-clustering/carrot2.png       |  Bin 403362 -> 637015 bytes
 .../velocity-search-ui/techproducts_browse.png     |  Bin 74854 -> 0 bytes
 .../src/implicit-requesthandlers.adoc              |   58 +-
 .../src/indexconfig-in-solrconfig.adoc             |   10 +-
 solr/solr-ref-guide/src/jvm-settings.adoc          |    2 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |    2 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |  154 +-
 solr/solr-ref-guide/src/libs.adoc                  |    2 +-
 solr/solr-ref-guide/src/luke-request-handler.adoc  |    2 +-
 .../src/major-changes-from-solr-5-to-solr-6.adoc   |    2 +-
 .../src/major-changes-in-solr-7.adoc               |    2 +-
 .../src/major-changes-in-solr-8.adoc               |    8 +-
 .../src/major-changes-in-solr-9.adoc               |    9 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |    9 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |   87 +-
 ...onitoring-solr-with-prometheus-and-grafana.adoc |   70 +-
 solr/solr-ref-guide/src/other-parsers.adoc         |   10 +-
 solr/solr-ref-guide/src/other-schema-elements.adoc |    6 +-
 solr/solr-ref-guide/src/query-re-ranking.adoc      |    8 +-
 .../src/query-settings-in-solrconfig.adoc          |    2 +-
 .../src/query-syntax-and-parsing.adoc              |    2 +-
 solr/solr-ref-guide/src/reindexing.adoc            |  162 +-
 solr/solr-ref-guide/src/replica-management.adoc    |    5 +
 ...andlers-and-searchcomponents-in-solrconfig.adoc |    4 +-
 solr/solr-ref-guide/src/result-clustering.adoc     |  400 ++--
 .../src/rule-based-replica-placement.adoc          |  177 --
 solr/solr-ref-guide/src/schemaless-mode.adoc       |   16 +-
 solr/solr-ref-guide/src/solr-field-types.adoc      |    2 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |   26 +-
 ...solrcloud-query-routing-and-read-tolerance.adoc |    2 +-
 solr/solr-ref-guide/src/solrcloud.adoc             |    5 +-
 .../src/stream-decorator-reference.adoc            |    4 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |    6 +-
 .../src/taking-solr-to-production.adoc             |   10 +-
 solr/solr-ref-guide/src/the-terms-component.adoc   |    2 +-
 .../src/update-request-processors.adoc             |  106 +-
 .../src/updating-parts-of-documents.adoc           |    4 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |   22 +-
 solr/solr-ref-guide/src/v2-api.adoc                |   10 -
 .../src/zookeeper-access-control.adoc              |    6 +-
 solr/solr-ref-guide/tools/BuildNavDataFiles.java   |    1 -
 .../solr-ref-guide/tools/CheckLinksAndAnchors.java |   11 -
 .../client/solrj/impl/BaseCloudSolrClient.java     |    8 +-
 .../solr/client/solrj/impl/Http2SolrClient.java    |    8 +
 .../solrj/impl/SolrClientNodeStateProvider.java    |   55 +-
 .../solrj/request/CollectionAdminRequest.java      |   11 -
 .../solr/client/solrj/request/V2Request.java       |   20 +
 .../apache/solr/client/solrj/response/Cluster.java |    9 +-
 .../client/solrj/response/ClusteringResponse.java  |   13 +-
 .../RequestReplicaListTransformerGenerator.java    |   15 +-
 .../solr/common/cloud/ClusterProperties.java       |    8 +-
 .../apache/solr/common/cloud/ClusterStateUtil.java |    2 +-
 .../apache/solr/common/cloud/DocCollection.java    |    6 -
 .../java/org/apache/solr/common/cloud/Replica.java |   22 +-
 .../org/apache/solr/common/cloud/UrlScheme.java    |   73 +
 .../apache/solr/common/cloud/ZkCoreNodeProps.java  |   27 +-
 .../solr/common/cloud/ZkMaintenanceUtils.java      |    9 +-
 .../org/apache/solr/common/cloud/ZkNodeProps.java  |   54 +-
 .../apache/solr/common/cloud/ZkStateReader.java    |   25 +-
 .../solr/common/params/CollectionAdminParams.java  |   11 -
 .../apache/solr/common/params/CommonParams.java    |    7 -
 .../apache/solr/common/params/ConfigSetParams.java |    1 +
 .../java/org/apache/solr/common/util/DOMUtil.java  |    5 -
 .../apache/solr/common/util/JsonSchemaCreator.java |    1 +
 .../apache/solr/common/util/PropertiesUtil.java    |    4 -
 .../resources/apispec/collections.Commands.json    |   16 -
 .../collections.collection.Commands.modify.json    |   16 -
 ...nfig.Commands.addRequestHandler.properties.json |    4 -
 .../apispec/core.config.Commands.generic.json      |    4 -
 .../resources/apispec/core.config.Commands.json    |   13 -
 .../solrj/impl/CloudHttp2SolrClientRetryTest.java  |    1 +
 .../solrj/impl/CloudHttp2SolrClientTest.java       |   62 +-
 .../solrj/impl/CloudSolrClientRetryTest.java       |    1 +
 .../client/solrj/impl/CloudSolrClientTest.java     |   62 +-
 .../client/solrj/impl/Http2SolrClientTest.java     |    6 +
 .../solr/client/solrj/request/TestCoreAdmin.java   |    1 +
 .../client/solrj/response/QueryResponseTest.java   |   11 +-
 .../solrj/response/TestClusteringResponse.java     |    5 +-
 .../routing/NodePreferenceRulesComparatorTest.java |   45 +-
 ...RequestReplicaListTransformerGeneratorTest.java |   64 +-
 .../ShufflingReplicaListTransformerTest.java       |    4 +-
 .../apache/solr/common/cloud/SolrZkClientTest.java |   20 +-
 .../solr/common/cloud/TestZkMaintenanceUtils.java  |  176 ++
 .../apache/solr/common/cloud/UrlSchemeTest.java    |   56 +
 .../solr/common/params/CommonParamsTest.java       |    2 -
 .../apache/solr/common/util/ContentStreamTest.java |   19 +-
 .../solr/common/util/TestZkMaintenanceUtils.java   |  115 -
 .../src/java/org/apache/solr/SolrTestCaseJ4.java   |   12 +-
 .../solr/cloud/AbstractFullDistribZkTestBase.java  |   22 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   29 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |   12 +
 .../src/java/org/apache/solr/util/TestHarness.java |   32 +-
 .../solr/cloud/MiniSolrCloudClusterTest.java       |  111 +
 solr/webapp/web/css/angular/collections.css        |    5 +
 solr/webapp/web/css/angular/jstree.style.min.css   |    2 +-
 solr/webapp/web/img/jstree/32px.png                |  Bin 5667 -> 5660 bytes
 solr/webapp/web/img/jstree/40px.png                |  Bin 2218 -> 2215 bytes
 solr/webapp/web/img/jstree/throbber.gif            |  Bin 1464 -> 1464 bytes
 solr/webapp/web/index.html                         |    2 +-
 solr/webapp/web/js/angular/app.js                  |    7 +-
 .../web/js/angular/controllers/collections.js      |    7 +-
 solr/webapp/web/js/angular/controllers/files.js    |   14 +-
 solr/webapp/web/libs/jquery-3.4.1.min.js           |   28 -
 solr/webapp/web/libs/jquery-3.5.1.min.js           |   27 +
 solr/webapp/web/libs/jstree.min.js                 |   12 +-
 solr/webapp/web/partials/collections.html          |   22 +-
 versions.lock                                      |   67 +-
 versions.props                                     |    8 +-
 1517 files changed, 84047 insertions(+), 69821 deletions(-)
 create mode 100644 .dir-locals.el
 create mode 100644 .github/workflows/solrj-test.yml
 delete mode 100644 dev-tools/scripts/LUCENE-3753.patch.hack.pl
 delete mode 100755 dev-tools/scripts/crawl.maven.release.dist.sh
 delete mode 100755 dev-tools/scripts/gitignore-gen.sh
 delete mode 100755 dev-tools/scripts/write.stage.maven.build.xml.pl
 create mode 100644 gradle/native/disable-native.gradle
 create mode 100644 help/docker.txt
 create mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/cjk/CJKWidthCharFilter.java
 create mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/cjk/CJKWidthCharFilterFactory.java
 create mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/classic/package-info.java
 delete mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/classic/package.html
 create mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/email/package-info.java
 delete mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/email/package.html
 create mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/DropIfFlaggedFilter.java
 create mode 100644 lucene/analysis/common/src/java/org/apache/lucene/analysis/miscellaneous/DropIfFlaggedFilterFactory.java
 create mode 100644 lucene/analysis/common/src/java/org/tartarus/snowball/ext/YiddishStemmer.java
 create mode 100644 lucene/analysis/common/src/test/org/apache/lucene/analysis/cjk/TestCJKWidthCharFilter.java
 create mode 100644 lucene/analysis/common/src/test/org/apache/lucene/analysis/cjk/TestCJKWidthCharFilterFactory.java
 create mode 100644 lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestDropIfFlaggedFilter.java
 create mode 100644 lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestDropIfFlaggedFilterFactory.java
 create mode 100644 lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestTypeAsSynonymFilter.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/Placeholder.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/ForUtil.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/Lucene50PostingsFormat.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/Lucene50PostingsReader.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/Lucene50ScoreSkipReader.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/Lucene50SkipReader.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/Lucene50StoredFieldsFormat.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene50/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene60/Lucene60PointsFormat.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene60/Lucene60PointsReader.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene60/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene70/Lucene70SegmentInfoFormat.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene70/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/Lucene80Codec.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene80/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene84/Lucene84Codec.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene84/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene86/Lucene86Codec.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene86/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene87/Lucene87Codec.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/lucene87/package-info.java
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/backward_codecs/package-info.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/Placeholder.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/ForUtil.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsFormat.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/Lucene50PostingsReader.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/Lucene50ScoreSkipReader.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/Lucene50SkipReader.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/Lucene50StoredFieldsFormat.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene50/package.html
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsFormat.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene60/Lucene60PointsReader.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene60/package.html
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene70/Lucene70SegmentInfoFormat.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene70/package-info.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene80/Lucene80Codec.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene80/package.html
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene84/Lucene84Codec.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene84/package.html
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene86/Lucene86Codec.java
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene86/package.html
 delete mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/package.html
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/Lucene50PostingsWriter.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/Lucene50RWPostingsFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/Lucene50RWStoredFieldsFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/Lucene50SkipWriter.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestBlockPostingsFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestBlockPostingsFormat2.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestBlockPostingsFormat3.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestForUtil.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestLucene50StoredFieldsFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestLucene50StoredFieldsFormatHighCompression.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene50/TestLucene50StoredFieldsFormatMergeInstance.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene60/Lucene60PointsWriter.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene60/Lucene60RWPointsFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene60/TestLucene60PointsFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene70/Lucene70RWSegmentInfoFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene70/TestLucene70SegmentInfoFormat.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene84/Lucene84RWCodec.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_codecs/lucene86/Lucene86RWCodec.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestBackwardsCompatibility.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestIndexWriterOnOldIndex.java
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/backward_index/TestManyPointsInOldIndex.java
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/dvupdates.8.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/empty.8.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.1.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.1.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.3.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.3.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.4.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.4.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.5.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.5.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.5.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.5.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.5.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.5.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/index.8.6.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/moreterms.8.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.1.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.1.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.2.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.3.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.3.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.4.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.4.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.5.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.5.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.5.2.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.6.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.6.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.6.2.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/sorted.8.6.3.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.1.9.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.1.9.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.4.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.4.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.4-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.2.9.4-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.0.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.5.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.5.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.6.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.6.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.6.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.6.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.6.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.3.6.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.0.0.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.0.0.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.0.0.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.0.0.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.4-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.10.4-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.2.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.2.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.3.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.3.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.5.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.5.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.5.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.5.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.6.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.6.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.6.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.6.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.7.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.7.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.7.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.7.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.7.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.7.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.8.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.8.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.8.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.8.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.9.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.9.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.9.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.4.9.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.0.0.singlesegment-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.0.0.singlesegment-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.2.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.2.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.3.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.3.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.3.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.3.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.4.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.4.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.4-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.4-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.5-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5.5.5-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5x-with-4x-segments-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.5x-with-4x-segments-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.0.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.0.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.2.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.2.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.4.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.4.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.4.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.4.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.5.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.5.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.5.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.5.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.4-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.4-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.5-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.5-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.6-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.6.6.6-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.0.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.0.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.0.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.0.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.1.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.1.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.2.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.2.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.2.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.2.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.3.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.3.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.3.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.3.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.4.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.4.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.5.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.5.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.6.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.6.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.0-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.0-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.1-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.1-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.2-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.2-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.3-cfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.7.7.3-nocfs.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.dvupdates.7.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.empty.7.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.moreterms.7.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted-invalid.7.5.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.0.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.0.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.1.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.2.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.2.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.3.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.3.1.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.4.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.5.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.6.0.zip (100%)
 rename lucene/backward-codecs/src/test/org/apache/lucene/{index => backward_index}/unsupported.sorted.7.7.3.zip (100%)
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/Lucene50PostingsWriter.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/Lucene50RWPostingsFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/Lucene50RWStoredFieldsFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/Lucene50SkipWriter.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat2.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat3.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestForUtil.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestLucene50StoredFieldsFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestLucene50StoredFieldsFormatHighCompression.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestLucene50StoredFieldsFormatMergeInstance.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene60/Lucene60PointsWriter.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene60/Lucene60RWPointsFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene60/TestLucene60PointsFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene70/Lucene70RWSegmentInfoFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene70/TestLucene70SegmentInfoFormat.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene84/Lucene84RWCodec.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene86/Lucene86RWCodec.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/TestIndexWriterOnOldIndex.java
 delete mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/TestManyPointsInOldIndex.java
 create mode 100644 lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextVectorFormat.java
 create mode 100644 lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextVectorReader.java
 create mode 100644 lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextVectorWriter.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/VectorFormat.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/VectorReader.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/VectorWriter.java
 delete mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene87/Lucene87Codec.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90Codec.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90FieldInfosFormat.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorFormat.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorReader.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorWriter.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/codecs/lucene90/package-info.java
 rename lucene/{misc => core}/src/java/org/apache/lucene/document/InetAddressPoint.java (100%)
 rename lucene/{misc => core}/src/java/org/apache/lucene/document/InetAddressRange.java (100%)
 delete mode 100644 lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesDistanceQuery.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesPointInGeometryQuery.java
 delete mode 100644 lucene/core/src/java/org/apache/lucene/document/LatLonDocValuesPointInPolygonQuery.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/document/LatLonPointInGeometryQuery.java
 delete mode 100644 lucene/core/src/java/org/apache/lucene/document/LatLonPointInPolygonQuery.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/document/VectorField.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/index/KnnGraphValues.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/index/RandomAccessVectorValues.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/index/RandomAccessVectorValuesProducer.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/index/VectorValues.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/index/VectorValuesWriter.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/VectorUtil.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/hnsw/BoundsChecker.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/hnsw/HnswGraph.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/hnsw/HnswGraphBuilder.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/hnsw/Neighbor.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/hnsw/Neighbors.java
 create mode 100644 lucene/core/src/java/org/apache/lucene/util/hnsw/package-info.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/codecs/lucene80/BaseLucene80DocValuesFormatTestCase.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/codecs/lucene80/TestBestCompressionLucene80DocValuesFormat.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/codecs/lucene80/TestBestSpeedLucene80DocValuesFormat.java
 delete mode 100644 lucene/core/src/test/org/apache/lucene/codecs/lucene80/TestLucene80DocValuesFormat.java
 rename lucene/{misc => core}/src/test/org/apache/lucene/document/TestInetAddressPoint.java (100%)
 create mode 100644 lucene/core/src/test/org/apache/lucene/index/TestKnnGraph.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/index/TestVectorValues.java
 rename lucene/{misc => core}/src/test/org/apache/lucene/search/TestInetAddressRangeQueries.java (100%)
 create mode 100644 lucene/core/src/test/org/apache/lucene/util/TestVectorUtil.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/util/hnsw/KnnGraphTester.java
 create mode 100644 lucene/core/src/test/org/apache/lucene/util/hnsw/TestHnsw.java
 create mode 100644 lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestBackwardsCompatibility.java
 create mode 100644 lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/taxonomy.8.6.3-cfs.zip
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/AllGroupHeadsCollectorTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/AllGroupsCollectorTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/BlockGroupingTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/DistinctValuesCollectorTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/DoubleRangeGroupSelectorTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupFacetCollectorTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/GroupingSearchTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/LongRangeGroupSelectorTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TermGroupSelectorTest.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestAllGroupHeadsCollector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestAllGroupsCollector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestBlockGrouping.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestDistinctValuesCollector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestDoubleRangeGroupSelector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestGroupFacetCollector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestGroupingSearch.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestLongRangeGroupSelector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestTermGroupSelector.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestTopGroups.java
 create mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TestValueSourceGroupSelector.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/TopGroupsTest.java
 delete mode 100644 lucene/grouping/src/test/org/apache/lucene/search/grouping/ValueSourceGroupSelectorTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterPhraseTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/HighlighterTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/MissesTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/OffsetLimitTokenFilterTest.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestHighlighter.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestHighlighterPhrase.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestMisses.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestOffsetLimitTokenFilter.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestTokenSources.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/TokenSourcesTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/custom/HighlightCustomQueryTest.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/highlight/custom/TestHighlightCustomQuery.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/uhighlight/LengthGoalBreakIteratorTest.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/uhighlight/TestLengthGoalBreakIterator.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/BreakIteratorBoundaryScannerTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldPhraseListTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldQueryTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FieldTermStackTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/IndexTimeSynonymTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/ScoreOrderFragmentsBuilderTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleBoundaryScannerTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleFragListBuilderTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SimpleFragmentsBuilderTest.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/SingleFragListBuilderTest.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestBreakIteratorBoundaryScanner.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestFastVectorHighlighter.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestFieldPhraseList.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestFieldQuery.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestFieldTermStack.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestIndexTimeSynonym.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestScoreOrderFragmentsBuilder.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestSimpleBoundaryScanner.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestSimpleFragListBuilder.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestSimpleFragmentsBuilder.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestSingleFragListBuilder.java
 create mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/TestWeightedFragListBuilder.java
 delete mode 100644 lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/WeightedFragListBuilderTest.java
 delete mode 100644 lucene/licenses/jetty-continuation-9.4.27.v20200227.jar.sha1
 create mode 100644 lucene/licenses/jetty-continuation-9.4.34.v20201102.jar.sha1
 delete mode 100644 lucene/licenses/jetty-http-9.4.27.v20200227.jar.sha1
 create mode 100644 lucene/licenses/jetty-http-9.4.34.v20201102.jar.sha1
 delete mode 100644 lucene/licenses/jetty-io-9.4.27.v20200227.jar.sha1
 create mode 100644 lucene/licenses/jetty-io-9.4.34.v20201102.jar.sha1
 delete mode 100644 lucene/licenses/jetty-server-9.4.27.v20200227.jar.sha1
 create mode 100644 lucene/licenses/jetty-server-9.4.34.v20201102.jar.sha1
 delete mode 100644 lucene/licenses/jetty-servlet-9.4.27.v20200227.jar.sha1
 create mode 100644 lucene/licenses/jetty-servlet-9.4.34.v20201102.jar.sha1
 delete mode 100644 lucene/licenses/jetty-util-9.4.27.v20200227.jar.sha1
 create mode 100644 lucene/licenses/jetty-util-9.4.34.v20201102.jar.sha1
 delete mode 100644 lucene/licenses/junit-4.12.jar.sha1
 create mode 100644 lucene/licenses/junit-4.13.1.jar.sha1
 create mode 100644 lucene/misc/native/build.gradle
 create mode 100644 lucene/misc/native/src/main/posix/NativePosixUtil.cpp
 create mode 100644 lucene/misc/native/src/main/windows/WindowsDirectory.cpp
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/document/LazyDocument.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/document/package.html
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/index/IndexSplitter.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/index/MultiPassIndexSplitter.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/index/PKIndexSplitter.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/index/package.html
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/document/LazyDocument.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/document/package-info.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/index/IndexSplitter.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/index/MultiPassIndexSplitter.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/index/PKIndexSplitter.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/index/package-info.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/DiversifiedTopDocsCollector.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/DocValuesStats.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/DocValuesStatsCollector.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/MemoryAccountingBitsetCollector.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/package-info.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/similarity/LegacyBM25Similarity.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/search/similarity/package-info.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/store/HardlinkCopyDirectoryWrapper.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/store/NativePosixUtil.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/store/NativeUnixDirectory.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/store/RAFDirectory.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/store/WindowsDirectory.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/store/package-info.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/util/MemoryTracker.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/util/fst/ListOfOutputs.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/util/fst/UpToTwoPositiveIntOutputs.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/util/fst/package-info.java
 create mode 100644 lucene/misc/src/java/org/apache/lucene/misc/util/package-info.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/DiversifiedTopDocsCollector.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/DocValuesStats.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/DocValuesStatsCollector.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/MemoryAccountingBitsetCollector.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/package.html
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/similarity/LegacyBM25Similarity.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/search/similarity/package.html
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/HardlinkCopyDirectoryWrapper.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/NativePosixUtil.cpp
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/NativePosixUtil.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/NativeUnixDirectory.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/RAFDirectory.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/WindowsDirectory.cpp
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/WindowsDirectory.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/store/package.html
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/util/MemoryTracker.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/util/fst/ListOfOutputs.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/util/fst/UpToTwoPositiveIntOutputs.java
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/util/fst/package.html
 delete mode 100644 lucene/misc/src/java/org/apache/lucene/util/package.html
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/document/TestLazyDocument.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/index/TestIndexSplitter.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/index/TestMultiPassIndexSplitter.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/index/TestPKIndexSplitter.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/document/TestLazyDocument.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/index/TestIndexSplitter.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/index/TestMultiPassIndexSplitter.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/index/TestPKIndexSplitter.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/search/TestDiversifiedTopDocsCollector.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/search/TestDocValuesStatsCollector.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/search/TestMemoryAccountingBitsetCollector.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/search/similarity/TestLegacyBM25Similarity.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/store/NativeLibEnableRule.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/store/NativeUnixDirectoryTest.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/store/TestHardLinkCopyDirectoryWrapper.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/store/TestRAFDirectory.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/store/WindowsDirectoryTest.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/util/TestCollectorMemoryTracker.java
 create mode 100644 lucene/misc/src/test/org/apache/lucene/misc/util/fst/TestFSTsMisc.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/search/TestDiversifiedTopDocsCollector.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/search/TestDocValuesStatsCollector.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/search/TestMemoryAccountingBitsetCollector.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/search/similarity/TestLegacyBM25Similarity.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/store/TestHardLinkCopyDirectoryWrapper.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/store/TestRAFDirectory.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/util/TestCollectorMemoryTracker.java
 delete mode 100644 lucene/misc/src/test/org/apache/lucene/util/fst/TestFSTsMisc.java
 delete mode 100644 lucene/queries/src/test/org/apache/lucene/queries/CommonTermsQueryTest.java
 create mode 100644 lucene/queries/src/test/org/apache/lucene/queries/TestCommonTermsQuery.java
 create mode 100644 lucene/queries/src/test/org/apache/lucene/queries/intervals/OneTimeIntervalSource.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyRevisionTest.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/IndexRevisionTest.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/LocalReplicatorTest.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/SessionTokenTest.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/TestIndexAndTaxonomyReplicationClient.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/TestIndexAndTaxonomyRevision.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/TestIndexReplicationClient.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/TestIndexRevision.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/TestLocalReplicator.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/TestSessionToken.java
 delete mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java
 create mode 100644 lucene/replicator/src/test/org/apache/lucene/replicator/http/TestHttpReplicator.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionPostingsFormat.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionPostingsReader.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionPostingsWriter.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionSegmentTermsEnum.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionSegmentTermsEnumFrame.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionTermState.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/SingleDocsEnum.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/SinglePostingsEnum.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsReader.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsWriter.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionFieldReader.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/package-info.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/BigIntegerPoint.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/DoublePointMultiRangeBuilder.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/FloatPointMultiRangeBuilder.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/FloatPointNearestNeighbor.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/HalfFloatPoint.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/IntPointMultiRangeBuilder.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/LatLonBoundingBox.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/LongPointMultiRangeBuilder.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/document/package.html
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsFormat.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsReader.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionPostingsWriter.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionSegmentTermsEnum.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionSegmentTermsEnumFrame.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/IDVersionTermState.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/SingleDocsEnum.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/SinglePostingsEnum.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionBlockTreeTermsReader.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionBlockTreeTermsWriter.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/VersionFieldReader.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/codecs/idversion/package-info.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/BigIntegerPoint.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/DoublePointMultiRangeBuilder.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/FloatPointMultiRangeBuilder.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/FloatPointNearestNeighbor.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/HalfFloatPoint.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/IntPointMultiRangeBuilder.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/LatLonBoundingBox.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/LongPointMultiRangeBuilder.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/document/package-info.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/BM25FQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/CoveringQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/CoveringScorer.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/DocValuesNumbersQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/DocValuesTermsQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/IndexSortSortedNumericDocValuesRangeQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/LargeNumHitsTopDocsCollector.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/LatLonPointPrototypeQueries.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/LongHashSet.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/MultiNormsLeafSimScorer.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/MultiRangeQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/NearestNeighbor.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/PhraseWildcardQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/TermAutomatonQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/TermAutomatonScorer.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/TokenStreamToTermAutomatonQuery.java
 create mode 100644 lucene/sandbox/src/java/org/apache/lucene/sandbox/search/package-info.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/BM25FQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/CoveringQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/CoveringScorer.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/DocValuesNumbersQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/DocValuesTermsQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/IndexSortSortedNumericDocValuesRangeQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/LargeNumHitsTopDocsCollector.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/LatLonPointPrototypeQueries.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/LongHashSet.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/MultiNormsLeafSimScorer.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/MultiRangeQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/NearestNeighbor.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/PhraseWildcardQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonScorer.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/TokenStreamToTermAutomatonQuery.java
 delete mode 100644 lucene/sandbox/src/java/org/apache/lucene/search/package.html
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/codecs/idversion/StringAndPayloadField.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/codecs/idversion/TestIDVersionPostingsFormat.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/document/TestBigIntegerPoint.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/document/TestDoubleRangeField.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/document/TestFloatPointNearestNeighbor.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/document/TestHalfFloatPoint.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/codecs/idversion/StringAndPayloadField.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/codecs/idversion/TestIDVersionPostingsFormat.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/document/TestBigIntegerPoint.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/document/TestDoubleRangeField.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/document/TestFloatPointNearestNeighbor.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/document/TestHalfFloatPoint.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/FuzzyLikeThisQueryTest.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestFuzzyLikeThisQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/LongHashSetTests.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestBM25FQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestCoveringQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestDocValuesNumbersQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestDocValuesTermsQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestFieldCacheTermsFilter.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestIndexSortSortedNumericDocValuesRangeQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestLargeNumHitsTopDocsCollector.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestLatLonBoundingBoxQueries.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestMultiRangeQueries.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestNearest.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestPhraseWildcardQuery.java
 create mode 100644 lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestTermAutomatonQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/LongHashSetTests.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestBM25FQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestCoveringQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesNumbersQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesTermsQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestFieldCacheTermsFilter.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestIndexSortSortedNumericDocValuesRangeQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestLargeNumHitsTopDocsCollector.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestLatLonBoundingBoxQueries.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestMultiRangeQueries.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestNearest.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestPhraseWildcardQuery.java
 delete mode 100644 lucene/sandbox/src/test/org/apache/lucene/search/TestTermAutomatonQuery.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/DistanceStrategyTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/PortedSolr3Test.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/QueryEqualsHashCodeTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/SpatialArgsTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/TestDistanceStrategy.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/TestPortedSolr3.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/TestQueryEqualsHashCode.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/TestSpatialArgs.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/composite/CompositeStrategyTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/composite/TestCompositeStrategy.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/DateNRStrategyTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/HeatmapFacetCounterTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/JtsPolygonTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/NumberRangeFacetsTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTree50Test.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/RandomSpatialOpFuzzyPrefixTreeTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/TestDateNRStrategy.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/TestHeatmapFacetCounter.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/TestJtsPolygon.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/TestNumberRangeFacets.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/TestRandomSpatialOpFuzzyPrefixTree.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/TestRandomSpatialOpFuzzyPrefixTree50.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/DateRangePrefixTreeTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/TestDateRangePrefixTree.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/TestS2PrefixTree.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/TestSpatialPrefixTree.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/query/SpatialArgsParserTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/query/TestSpatialArgsParser.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/serialized/SerializedStrategyTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/serialized/TestSerializedStrategy.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dShapeSphereModelRectRelationTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dShapeWGS84ModelRectRelationTest.java
 delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dTest.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/TestGeo3d.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/TestGeo3dRpt.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/TestGeo3dShapeSphereModelRectRelation.java
 create mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/TestGeo3dShapeWGS84ModelRectRelation.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/CompositeGeoPolygonRelationshipsTest.java
 delete mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoBBoxTest.java
 delete mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoCircleTest.java
 delete mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoConvexPolygonTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoExactCircleTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoModelTest.java
 delete mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPathTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPointTest.java
 delete mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/GeoPolygonTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/PlaneTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/RandomBinaryCodecTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/RandomGeoPolygonTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/RandomGeoShapeRelationshipTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/RandomPlaneTest.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/SimpleGeoPolygonRelationshipsTest.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestCompositeGeoPolygonRelationships.java
 create mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoBBox.java
 create mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoCircle.java
 create mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoConvexPolygon.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoExactCircle.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoModel.java
 create mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoPath.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoPoint.java
 create mode 100755 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestGeoPolygon.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestPlane.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestRandomBinaryCodec.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestRandomGeoPolygon.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestRandomGeoShapeRelationship.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestRandomPlane.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestSimpleGeoPolygonRelationships.java
 create mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/TestXYZSolid.java
 delete mode 100644 lucene/spatial3d/src/test/org/apache/lucene/spatial3d/geom/XYZSolidTest.java
 create mode 100644 lucene/test-framework/src/test/org/apache/lucene/util/TestPleaseFail.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/ClusteringEngine.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/ClusteringParams.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/DocumentClusteringEngine.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/Engine.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineContext.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineEntry.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/EngineParameters.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/FlatKeysAttrVisitor.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/InputDocument.java
 create mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/PathResourceLookup.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/SearchClusteringEngine.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngine.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/CarrotParams.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/LuceneCarrot2StemmerFactory.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/LuceneCarrot2TokenizerFactory.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrResourceLocator.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/SolrStopwordsCarrot2LexicalDataFactory.java
 delete mode 100644 solr/contrib/clustering/src/java/org/apache/solr/handler/clustering/carrot2/package-info.java
 create mode 100644 solr/contrib/clustering/src/test-files/META-INF/services/org.carrot2.clustering.ClusteringAlgorithmProvider
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/clustering/carrot2/mock-external-attrs-attributes.xml
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/clustering/carrot2/stoplabels.mt
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/clustering/carrot2/stopwords.mt
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/clustering/custom/stoplabels.mt
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/clustering/custom/stopwords.mt
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/mapping-ISOLatin1Accent.txt
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/spellings.txt
 delete mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/synonyms.txt
 create mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/testCustomLanguageResources/english.stoplabels.utf8
 create mode 100644 solr/contrib/clustering/src/test-files/clustering/solr/collection1/conf/testCustomLanguageResources/english.stopwords.utf8
 create mode 100644 solr/contrib/clustering/src/test-files/log4j2.xml
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentDistributedTest-testLingoAlgorithm.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentDistributedTest-testStcAlgorithm.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testCustomLanguageResources.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testDefaultEngineOrder.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testKmeansAlgorithm.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testLingoAlgorithm.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testParamDefaultLanguage.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testParamLanguageField.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testParamOtherTopics.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testParamSubclusters-off.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testParamSubclusters-on.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testPassingAttributes.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testPassingAttributesViaSolrConfig.txt
 create mode 100644 solr/contrib/clustering/src/test-files/org/apache/solr/handler/clustering/ClusteringComponentTest-testStcAlgorithm.txt
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/AbstractClusteringTestCase.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/ClusteringComponentDistributedTest.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/DistributedClusteringComponentTest.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/EchoClusteringAlgorithm.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/EchoClusteringAlgorithmProvider.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/MockClusteringAlgorithm.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/MockClusteringAlgorithmProvider.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/MockDocumentClusteringEngine.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/ResourceCheckAlgorithm.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/ResourceCheckAlgorithmProvider.java
 create mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/SampleData.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/CarrotClusteringEngineTest.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/DuplicatingStemmerFactory.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/DuplicatingTokenizerFactory.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/EchoClusteringAlgorithm.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/EchoStemsClusteringAlgorithm.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/EchoTokensClusteringAlgorithm.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/LexicalResourcesCheckClusteringAlgorithm.java
 delete mode 100644 solr/contrib/clustering/src/test/org/apache/solr/handler/clustering/carrot2/MockClusteringAlgorithm.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/Interleaving.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/InterleavingResult.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingQuery.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingRescorer.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingScoringQuery.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/OriginalRankingLTRScoringQuery.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/algorithms/TeamDraftInterleaving.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/algorithms/package-info.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/interleaving/package-info.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/response/transform/LTRInterleavingTransformerFactory.java
 create mode 100644 solr/contrib/ltr/src/java/org/apache/solr/ltr/search/LTRQuery.java
 create mode 100644 solr/contrib/ltr/src/test/org/apache/solr/ltr/interleaving/TestLTRQParserInterleaving.java
 create mode 100644 solr/contrib/ltr/src/test/org/apache/solr/ltr/interleaving/algorithms/TeamDraftInterleavingTest.java
 create mode 100644 solr/contrib/ltr/src/test/org/apache/solr/ltr/response/transform/TestFeatureLoggerTransformer.java
 create mode 100644 solr/contrib/ltr/src/test/org/apache/solr/ltr/response/transform/TestInterleavingTransformer.java
 create mode 100644 solr/contrib/prometheus-exporter/conf/log4j2.xml
 create mode 100644 solr/core/src/java/org/apache/solr/api/ConfigurablePlugin.java
 create mode 100644 solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
 delete mode 100644 solr/core/src/java/org/apache/solr/api/CustomContainerPlugins.java
 create mode 100644 solr/core/src/java/org/apache/solr/cloud/ClusterSingleton.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cloud/rule/ImplicitSnitch.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cloud/rule/ReplicaAssigner.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cloud/rule/ServerSnitchContext.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cloud/rule/package-info.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/ClusterEvent.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/ClusterEventListener.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/ClusterEventProducer.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/ClusterEventProducerBase.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/ClusterPropertiesChangedEvent.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/CollectionsAddedEvent.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/CollectionsRemovedEvent.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/NoOpProducer.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/NodesDownEvent.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/NodesUpEvent.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/impl/ClusterEventProducerFactory.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/impl/CollectionsRepairEventListener.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/impl/DefaultClusterEventProducer.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/impl/DelegatingClusterEventProducer.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/impl/package-info.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/events/package-info.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/placement/plugins/AffinityPlacementFactory.java
 create mode 100644 solr/core/src/java/org/apache/solr/cluster/placement/plugins/MinimizeCoresPlacementFactory.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cluster/placement/plugins/SamplePluginAffinityReplicaPlacement.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cluster/placement/plugins/SamplePluginMinimizeCores.java
 delete mode 100644 solr/core/src/java/org/apache/solr/cluster/placement/plugins/SamplePluginRandomPlacement.java
 create mode 100644 solr/core/src/java/org/apache/solr/core/ClusterSingletons.java
 create mode 100644 solr/core/src/test-files/solr/solr-metricsconfig1.xml
 create mode 100644 solr/core/src/test/org/apache/solr/SolrTestCaseJ4DeleteCoreTest.java
 delete mode 100644 solr/core/src/test/org/apache/solr/TestSolrTestCaseJ4.java
 delete mode 100644 solr/core/src/test/org/apache/solr/cloud/ConfigSetsAPITest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPIShareSchema.java
 delete mode 100644 solr/core/src/test/org/apache/solr/cloud/rule/ImplicitSnitchTest.java
 delete mode 100644 solr/core/src/test/org/apache/solr/cloud/rule/RuleEngineTest.java
 delete mode 100644 solr/core/src/test/org/apache/solr/cloud/rule/RulesTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/events/AllEventsListener.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/events/ClusterEventProducerTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/events/impl/CollectionsRepairEventListenerTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/placement/AttributeFetcherForTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/placement/Builders.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/placement/ClusterAbstractionsForTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/placement/impl/PlacementPluginIntegrationTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/placement/impl/SimpleClusterAbstractionsTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/cluster/placement/plugins/AffinityPlacementFactoryTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/core/TestMinimalConfig.java
 create mode 100644 solr/core/src/test/org/apache/solr/metrics/MetricsDisabledCloudTest.java
 create mode 100644 solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateJavabinTest.java
 delete mode 100644 solr/core/src/test/org/apache/solr/update/processor/AtomicUpdateRemovalJavabinTest.java
 create mode 100644 solr/dev-docs/plugins/container-plugins.adoc
 delete mode 100755 solr/docker/include/scripts/oom_solr.sh
 delete mode 100755 solr/docker/tests/cases/version/test.sh
 delete mode 100644 solr/licenses/attributes-binder-1.3.3.jar.sha1
 delete mode 100644 solr/licenses/attributes-binder-LICENSE-ASL.txt
 delete mode 100644 solr/licenses/attributes-binder-NOTICE.txt
 create mode 100644 solr/licenses/carrot2-LICENSE-BSD_LIKE.txt
 create mode 100644 solr/licenses/carrot2-NOTICE.txt
 create mode 100644 solr/licenses/carrot2-core-4.0.4.jar.sha1
 delete mode 100644 solr/licenses/carrot2-guava-18.0.jar.sha1
 delete mode 100644 solr/licenses/carrot2-guava-LICENSE-ASL.txt
 delete mode 100644 solr/licenses/carrot2-guava-NOTICE.txt
 delete mode 100644 solr/licenses/carrot2-mini-3.16.2.jar.sha1
 delete mode 100644 solr/licenses/carrot2-mini-LICENSE-BSD_LIKE.txt
 delete mode 100644 solr/licenses/carrot2-mini-NOTICE.txt
 delete mode 100644 solr/licenses/http2-client-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/http2-client-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/http2-common-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/http2-common-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/http2-hpack-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/http2-hpack-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/http2-http-client-transport-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/http2-http-client-transport-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/http2-server-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/http2-server-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-client-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-client-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-java-client-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-java-client-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-java-server-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-java-server-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-alpn-server-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-alpn-server-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-client-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-client-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-continuation-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-continuation-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-deploy-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-deploy-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-http-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-http-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-io-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-io-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-jmx-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-jmx-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-rewrite-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-rewrite-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-security-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-security-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-server-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-server-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-servlet-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-servlet-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-servlets-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-servlets-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-start-9.4.27.v20200227-shaded.jar.sha1
 create mode 100644 solr/licenses/jetty-start-9.4.34.v20201102-shaded.jar.sha1
 delete mode 100644 solr/licenses/jetty-util-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-util-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-webapp-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-webapp-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/jetty-xml-9.4.27.v20200227.jar.sha1
 create mode 100644 solr/licenses/jetty-xml-9.4.34.v20201102.jar.sha1
 delete mode 100644 solr/licenses/junit-4.12.jar.sha1
 create mode 100644 solr/licenses/junit-4.13.1.jar.sha1
 delete mode 100644 solr/licenses/simple-xml-safe-2.7.1.jar.sha1
 delete mode 100644 solr/licenses/simple-xml-safe-LICENSE-ASL.txt
 delete mode 100644 solr/licenses/simple-xml-safe-NOTICE.txt
 delete mode 100644 solr/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/README.md
 delete mode 100644 solr/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/kmeans-attributes.xml
 delete mode 100644 solr/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/lingo-attributes.xml
 delete mode 100644 solr/server/solr/configsets/sample_techproducts_configs/conf/clustering/carrot2/stc-attributes.xml
 delete mode 100644 solr/solr-ref-guide/src/blob-store-api.adoc
 create mode 100644 solr/solr-ref-guide/src/images/monitoring-solr-with-prometheus-and-grafana/prometheus-solr-ping.png
 create mode 100644 solr/solr-ref-guide/src/images/result-clustering/carrot2-docs-attrs1.png
 create mode 100644 solr/solr-ref-guide/src/images/result-clustering/carrot2-docs-attrs2.png
 delete mode 100644 solr/solr-ref-guide/src/images/result-clustering/carrot2-workbench.png
 delete mode 100644 solr/solr-ref-guide/src/images/velocity-search-ui/techproducts_browse.png
 delete mode 100644 solr/solr-ref-guide/src/rule-based-replica-placement.adoc
 create mode 100644 solr/solrj/src/java/org/apache/solr/common/cloud/UrlScheme.java
 create mode 100644 solr/solrj/src/test/org/apache/solr/common/cloud/TestZkMaintenanceUtils.java
 create mode 100644 solr/solrj/src/test/org/apache/solr/common/cloud/UrlSchemeTest.java
 delete mode 100644 solr/solrj/src/test/org/apache/solr/common/util/TestZkMaintenanceUtils.java
 delete mode 100644 solr/webapp/web/libs/jquery-3.4.1.min.js
 create mode 100644 solr/webapp/web/libs/jquery-3.5.1.min.js


[lucene-solr] 15/18: merging with masster

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

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

commit ac536c49add2a42cd4f6baa2577f4e68cca200fb
Author: Noble Paul <no...@gmail.com>
AuthorDate: Mon Oct 12 12:21:28 2020 +1100

    merging with masster
---
 .../src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java    | 1 +
 solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java    | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
index cc90983..a2dd291 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.util.DOMUtil;
+import org.w3c.dom.Node;
 
 /**
  *
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java
index 57861c1..9085ffc 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java
@@ -16,13 +16,14 @@
  */
 package org.apache.solr.common.util;
 
+import org.apache.solr.common.SolrException;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
 import java.util.function.Function;
 
-import org.apache.solr.common.SolrException;
 
 /**
  * Breaking out some utility methods into a separate class as part of SOLR-4196. These utils have nothing to do with


[lucene-solr] 10/18: javadocs and other review comments

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

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

commit 504740f1551591f35f690b6cb96c4b684e085a7a
Author: noble <no...@apache.org>
AuthorDate: Sat Oct 10 17:36:31 2020 +1100

    javadocs and other review comments
---
 .../src/java/org/apache/solr/schema/IndexSchema.java   |  6 +++---
 .../src/java/org/apache/solr/util/DataConfigNode.java  |  4 ++--
 .../src/java/org/apache/solr/common/ConfigNode.java    | 18 ++++++++++++++++--
 3 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 20281e3..97d786b 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -561,16 +561,16 @@ public class IndexSchema {
       if (node != null) {
         throw new SolrException(ErrorCode.SERVER_ERROR, "Setting defaultSearchField in schema not supported since Solr 7");
       }
-      node = rootNode.child("solrQueryParser");
 
-      //                      /schema/solrQueryParser/@defaultOperator
+      ///schema/solrQueryParser/@defaultOperator
 //      expression = stepsToPath(SCHEMA, "solrQueryParser", AT + "defaultOperator");
 //      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+      node = rootNode.child(it -> it.attributes().get("defaultOperator") != null, "solrQueryParser");
       if (node != null) {
         throw new SolrException(ErrorCode.SERVER_ERROR, "Setting default operator in schema (solrQueryParser/@defaultOperator) not supported");
       }
 
-      //                      /schema/uniqueKey/text()
+      //  /schema/uniqueKey/text()
 //      expression = stepsToPath(SCHEMA, UNIQUE_KEY, TEXT_FUNCTION);
 //      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
       node = rootNode.child(UNIQUE_KEY);
diff --git a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
index 9c825e8..29afd67 100644
--- a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
@@ -105,9 +105,9 @@ public class DataConfigNode implements ConfigNode {
   }
 
   @Override
-  public List<ConfigNode> children(Predicate<ConfigNode> test, Set<String> set) {
+  public List<ConfigNode> children(Predicate<ConfigNode> test, Set<String> matchNames) {
     List<ConfigNode> result = new ArrayList<>();
-    for (String s : set) {
+    for (String s : matchNames) {
       List<ConfigNode> vals = kids.get(s);
       if (vals != null) {
         vals.forEach(it -> {
diff --git a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
index 0f6a813..44ac4ff 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
@@ -53,6 +53,8 @@ public interface ConfigNode {
     return child(null, name);
   }
 
+  /**Iterate through child nodes with the name and return the first child that matches
+   */
   default ConfigNode child(Predicate<ConfigNode> test, String name) {
     ConfigNode[] result = new ConfigNode[1];
     forEachChild(it -> {
@@ -66,14 +68,22 @@ public interface ConfigNode {
     return result[0];
   }
 
+  /**Iterate through child nodes with the names and return all the matching children
+   * @param nodeNames names of tags to be returned
+   * @param  test check for the nodes to be returned
+   */
   default List<ConfigNode> children(Predicate<ConfigNode> test, String... nodeNames) {
     return children(test, nodeNames == null ? Collections.emptySet() : Set.of(nodeNames));
   }
 
-  default List<ConfigNode> children(Predicate<ConfigNode> test, Set<String> set) {
+  /**Iterate through child nodes with the names and return all the matching children
+   * @param matchNames names of tags to be returned
+   * @param  test check for the nodes to be returned
+   */
+  default List<ConfigNode> children(Predicate<ConfigNode> test, Set<String> matchNames) {
     List<ConfigNode> result = new ArrayList<>();
     forEachChild(it -> {
-      if (set != null && !set.isEmpty() && !set.contains(it.name())) return Boolean.TRUE;
+      if (matchNames != null && !matchNames.isEmpty() && !matchNames.contains(it.name())) return Boolean.TRUE;
       if (test == null || test.test(it)) result.add(it);
       return Boolean.TRUE;
     });
@@ -84,6 +94,10 @@ public interface ConfigNode {
     return children(null, Collections.singleton(name));
   }
 
+  /** abortable iterate through child
+   *
+   * @param fun consume the node and return true to continue or false to abort
+   */
   void forEachChild(Function<ConfigNode, Boolean> fun);
 
 


[lucene-solr] 13/18: merging with master

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

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

commit f3ac2e93cd6ab4b2030dcbb69e5ad3a114b12665
Author: David Smiley <ds...@apache.org>
AuthorDate: Sat Oct 10 08:52:10 2020 -0400

    merging with master
---
 .../src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java     | 2 +-
 .../apache/solr/prometheus/exporter/PrometheusExporterSettings.java    | 2 +-
 solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java             | 1 -
 solr/core/src/java/org/apache/solr/core/XmlConfigFile.java             | 1 -
 solr/core/src/java/org/apache/solr/schema/IndexSchema.java             | 1 -
 solr/core/src/java/org/apache/solr/util/DOMConfigNode.java             | 1 +
 solr/core/src/java/org/apache/solr/util/DataConfigNode.java            | 3 ++-
 solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java    | 1 +
 .../src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java    | 1 +
 solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java           | 3 +--
 10 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
index eefc14b..9a8783f 100644
--- a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
+++ b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
@@ -27,8 +27,8 @@ import net.thisptr.jackson.jq.JsonQuery;
 import net.thisptr.jackson.jq.exception.JsonQueryException;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.DOMUtil;
+import org.apache.solr.common.util.NamedList;
 import org.w3c.dom.Node;
 
 public class MetricsQuery {
diff --git a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java
index 68eda8d..9ce035d 100644
--- a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java
+++ b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java
@@ -19,8 +19,8 @@ package org.apache.solr.prometheus.exporter;
 
 import java.util.List;
 
-import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.DOMUtil;
+import org.apache.solr.common.util.NamedList;
 import org.w3c.dom.Node;
 
 public class PrometheusExporterSettings {
diff --git a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
index d68d16b..ebe3b66 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
@@ -46,7 +46,6 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.PropertiesUtil;
-import org.apache.solr.common.util.Utils;
 import org.apache.solr.logging.LogWatcherConfig;
 import org.apache.solr.metrics.reporters.SolrJmxReporter;
 import org.apache.solr.update.UpdateShardHandlerConfig;
diff --git a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
index 6cc6216..5971eb5 100644
--- a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
+++ b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
@@ -42,7 +42,6 @@ import org.apache.solr.cloud.ZkSolrResourceLoader;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.XMLErrorLogger;
-import org.apache.solr.util.DOMUtil;
 import org.apache.solr.util.SystemIdResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 839cff4..ef10e6f 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -74,7 +74,6 @@ import org.apache.solr.search.similarities.SchemaSimilarityFactory;
 import org.apache.solr.uninverting.UninvertingReader;
 import org.apache.solr.util.ConcurrentLRUCache;
 import org.apache.solr.util.DOMConfigNode;
-import org.apache.solr.util.DOMUtil;
 import org.apache.solr.util.DataConfigNode;
 import org.apache.solr.util.PayloadUtils;
 import org.apache.solr.util.plugin.SolrCoreAware;
diff --git a/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java b/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
index 85ca9f7..6afc5a5 100644
--- a/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
@@ -23,6 +23,7 @@ import java.util.function.Function;
 
 import org.apache.solr.cluster.api.SimpleMap;
 import org.apache.solr.common.ConfigNode;
+import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.WrappedSimpleMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
diff --git a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
index 29afd67..38940ee 100644
--- a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
@@ -29,9 +29,10 @@ import java.util.function.Predicate;
 
 import org.apache.solr.cluster.api.SimpleMap;
 import org.apache.solr.common.ConfigNode;
+import org.apache.solr.common.util.PropertiesUtil;
 
 /**
- * ConfigNode impl that copies and maintains data internally
+ * ConfigNode impl that copies and maintains data internally from DOM
  */
 public class DataConfigNode implements ConfigNode {
   final String name;
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java
index 46bd79f..ac822c7 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java
@@ -20,6 +20,7 @@ import java.util.Map;
 
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.ConfigNode;
+import org.apache.solr.common.util.DOMUtil;
 
 import static org.apache.solr.common.params.CommonParams.NAME;
 
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
index 5736abf..cc90983 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
@@ -20,6 +20,7 @@ import java.util.Map;
 
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.ConfigNode;
+import org.apache.solr.common.util.DOMUtil;
 
 /**
  *
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
index 2b3219d..d0b1f7b 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
@@ -24,7 +24,6 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.w3c.dom.NamedNodeMap;
@@ -40,7 +39,7 @@ public class DOMUtil {
 
   public static final String XML_RESERVED_PREFIX = "xml";
 
-  public static final Set<String>  NL_TAGS = ImmutableSet.of("str", "int","long","float","double","bool");
+  public static final Set<String>  NL_TAGS = Set.of("str", "int","long","float","double","bool");
 
 
   public static Map<String,String> toMap(NamedNodeMap attrs) {


[lucene-solr] 06/18: unused import

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

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

commit f313d6c3f78be6f135c3afd9021605aff5a90ba3
Author: noblepaul <no...@gmail.com>
AuthorDate: Mon Sep 7 10:50:31 2020 +1000

    unused import
---
 solr/core/src/java/org/apache/solr/schema/IndexSchema.java | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 1aa1e66..dfb82fd 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -37,7 +37,6 @@ import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.TreeSet;
-import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Function;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -170,7 +169,7 @@ public class IndexSchema {
    * directives that target them.
    */
   protected Map<SchemaField, Integer> copyFieldTargetCounts = new HashMap<>();
-  static AtomicLong totalSchemaLoadTime = new AtomicLong();
+//  static AtomicLong totalSchemaLoadTime = new AtomicLong();
 
 
   /**
@@ -183,9 +182,9 @@ public class IndexSchema {
 
     this.resourceName = Objects.requireNonNull(name);
     try {
-      long start = System.currentTimeMillis();
+//      long start = System.currentTimeMillis();
       readSchema(is);
-      System.out.println("schema-load-time : "+ totalSchemaLoadTime.addAndGet (System.currentTimeMillis() - start));
+//      System.out.println("schema-load-time : "+ totalSchemaLoadTime.addAndGet (System.currentTimeMillis() - start));
       loader.inform(loader);
     } catch (IOException e) {
       throw new RuntimeException(e);


[lucene-solr] 05/18: unused import

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

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

commit def7db590a14d5c4b88742110e4cb25e88fb4e85
Author: noblepaul <no...@gmail.com>
AuthorDate: Mon Sep 7 10:49:03 2020 +1000

    unused import
---
 solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
index 7212e25..1077f14 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
@@ -20,7 +20,6 @@ import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-import java.util.function.Consumer;
 
 import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;


[lucene-solr] 08/18: cache and reuse

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

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

commit a73c2c526782cd6d0e4ccbe1eb4cc139ecd1e052
Author: noblepaul <no...@gmail.com>
AuthorDate: Thu Sep 10 17:54:36 2020 +1000

    cache and reuse
---
 .../apache/solr/cloud/CloudConfigSetService.java   | 30 +++++++++++-
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |  7 +--
 .../org/apache/solr/core/ConfigSetService.java     | 18 ++++++-
 .../java/org/apache/solr/schema/IndexSchema.java   | 25 ++++++----
 .../org/apache/solr/schema/IndexSchemaFactory.java | 55 ++++++++++++++++++----
 .../org/apache/solr/schema/ManagedIndexSchema.java |  5 +-
 .../solr/schema/ManagedIndexSchemaFactory.java     |  7 +--
 .../java/org/apache/solr/schema/SchemaManager.java |  3 +-
 .../apache/solr/schema/ZkIndexSchemaReader.java    |  2 +-
 .../java/org/apache/solr/util/DataConfigNode.java  | 24 +++++-----
 .../solr/schema/TestManagedSchemaThreadSafety.java |  8 ++--
 .../java/org/apache/solr/common/ConfigNode.java    |  1 +
 12 files changed, 138 insertions(+), 47 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java b/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
index 644b49e..54c515e 100644
--- a/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
@@ -17,8 +17,12 @@
 package org.apache.solr.cloud;
 
 import java.lang.invoke.MethodHandles;
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.solr.cloud.api.collections.CreateCollectionCmd;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ZkConfigManager;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -39,7 +43,7 @@ import org.slf4j.LoggerFactory;
  */
 public class CloudConfigSetService extends ConfigSetService {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-  
+  private Map<String, ConfigCacheEntry> cache = new ConcurrentHashMap<>();
   private final ZkController zkController;
 
   public CloudConfigSetService(SolrResourceLoader loader, boolean shareSchema, ZkController zkController) {
@@ -47,6 +51,20 @@ public class CloudConfigSetService extends ConfigSetService {
     this.zkController = zkController;
   }
 
+  public void storeConfig(String resource, ConfigNode config, int znodeVersion) {
+    cache.put(resource, new ConfigCacheEntry(config, znodeVersion));
+  }
+
+  public ConfigNode getConfig(String resource, int znodeVersion) {
+    ConfigCacheEntry e = cache.get(resource);
+    if (e == null) return null;
+    ConfigNode configNode = e.configNode.get();
+    if (configNode == null) cache.remove(resource);
+    if (e.znodeVersion == znodeVersion) return configNode;
+    if (e.znodeVersion < znodeVersion) cache.remove(resource);
+    return null;
+  }
+
   @Override
   public SolrResourceLoader createCoreResourceLoader(CoreDescriptor cd) {
     final String colName = cd.getCollectionName();
@@ -111,4 +129,14 @@ public class CloudConfigSetService extends ConfigSetService {
   public String configSetName(CoreDescriptor cd) {
     return "configset " + cd.getConfigSet();
   }
+
+  private static class ConfigCacheEntry {
+    final WeakReference<ConfigNode> configNode;
+    final int znodeVersion;
+
+    private ConfigCacheEntry(ConfigNode configNode, int znodeVersion) {
+      this.configNode = new WeakReference<>(configNode);
+      this.znodeVersion = znodeVersion;
+    }
+  }
 }
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java b/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
index 0e17b5c..b52d6bb 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
@@ -81,7 +81,7 @@ public class ZkSolrResourceLoader extends SolrResourceLoader {
         if (zkController.pathExists(file)) {
           Stat stat = new Stat();
           byte[] bytes = zkController.getZkClient().getData(file, null, stat, true);
-          return new ZkByteArrayInputStream(bytes, stat);
+          return new ZkByteArrayInputStream(bytes, file, stat);
         } else {
           //Path does not exists. We only retry for session expired exceptions.
           break;
@@ -126,11 +126,12 @@ public class ZkSolrResourceLoader extends SolrResourceLoader {
 
   public static class ZkByteArrayInputStream extends ByteArrayInputStream{
 
+    public final String fileName;
     private final Stat stat;
-    public ZkByteArrayInputStream(byte[] buf, Stat stat) {
+    public ZkByteArrayInputStream(byte[] buf, String fileName, Stat stat) {
       super(buf);
+      this.fileName = fileName;
       this.stat = stat;
-
     }
 
     public Stat getStat(){
diff --git a/solr/core/src/java/org/apache/solr/core/ConfigSetService.java b/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
index 1d45bc5..691f17a 100644
--- a/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
@@ -28,12 +28,14 @@ import com.github.benmanes.caffeine.cache.Caffeine;
 import org.apache.solr.cloud.CloudConfigSetService;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.IndexSchemaFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
 
 /**
  * Service class used by the CoreContainer to load ConfigSets for use in SolrCore
@@ -135,14 +137,14 @@ public abstract class ConfigSetService {
         // note: luceneMatchVersion influences the schema
         String cacheKey = configSet + "/" + guessSchemaName + "/" + modVersion + "/" + solrConfig.luceneMatchVersion;
         return schemaCache.get(cacheKey,
-            (key) -> indexSchemaFactory.create(cdSchemaName, solrConfig));
+            (key) -> indexSchemaFactory.create(cdSchemaName, solrConfig, ConfigSetService.this));
       } else {
         log.warn("Unable to get schema modification version, configSet={} schema={}", configSet, guessSchemaName);
         // see explanation above; "guessSchema" is a guess
       }
     }
 
-    return indexSchemaFactory.create(cdSchemaName, solrConfig);
+    return indexSchemaFactory.create(cdSchemaName, solrConfig, this);
   }
 
   /**
@@ -186,6 +188,18 @@ public abstract class ConfigSetService {
    */
   public abstract String configSetName(CoreDescriptor cd);
 
+  public interface ConfigResource {
+
+    default String resourceName() {return null;}
+
+    InputSource getSource();
+
+    default ConfigNode getParsed() {return null;}
+
+    default void storeParsed(ConfigNode node){}
+
+  }
+
   /**
    * The Solr standalone version of ConfigSetService.
    *
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 772e049..20281e3 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -64,6 +64,7 @@ import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.Pair;
 import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.ConfigSetService;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.core.XmlConfigFile;
@@ -80,7 +81,6 @@ import org.apache.solr.util.PayloadUtils;
 import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.InputSource;
 
 import static java.util.Arrays.asList;
 import static java.util.Collections.singletonList;
@@ -169,6 +169,7 @@ public class IndexSchema {
    * directives that target them.
    */
   protected Map<SchemaField, Integer> copyFieldTargetCounts = new HashMap<>();
+  private ConfigNode rootNode;
 //  static AtomicLong totalSchemaLoadTime = new AtomicLong();
 
 
@@ -177,17 +178,20 @@ public class IndexSchema {
    * By default, this follows the normal config path directory searching rules.
    * @see SolrResourceLoader#openResource
    */
-  public IndexSchema(String name, InputSource is, Version luceneVersion, SolrResourceLoader resourceLoader, Properties substitutableProperties) {
+  public IndexSchema(String name, ConfigSetService.ConfigResource schemaResource, Version luceneVersion, SolrResourceLoader resourceLoader, Properties substitutableProperties) {
     this(luceneVersion, resourceLoader, substitutableProperties);
 
     this.resourceName = Objects.requireNonNull(name);
+    ConfigNode.SUBSTITUTES.set(substitutableProperties::getProperty);
     try {
 //      long start = System.currentTimeMillis();
-      readSchema(is);
+      readSchema(schemaResource);
 //      System.out.println("schema-load-time : "+ totalSchemaLoadTime.addAndGet (System.currentTimeMillis() - start));
       loader.inform(loader);
     } catch (IOException e) {
       throw new RuntimeException(e);
+    } finally {
+      ConfigNode.SUBSTITUTES.remove();
     }
   }
 
@@ -478,18 +482,21 @@ public class IndexSchema {
     }
   }
 
-  protected void readSchema(InputSource is) {
+  protected void readSchema(ConfigSetService.ConfigResource is) {
     assert null != is : "schema InputSource should never be null";
     try {
-      // pass the config resource loader to avoid building an empty one for no reason:
-      // in the current case though, the stream is valid so we wont load the resource by name
-      XmlConfigFile schemaConf = new XmlConfigFile(loader, SCHEMA, is, SLASH+SCHEMA+SLASH, null);
+      rootNode = is.getParsed();
+      if(rootNode == null) {
+        // pass the config resource loader to avoid building an empty one for no reason:
+        // in the current case though, the stream is valid so we wont load the resource by name
+        XmlConfigFile schemaConf = new XmlConfigFile(loader, SCHEMA, is.getSource(), SLASH+SCHEMA+SLASH, null);
 //      Document document = schemaConf.getDocument();
 //      final XPath xpath = schemaConf.getXPath();
 //      String expression = stepsToPath(SCHEMA, AT + NAME);
 //      Node nd = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
-      ConfigNode rootNode = new DataConfigNode(new DOMConfigNode(schemaConf.getDocument().getDocumentElement()),
-          substitutableProperties::getProperty) ;
+        rootNode = new DataConfigNode(new DOMConfigNode(schemaConf.getDocument().getDocumentElement())) ;
+        is.storeParsed(rootNode);
+      }
       name = rootNode.attributes().get("name");
       StringBuilder sb = new StringBuilder();
       // Another case where the initialization from the test harness is different than the "real world"
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchemaFactory.java b/solr/core/src/java/org/apache/solr/schema/IndexSchemaFactory.java
index 095efd4..0391aa2 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchemaFactory.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchemaFactory.java
@@ -19,8 +19,12 @@ package org.apache.solr.schema;
 import java.io.InputStream;
 import java.lang.invoke.MethodHandles;
 
+import org.apache.solr.cloud.CloudConfigSetService;
+import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.core.ConfigSetService;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrResourceLoader;
@@ -33,10 +37,12 @@ import org.xml.sax.InputSource;
 /** Base class for factories for IndexSchema implementations */
 public abstract class IndexSchemaFactory implements NamedListInitializedPlugin {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
-  /** Instantiates the configured schema factory, then calls create on it. */
   public static IndexSchema buildIndexSchema(String resourceName, SolrConfig config) {
-    return newIndexSchemaFactory(config).create(resourceName, config);
+    return buildIndexSchema(resourceName, config, null);
+  }
+  /** Instantiates the configured schema factory, then calls create on it. */
+  public static IndexSchema buildIndexSchema(String resourceName, SolrConfig config, ConfigSetService configSetService) {
+    return newIndexSchemaFactory(config).create(resourceName, config, configSetService);
   }
 
   /** Instantiates us from {@link SolrConfig}. */
@@ -54,7 +60,7 @@ public abstract class IndexSchemaFactory implements NamedListInitializedPlugin {
 
   /**
    * Returns the resource (file) name that will be used for the schema itself.  The answer may be a guess.
-   * Do not pass the result of this to {@link #create(String, SolrConfig)}.
+   * Do not pass the result of this to {@link #create(String, SolrConfig, ConfigSetService)}.
    * The input is the name coming from the {@link org.apache.solr.core.CoreDescriptor}
    * which acts as a default or asked-for name.
    */
@@ -65,7 +71,7 @@ public abstract class IndexSchemaFactory implements NamedListInitializedPlugin {
   /**
    * Returns an index schema created from a local resource.  The input is usually from the core descriptor.
    */
-  public IndexSchema create(String resourceName, SolrConfig config) {
+  public IndexSchema create(String resourceName, SolrConfig config, ConfigSetService configSetService) {
     SolrResourceLoader loader = config.getResourceLoader();
     InputStream schemaInputStream = null;
 
@@ -80,10 +86,41 @@ public abstract class IndexSchemaFactory implements NamedListInitializedPlugin {
       log.error(msg, e);
       throw new SolrException(ErrorCode.SERVER_ERROR, msg, e);
     }
-    InputSource inputSource = new InputSource(schemaInputStream);
-    inputSource.setSystemId(SystemIdResolver.createSystemIdFromResourceName(resourceName));
-    IndexSchema schema = new IndexSchema(resourceName, inputSource, config.luceneMatchVersion, loader, config.getSubstituteProperties());
-    return schema;
+    InputStream is = schemaInputStream;
+    String name = resourceName;
+    ConfigSetService.ConfigResource schemaResource  = new ConfigSetService.ConfigResource() {
+      @Override
+      public InputSource getSource() {
+        InputSource inputSource = new InputSource(is);
+        inputSource.setSystemId(SystemIdResolver.createSystemIdFromResourceName(name));
+        return inputSource;
+      }
+
+      @Override
+      public String resourceName() {
+        return name;
+      }
+
+      @Override
+      public ConfigNode getParsed() {
+        if (configSetService instanceof CloudConfigSetService && is instanceof ZkSolrResourceLoader.ZkByteArrayInputStream) {
+          CloudConfigSetService cloudConfigSetService = (CloudConfigSetService) configSetService;
+          ZkSolrResourceLoader.ZkByteArrayInputStream zkis = (ZkSolrResourceLoader.ZkByteArrayInputStream) is;
+          return cloudConfigSetService.getConfig(zkis.fileName, zkis.getStat().getVersion());
+        }
+        return null;
+      }
+
+      @Override
+      public void storeParsed(ConfigNode node) {
+        if (configSetService instanceof CloudConfigSetService && is instanceof ZkSolrResourceLoader.ZkByteArrayInputStream) {
+          CloudConfigSetService cloudConfigSetService = (CloudConfigSetService) configSetService;
+          ZkSolrResourceLoader.ZkByteArrayInputStream zkis = (ZkSolrResourceLoader.ZkByteArrayInputStream) is;
+          cloudConfigSetService.storeConfig(zkis.fileName, node, zkis.getStat().getVersion());
+        }
+      }
+    };
+    return new IndexSchema(resourceName, schemaResource, config.luceneMatchVersion, loader, config.getSubstituteProperties());
   }
 
 }
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
index 0dd71f8..dd17c5b 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
@@ -67,10 +67,10 @@ import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
+import org.apache.solr.core.ConfigSetService;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.rest.schema.FieldTypeXmlAdapter;
-import org.apache.solr.common.util.SolrNamedThreadFactory;
 import org.apache.solr.util.DOMConfigNode;
 import org.apache.solr.util.FileUtils;
 import org.apache.solr.util.RTimer;
@@ -79,7 +79,6 @@ import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.data.Stat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.xml.sax.InputSource;
 
 import static org.apache.solr.core.SolrResourceLoader.informAware;
 
@@ -104,7 +103,7 @@ public final class ManagedIndexSchema extends IndexSchema {
    * By default, this follows the normal config path directory searching rules.
    * @see org.apache.solr.core.SolrResourceLoader#openResource
    */
-  ManagedIndexSchema(SolrConfig solrConfig, String name, InputSource is, boolean isMutable,
+  ManagedIndexSchema(SolrConfig solrConfig, String name, ConfigSetService.ConfigResource is, boolean isMutable,
                      String managedSchemaResourceName, int schemaZkVersion, Object schemaUpdateLock) {
     super(name, is, solrConfig.luceneMatchVersion, solrConfig.getResourceLoader(), solrConfig.getSubstituteProperties());
     this.isMutable = isMutable;
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
index ef5df42..a7e6aef 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
@@ -30,6 +30,7 @@ import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkCmdExecutor;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.ConfigSetService;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrResourceLoader;
@@ -109,7 +110,7 @@ public class ManagedIndexSchemaFactory extends IndexSchemaFactory implements Sol
    * renamed by appending the extension named in {@link #UPGRADED_SCHEMA_EXTENSION}.
    */
   @Override
-  public ManagedIndexSchema create(String resourceName, SolrConfig config) {
+  public ManagedIndexSchema create(String resourceName, SolrConfig config, ConfigSetService configSetService) {
     this.resourceName = resourceName;
     this.config = config;
     this.loader = config.getResourceLoader();
@@ -174,8 +175,8 @@ public class ManagedIndexSchemaFactory extends IndexSchemaFactory implements Sol
     }
     InputSource inputSource = new InputSource(schemaInputStream);
     inputSource.setSystemId(SystemIdResolver.createSystemIdFromResourceName(loadedResource));
-    schema = new ManagedIndexSchema(config, loadedResource, inputSource, isMutable,
-                                    managedSchemaResourceName, schemaZkVersion, getSchemaUpdateLock());
+    schema = new ManagedIndexSchema(config, loadedResource, () -> inputSource, isMutable,
+        managedSchemaResourceName, schemaZkVersion, getSchemaUpdateLock());
     if (shouldUpgrade) {
       // Persist the managed schema if it doesn't already exist
       synchronized (schema.getSchemaUpdateLock()) {
diff --git a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
index f539969..be126f2 100644
--- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
+++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
@@ -451,10 +451,11 @@ public class SchemaManager {
         return (ManagedIndexSchema) core.getLatestSchema();
       }
       InputStream in = resourceLoader.openResource(name);
+      InputSource is = new InputSource(in);
       if (in instanceof ZkSolrResourceLoader.ZkByteArrayInputStream) {
         int version = ((ZkSolrResourceLoader.ZkByteArrayInputStream) in).getStat().getVersion();
         log.info("managed schema loaded . version : {} ", version);
-        return new ManagedIndexSchema(core.getSolrConfig(), name, new InputSource(in), true, name, version,
+        return new ManagedIndexSchema(core.getSolrConfig(), name, () -> is, true, name, version,
             core.getLatestSchema().getSchemaUpdateLock());
       } else {
         return (ManagedIndexSchema) core.getLatestSchema();
diff --git a/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java b/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java
index 3b867ce..56daf01 100644
--- a/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java
+++ b/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java
@@ -174,7 +174,7 @@ public class ZkIndexSchemaReader implements OnReconnect {
           InputSource inputSource = new InputSource(new ByteArrayInputStream(data));
           String resourceName = managedIndexSchemaFactory.getManagedSchemaResourceName();
           ManagedIndexSchema newSchema = new ManagedIndexSchema
-              (managedIndexSchemaFactory.getConfig(), resourceName, inputSource, managedIndexSchemaFactory.isMutable(), 
+              (managedIndexSchemaFactory.getConfig(), resourceName, () -> inputSource, managedIndexSchemaFactory.isMutable(),
                   resourceName, stat.getVersion(), oldSchema.getSchemaUpdateLock());
           managedIndexSchemaFactory.setSchema(newSchema);
           long stop = System.nanoTime();
diff --git a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
index 3867af7..9c825e8 100644
--- a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
@@ -37,36 +37,38 @@ public class DataConfigNode implements ConfigNode {
   final String name;
   final SimpleMap<String> attributes;
   private final Map<String, List<ConfigNode>> kids = new HashMap<>();
-  private String textData;
-  private final Function<String, String> propertySubstitution;
+  private final String textData;
 
-  public DataConfigNode(ConfigNode root, Function<String, String> propertySubstitution) {
-    this.propertySubstitution = propertySubstitution;
+  public DataConfigNode(ConfigNode root) {
     name = root.name();
     attributes = wrap(root.attributes());
     textData = root.textValue();
-    if (textData != null) textData = PropertiesUtil.substitute(textData.trim(), propertySubstitution);
     root.forEachChild(it -> {
       List<ConfigNode> nodes = kids.computeIfAbsent(it.name(),
           k -> new ArrayList<>());
 
-     nodes.add(new DataConfigNode(it,  propertySubstitution));
+     nodes.add(new DataConfigNode(it));
       return Boolean.TRUE;
     });
 
   }
 
+  public String subtituteVal(String s) {
+    Function<String, String> props = SUBSTITUTES.get();
+    if (props == null) return s;
+    return PropertiesUtil.substitute(s, props);
+  }
+
   private SimpleMap<String> wrap(SimpleMap<String> delegate) {
-    return propertySubstitution == null ? delegate :
-        new SimpleMap<>() {
+    return new SimpleMap<>() {
           @Override
           public String get(String key) {
-            return PropertiesUtil.substitute(delegate.get(key), propertySubstitution);
+            return subtituteVal(delegate.get(key));
           }
 
           @Override
           public void forEachEntry(BiConsumer<String, ? super String> fun) {
-            delegate.forEachEntry((k, v) -> fun.accept(k, PropertiesUtil.substitute(v, propertySubstitution)));
+            delegate.forEachEntry((k, v) -> fun.accept(k, subtituteVal(v)));
           }
 
           @Override
@@ -83,7 +85,7 @@ public class DataConfigNode implements ConfigNode {
 
   @Override
   public String textValue() {
-    return textData;
+    return  subtituteVal(textData);
   }
 
   @Override
diff --git a/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java b/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java
index c611359..e2d8737 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestManagedSchemaThreadSafety.java
@@ -17,9 +17,6 @@
 
 package org.apache.solr.schema;
 
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
@@ -50,6 +47,9 @@ import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 public class TestManagedSchemaThreadSafety extends SolrTestCaseJ4 {
 
   private static final class SuspendingZkClient extends SolrZkClient {
@@ -180,7 +180,7 @@ public class TestManagedSchemaThreadSafety extends SolrTestCaseJ4 {
 
         ManagedIndexSchemaFactory factory = new ManagedIndexSchemaFactory();
         factory.init(new NamedList());
-        factory.create("schema.xml", solrConfig);
+        factory.create("schema.xml", solrConfig, null);
       }
       catch (Exception e) {
         throw new RuntimeException(e);
diff --git a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
index f046440..0f6a813 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
@@ -29,6 +29,7 @@ import org.apache.solr.cluster.api.SimpleMap;
  * A generic interface that represents a config file, mostly XML
  */
 public interface ConfigNode {
+  ThreadLocal<Function<String,String>> SUBSTITUTES = new ThreadLocal<>();
 
   /**
    * Name of the tag


[lucene-solr] 04/18: bug fix

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

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

commit 70b5ad3af246afd5f59d040eebb3fa83ecb74b1d
Author: noblepaul <no...@gmail.com>
AuthorDate: Mon Sep 7 10:43:03 2020 +1000

    bug fix
---
 .../java/org/apache/solr/core/XmlConfigFile.java   | 23 +++-------------------
 .../java/org/apache/solr/schema/IndexSchema.java   | 10 +++++++---
 2 files changed, 10 insertions(+), 23 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
index 9df33b7..6cc6216 100644
--- a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
+++ b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
@@ -20,11 +20,6 @@ import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
@@ -145,7 +140,7 @@ public class XmlConfigFile { // formerly simply "Config"
       db.setErrorHandler(xmllog);
       try {
         doc = db.parse(is);
-        origDoc = copyDoc(doc);
+        origDoc = doc;
       } finally {
         // some XML parsers are broken and don't close the byte stream (but they should according to spec)
         IOUtils.closeQuietly(is.getByteStream());
@@ -153,7 +148,7 @@ public class XmlConfigFile { // formerly simply "Config"
       if (substituteProps != null) {
         DOMUtil.substituteProperties(doc, getSubstituteProperties());
       }
-    } catch (ParserConfigurationException | SAXException | TransformerException e)  {
+    } catch (ParserConfigurationException | SAXException e)  {
       SolrException.log(log, "Exception during parsing file: " + name, e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
     }
@@ -179,15 +174,7 @@ public class XmlConfigFile { // formerly simply "Config"
     return this.substituteProperties;
   }
 
-  private static Document copyDoc(Document doc) throws TransformerException {
-    TransformerFactory tfactory = TransformerFactory.newInstance();
-    Transformer tx = tfactory.newTransformer();
-    DOMSource source = new DOMSource(doc);
-    DOMResult result = new DOMResult();
-    tx.transform(source, result);
-    return (Document) result.getNode();
-  }
-  
+
   /**
    * @since solr 1.3
    */
@@ -237,10 +224,6 @@ public class XmlConfigFile { // formerly simply "Config"
     return getNode(path, doc, errifMissing);
   }
 
-  public Node getUnsubstitutedNode(String path, boolean errIfMissing) {
-    return getNode(path, origDoc, errIfMissing);
-  }
-
   public Node getNode(String path, Document doc, boolean errIfMissing) {
     XPath xpath = xpathFactory.newXPath();
     String xstr = normalize(path);
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 8344fc6..1aa1e66 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -756,9 +756,13 @@ public class IndexSchema {
 //    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
 
     List<ConfigNode> nodes = n.children(COPY_FIELD);
-    for (int i=0; i<nodes.size(); i++) {
-      ConfigNode node = nodes.get(i);
-//      NamedNodeMap attrs = node.getAttributes();
+    ConfigNode f = n.child(FIELDS);
+    if (f != null) {
+      List<ConfigNode> c = f.children(COPY_FIELD);
+      if (nodes.isEmpty()) nodes = c;
+      else nodes.addAll(c);
+    }
+    for (ConfigNode node : nodes) {
 
       String source = DOMUtil.getAttr(node, SOURCE, COPY_FIELD + " definition");
       String dest   = DOMUtil.getAttr(node, DESTINATION,  COPY_FIELD + " definition");


[lucene-solr] 01/18: SOLR-14827: Refactor schema loading to not use XPath

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

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

commit 74c98f04e6dfbe848d2462e51927d4ddda975ae0
Author: noblepaul <no...@gmail.com>
AuthorDate: Fri Sep 4 01:04:49 2020 +1000

    SOLR-14827: Refactor schema loading to not use XPath
---
 .../java/org/apache/solr/core/XmlConfigFile.java   |   9 ++
 .../apache/solr/schema/FieldTypePluginLoader.java  |  85 +++++++------
 .../java/org/apache/solr/schema/IndexSchema.java   | 134 +++++++++++----------
 .../org/apache/solr/schema/ManagedIndexSchema.java |   4 +-
 .../java/org/apache/solr/util/DOMConfigNode.java   |  86 +++++++++++++
 .../solr/util/plugin/AbstractPluginLoader.java     |  18 +--
 .../apache/solr/util/plugin/MapPluginLoader.java   |   6 +-
 .../solr/util/plugin/NamedListPluginLoader.java    |   4 +-
 .../org/apache/solr/cluster/api/SimpleMap.java     |   5 +
 .../java/org/apache/solr/common/ConfigNode.java    |  73 +++++++++++
 .../java/org/apache/solr/common/util/DOMUtil.java  | 108 +++++++++++++----
 11 files changed, 388 insertions(+), 144 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
index 6d8cb92..ed28075 100644
--- a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
+++ b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
@@ -44,9 +44,12 @@ import java.util.TreeSet;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.XMLErrorLogger;
+import org.apache.solr.util.DOMConfigNode;
+import org.apache.solr.util.DOMUtil;
 import org.apache.solr.util.SystemIdResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -72,6 +75,8 @@ public class XmlConfigFile { // formerly simply "Config"
   private final String prefix;
   private final String name;
   private final SolrResourceLoader loader;
+
+  private final ConfigNode rootNode;
   private final Properties substituteProperties;
   private int zkVersion = -1;
 
@@ -152,11 +157,15 @@ public class XmlConfigFile { // formerly simply "Config"
       if (substituteProps != null) {
         DOMUtil.substituteProperties(doc, getSubstituteProperties());
       }
+      rootNode = new DOMConfigNode(doc.getDocumentElement());
     } catch (ParserConfigurationException | SAXException | TransformerException e)  {
       SolrException.log(log, "Exception during parsing file: " + name, e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
     }
   }
+  public ConfigNode rootNode() {
+    return rootNode;
+  }
 
   /*
      * Assert that assertCondition is true.
diff --git a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
index b4f51ec..2d86113 100644
--- a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
@@ -16,13 +16,10 @@
  */
 package org.apache.solr.schema;
 
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
 import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -33,6 +30,7 @@ import org.apache.lucene.analysis.TokenizerFactory;
 import org.apache.lucene.analysis.core.KeywordAnalyzer;
 import org.apache.lucene.util.Version;
 import org.apache.solr.analysis.TokenizerChain;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.SolrClassLoader;
 import org.apache.solr.common.util.DOMUtil;
@@ -40,9 +38,6 @@ import org.apache.solr.core.SolrConfig;
 import org.apache.solr.util.plugin.AbstractPluginLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 
 import static org.apache.solr.common.params.CommonParams.NAME;
 
@@ -54,8 +49,6 @@ public final class FieldTypePluginLoader
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  private final XPath xpath = XPathFactory.newInstance().newXPath();
-
   /**
    * @param schema The schema that will be used to initialize the FieldTypes
    * @param fieldTypes All FieldTypes that are instantiated by 
@@ -81,27 +74,30 @@ public final class FieldTypePluginLoader
   protected FieldType create( SolrClassLoader loader,
                               String name, 
                               String className,
-                              Node node ) throws Exception {
+                              ConfigNode node ) throws Exception {
 
     FieldType ft = loader.newInstance(className, FieldType.class);
     ft.setTypeName(name);
     
     String expression = "./analyzer[@type='query']";
-    Node anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
+    ConfigNode anode = node.child(it -> "analyzer".equals(it.name()) && "query".equals(it.attributes().get("type")));
     Analyzer queryAnalyzer = readAnalyzer(anode);
 
-    expression = "./analyzer[@type='multiterm']";
-    anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
+//    expression = "./analyzer[@type='multiterm']";
+    anode = node.child(it -> "analyzer".equals(it.name()) && "multiterm".equals(it.attributes().get("type"))) ;
     Analyzer multiAnalyzer = readAnalyzer(anode);
 
     // An analyzer without a type specified, or with type="index"
     expression = "./analyzer[not(@type)] | ./analyzer[@type='index']";
-    anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
+    anode = node.child(it -> "analyzer".equals(it.name()) &&
+        (it.attributes().get("type") == null || "index".equals(it.attributes().get("type"))));
+//    anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
     Analyzer analyzer = readAnalyzer(anode);
 
     // a custom similarity[Factory]
     expression = "./similarity";
-    anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
+    anode = node.child(it -> "similarity".equals(it.name()) && "multiterm".equals(it.attributes().get("type"))) ;
+
     SimilarityFactory simFactory = IndexSchema.readSimilarity(loader, anode);
     if (null != simFactory) {
       ft.setSimilarity(simFactory);
@@ -153,9 +149,9 @@ public final class FieldTypePluginLoader
   }
   
   @Override
-  protected void init(FieldType plugin, Node node) throws Exception {
+  protected void init(FieldType plugin, ConfigNode node) throws Exception {
 
-    Map<String, String> params = DOMUtil.toMapExcept(node.getAttributes(), NAME);
+    Map<String, String> params = DOMUtil.toMapExcept(node, NAME);
     plugin.setArgs(schema, params);
   }
 
@@ -187,7 +183,7 @@ public final class FieldTypePluginLoader
   // <analyzer><tokenizer class="...."/><tokenizer class="...." arg="....">
   //
   //
-  private Analyzer readAnalyzer(Node node) throws XPathExpressionException {
+  private Analyzer readAnalyzer(ConfigNode node)  {
                                 
     final SolrClassLoader loader = schema.getSolrClassLoader();
 
@@ -196,26 +192,29 @@ public final class FieldTypePluginLoader
     // Node node = DOMUtil.getChild(fieldtype,"analyzer");
     
     if (node == null) return null;
-    NamedNodeMap attrs = node.getAttributes();
-    String analyzerName = DOMUtil.getAttr(attrs,"class");
+//    NamedNodeMap attrs = node.getAttributes();
+    String analyzerName = DOMUtil.getAttr(node,"class", null);
 
     // check for all of these up front, so we can error if used in 
     // conjunction with an explicit analyzer class.
-    NodeList charFilterNodes = (NodeList)xpath.evaluate
-      ("./charFilter",  node, XPathConstants.NODESET);
-    NodeList tokenizerNodes = (NodeList)xpath.evaluate
-      ("./tokenizer", node, XPathConstants.NODESET);
-    NodeList tokenFilterNodes = (NodeList)xpath.evaluate
-      ("./filter", node, XPathConstants.NODESET);
-      
+//    NodeList charFilterNodes = (NodeList)xpath.evaluate
+//      ("./charFilter",  node, XPathConstants.NODESET);
+//    NodeList tokenizerNodes = (NodeList)xpath.evaluate
+//      ("./tokenizer", node, XPathConstants.NODESET);
+//    NodeList tokenFilterNodes = (NodeList)xpath.evaluate
+//      ("./filter", node, XPathConstants.NODESET);
+    List<ConfigNode> charFilterNodes = node.children("charFilter");
+    List<ConfigNode> tokenizerNodes = node.children("tokenizer");
+    List<ConfigNode> tokenFilterNodes = node.children("filter");
+
     if (analyzerName != null) {
 
       // explicitly check for child analysis factories instead of
       // just any child nodes, because the user might have their
       // own custom nodes (ie: <description> or something like that)
-      if (0 != charFilterNodes.getLength() ||
-          0 != tokenizerNodes.getLength() ||
-          0 != tokenFilterNodes.getLength()) {
+      if (0 != charFilterNodes.size() ||
+          0 != tokenizerNodes.size() ||
+          0 != tokenFilterNodes.size()) {
         throw new SolrException
         ( SolrException.ErrorCode.SERVER_ERROR,
           "Configuration Error: Analyzer class='" + analyzerName +
@@ -227,7 +226,7 @@ public final class FieldTypePluginLoader
         final Class<? extends Analyzer> clazz = loader.findClass(analyzerName, Analyzer.class);
         Analyzer analyzer = clazz.getConstructor().newInstance();
 
-        final String matchVersionStr = DOMUtil.getAttr(attrs, LUCENE_MATCH_VERSION_PARAM);
+        final String matchVersionStr = DOMUtil.getAttr(node, LUCENE_MATCH_VERSION_PARAM,null);
         final Version luceneMatchVersion = (matchVersionStr == null) ?
           schema.getDefaultLuceneMatchVersion() :
           SolrConfig.parseLuceneVersionString(matchVersionStr);
@@ -254,9 +253,9 @@ public final class FieldTypePluginLoader
       ("[schema.xml] analyzer/charFilter", CharFilterFactory.class, false, false) {
 
       @Override
-      @SuppressWarnings({"rawtypes"})
-      protected CharFilterFactory create(SolrClassLoader loader, String name, String className, Node node) throws Exception {
-        final Map<String,String> params = DOMUtil.toMap(node.getAttributes());
+      @SuppressWarnings("rawtypes")
+      protected CharFilterFactory create(SolrClassLoader loader, String name, String className, ConfigNode node) throws Exception {
+        final Map<String,String> params = DOMUtil.toMapExcept(node);
         String configuredVersion = params.remove(LUCENE_MATCH_VERSION_PARAM);
         params.put(LUCENE_MATCH_VERSION_PARAM, parseConfiguredVersion(configuredVersion, CharFilterFactory.class.getSimpleName()).toString());
         CharFilterFactory factory;
@@ -279,7 +278,7 @@ public final class FieldTypePluginLoader
       }
 
       @Override
-      protected void init(CharFilterFactory plugin, Node node) throws Exception {
+      protected void init(CharFilterFactory plugin, ConfigNode node) throws Exception {
         if( plugin != null ) {
           charFilters.add( plugin );
         }
@@ -305,9 +304,9 @@ public final class FieldTypePluginLoader
       ("[schema.xml] analyzer/tokenizer", TokenizerFactory.class, false, false) {
       
       @Override
-      @SuppressWarnings({"rawtypes"})
-      protected TokenizerFactory create(SolrClassLoader loader, String name, String className, Node node) throws Exception {
-        final Map<String,String> params = DOMUtil.toMap(node.getAttributes());
+      @SuppressWarnings("rawtypes")
+      protected TokenizerFactory create(SolrClassLoader loader, String name, String className, ConfigNode node) throws Exception {
+        final Map<String,String> params = DOMUtil.toMap(node);
         String configuredVersion = params.remove(LUCENE_MATCH_VERSION_PARAM);
         params.put(LUCENE_MATCH_VERSION_PARAM, parseConfiguredVersion(configuredVersion, TokenizerFactory.class.getSimpleName()).toString());
         TokenizerFactory factory;
@@ -330,7 +329,7 @@ public final class FieldTypePluginLoader
       }
       
       @Override
-      protected void init(TokenizerFactory plugin, Node node) throws Exception {
+      protected void init(TokenizerFactory plugin, ConfigNode node) throws Exception {
         if( !tokenizers.isEmpty() ) {
           throw new SolrException( SolrException.ErrorCode.SERVER_ERROR,
               "The schema defines multiple tokenizers for: "+node );
@@ -360,9 +359,9 @@ public final class FieldTypePluginLoader
       new AbstractPluginLoader<TokenFilterFactory>("[schema.xml] analyzer/filter", TokenFilterFactory.class, false, false)
     {
       @Override
-      @SuppressWarnings({"rawtypes"})
-      protected TokenFilterFactory create(SolrClassLoader loader, String name, String className, Node node) throws Exception {
-        final Map<String,String> params = DOMUtil.toMap(node.getAttributes());
+      @SuppressWarnings("rawtypes")
+      protected TokenFilterFactory create(SolrClassLoader loader, String name, String className, ConfigNode node) throws Exception {
+        final Map<String,String> params = DOMUtil.toMap(node);
         String configuredVersion = params.remove(LUCENE_MATCH_VERSION_PARAM);
         params.put(LUCENE_MATCH_VERSION_PARAM, parseConfiguredVersion(configuredVersion, TokenFilterFactory.class.getSimpleName()).toString());
         TokenFilterFactory factory;
@@ -385,7 +384,7 @@ public final class FieldTypePluginLoader
       }
       
       @Override
-      protected void init(TokenFilterFactory plugin, Node node) throws Exception {
+      protected void init(TokenFilterFactory plugin, ConfigNode node) throws Exception {
         if( plugin != null ) {
           filters.add( plugin );
         }
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 305cd50..c451176 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -16,8 +16,6 @@
  */
 package org.apache.solr.schema;
 
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import java.io.IOException;
 import java.io.Writer;
@@ -39,17 +37,20 @@ import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.Function;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import com.google.common.collect.ImmutableSet;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.DelegatingAnalyzerWrapper;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.queries.payloads.PayloadDecoder;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.util.Version;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.MapSerializable;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrException;
@@ -77,11 +78,6 @@ import org.apache.solr.util.PayloadUtils;
 import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
 import static java.util.Arrays.asList;
@@ -148,6 +144,8 @@ public class IndexSchema {
 
   public DynamicField[] getDynamicFields() { return dynamicFields; }
 
+  private final Set<String> FIELDTYPE_KEYS = ImmutableSet.of("fieldtype", "fieldType");
+
   @SuppressWarnings({"unchecked", "rawtypes"})
   protected Cache<String, SchemaField> dynamicFieldCache = new ConcurrentLRUCache(10000, 8000, 9000,100, false,false, null);
 
@@ -163,7 +161,6 @@ public class IndexSchema {
   public DynamicCopy[] getDynamicCopyFields() { return dynamicCopyFields; }
 
   private Map<FieldType, PayloadDecoder> decoders = new HashMap<>();  // cache to avoid scanning token filters repeatedly, unnecessarily
-
   /**
    * keys are all fields copied to, count is num of copyField
    * directives that target them.
@@ -180,7 +177,9 @@ public class IndexSchema {
 
     this.resourceName = Objects.requireNonNull(name);
     try {
+//      long start = System.currentTimeMillis();
       readSchema(is);
+//      System.out.println("schema-load-time : "+ totalSchemaLoadTime.addAndGet (System.currentTimeMillis() - start));
       loader.inform(loader);
     } catch (IOException e) {
       throw new RuntimeException(e);
@@ -480,17 +479,18 @@ public class IndexSchema {
       // pass the config resource loader to avoid building an empty one for no reason:
       // in the current case though, the stream is valid so we wont load the resource by name
       XmlConfigFile schemaConf = new XmlConfigFile(loader, SCHEMA, is, SLASH+SCHEMA+SLASH, substitutableProperties);
-      Document document = schemaConf.getDocument();
-      final XPath xpath = schemaConf.getXPath();
-      String expression = stepsToPath(SCHEMA, AT + NAME);
-      Node nd = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+//      Document document = schemaConf.getDocument();
+//      final XPath xpath = schemaConf.getXPath();
+//      String expression = stepsToPath(SCHEMA, AT + NAME);
+//      Node nd = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+      ConfigNode rootNode = schemaConf.rootNode();
+      name = rootNode.attributes().get("name");
       StringBuilder sb = new StringBuilder();
       // Another case where the initialization from the test harness is different than the "real world"
-      if (nd==null) {
+      if (name==null) {
         sb.append("schema has no name!");
         log.warn("{}", sb);
       } else {
-        name = nd.getNodeValue();
         sb.append("Schema ");
         sb.append(NAME);
         sb.append("=");
@@ -499,21 +499,24 @@ public class IndexSchema {
       }
 
       //                      /schema/@version
-      expression = stepsToPath(SCHEMA, AT + VERSION);
-      version = schemaConf.getFloat(expression, 1.0f);
+//      expression = stepsToPath(SCHEMA, AT + VERSION);
+      version =  Float.parseFloat(rootNode.attributes().get("version","1.0f"));
 
       // load the Field Types
       final FieldTypePluginLoader typeLoader = new FieldTypePluginLoader(this, fieldTypes, schemaAware);
-      expression = getFieldTypeXPathExpressions();
-      NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
-      typeLoader.load(solrClassLoader, nodes);
+//      expression = getFieldTypeXPathExpressions();
+//      NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
+
+      typeLoader.load(solrClassLoader,
+          rootNode.children(it -> FIELDTYPE_KEYS.contains( it.name())));
 
       // load the fields
-      Map<String,Boolean> explicitRequiredProp = loadFields(document, xpath);
+      Map<String,Boolean> explicitRequiredProp = loadFields(rootNode);
+
+//      expression = stepsToPath(SCHEMA, SIMILARITY); //   /schema/similarity
+//      Node node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
 
-      expression = stepsToPath(SCHEMA, SIMILARITY); //   /schema/similarity
-      Node node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
-      similarityFactory = readSimilarity(solrClassLoader, node);
+      similarityFactory = readSimilarity(solrClassLoader, rootNode.child(SIMILARITY));
       if (similarityFactory == null) {
         final Class<?> simClass = SchemaSimilarityFactory.class;
         // use the loader to ensure proper SolrCoreAware handling
@@ -537,26 +540,30 @@ public class IndexSchema {
       }
 
       //                      /schema/defaultSearchField/text()
-      expression = stepsToPath(SCHEMA, "defaultSearchField", TEXT_FUNCTION);
-      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+//      expression = stepsToPath(SCHEMA, "defaultSearchField", TEXT_FUNCTION);
+//      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+      ConfigNode node = rootNode.child("defaultSearchField");
       if (node != null) {
         throw new SolrException(ErrorCode.SERVER_ERROR, "Setting defaultSearchField in schema not supported since Solr 7");
       }
+      node = rootNode.child("solrQueryParser");
 
       //                      /schema/solrQueryParser/@defaultOperator
-      expression = stepsToPath(SCHEMA, "solrQueryParser", AT + "defaultOperator");
-      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+//      expression = stepsToPath(SCHEMA, "solrQueryParser", AT + "defaultOperator");
+//      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
       if (node != null) {
         throw new SolrException(ErrorCode.SERVER_ERROR, "Setting default operator in schema (solrQueryParser/@defaultOperator) not supported");
       }
 
       //                      /schema/uniqueKey/text()
-      expression = stepsToPath(SCHEMA, UNIQUE_KEY, TEXT_FUNCTION);
-      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+//      expression = stepsToPath(SCHEMA, UNIQUE_KEY, TEXT_FUNCTION);
+//      node = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
+      node = rootNode.child(UNIQUE_KEY);
+
       if (node==null) {
         log.warn("no {} specified in schema.", UNIQUE_KEY);
       } else {
-        uniqueKeyField=getIndexedField(node.getNodeValue().trim());
+        uniqueKeyField=getIndexedField(node.textValue().trim());
         uniqueKeyFieldName=uniqueKeyField.getName();
         uniqueKeyFieldType=uniqueKeyField.getType();
         
@@ -608,7 +615,7 @@ public class IndexSchema {
       // expression = "/schema/copyField";
 
       dynamicCopyFields = new DynamicCopy[] {};
-      loadCopyFields(document, xpath);
+      loadCopyFields(rootNode);
 
       postReadInform();
 
@@ -639,61 +646,61 @@ public class IndexSchema {
    * 
    * @return a map from field name to explicit required value  
    */ 
-  protected synchronized Map<String,Boolean> loadFields(Document document, XPath xpath) throws XPathExpressionException {
+  protected synchronized Map<String,Boolean> loadFields(ConfigNode n) {
     // Hang on to the fields that say if they are required -- this lets us set a reasonable default for the unique key
     Map<String,Boolean> explicitRequiredProp = new HashMap<>();
     
     ArrayList<DynamicField> dFields = new ArrayList<>();
 
     //                  /schema/field | /schema/dynamicField | /schema/fields/field | /schema/fields/dynamicField
-    String expression = stepsToPath(SCHEMA, FIELD)
+ /*   String expression = stepsToPath(SCHEMA, FIELD)
         + XPATH_OR + stepsToPath(SCHEMA, DYNAMIC_FIELD)
         + XPATH_OR + stepsToPath(SCHEMA, FIELDS, FIELD)
-        + XPATH_OR + stepsToPath(SCHEMA, FIELDS, DYNAMIC_FIELD);
-
-    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
+        + XPATH_OR + stepsToPath(SCHEMA, FIELDS, DYNAMIC_FIELD);*/
+    List<ConfigNode> nodes = n.children(it -> "field".equals(it.name()) ||
+        "dynamicField".equals(it.name()));
 
-    for (int i=0; i<nodes.getLength(); i++) {
-      Node node = nodes.item(i);
+//    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
 
-      NamedNodeMap attrs = node.getAttributes();
+    for (ConfigNode node : nodes) {
+      //      SimpleMap<String> attrs = node.attributes();
 
-      String name = DOMUtil.getAttr(attrs, NAME, "field definition");
+      String name = DOMUtil.getAttr(node, NAME, "field definition");
       log.trace("reading field def {}", name);
-      String type = DOMUtil.getAttr(attrs, TYPE, "field " + name);
+      String type = DOMUtil.getAttr(node, TYPE, "field " + name);
 
       FieldType ft = fieldTypes.get(type);
-      if (ft==null) {
+      if (ft == null) {
         throw new SolrException
             (ErrorCode.BAD_REQUEST, "Unknown " + FIELD_TYPE + " '" + type + "' specified on field " + name);
       }
 
-      Map<String,String> args = DOMUtil.toMapExcept(attrs, NAME, TYPE);
+      Map<String, String> args = DOMUtil.toMapExcept(node, NAME, TYPE);
       if (null != args.get(REQUIRED)) {
         explicitRequiredProp.put(name, Boolean.valueOf(args.get(REQUIRED)));
       }
 
-      SchemaField f = SchemaField.create(name,ft,args);
+      SchemaField f = SchemaField.create(name, ft, args);
 
-      if (node.getNodeName().equals(FIELD)) {
-        SchemaField old = fields.put(f.getName(),f);
-        if( old != null ) {
+      if (node.name().equals(FIELD)) {
+        SchemaField old = fields.put(f.getName(), f);
+        if (old != null) {
           String msg = "[schema.xml] Duplicate field definition for '"
-            + f.getName() + "' [[["+old.toString()+"]]] and [[["+f.toString()+"]]]";
-          throw new SolrException(ErrorCode.SERVER_ERROR, msg );
+              + f.getName() + "' [[[" + old.toString() + "]]] and [[[" + f.toString() + "]]]";
+          throw new SolrException(ErrorCode.SERVER_ERROR, msg);
         }
         log.debug("field defined: {}", f);
-        if( f.getDefaultValue() != null ) {
+        if (f.getDefaultValue() != null) {
           if (log.isDebugEnabled()) {
             log.debug("{} contains default value {}", name, f.getDefaultValue());
           }
-          fieldsWithDefaultValue.add( f );
+          fieldsWithDefaultValue.add(f);
         }
         if (f.isRequired()) {
           log.debug("{} is required in this schema", name);
           requiredFields.add(f);
         }
-      } else if (node.getNodeName().equals(DYNAMIC_FIELD)) {
+      } else if (node.name().equals(DYNAMIC_FIELD)) {
         if (isValidDynamicField(dFields, f)) {
           addDynamicFieldNoDupCheck(dFields, f);
         }
@@ -733,17 +740,18 @@ public class IndexSchema {
   /**
    * Loads the copy fields
    */
-  protected synchronized void loadCopyFields(Document document, XPath xpath) throws XPathExpressionException {
-    String expression = "//" + COPY_FIELD;
-    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
+  protected synchronized void loadCopyFields(ConfigNode n) throws XPathExpressionException {
+//    String expression = "//" + COPY_FIELD;
+//    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
 
-    for (int i=0; i<nodes.getLength(); i++) {
-      Node node = nodes.item(i);
-      NamedNodeMap attrs = node.getAttributes();
+    List<ConfigNode> nodes = n.children(COPY_FIELD);
+    for (int i=0; i<nodes.size(); i++) {
+      ConfigNode node = nodes.get(i);
+//      NamedNodeMap attrs = node.getAttributes();
 
-      String source = DOMUtil.getAttr(attrs, SOURCE, COPY_FIELD + " definition");
-      String dest   = DOMUtil.getAttr(attrs, DESTINATION,  COPY_FIELD + " definition");
-      String maxChars = DOMUtil.getAttr(attrs, MAX_CHARS);
+      String source = DOMUtil.getAttr(node, SOURCE, COPY_FIELD + " definition");
+      String dest   = DOMUtil.getAttr(node, DESTINATION,  COPY_FIELD + " definition");
+      String maxChars = DOMUtil.getAttr(node, MAX_CHARS, null);
 
       int maxCharsInt = CopyField.UNLIMITED;
       if (maxChars != null) {
@@ -990,12 +998,12 @@ public class IndexSchema {
     dynamicCopyFields = temp;
   }
 
-  static SimilarityFactory readSimilarity(SolrClassLoader loader, Node node) {
+  static SimilarityFactory readSimilarity(SolrClassLoader loader, ConfigNode node) {
     if (node==null) {
       return null;
     } else {
       SimilarityFactory similarityFactory;
-      final String classArg = ((Element) node).getAttribute(SimilarityFactory.CLASS_NAME);
+      final String classArg = node.attributes().get(SimilarityFactory.CLASS_NAME);
       final Object obj = loader.newInstance(classArg, Object.class, "search.similarities.");
       if (obj instanceof SimilarityFactory) {
         // configure a factory, get a similarity back
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
index e7a748c..0dd71f8 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
@@ -70,6 +70,8 @@ import org.apache.solr.common.util.SolrNamedThreadFactory;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrResourceLoader;
 import org.apache.solr.rest.schema.FieldTypeXmlAdapter;
+import org.apache.solr.common.util.SolrNamedThreadFactory;
+import org.apache.solr.util.DOMConfigNode;
 import org.apache.solr.util.FileUtils;
 import org.apache.solr.util.RTimer;
 import org.apache.zookeeper.CreateMode;
@@ -1308,7 +1310,7 @@ public final class ManagedIndexSchema extends IndexSchema {
     Map<String,FieldType> newFieldTypes = new HashMap<>();
     List<SchemaAware> schemaAwareList = new ArrayList<>();
     FieldTypePluginLoader typeLoader = new FieldTypePluginLoader(this, newFieldTypes, schemaAwareList);
-    typeLoader.loadSingle(solrClassLoader, FieldTypeXmlAdapter.toNode(options));
+    typeLoader.loadSingle(solrClassLoader, new DOMConfigNode(FieldTypeXmlAdapter.toNode(options)));
     FieldType ft = newFieldTypes.get(typeName);
     if (!schemaAwareList.isEmpty())
       schemaAware.addAll(schemaAwareList);
diff --git a/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java b/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
new file mode 100644
index 0000000..1cccbce
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+
+import org.apache.solr.cluster.api.SimpleMap;
+import org.apache.solr.common.ConfigNode;
+import org.apache.solr.common.util.WrappedSimpleMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Read using DOM
+ */
+public class DOMConfigNode implements ConfigNode {
+
+  private final Node node;
+  SimpleMap<String> attrs;
+
+  @Override
+  public String name() {
+    return node.getNodeName();
+  }
+
+  @Override
+  public String textValue() {
+    return DOMUtil.getText(node);
+  }
+
+  public DOMConfigNode(Node node) {
+    this.node = node;
+  }
+
+  @Override
+  public SimpleMap<String> attributes() {
+    if (attrs != null) return attrs;
+    return attrs = new WrappedSimpleMap<>(DOMUtil.toMap(node.getAttributes()));
+  }
+
+  @Override
+  public ConfigNode child(String name) {
+    Node n  =  DOMUtil.getChild(node, name);
+    return n == null? null: new DOMConfigNode(n);
+  }
+
+  @Override
+  public List<ConfigNode> children(String name) {
+    List<ConfigNode> result = new ArrayList<>();
+    forEachChild(it -> {
+      if (name.equals(it.name())) {
+        result.add(it);
+      }
+      return Boolean.TRUE;
+    });
+    return result;
+  }
+
+  @Override
+  public void forEachChild(Function<ConfigNode, Boolean> fun) {
+    NodeList nlst = node.getChildNodes();
+    for (int i = 0; i < nlst.getLength(); i++) {
+      Node item = nlst.item(i);
+      if(item.getNodeType() != Node.ELEMENT_NODE) continue;
+      Boolean toContinue = fun.apply(new DOMConfigNode(item));
+      if (Boolean.FALSE == toContinue) break;
+    }
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
index d042531..48f07d0 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
@@ -20,7 +20,9 @@ import java.lang.invoke.MethodHandles;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Consumer;
 
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.cloud.SolrClassLoader;
@@ -86,7 +88,7 @@ public abstract class AbstractPluginLoader<T>
    * @param node - the XML node defining this plugin
    */
   @SuppressWarnings("unchecked")
-  protected T create(SolrClassLoader loader, String name, String className, Node node ) throws Exception
+  protected T create(SolrClassLoader loader, String name, String className, ConfigNode node ) throws Exception
   {
     return loader.newInstance(className, pluginClassType, getDefaultPackages());
   }
@@ -103,7 +105,7 @@ public abstract class AbstractPluginLoader<T>
    * @param plugin - the plugin to initialize
    * @param node - the XML node defining this plugin
    */
-  abstract protected void init( T plugin, Node node ) throws Exception;
+  abstract protected void init( T plugin, ConfigNode node ) throws Exception;
 
   /**
    * Initializes and registers each plugin in the list.
@@ -135,15 +137,13 @@ public abstract class AbstractPluginLoader<T>
    * If a default element is defined, it will be returned from this function.
    * 
    */
-  public T load(SolrClassLoader loader, NodeList nodes )
+  public T load(SolrClassLoader loader, List<ConfigNode> nodes )
   {
     List<PluginInitInfo> info = new ArrayList<>();
     T defaultPlugin = null;
     
     if (nodes !=null ) {
-      for (int i=0; i<nodes.getLength(); i++) {
-        Node node = nodes.item(i);
-  
+      for (ConfigNode node : nodes) {
         String name = null;
         try {
           name = DOMUtil.getAttr(node, NAME, requireName ? type : null);
@@ -225,7 +225,7 @@ public abstract class AbstractPluginLoader<T>
    * The created class for the plugin will be returned from this function.
    * 
    */
-  public T loadSingle(SolrClassLoader loader, Node node) {
+  public T loadSingle(SolrClassLoader loader, ConfigNode node) {
     List<PluginInitInfo> info = new ArrayList<>();
     T plugin = null;
 
@@ -277,9 +277,9 @@ public abstract class AbstractPluginLoader<T>
    */
   private class PluginInitInfo {
     final T plugin;
-    final Node node;
+    final ConfigNode node;
 
-    PluginInitInfo(T plugin, Node node) {
+    PluginInitInfo(T plugin, ConfigNode node) {
       this.plugin = plugin;
       this.node = node;
     }
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java
index 9cf68f6..46bd79f 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/MapPluginLoader.java
@@ -19,7 +19,7 @@ package org.apache.solr.util.plugin;
 import java.util.Map;
 
 import org.apache.solr.common.util.DOMUtil;
-import org.w3c.dom.Node;
+import org.apache.solr.common.ConfigNode;
 
 import static org.apache.solr.common.params.CommonParams.NAME;
 
@@ -38,8 +38,8 @@ public class MapPluginLoader<T extends MapInitializedPlugin> extends AbstractPlu
   }
 
   @Override
-  protected void init(T plugin, Node node) throws Exception {
-    Map<String, String> params = DOMUtil.toMapExcept(node.getAttributes(), NAME, "class");
+  protected void init(T plugin, ConfigNode node) throws Exception {
+    Map<String, String> params = DOMUtil.toMapExcept(node, NAME, "class");
     plugin.init( params );
   }
 
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
index ae202db..5736abf 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
@@ -19,7 +19,7 @@ package org.apache.solr.util.plugin;
 import java.util.Map;
 
 import org.apache.solr.common.util.DOMUtil;
-import org.w3c.dom.Node;
+import org.apache.solr.common.ConfigNode;
 
 /**
  *
@@ -35,7 +35,7 @@ public class NamedListPluginLoader<T extends NamedListInitializedPlugin> extends
   }
 
   @Override
-  protected void init(T plugin,Node node) throws Exception {
+  protected void init(T plugin, ConfigNode node) throws Exception {
     plugin.init( DOMUtil.childNodesToNamedList(node) );
   }
 
diff --git a/solr/solrj/src/java/org/apache/solr/cluster/api/SimpleMap.java b/solr/solrj/src/java/org/apache/solr/cluster/api/SimpleMap.java
index ca747b9..81da171 100644
--- a/solr/solrj/src/java/org/apache/solr/cluster/api/SimpleMap.java
+++ b/solr/solrj/src/java/org/apache/solr/cluster/api/SimpleMap.java
@@ -35,6 +35,11 @@ public interface SimpleMap<T> extends MapWriter {
   /**get a value by key. If not present , null is returned */
   T get(String key);
 
+  default T get(String key, T def) {
+    T val = get(key);
+    return val == null ? def : val;
+  }
+
   /**Navigate through all keys and values */
   void forEachEntry(BiConsumer<String, ? super T> fun);
 
diff --git a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
new file mode 100644
index 0000000..90b0b81
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.apache.solr.cluster.api.SimpleMap;
+
+/**
+ * A generic interface that represents a config file, mostly XML
+ */
+public interface ConfigNode {
+
+  /**Name of the tag
+   */
+  String name();
+
+  /**Text value of the node
+   */
+  String textValue();
+
+  /**Attributes
+   */
+  SimpleMap<String> attributes();
+
+  /** Child by name
+   */
+  ConfigNode child(String name);
+
+  default ConfigNode child(Predicate<ConfigNode> test) {
+    ConfigNode[] result = new ConfigNode[1];
+    forEachChild(it -> {
+      if (test.test(it)) {
+        result[0] = it;
+        return Boolean.FALSE;
+      }
+      return Boolean.TRUE;
+    });
+    return result[0];
+  }
+
+  default List<ConfigNode> children(Predicate<ConfigNode> test) {
+    List<ConfigNode> result = new ArrayList<>();
+    forEachChild(it -> {
+      if (test.test(it)) result.add(it);
+      return Boolean.TRUE;
+    });
+    return result;
+  }
+
+  List<ConfigNode> children(String name);
+
+  void forEachChild(Function<ConfigNode, Boolean> fun);
+
+
+}
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
index c86fcea..206d84b 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
@@ -22,7 +22,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
+import com.google.common.collect.ImmutableSet;
+import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -37,9 +40,23 @@ public class DOMUtil {
 
   public static final String XML_RESERVED_PREFIX = "xml";
 
+  static final Set<String>  NL_TAGS = ImmutableSet.of("str", "int","long","float","double","bool");
+
+
   public static Map<String,String> toMap(NamedNodeMap attrs) {
     return toMapExcept(attrs);
   }
+  public static Map<String,String> toMap(ConfigNode node) {
+    return toMapExcept(node);
+  }
+  public static Map<String,String> toMapExcept(ConfigNode node, String... exclusions) {
+    Map<String,String> args = new HashMap<>();
+    node.attributes().forEachEntry((k, v) -> {
+      for (String ex : exclusions) if (ex.equals(k)) return;
+        args.put(k,v);
+    });
+    return args;
+  }
 
   public static Map<String,String> toMapExcept(NamedNodeMap attrs, String... exclusions) {
     Map<String,String> args = new HashMap<>();
@@ -92,6 +109,16 @@ public class DOMUtil {
     return val;
   }
 
+  public static String getAttr(ConfigNode node, String name, String missing_err) {
+    String attr = node.attributes().get(name);
+    if (attr == null) {
+      if (missing_err == null) return null;
+      throw new RuntimeException(missing_err + ": missing mandatory attribute '" + name + "'");
+    }
+    return attr;
+
+  }
+
   public static String getAttr(Node node, String name, String missing_err) {
     return getAttr(node.getAttributes(), name, missing_err);
   }
@@ -110,6 +137,10 @@ public class DOMUtil {
     return nodesToList(nd.getChildNodes());
   }
 
+  public static NamedList<Object> childNodesToNamedList(ConfigNode node) {
+    return readNamedListChildren(node);
+  }
+
   public static NamedList<Object> nodesToNamedList(NodeList nlst) {
     NamedList<Object> clst = new NamedList<>();
     for (int i=0; i<nlst.getLength(); i++) {
@@ -160,35 +191,66 @@ public class DOMUtil {
       val = childNodesToList(nd);
     } else {
       final String textValue = getText(nd);
-      try {
-        if ("str".equals(type)) {
-          val = textValue;
-        } else if ("int".equals(type)) {
-          val = Integer.valueOf(textValue);
-        } else if ("long".equals(type)) {
-          val = Long.valueOf(textValue);
-        } else if ("float".equals(type)) {
-          val = Float.valueOf(textValue);
-        } else if ("double".equals(type)) {
-          val = Double.valueOf(textValue);
-        } else if ("bool".equals(type)) {
-          val = StrUtils.parseBool(textValue);
-        }
-        // :NOTE: Unexpected Node names are ignored
-        // :TODO: should we generate an error here?
-      } catch (NumberFormatException nfe) {
-        throw new SolrException
-          (SolrException.ErrorCode.SERVER_ERROR,
-           "Value " + (null != name ? ("of '" +name+ "' ") : "") +
-           "can not be parsed as '" +type+ "': \"" + textValue + "\"",
-           nfe);
-      }
+      val = parseVal(type, name, textValue);
     }
 
     if (nlst != null) nlst.add(name,val);
     if (arr != null) arr.add(val);
   }
 
+  private static Object parseVal(String type, String name, String textValue) {
+    Object val = null;
+    try {
+      if ("str".equals(type)) {
+        val = textValue;
+      } else if ("int".equals(type)) {
+        val = Integer.valueOf(textValue);
+      } else if ("long".equals(type)) {
+        val = Long.valueOf(textValue);
+      } else if ("float".equals(type)) {
+        val = Float.valueOf(textValue);
+      } else if ("double".equals(type)) {
+        val = Double.valueOf(textValue);
+      } else if ("bool".equals(type)) {
+        val = StrUtils.parseBool(textValue);
+      }
+      // :NOTE: Unexpected Node names are ignored
+      // :TODO: should we generate an error here?
+    } catch (NumberFormatException nfe) {
+      throw new SolrException
+        (SolrException.ErrorCode.SERVER_ERROR,
+         "Value " + (null != name ? ("of '" + name + "' ") : "") +
+         "can not be parsed as '" + type + "': \"" + textValue + "\"",
+         nfe);
+    }
+    return val;
+  }
+
+  public static NamedList<Object> readNamedListChildren(ConfigNode configNode) {
+    NamedList<Object> result = new NamedList<>();
+    configNode.forEachChild(it -> {
+      String tag = it.name();
+      String varName = it.attributes().get("name");
+      if (NL_TAGS.contains(tag)) {
+        result.add(varName, parseVal(tag, varName, it.textValue()));
+      }
+      if ("lst".equals(tag)) {
+        result.add(varName, readNamedListChildren(it));
+      } else if ("arr".equals(tag)) {
+        List<Object> l = new ArrayList<>();
+        result.add(varName, l);
+        it.forEachChild(n -> {
+          if (NL_TAGS.contains(n.name())) {
+            l.add(parseVal(n.name(), null, n.textValue()));
+          }
+          return Boolean.TRUE;
+        });
+      }
+      return Boolean.TRUE;
+    });
+    return result;
+  }
+
   /**
    * Drop in replacement for Node.getTextContent().
    *


[lucene-solr] 03/18: bug fix

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

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

commit a6f6330607318d200b6e4e574e9462b0c1aba6a6
Author: noblepaul <no...@gmail.com>
AuthorDate: Fri Sep 4 18:21:40 2020 +1000

    bug fix
---
 .../org/apache/solr/schema/FieldTypePluginLoader.java    |  8 ++++----
 .../src/java/org/apache/solr/schema/IndexSchema.java     | 16 +++++++++++-----
 .../src/java/org/apache/solr/util/DataConfigNode.java    |  3 +++
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
index b52809e..22625d7 100644
--- a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
@@ -79,7 +79,7 @@ public final class FieldTypePluginLoader
     FieldType ft = loader.newInstance(className, FieldType.class);
     ft.setTypeName(name);
     
-    String expression = "./analyzer[@type='query']";
+//    String expression = "./analyzer[@type='query']";
     ConfigNode anode = node.child(it -> "query".equals(it.attributes().get("type")) , "analyzer");
     Analyzer queryAnalyzer = readAnalyzer(anode);
 
@@ -88,15 +88,15 @@ public final class FieldTypePluginLoader
     Analyzer multiAnalyzer = readAnalyzer(anode);
 
     // An analyzer without a type specified, or with type="index"
-    expression = "./analyzer[not(@type)] | ./analyzer[@type='index']";
+//    expression = "./analyzer[not(@type)] | ./analyzer[@type='index']";
     anode = node.child(it ->
         (it.attributes().get("type") == null || "index".equals(it.attributes().get("type"))), "analyzer");
 //    anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
     Analyzer analyzer = readAnalyzer(anode);
 
     // a custom similarity[Factory]
-    expression = "./similarity";
-    anode = node.child(it -> "multiterm".equals(it.attributes().get("type")), "similarity") ;
+//    expression = "./similarity";
+    anode = node.child("similarity") ;
 
     SimilarityFactory simFactory = IndexSchema.readSimilarity(loader, anode);
     if (null != simFactory) {
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 4a0e4b0..8344fc6 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -170,7 +170,7 @@ public class IndexSchema {
    * directives that target them.
    */
   protected Map<SchemaField, Integer> copyFieldTargetCounts = new HashMap<>();
-//  static AtomicLong totalSchemaLoadTime = new AtomicLong();
+  static AtomicLong totalSchemaLoadTime = new AtomicLong();
 
 
   /**
@@ -183,9 +183,9 @@ public class IndexSchema {
 
     this.resourceName = Objects.requireNonNull(name);
     try {
-//      long start = System.currentTimeMillis();
+      long start = System.currentTimeMillis();
       readSchema(is);
-//      System.out.println("schema-load-time : "+ totalSchemaLoadTime.addAndGet (System.currentTimeMillis() - start));
+      System.out.println("schema-load-time : "+ totalSchemaLoadTime.addAndGet (System.currentTimeMillis() - start));
       loader.inform(loader);
     } catch (IOException e) {
       throw new RuntimeException(e);
@@ -513,8 +513,10 @@ public class IndexSchema {
 //      expression = getFieldTypeXPathExpressions();
 //      NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
 
-      typeLoader.load(solrClassLoader,
-          rootNode.children(null, FIELDTYPE_KEYS));
+      List<ConfigNode> fTypes = rootNode.children(null, FIELDTYPE_KEYS);
+      ConfigNode types = rootNode.child(TYPES);
+      if(types != null) fTypes.addAll(types.children(null, FIELDTYPE_KEYS));
+      typeLoader.load(solrClassLoader, fTypes);
 
       // load the fields
       Map<String,Boolean> explicitRequiredProp = loadFields(rootNode);
@@ -664,6 +666,10 @@ public class IndexSchema {
         + XPATH_OR + stepsToPath(SCHEMA, FIELDS, FIELD)
         + XPATH_OR + stepsToPath(SCHEMA, FIELDS, DYNAMIC_FIELD);*/
     List<ConfigNode> nodes = n.children(null,  FIELD_KEYS);
+    ConfigNode child = n.child(FIELDS);
+    if(child != null) {
+      nodes.addAll(child.children(null, FIELD_KEYS));
+    }
 
 //    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
 
diff --git a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
index 2567667..d7bc679 100644
--- a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
@@ -29,6 +29,9 @@ import java.util.function.Predicate;
 import org.apache.solr.cluster.api.SimpleMap;
 import org.apache.solr.common.ConfigNode;
 
+/**
+ * ConfigNode impl that copies and maintains data internally
+ */
 public class DataConfigNode implements ConfigNode {
   final String name;
   final SimpleMap<String> attributes;


[lucene-solr] 07/18: substitute properties real time

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

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

commit cecf1f9aa32652c986dad2ce4893d47a6e2e2054
Author: noblepaul <no...@gmail.com>
AuthorDate: Wed Sep 9 18:20:37 2020 +1000

    substitute properties real time
---
 .../java/org/apache/solr/schema/IndexSchema.java   |  5 +--
 .../java/org/apache/solr/util/DataConfigNode.java  | 36 +++++++++++++++++-----
 .../apache/solr/common/util/PropertiesUtil.java    | 13 +++++---
 3 files changed, 40 insertions(+), 14 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index dfb82fd..772e049 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -483,12 +483,13 @@ public class IndexSchema {
     try {
       // pass the config resource loader to avoid building an empty one for no reason:
       // in the current case though, the stream is valid so we wont load the resource by name
-      XmlConfigFile schemaConf = new XmlConfigFile(loader, SCHEMA, is, SLASH+SCHEMA+SLASH, substitutableProperties);
+      XmlConfigFile schemaConf = new XmlConfigFile(loader, SCHEMA, is, SLASH+SCHEMA+SLASH, null);
 //      Document document = schemaConf.getDocument();
 //      final XPath xpath = schemaConf.getXPath();
 //      String expression = stepsToPath(SCHEMA, AT + NAME);
 //      Node nd = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
-      ConfigNode rootNode = new DataConfigNode(new DOMConfigNode(schemaConf.getDocument().getDocumentElement()) , Collections.singleton("similarity")) ;
+      ConfigNode rootNode = new DataConfigNode(new DOMConfigNode(schemaConf.getDocument().getDocumentElement()),
+          substitutableProperties::getProperty) ;
       name = rootNode.attributes().get("name");
       StringBuilder sb = new StringBuilder();
       // Another case where the initialization from the test harness is different than the "real world"
diff --git a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
index d7bc679..3867af7 100644
--- a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.BiConsumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
@@ -37,25 +38,44 @@ public class DataConfigNode implements ConfigNode {
   final SimpleMap<String> attributes;
   private final Map<String, List<ConfigNode>> kids = new HashMap<>();
   private String textData;
+  private final Function<String, String> propertySubstitution;
 
-  public DataConfigNode(ConfigNode root, Set<String> ignore) {
+  public DataConfigNode(ConfigNode root, Function<String, String> propertySubstitution) {
+    this.propertySubstitution = propertySubstitution;
     name = root.name();
-    attributes = root.attributes();
+    attributes = wrap(root.attributes());
     textData = root.textValue();
-    if (textData != null) textData = textData.trim();
+    if (textData != null) textData = PropertiesUtil.substitute(textData.trim(), propertySubstitution);
     root.forEachChild(it -> {
       List<ConfigNode> nodes = kids.computeIfAbsent(it.name(),
           k -> new ArrayList<>());
-      if (ignore != null && ignore.contains(it.name())) {
-        nodes.add(it);
-      } else {
-        nodes.add(new DataConfigNode(it, ignore));
-      }
+
+     nodes.add(new DataConfigNode(it,  propertySubstitution));
       return Boolean.TRUE;
     });
 
   }
 
+  private SimpleMap<String> wrap(SimpleMap<String> delegate) {
+    return propertySubstitution == null ? delegate :
+        new SimpleMap<>() {
+          @Override
+          public String get(String key) {
+            return PropertiesUtil.substitute(delegate.get(key), propertySubstitution);
+          }
+
+          @Override
+          public void forEachEntry(BiConsumer<String, ? super String> fun) {
+            delegate.forEachEntry((k, v) -> fun.accept(k, PropertiesUtil.substitute(v, propertySubstitution)));
+          }
+
+          @Override
+          public int size() {
+            return delegate.size();
+          }
+        };
+  }
+
   @Override
   public String name() {
     return name;
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java
index 7650a5c..57861c1 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/PropertiesUtil.java
@@ -16,23 +16,28 @@
  */
 package org.apache.solr.common.util;
 
-import org.apache.solr.common.SolrException;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
+import java.util.function.Function;
+
+import org.apache.solr.common.SolrException;
 
 /**
  * Breaking out some utility methods into a separate class as part of SOLR-4196. These utils have nothing to do with
  * the DOM (they came from DomUtils) and it's really confusing to see them in something labeled DOM
  */
 public class PropertiesUtil {
+  public static String substituteProperty(String value, Properties coreProperties) {
+    if(coreProperties == null) return substitute(value, null);
+    return substitute(value, coreProperties::getProperty);
+  }
   /*
   * This method borrowed from Ant's PropertyHelper.replaceProperties:
   *   http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/PropertyHelper.java
   */
-  public static String substituteProperty(String value, Properties coreProperties) {
+  public static String substitute(String value, Function<String,String> coreProperties) {
     if (value == null || value.indexOf('$') == -1) {
       return value;
     }
@@ -56,7 +61,7 @@ public class PropertiesUtil {
           propertyName = propertyName.substring(0, colon_index);
         }
         if (coreProperties != null) {
-          fragment = coreProperties.getProperty(propertyName);
+          fragment = coreProperties.apply(propertyName);
         }
         if (fragment == null) {
           fragment = System.getProperty(propertyName, defaultValue);


[lucene-solr] 11/18: merging with master

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

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

commit 5746feef7c6cf029d72e6c88cf25c93c41ef54c6
Author: noble <no...@apache.org>
AuthorDate: Mon Oct 12 11:35:03 2020 +1100

    merging with master
---
 .../java/org/apache/solr/schema/IndexSchema.java   | 26 +---------------------
 .../java/org/apache/solr/common/util/DOMUtil.java  |  2 +-
 2 files changed, 2 insertions(+), 26 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 97d786b..839cff4 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -16,7 +16,6 @@
  */
 package org.apache.solr.schema;
 
-import javax.xml.xpath.XPathExpressionException;
 import java.io.IOException;
 import java.io.Writer;
 import java.lang.invoke.MethodHandles;
@@ -120,13 +119,9 @@ public class IndexSchema {
   public static final String UNIQUE_KEY = "uniqueKey";
   public static final String VERSION = "version";
 
-  private static final String AT = "@";
   private static final String DESTINATION_DYNAMIC_BASE = "destDynamicBase";
-  private static final String SOLR_CORE_NAME = "solr.core.name";
   private static final String SOURCE_DYNAMIC_BASE = "sourceDynamicBase";
   private static final String SOURCE_EXPLICIT_FIELDS = "sourceExplicitFields";
-  private static final String TEXT_FUNCTION = "text()";
-  private static final String XPATH_OR = " | ";
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   protected String resourceName;
@@ -758,7 +753,7 @@ public class IndexSchema {
   /**
    * Loads the copy fields
    */
-  protected synchronized void loadCopyFields(ConfigNode n) throws XPathExpressionException {
+  protected synchronized void loadCopyFields(ConfigNode n) {
 //    String expression = "//" + COPY_FIELD;
 //    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
 
@@ -803,17 +798,6 @@ public class IndexSchema {
     }
   }
 
-  /**
-   * Converts a sequence of path steps into a rooted path, by inserting slashes in front of each step.
-   * @param steps The steps to join with slashes to form a path
-   * @return a rooted path: a leading slash followed by the given steps joined with slashes
-   */
-  private String stepsToPath(String... steps) {
-    StringBuilder builder = new StringBuilder();
-    for (String step : steps) { builder.append(SLASH).append(step); }
-    return builder.toString();
-  }
-
   /** Returns true if the given name has exactly one asterisk either at the start or end of the name */
   protected static boolean isValidFieldGlob(String name) {
     if (name.startsWith("*") || name.endsWith("*")) {
@@ -1978,14 +1962,6 @@ public class IndexSchema {
     throw new SolrException(ErrorCode.SERVER_ERROR, msg);
   }
 
-  protected String getFieldTypeXPathExpressions() {
-    //               /schema/fieldtype | /schema/fieldType | /schema/types/fieldtype | /schema/types/fieldType
-    String expression = stepsToPath(SCHEMA, FIELD_TYPE.toLowerCase(Locale.ROOT)) // backcompat(?)
-            + XPATH_OR + stepsToPath(SCHEMA, FIELD_TYPE)
-            + XPATH_OR + stepsToPath(SCHEMA, TYPES, FIELD_TYPE.toLowerCase(Locale.ROOT))
-            + XPATH_OR + stepsToPath(SCHEMA, TYPES, FIELD_TYPE);
-    return expression;
-  }
 
   /**
    * Helper method that returns <code>true</code> if the {@link #ROOT_FIELD_NAME} uses the exact
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
index 206d84b..2b3219d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/DOMUtil.java
@@ -40,7 +40,7 @@ public class DOMUtil {
 
   public static final String XML_RESERVED_PREFIX = "xml";
 
-  static final Set<String>  NL_TAGS = ImmutableSet.of("str", "int","long","float","double","bool");
+  public static final Set<String>  NL_TAGS = ImmutableSet.of("str", "int","long","float","double","bool");
 
 
   public static Map<String,String> toMap(NamedNodeMap attrs) {


[lucene-solr] 17/18: unused imp[ort

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

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

commit 491f172ed3b858a2f7b1a3a8f9953be172d55f6d
Author: Noble Paul <no...@users.noreply.github.com>
AuthorDate: Mon Oct 12 16:21:56 2020 +1100

    unused imp[ort
---
 .../core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
index a2dd291..cc90983 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/NamedListPluginLoader.java
@@ -21,7 +21,6 @@ import java.util.Map;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.util.DOMUtil;
-import org.w3c.dom.Node;
 
 /**
  *


[lucene-solr] 16/18: merging with master

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

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

commit 6ad7716e8f4ee77ec48f689e9cccdec7e0983056
Author: Noble Paul <no...@gmail.com>
AuthorDate: Mon Oct 12 12:31:01 2020 +1100

    merging with master
---
 solr/core/src/java/org/apache/solr/schema/IndexSchema.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index ef10e6f..7214d19 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -59,7 +59,6 @@ import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.Cache;
-import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.Pair;
 import org.apache.solr.common.util.SimpleOrderedMap;
@@ -74,6 +73,7 @@ import org.apache.solr.search.similarities.SchemaSimilarityFactory;
 import org.apache.solr.uninverting.UninvertingReader;
 import org.apache.solr.util.ConcurrentLRUCache;
 import org.apache.solr.util.DOMConfigNode;
+import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.util.DataConfigNode;
 import org.apache.solr.util.PayloadUtils;
 import org.apache.solr.util.plugin.SolrCoreAware;


[lucene-solr] 12/18: javadocs fix

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

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

commit e49e3a54fe33527aed93010d644360c9ecd66717
Author: noble <no...@apache.org>
AuthorDate: Mon Oct 12 11:38:08 2020 +1100

    javadocs fix
---
 solr/solrj/src/java/org/apache/solr/common/ConfigNode.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
index 44ac4ff..1a67b52 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
@@ -94,7 +94,7 @@ public interface ConfigNode {
     return children(null, Collections.singleton(name));
   }
 
-  /** abortable iterate through child
+  /** abortable iterate through children
    *
    * @param fun consume the node and return true to continue or false to abort
    */


[lucene-solr] 02/18: preload conf

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

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

commit 976608dcdac97f71271df7ea9a58830c6d71eede
Author: noblepaul <no...@gmail.com>
AuthorDate: Fri Sep 4 16:47:00 2020 +1000

    preload conf
---
 .../java/org/apache/solr/core/XmlConfigFile.java   |   8 --
 .../apache/solr/schema/FieldTypePluginLoader.java  |  10 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |  15 ++-
 .../java/org/apache/solr/util/DOMConfigNode.java   |   2 +
 .../java/org/apache/solr/util/DataConfigNode.java  | 106 +++++++++++++++++++++
 .../solr/util/plugin/AbstractPluginLoader.java     |   2 -
 .../java/org/apache/solr/common/ConfigNode.java    |  36 +++++--
 7 files changed, 149 insertions(+), 30 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
index ed28075..9df33b7 100644
--- a/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
+++ b/solr/core/src/java/org/apache/solr/core/XmlConfigFile.java
@@ -44,11 +44,9 @@ import java.util.TreeSet;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.common.ConfigNode;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.XMLErrorLogger;
-import org.apache.solr.util.DOMConfigNode;
 import org.apache.solr.util.DOMUtil;
 import org.apache.solr.util.SystemIdResolver;
 import org.slf4j.Logger;
@@ -75,8 +73,6 @@ public class XmlConfigFile { // formerly simply "Config"
   private final String prefix;
   private final String name;
   private final SolrResourceLoader loader;
-
-  private final ConfigNode rootNode;
   private final Properties substituteProperties;
   private int zkVersion = -1;
 
@@ -157,15 +153,11 @@ public class XmlConfigFile { // formerly simply "Config"
       if (substituteProps != null) {
         DOMUtil.substituteProperties(doc, getSubstituteProperties());
       }
-      rootNode = new DOMConfigNode(doc.getDocumentElement());
     } catch (ParserConfigurationException | SAXException | TransformerException e)  {
       SolrException.log(log, "Exception during parsing file: " + name, e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
     }
   }
-  public ConfigNode rootNode() {
-    return rootNode;
-  }
 
   /*
      * Assert that assertCondition is true.
diff --git a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
index 2d86113..b52809e 100644
--- a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
@@ -80,23 +80,23 @@ public final class FieldTypePluginLoader
     ft.setTypeName(name);
     
     String expression = "./analyzer[@type='query']";
-    ConfigNode anode = node.child(it -> "analyzer".equals(it.name()) && "query".equals(it.attributes().get("type")));
+    ConfigNode anode = node.child(it -> "query".equals(it.attributes().get("type")) , "analyzer");
     Analyzer queryAnalyzer = readAnalyzer(anode);
 
 //    expression = "./analyzer[@type='multiterm']";
-    anode = node.child(it -> "analyzer".equals(it.name()) && "multiterm".equals(it.attributes().get("type"))) ;
+    anode = node.child(it -> "multiterm".equals(it.attributes().get("type") ), "analyzer");
     Analyzer multiAnalyzer = readAnalyzer(anode);
 
     // An analyzer without a type specified, or with type="index"
     expression = "./analyzer[not(@type)] | ./analyzer[@type='index']";
-    anode = node.child(it -> "analyzer".equals(it.name()) &&
-        (it.attributes().get("type") == null || "index".equals(it.attributes().get("type"))));
+    anode = node.child(it ->
+        (it.attributes().get("type") == null || "index".equals(it.attributes().get("type"))), "analyzer");
 //    anode = (Node)xpath.evaluate(expression, node, XPathConstants.NODE);
     Analyzer analyzer = readAnalyzer(anode);
 
     // a custom similarity[Factory]
     expression = "./similarity";
-    anode = node.child(it -> "similarity".equals(it.name()) && "multiterm".equals(it.attributes().get("type"))) ;
+    anode = node.child(it -> "multiterm".equals(it.attributes().get("type")), "similarity") ;
 
     SimilarityFactory simFactory = IndexSchema.readSimilarity(loader, anode);
     if (null != simFactory) {
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index c451176..4a0e4b0 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -74,6 +74,9 @@ import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.similarities.SchemaSimilarityFactory;
 import org.apache.solr.uninverting.UninvertingReader;
 import org.apache.solr.util.ConcurrentLRUCache;
+import org.apache.solr.util.DOMConfigNode;
+import org.apache.solr.util.DOMUtil;
+import org.apache.solr.util.DataConfigNode;
 import org.apache.solr.util.PayloadUtils;
 import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
@@ -144,7 +147,8 @@ public class IndexSchema {
 
   public DynamicField[] getDynamicFields() { return dynamicFields; }
 
-  private final Set<String> FIELDTYPE_KEYS = ImmutableSet.of("fieldtype", "fieldType");
+  private static final Set<String> FIELDTYPE_KEYS = ImmutableSet.of("fieldtype", "fieldType");
+  private static final Set<String> FIELD_KEYS = ImmutableSet.of("dynamicField", "field");
 
   @SuppressWarnings({"unchecked", "rawtypes"})
   protected Cache<String, SchemaField> dynamicFieldCache = new ConcurrentLRUCache(10000, 8000, 9000,100, false,false, null);
@@ -166,6 +170,8 @@ public class IndexSchema {
    * directives that target them.
    */
   protected Map<SchemaField, Integer> copyFieldTargetCounts = new HashMap<>();
+//  static AtomicLong totalSchemaLoadTime = new AtomicLong();
+
 
   /**
    * Constructs a schema using the specified resource name and stream.
@@ -483,7 +489,7 @@ public class IndexSchema {
 //      final XPath xpath = schemaConf.getXPath();
 //      String expression = stepsToPath(SCHEMA, AT + NAME);
 //      Node nd = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
-      ConfigNode rootNode = schemaConf.rootNode();
+      ConfigNode rootNode = new DataConfigNode(new DOMConfigNode(schemaConf.getDocument().getDocumentElement()) , Collections.singleton("similarity")) ;
       name = rootNode.attributes().get("name");
       StringBuilder sb = new StringBuilder();
       // Another case where the initialization from the test harness is different than the "real world"
@@ -508,7 +514,7 @@ public class IndexSchema {
 //      NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
 
       typeLoader.load(solrClassLoader,
-          rootNode.children(it -> FIELDTYPE_KEYS.contains( it.name())));
+          rootNode.children(null, FIELDTYPE_KEYS));
 
       // load the fields
       Map<String,Boolean> explicitRequiredProp = loadFields(rootNode);
@@ -657,8 +663,7 @@ public class IndexSchema {
         + XPATH_OR + stepsToPath(SCHEMA, DYNAMIC_FIELD)
         + XPATH_OR + stepsToPath(SCHEMA, FIELDS, FIELD)
         + XPATH_OR + stepsToPath(SCHEMA, FIELDS, DYNAMIC_FIELD);*/
-    List<ConfigNode> nodes = n.children(it -> "field".equals(it.name()) ||
-        "dynamicField".equals(it.name()));
+    List<ConfigNode> nodes = n.children(null,  FIELD_KEYS);
 
 //    NodeList nodes = (NodeList)xpath.evaluate(expression, document, XPathConstants.NODESET);
 
diff --git a/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java b/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
index 1cccbce..85ca9f7 100644
--- a/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
+++ b/solr/core/src/java/org/apache/solr/util/DOMConfigNode.java
@@ -35,6 +35,7 @@ public class DOMConfigNode implements ConfigNode {
   private final Node node;
   SimpleMap<String> attrs;
 
+
   @Override
   public String name() {
     return node.getNodeName();
@@ -83,4 +84,5 @@ public class DOMConfigNode implements ConfigNode {
       if (Boolean.FALSE == toContinue) break;
     }
   }
+
 }
diff --git a/solr/core/src/java/org/apache/solr/util/DataConfigNode.java b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
new file mode 100644
index 0000000..2567667
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/util/DataConfigNode.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.apache.solr.cluster.api.SimpleMap;
+import org.apache.solr.common.ConfigNode;
+
+public class DataConfigNode implements ConfigNode {
+  final String name;
+  final SimpleMap<String> attributes;
+  private final Map<String, List<ConfigNode>> kids = new HashMap<>();
+  private String textData;
+
+  public DataConfigNode(ConfigNode root, Set<String> ignore) {
+    name = root.name();
+    attributes = root.attributes();
+    textData = root.textValue();
+    if (textData != null) textData = textData.trim();
+    root.forEachChild(it -> {
+      List<ConfigNode> nodes = kids.computeIfAbsent(it.name(),
+          k -> new ArrayList<>());
+      if (ignore != null && ignore.contains(it.name())) {
+        nodes.add(it);
+      } else {
+        nodes.add(new DataConfigNode(it, ignore));
+      }
+      return Boolean.TRUE;
+    });
+
+  }
+
+  @Override
+  public String name() {
+    return name;
+  }
+
+  @Override
+  public String textValue() {
+    return textData;
+  }
+
+  @Override
+  public SimpleMap<String> attributes() {
+    return attributes;
+  }
+
+  @Override
+  public ConfigNode child(String name) {
+    List<ConfigNode> val = kids.get(name);
+    return val == null || val.isEmpty() ? null : val.get(0);
+  }
+
+  @Override
+  public List<ConfigNode> children(String name) {
+    return kids.getOrDefault(name, Collections.emptyList());
+  }
+
+  @Override
+  public List<ConfigNode> children(Predicate<ConfigNode> test, Set<String> set) {
+    List<ConfigNode> result = new ArrayList<>();
+    for (String s : set) {
+      List<ConfigNode> vals = kids.get(s);
+      if (vals != null) {
+        vals.forEach(it -> {
+          if (test == null || test.test(it)) {
+            result.add(it);
+          }
+        });
+      }
+    }
+    return result;
+  }
+
+  @Override
+  public void forEachChild(Function<ConfigNode, Boolean> fun) {
+    kids.forEach((s, configNodes) -> {
+      if (configNodes != null) {
+        configNodes.forEach(fun::apply);
+      }
+    });
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
index 48f07d0..7212e25 100644
--- a/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/util/plugin/AbstractPluginLoader.java
@@ -29,8 +29,6 @@ import org.apache.solr.common.cloud.SolrClassLoader;
 import org.apache.solr.common.util.DOMUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 
 import static org.apache.solr.common.params.CommonParams.NAME;
 
diff --git a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
index 90b0b81..f046440 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ConfigNode.java
@@ -17,7 +17,9 @@
 package org.apache.solr.common;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
@@ -28,26 +30,33 @@ import org.apache.solr.cluster.api.SimpleMap;
  */
 public interface ConfigNode {
 
-  /**Name of the tag
+  /**
+   * Name of the tag
    */
   String name();
 
-  /**Text value of the node
+  /**
+   * Text value of the node
    */
   String textValue();
 
-  /**Attributes
+  /**
+   * Attributes
    */
   SimpleMap<String> attributes();
 
-  /** Child by name
+  /**
+   * Child by name
    */
-  ConfigNode child(String name);
+  default ConfigNode child(String name) {
+    return child(null, name);
+  }
 
-  default ConfigNode child(Predicate<ConfigNode> test) {
+  default ConfigNode child(Predicate<ConfigNode> test, String name) {
     ConfigNode[] result = new ConfigNode[1];
     forEachChild(it -> {
-      if (test.test(it)) {
+      if (name!=null && !name.equals(it.name())) return Boolean.TRUE;
+      if (test == null || test.test(it)) {
         result[0] = it;
         return Boolean.FALSE;
       }
@@ -56,16 +65,23 @@ public interface ConfigNode {
     return result[0];
   }
 
-  default List<ConfigNode> children(Predicate<ConfigNode> test) {
+  default List<ConfigNode> children(Predicate<ConfigNode> test, String... nodeNames) {
+    return children(test, nodeNames == null ? Collections.emptySet() : Set.of(nodeNames));
+  }
+
+  default List<ConfigNode> children(Predicate<ConfigNode> test, Set<String> set) {
     List<ConfigNode> result = new ArrayList<>();
     forEachChild(it -> {
-      if (test.test(it)) result.add(it);
+      if (set != null && !set.isEmpty() && !set.contains(it.name())) return Boolean.TRUE;
+      if (test == null || test.test(it)) result.add(it);
       return Boolean.TRUE;
     });
     return result;
   }
 
-  List<ConfigNode> children(String name);
+  default List<ConfigNode> children(String name) {
+    return children(null, Collections.singleton(name));
+  }
 
   void forEachChild(Function<ConfigNode, Boolean> fun);
 


[lucene-solr] 18/18: Fixing imports

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

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

commit 54c6f222868f611e1b3af8b88531c1bb14089496
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Sat Dec 5 10:04:41 2020 +0530

    Fixing imports
---
 solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
index ebe3b66..d68d16b 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
@@ -46,6 +46,7 @@ import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.PropertiesUtil;
+import org.apache.solr.common.util.Utils;
 import org.apache.solr.logging.LogWatcherConfig;
 import org.apache.solr.metrics.reporters.SolrJmxReporter;
 import org.apache.solr.update.UpdateShardHandlerConfig;


[lucene-solr] 09/18: test failure

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

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

commit 6319582fdd9dd737a10599145f1f80341c3ee9c2
Author: noblepaul <no...@gmail.com>
AuthorDate: Thu Oct 8 22:51:46 2020 +1100

    test failure
---
 .../solr/collection1/conf/bad-schema-daterangefield-instance-options.xml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/solr/core/src/test-files/solr/collection1/conf/bad-schema-daterangefield-instance-options.xml b/solr/core/src/test-files/solr/collection1/conf/bad-schema-daterangefield-instance-options.xml
index 4ee6e39..3b040c2 100644
--- a/solr/core/src/test-files/solr/collection1/conf/bad-schema-daterangefield-instance-options.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/bad-schema-daterangefield-instance-options.xml
@@ -30,6 +30,5 @@
 
   <dynamicField name="*_s" type="string" multiValued="false"/>
   <dynamicField name="*_l" type="plong" multiValued="false"/>
-  <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
 
 </schema>


[lucene-solr] 14/18: merge with master

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

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

commit 12d492ac83a9205cd236ad99801b90286438cff9
Author: Noble Paul <no...@gmail.com>
AuthorDate: Mon Oct 12 12:12:49 2020 +1100

    merge with master
---
 .../src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java      | 2 +-
 .../org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
index 9a8783f..eefc14b 100644
--- a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
+++ b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/MetricsQuery.java
@@ -27,8 +27,8 @@ import net.thisptr.jackson.jq.JsonQuery;
 import net.thisptr.jackson.jq.exception.JsonQueryException;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.common.params.ModifiableSolrParams;
-import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.DOMUtil;
 import org.w3c.dom.Node;
 
 public class MetricsQuery {
diff --git a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java
index 9ce035d..68eda8d 100644
--- a/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java
+++ b/solr/contrib/prometheus-exporter/src/java/org/apache/solr/prometheus/exporter/PrometheusExporterSettings.java
@@ -19,8 +19,8 @@ package org.apache.solr.prometheus.exporter;
 
 import java.util.List;
 
-import org.apache.solr.common.util.DOMUtil;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.DOMUtil;
 import org.w3c.dom.Node;
 
 public class PrometheusExporterSettings {