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

[lucene-solr] branch jira/solr-14749-cluster-singleton updated (56105d0 -> e549845)

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

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


    from 56105d0  move out direct dependency on CLusterSingleton from CustomContainerPlugins
     add 8c41418  SOLR-14576 : Do not use SolrCore as keys in a WeakHashMap (#1586)
     add a2167ae  DOAP changes for release 8.6.3
     add 08e38d3  LUCENE-9488 Create Release Artifacts with Gradle (#1905)
     add 2329423  LUCENE-9577: Move Lucene/Solr Documentation assembly to subproject (#1967)
     add f97208a  LUCENE-9577: fix changed task name
     add 6acb7b4  LUCENE-9577: move the checkBrokenLinks task to the documentation subprojects
     add 178d83d  Update addVersion.py test running to gradle
     add 76a8cc3  Add bugfix version 8.6.3
     add 47a3f59  Merge branch 'master' of https://gitbox.apache.org/repos/asf/lucene-solr
     add 4e0aa0d  LUCENE-9567: JPOSSFF loads built-in stop tags by default (#1961)
     add 5504f37  Sync CHANGES for 8.6.3
     add 2a9d704  Update addBackcompatIndexes.py test running to gradle
     add 9e13d99  Add back-compat indices for 8.6.3
     add 7b1663e  Ref Guide: update for 8.7 release notes; bring notes from 8.6.1 forward to keep branch_8x and master at least sort of in sync
     add 7d37150  Ref Guide: fix typos, formatting issues, etc.
     add 80df6a3  LUCENE-9434: Remove wiki-update step from release
     add ab83b3b  SOLR-14917: Move DOMUtil and PropertiesUtil to SolrJ (#1953)
     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
     new 9ab9d20  SOLR-14944: Remove the "spins" metrics.
     new 2e93f57  Merge branch 'master' into jira/solr-14749-cluster-singleton
     new e549845  SOLR-14749: Move much of the singleton mgmgt into the utility class.

The 3 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 +
 .gitignore                                         |   6 +-
 build.gradle                                       |   4 +-
 dev-tools/doap/lucene.rdf                          |   7 +
 dev-tools/doap/solr.rdf                            |   7 +
 dev-tools/scripts/README.md                        |   2 +-
 dev-tools/scripts/addBackcompatIndexes.py          |   5 +-
 dev-tools/scripts/addVersion.py                    |  23 +-
 dev-tools/scripts/buildAndPushRelease.py           |  25 +-
 dev-tools/scripts/releaseWizard.py                 |   5 +-
 dev-tools/scripts/releaseWizard.yaml               |  15 +-
 dev-tools/scripts/scriptutil.py                    |   6 +-
 dev-tools/scripts/smokeTestRelease.py              |  27 +-
 gradle/ant-compat/artifact-naming.gradle           |   6 -
 gradle/documentation/changes-to-html.gradle        |  31 +-
 .../changes-to-html}/ChangesFancyStyle.css         |   0
 .../changes-to-html}/ChangesFixedWidthStyle.css    |   0
 .../changes-to-html}/ChangesSimpleStyle.css        |   0
 .../documentation/changes-to-html}/changes2html.pl |   0
 gradle/documentation/documentation.gradle          |  89 ++-
 gradle/documentation/markdown.gradle               |  31 +-
 gradle/documentation/render-javadoc.gradle         |   3 +-
 gradle/ide/intellij-idea.gradle                    |  16 -
 gradle/releasing.gradle                            |  55 ++
 .../randomization/policies/solr-tests.policy       |   2 +-
 gradle/testing/randomization/policies/tests.policy |   3 -
 gradle/validation/check-broken-links.gradle        |   6 +-
 gradle/validation/jar-checks.gradle                |   5 +-
 .../owasp-dependency-check/exclusions.xml          |  15 -
 lucene/CHANGES.txt                                 |  40 ++
 lucene/MIGRATE.md                                  |  19 +-
 lucene/analysis/README.txt                         |  18 +-
 .../miscellaneous/DropIfFlaggedFilter.java         |  51 ++
 .../miscellaneous/DropIfFlaggedFilterFactory.java  |  71 ++
 .../miscellaneous/TypeAsSynonymFilter.java         |  37 +-
 .../miscellaneous/TypeAsSynonymFilterFactory.java  |  17 +-
 .../org.apache.lucene.analysis.TokenFilterFactory  |   1 +
 .../miscellaneous/TestDropIfFlaggedFilter.java     |  73 +++
 ...ry.java => TestDropIfFlaggedFilterFactory.java} |  30 +-
 .../miscellaneous/TestTypeAsSynonymFilter.java     | 106 +++
 .../TestTypeAsSynonymFilterFactory.java            |   7 +
 .../ja/JapanesePartOfSpeechStopFilterFactory.java  |  19 +-
 .../TestJapanesePartOfSpeechStopFilterFactory.java |  17 +
 lucene/analysis/phonetic/src/java/overview.html    |   2 +-
 .../lucene/codecs/lucene80/Lucene80Codec.java      |   6 +
 .../lucene/codecs/lucene84/Lucene84Codec.java      |   6 +
 .../lucene/codecs/lucene86/Lucene86Codec.java      |   6 +
 .../lucene/codecs/lucene87/Lucene87Codec.java      |   4 +
 .../org/apache/lucene/codecs/lucene87/package.html |  42 ++
 .../services/org.apache.lucene.codecs.Codec        |   1 +
 .../lucene/index/TestBackwardsCompatibility.java   |   7 +-
 .../org/apache/lucene/index/index.8.6.3-cfs.zip    | Bin 0 -> 16419 bytes
 .../org/apache/lucene/index/index.8.6.3-nocfs.zip  | Bin 0 -> 16428 bytes
 .../test/org/apache/lucene/index/sorted.8.6.3.zip  | Bin 0 -> 141031 bytes
 .../benchmark/byTask/tasks/CreateIndexTask.java    |   4 +-
 .../org/apache/lucene/benchmark/package-info.java  |   2 +-
 lucene/build.gradle                                |   2 +-
 .../lucene/codecs/simpletext/SimpleTextCodec.java  |   7 +
 .../simpletext/SimpleTextFieldInfosFormat.java     |  27 +-
 .../codecs/simpletext/SimpleTextVectorFormat.java  |  51 ++
 .../codecs/simpletext/SimpleTextVectorReader.java  | 304 +++++++++
 .../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     | 283 ++++++++
 .../codecs/lucene50/Lucene50FieldInfosFormat.java  |   4 +-
 .../lucene/codecs/lucene50/package-info.java       |   2 +-
 .../codecs/lucene60/Lucene60FieldInfosFormat.java  |   4 +-
 .../lucene/codecs/lucene60/package-info.java       |   2 +-
 .../lucene/codecs/lucene80/package-info.java       |   2 +-
 .../lucene/codecs/lucene84/package-info.java       |   2 +-
 .../lucene/codecs/lucene86/package-info.java       | 398 +-----------
 .../lucene/codecs/lucene87/package-info.java       | 398 +-----------
 .../Lucene90Codec.java}                            |  38 +-
 .../Lucene90FieldInfosFormat.java}                 |  43 +-
 .../codecs/lucene90/Lucene90VectorFormat.java      |  57 ++
 .../codecs/lucene90/Lucene90VectorReader.java      | 345 ++++++++++
 .../codecs/lucene90/Lucene90VectorWriter.java      | 127 ++++
 .../{lucene87 => lucene90}/package-info.java       |  39 +-
 .../java/org/apache/lucene/document/FieldType.java |  28 +
 .../org/apache/lucene/document/VectorField.java    |  99 +++
 .../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 +
 .../lucene/index/DocumentsWriterFlushQueue.java    |   4 +-
 .../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 +
 .../java/org/apache/lucene/index/IndexWriter.java  |  14 +-
 .../apache/lucene/index/IndexableFieldType.java    |  10 +
 .../org/apache/lucene/index/IndexingChain.java     |  81 ++-
 .../java/org/apache/lucene/index/LeafReader.java   |   4 +
 .../apache/lucene/index/MergeReaderWrapper.java    |   5 +
 .../java/org/apache/lucene/index/MergeState.java   |  11 +
 .../apache/lucene/index/ParallelLeafReader.java    |   7 +
 .../org/apache/lucene/index/ReadersAndUpdates.java |   3 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |  11 +-
 .../org/apache/lucene/index/SegmentMerger.java     | 143 ++--
 .../org/apache/lucene/index/SegmentReader.java     |   6 +
 .../lucene/index/SlowCodecReaderWrapper.java       |  30 +
 .../java/org/apache/lucene/index/VectorValues.java | 276 ++++++++
 .../apache/lucene/index/VectorValuesWriter.java    | 322 +++++++++
 .../org/apache/lucene/search/spans/SpanWeight.java |  21 +-
 .../src/java/org/apache/lucene/util/IOUtils.java   | 147 -----
 .../src/java/org/apache/lucene/util/Version.java   |   7 +
 .../org/apache/lucene/util/automaton/Automata.java |  27 +-
 lucene/core/src/java/overview.html                 |   6 +-
 .../services/org.apache.lucene.codecs.Codec        |   2 +-
 ...tLucene87StoredFieldsFormatHighCompression.java |   7 +-
 .../apache/lucene/index/TestIndexableField.java    |  10 +
 .../lucene/index/TestPendingSoftDeletes.java       |  12 +-
 .../lucene/index/TestSegmentToThreadMapping.java   |   3 +
 .../org/apache/lucene/index/TestVectorValues.java  | 722 +++++++++++++++++++++
 .../lucene/search/spans/TestSpanExplanations.java  |  38 ++
 .../test/org/apache/lucene/util/TestIOUtils.java   | 385 -----------
 .../lucene/util/automaton/TestAutomaton.java       |  36 +
 .../test/org/apache/lucene/util/fst/TestFSTs.java  |   2 +-
 lucene/demo/src/java/overview.html                 |   2 +-
 .../documentation/build.gradle                     |   7 +-
 .../src/assets}/lucene_green_300.gif               | Bin
 .../src/markdown}/index.template.md                |   0
 .../search/highlight/LimitTokenOffsetFilter.java   |   2 +-
 .../search/highlight/TermVectorLeafReader.java     |   8 +-
 lucene/licenses/junit-4.12.jar.sha1                |   1 -
 lucene/licenses/junit-4.13.1.jar.sha1              |   1 +
 lucene/luke/build.gradle                           |  33 +-
 .../apache/lucene/index/memory/MemoryIndex.java    |   9 +-
 lucene/packaging/build.gradle                      | 168 +++++
 lucene/queryparser/build.gradle                    |   2 -
 lucene/site/xsl/index.xsl                          | 117 ----
 .../search/suggest/document/TestSuggestField.java  |   4 +-
 .../lucene/analysis/BaseTokenStreamTestCase.java   | 122 ++--
 .../lucene/index/BaseIndexFileFormatTestCase.java  |   3 +-
 .../apache/lucene/index/MismatchedLeafReader.java  |   2 +
 .../apache/lucene/index/RandomPostingsTester.java  |   4 +-
 .../java/org/apache/lucene/search/QueryUtils.java  |   6 +
 .../org/apache/lucene/util/LuceneTestCase.java     |  13 -
 .../util/TestRuleSetupAndRestoreClassEnv.java      |   6 +-
 .../src/java/org/apache/lucene/util/TestUtil.java  |   9 +-
 lucene/version.properties                          |  10 -
 settings.gradle                                    |   3 +
 solr/CHANGES.txt                                   |  65 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |   2 +-
 .../exporter/PrometheusExporterSettings.java       |   2 +-
 .../prometheus/PrometheusExporterTestBase.java     |   1 +
 .../apache/solr/api/CustomContainerPlugins.java    |  49 +-
 .../org/apache/solr/cloud/CloudDescriptor.java     |   2 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |  47 +-
 .../apache/solr/cloud/api/collections/Assign.java  |  72 +-
 .../OverseerCollectionMessageHandler.java          |   3 -
 .../solr/cloud/api/collections/SplitShardCmd.java  |   9 +-
 .../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/core/ClusterSingletons.java    | 162 +++++
 .../java/org/apache/solr/core/CoreContainer.java   |  71 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |   2 +-
 .../java/org/apache/solr/core/MetricsConfig.java   |  71 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |   2 +-
 .../src/java/org/apache/solr/core/SolrConfig.java  |   2 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   8 -
 .../java/org/apache/solr/core/SolrXmlConfig.java   |  17 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |   2 +-
 .../apache/solr/handler/ReplicationHandler.java    |  63 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |  33 +-
 .../solr/handler/admin/CollectionsHandler.java     |  50 --
 .../solr/handler/admin/ConfigSetsHandler.java      |  62 +-
 .../solr/handler/admin/CoreAdminOperation.java     |   2 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |  18 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |  15 +-
 .../handler/component/QueryElevationComponent.java |   4 +-
 .../solr/index/SlowCompositeReaderWrapper.java     |   6 +
 .../org/apache/solr/metrics/MetricSuppliers.java   | 267 ++++++--
 .../org/apache/solr/metrics/SolrMetricManager.java |  14 +-
 .../response/transform/ChildDocTransformer.java    |  11 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |   4 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |   2 +-
 .../java/org/apache/solr/schema/SchemaField.java   |  11 +
 .../java/org/apache/solr/search/CacheConfig.java   |   4 +-
 .../solr/search/CollapsingQParserPlugin.java       |   2 +
 .../src/java/org/apache/solr/search/Insanity.java  |   3 +-
 .../solr/servlet/cache/HttpCacheHeaderUtil.java    |   7 +-
 .../apache/solr/uninverting/UninvertingReader.java |   3 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |  30 +-
 .../src/java/org/apache/solr/util/PackageTool.java |  12 +-
 .../src/java/org/apache/solr/util/SolrCLI.java     |   1 +
 .../solr/util/plugin/AbstractPluginLoader.java     |   2 +-
 .../apache/solr/util/plugin/MapPluginLoader.java   |   2 +-
 .../solr/util/plugin/NamedListPluginLoader.java    |   2 +-
 .../src/test-files/solr/solr-metricsconfig.xml     |   2 +-
 solr/core/src/test-files/solr/solr.xml             |   2 +
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |   1 +
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |   1 +
 .../MetricsHistoryWithAuthIntegrationTest.java     |   2 +-
 .../test/org/apache/solr/cloud/OverseerTest.java   |   3 +-
 .../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   | 190 +++++-
 .../org/apache/solr/cloud/TestTlogReplica.java     |   1 +
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java | 244 -------
 .../org/apache/solr/cloud/rule/RuleEngineTest.java | 323 ---------
 .../test/org/apache/solr/cloud/rule/RulesTest.java | 328 ----------
 .../org/apache/solr/core/TestCustomStream.java     |  19 -
 .../solr/handler/admin/AdminHandlersProxyTest.java |   1 +
 .../handler/admin/MetricsHistoryHandlerTest.java   |   1 +
 .../solr/handler/admin/TestCollectionAPIs.java     |   4 -
 .../org/apache/solr/metrics/MetricsConfigTest.java |  12 +
 .../solr/metrics/MetricsDisabledCloudTest.java     |  72 ++
 .../solr/metrics/SolrMetricsIntegrationTest.java   |  13 -
 .../TestChildDocTransformerHierarchy.java          |  47 ++
 .../solr/schema/TestUseDocValuesAsStored.java      |   2 +-
 .../test/org/apache/solr/search/TestDocSet.java    |   6 +
 .../solr/search/stats/TestDefaultStatsCache.java   |   1 +
 solr/dev-docs/overseer/overseer.adoc               |   7 +-
 {lucene => solr/documentation}/build.gradle        |   6 +-
 .../images => documentation/src/assets}/solr.svg   |   0
 .../src/markdown}/SYSTEM_REQUIREMENTS.md           |   0
 .../src/markdown}/index.template.md                |   2 +-
 .../src/markdown}/online-link.template.md          |   4 +-
 solr/licenses/junit-4.12.jar.sha1                  |   1 -
 solr/licenses/junit-4.13.1.jar.sha1                |   1 +
 solr/packaging/build.gradle                        |  20 +-
 solr/server/etc/security.policy                    |   2 +-
 solr/server/solr/solr.xml                          |   2 +
 solr/site/assets/images/favicon.ico                | Bin 3262 -> 0 bytes
 .../images/quickstart-admin-ui-facet-options.png   | Bin 10646 -> 0 bytes
 .../site/assets/images/quickstart-query-screen.png | Bin 278938 -> 0 bytes
 solr/site/assets/images/quickstart-range-facet.png | Bin 21592 -> 0 bytes
 solr/site/assets/images/quickstart-solrcloud.png   | Bin 50418 -> 0 bytes
 solr/site/assets/images/quickstart-spatial.png     | Bin 229121 -> 0 bytes
 solr/site/index.xsl                                | 112 ----
 solr/site/online-link.xsl                          |  69 --
 solr/solr-ref-guide/build.gradle                   | 280 ++++----
 solr/solr-ref-guide/src/_config.yml.template       |   2 +-
 solr/solr-ref-guide/src/_includes/head.html        |   5 +-
 .../authentication-and-authorization-plugins.adoc  |   2 +-
 .../src/basic-authentication-plugin.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 |   6 -
 .../src/common-query-parameters.adoc               |   2 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |  11 +-
 solr/solr-ref-guide/src/configuration-apis.adoc    |   5 +-
 ...datadir-and-directoryfactory-in-solrconfig.adoc |   6 +-
 .../src/documents-fields-and-schema-design.adoc    |   2 +
 solr/solr-ref-guide/src/exporting-result-sets.adoc |   2 +-
 solr/solr-ref-guide/src/faceting.adoc              |   2 +-
 .../src/field-types-included-with-solr.adoc        |   6 +-
 solr/solr-ref-guide/src/filter-descriptions.adoc   |   4 +-
 .../src/hadoop-authentication-plugin.adoc          |   2 +-
 solr/solr-ref-guide/src/highlighting.adoc          |   2 +-
 .../src/implicit-requesthandlers.adoc              |  58 +-
 solr/solr-ref-guide/src/index-replication.adoc     |   2 +-
 .../src/indexconfig-in-solrconfig.adoc             |  17 +-
 .../src/indexing-nested-documents.adoc             |  10 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |   2 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |  50 +-
 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               |   2 +-
 solr/solr-ref-guide/src/math-expressions.adoc      |   3 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |   9 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |  15 +
 solr/solr-ref-guide/src/other-parsers.adoc         |  26 +-
 solr/solr-ref-guide/src/other-schema-elements.adoc |   6 +-
 solr/solr-ref-guide/src/query-re-ranking.adoc      |   8 +-
 .../src/query-syntax-and-parsing.adoc              |   2 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |   4 +-
 .../src/rule-based-replica-placement.adoc          | 177 -----
 solr/solr-ref-guide/src/schemaless-mode.adoc       |  16 +-
 .../src/searching-nested-documents.adoc            |  42 +-
 .../src/shards-and-indexing-data-in-solrcloud.adoc |   6 +-
 solr/solr-ref-guide/src/solr-field-types.adoc      |   2 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |  94 ++-
 ...solrcloud-query-routing-and-read-tolerance.adoc |   2 +-
 solr/solr-ref-guide/src/solrcloud.adoc             |   5 +-
 solr/solr-ref-guide/src/statistics.adoc            |   4 +-
 .../src/stream-decorator-reference.adoc            |   4 +-
 .../src/stream-source-reference.adoc               |   2 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |   8 +-
 .../src/taking-solr-to-production.adoc             |  10 +-
 .../src/the-query-elevation-component.adoc         |   9 +-
 solr/solr-ref-guide/src/the-terms-component.adoc   |   2 +-
 .../src/update-request-processors.adoc             | 106 +--
 .../src/updating-parts-of-documents.adoc           |  12 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |  22 +-
 solr/solr-ref-guide/src/v2-api.adoc                |  10 -
 solr/solr-ref-guide/src/vectorization.adoc         |   8 +-
 .../src/zookeeper-access-control.adoc              |   6 +-
 solr/solr-ref-guide/tools/BuildNavDataFiles.java   |   1 -
 .../solr-ref-guide/tools/CheckLinksAndAnchors.java |  11 -
 .../solrj/impl/SolrClientNodeStateProvider.java    |  50 +-
 .../solrj/request/CollectionAdminRequest.java      |   7 -
 .../apache/solr/common/cloud/DocCollection.java    |   6 -
 .../apache/solr/common/params/ConfigSetParams.java |   1 +
 .../java/org/apache/solr/common}/util/DOMUtil.java |   4 +-
 .../apache/solr/common}/util/PropertiesUtil.java   |   2 +-
 .../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       |   1 +
 .../solrj/impl/CloudSolrClientRetryTest.java       |   1 +
 .../client/solrj/impl/CloudSolrClientTest.java     |   1 +
 .../org/apache/solr/common}/util/DOMUtilTest.java  |   5 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   3 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |  12 +
 solr/webapp/web/css/angular/collections.css        |   5 +
 solr/webapp/web/index.html                         |   2 +-
 .../web/js/angular/controllers/collections.js      |   7 +-
 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/partials/collections.html          |  22 +-
 versions.lock                                      |   2 +-
 versions.props                                     |   2 +-
 329 files changed, 6567 insertions(+), 5541 deletions(-)
 create mode 100644 .dir-locals.el
 rename {lucene/site/changes => gradle/documentation/changes-to-html}/ChangesFancyStyle.css (100%)
 rename {lucene/site/changes => gradle/documentation/changes-to-html}/ChangesFixedWidthStyle.css (100%)
 rename {lucene/site/changes => gradle/documentation/changes-to-html}/ChangesSimpleStyle.css (100%)
 rename {lucene/site/changes => gradle/documentation/changes-to-html}/changes2html.pl (100%)
 mode change 100755 => 100644
 create mode 100644 gradle/releasing.gradle
 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/test/org/apache/lucene/analysis/miscellaneous/TestDropIfFlaggedFilter.java
 copy lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/{TestTypeAsSynonymFilterFactory.java => TestDropIfFlaggedFilterFactory.java} (55%)
 create mode 100644 lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestTypeAsSynonymFilter.java
 copy lucene/{core => backward-codecs}/src/java/org/apache/lucene/codecs/lucene87/Lucene87Codec.java (97%)
 create mode 100644 lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene87/package.html
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.8.6.3-cfs.zip
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/index.8.6.3-nocfs.zip
 create mode 100644 lucene/backward-codecs/src/test/org/apache/lucene/index/sorted.8.6.3.zip
 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
 rename lucene/core/src/java/org/apache/lucene/codecs/{lucene87/Lucene87Codec.java => lucene90/Lucene90Codec.java} (86%)
 copy lucene/core/src/java/org/apache/lucene/codecs/{lucene60/Lucene60FieldInfosFormat.java => lucene90/Lucene90FieldInfosFormat.java} (86%)
 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
 copy lucene/core/src/java/org/apache/lucene/codecs/{lucene87 => lucene90}/package-info.java (93%)
 create mode 100644 lucene/core/src/java/org/apache/lucene/document/VectorField.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/test/org/apache/lucene/index/TestVectorValues.java
 rename solr/core/src/java/org/apache/solr/cloud/rule/package-info.java => lucene/documentation/build.gradle (81%)
 rename lucene/{site/html => documentation/src/assets}/lucene_green_300.gif (100%)
 rename lucene/{site/xsl => documentation/src/markdown}/index.template.md (100%)
 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/packaging/build.gradle
 delete mode 100644 lucene/site/xsl/index.xsl
 delete mode 100644 lucene/version.properties
 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
 create mode 100644 solr/core/src/java/org/apache/solr/core/ClusterSingletons.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/metrics/MetricsDisabledCloudTest.java
 copy {lucene => solr/documentation}/build.gradle (89%)
 rename solr/{site/assets/images => documentation/src/assets}/solr.svg (100%)
 rename solr/{site => documentation/src/markdown}/SYSTEM_REQUIREMENTS.md (100%)
 rename solr/{site => documentation/src/markdown}/index.template.md (93%)
 rename solr/{site => documentation/src/markdown}/online-link.template.md (76%)
 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/site/assets/images/favicon.ico
 delete mode 100644 solr/site/assets/images/quickstart-admin-ui-facet-options.png
 delete mode 100644 solr/site/assets/images/quickstart-query-screen.png
 delete mode 100644 solr/site/assets/images/quickstart-range-facet.png
 delete mode 100644 solr/site/assets/images/quickstart-solrcloud.png
 delete mode 100644 solr/site/assets/images/quickstart-spatial.png
 delete mode 100644 solr/site/index.xsl
 delete mode 100644 solr/site/online-link.xsl
 delete mode 100644 solr/solr-ref-guide/src/blob-store-api.adoc
 delete mode 100644 solr/solr-ref-guide/src/rule-based-replica-placement.adoc
 rename solr/{core/src/java/org/apache/solr => solrj/src/java/org/apache/solr/common}/util/DOMUtil.java (99%)
 rename solr/{core/src/java/org/apache/solr => solrj/src/java/org/apache/solr/common}/util/PropertiesUtil.java (99%)
 rename solr/{core/src/test/org/apache/solr => solrj/src/test/org/apache/solr/common}/util/DOMUtilTest.java (95%)
 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] 02/03: Merge branch 'master' into jira/solr-14749-cluster-singleton

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

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

commit 2e93f57e8014f3132ff80e15bd5f588dea966707
Merge: 56105d0 9ab9d20
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Mon Oct 19 11:55:01 2020 +0200

    Merge branch 'master' into jira/solr-14749-cluster-singleton

 .dir-locals.el                                     |   3 +
 .gitignore                                         |   6 +-
 build.gradle                                       |   4 +-
 dev-tools/doap/lucene.rdf                          |   7 +
 dev-tools/doap/solr.rdf                            |   7 +
 dev-tools/scripts/README.md                        |   2 +-
 dev-tools/scripts/addBackcompatIndexes.py          |   5 +-
 dev-tools/scripts/addVersion.py                    |  23 +-
 dev-tools/scripts/buildAndPushRelease.py           |  25 +-
 dev-tools/scripts/releaseWizard.py                 |   5 +-
 dev-tools/scripts/releaseWizard.yaml               |  15 +-
 dev-tools/scripts/scriptutil.py                    |   6 +-
 dev-tools/scripts/smokeTestRelease.py              |  27 +-
 gradle/ant-compat/artifact-naming.gradle           |   6 -
 gradle/documentation/changes-to-html.gradle        |  31 +-
 .../changes-to-html}/ChangesFancyStyle.css         |   0
 .../changes-to-html}/ChangesFixedWidthStyle.css    |   0
 .../changes-to-html}/ChangesSimpleStyle.css        |   0
 .../documentation/changes-to-html}/changes2html.pl |   0
 gradle/documentation/documentation.gradle          |  89 ++-
 gradle/documentation/markdown.gradle               |  31 +-
 gradle/documentation/render-javadoc.gradle         |   3 +-
 gradle/ide/intellij-idea.gradle                    |  16 -
 gradle/releasing.gradle                            |  55 ++
 .../randomization/policies/solr-tests.policy       |   2 +-
 gradle/testing/randomization/policies/tests.policy |   3 -
 gradle/validation/check-broken-links.gradle        |   6 +-
 gradle/validation/jar-checks.gradle                |   5 +-
 .../owasp-dependency-check/exclusions.xml          |  15 -
 lucene/CHANGES.txt                                 |  40 ++
 lucene/MIGRATE.md                                  |  19 +-
 lucene/analysis/README.txt                         |  18 +-
 .../miscellaneous/DropIfFlaggedFilter.java         |  51 ++
 .../miscellaneous/DropIfFlaggedFilterFactory.java  |  71 ++
 .../miscellaneous/TypeAsSynonymFilter.java         |  37 +-
 .../miscellaneous/TypeAsSynonymFilterFactory.java  |  17 +-
 .../org.apache.lucene.analysis.TokenFilterFactory  |   1 +
 .../miscellaneous/TestDropIfFlaggedFilter.java     |  73 +++
 ...ry.java => TestDropIfFlaggedFilterFactory.java} |  30 +-
 .../miscellaneous/TestTypeAsSynonymFilter.java     | 106 +++
 .../TestTypeAsSynonymFilterFactory.java            |   7 +
 .../ja/JapanesePartOfSpeechStopFilterFactory.java  |  19 +-
 .../TestJapanesePartOfSpeechStopFilterFactory.java |  17 +
 lucene/analysis/phonetic/src/java/overview.html    |   2 +-
 .../lucene/codecs/lucene80/Lucene80Codec.java      |   6 +
 .../lucene/codecs/lucene84/Lucene84Codec.java      |   6 +
 .../lucene/codecs/lucene86/Lucene86Codec.java      |   6 +
 .../lucene/codecs/lucene87/Lucene87Codec.java      |   4 +
 .../org/apache/lucene/codecs/lucene87/package.html |  42 ++
 .../services/org.apache.lucene.codecs.Codec        |   1 +
 .../lucene/index/TestBackwardsCompatibility.java   |   7 +-
 .../org/apache/lucene/index/index.8.6.3-cfs.zip    | Bin 0 -> 16419 bytes
 .../org/apache/lucene/index/index.8.6.3-nocfs.zip  | Bin 0 -> 16428 bytes
 .../test/org/apache/lucene/index/sorted.8.6.3.zip  | Bin 0 -> 141031 bytes
 .../benchmark/byTask/tasks/CreateIndexTask.java    |   4 +-
 .../org/apache/lucene/benchmark/package-info.java  |   2 +-
 lucene/build.gradle                                |   2 +-
 .../lucene/codecs/simpletext/SimpleTextCodec.java  |   7 +
 .../simpletext/SimpleTextFieldInfosFormat.java     |  27 +-
 .../codecs/simpletext/SimpleTextVectorFormat.java  |  51 ++
 .../codecs/simpletext/SimpleTextVectorReader.java  | 304 +++++++++
 .../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     | 283 ++++++++
 .../codecs/lucene50/Lucene50FieldInfosFormat.java  |   4 +-
 .../lucene/codecs/lucene50/package-info.java       |   2 +-
 .../codecs/lucene60/Lucene60FieldInfosFormat.java  |   4 +-
 .../lucene/codecs/lucene60/package-info.java       |   2 +-
 .../lucene/codecs/lucene80/package-info.java       |   2 +-
 .../lucene/codecs/lucene84/package-info.java       |   2 +-
 .../lucene/codecs/lucene86/package-info.java       | 398 +-----------
 .../lucene/codecs/lucene87/package-info.java       | 398 +-----------
 .../Lucene90Codec.java}                            |  38 +-
 .../Lucene90FieldInfosFormat.java}                 |  43 +-
 .../codecs/lucene90/Lucene90VectorFormat.java      |  57 ++
 .../codecs/lucene90/Lucene90VectorReader.java      | 345 ++++++++++
 .../codecs/lucene90/Lucene90VectorWriter.java      | 127 ++++
 .../{lucene87 => lucene90}/package-info.java       |  39 +-
 .../java/org/apache/lucene/document/FieldType.java |  28 +
 .../org/apache/lucene/document/VectorField.java    |  99 +++
 .../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 +
 .../lucene/index/DocumentsWriterFlushQueue.java    |   4 +-
 .../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 +
 .../java/org/apache/lucene/index/IndexWriter.java  |  14 +-
 .../apache/lucene/index/IndexableFieldType.java    |  10 +
 .../org/apache/lucene/index/IndexingChain.java     |  81 ++-
 .../java/org/apache/lucene/index/LeafReader.java   |   4 +
 .../apache/lucene/index/MergeReaderWrapper.java    |   5 +
 .../java/org/apache/lucene/index/MergeState.java   |  11 +
 .../apache/lucene/index/ParallelLeafReader.java    |   7 +
 .../org/apache/lucene/index/ReadersAndUpdates.java |   3 +-
 .../apache/lucene/index/SegmentCoreReaders.java    |  11 +-
 .../org/apache/lucene/index/SegmentMerger.java     | 143 ++--
 .../org/apache/lucene/index/SegmentReader.java     |   6 +
 .../lucene/index/SlowCodecReaderWrapper.java       |  30 +
 .../java/org/apache/lucene/index/VectorValues.java | 276 ++++++++
 .../apache/lucene/index/VectorValuesWriter.java    | 322 +++++++++
 .../org/apache/lucene/search/spans/SpanWeight.java |  21 +-
 .../src/java/org/apache/lucene/util/IOUtils.java   | 147 -----
 .../src/java/org/apache/lucene/util/Version.java   |   7 +
 .../org/apache/lucene/util/automaton/Automata.java |  27 +-
 lucene/core/src/java/overview.html                 |   6 +-
 .../services/org.apache.lucene.codecs.Codec        |   2 +-
 ...tLucene87StoredFieldsFormatHighCompression.java |   7 +-
 .../apache/lucene/index/TestIndexableField.java    |  10 +
 .../lucene/index/TestPendingSoftDeletes.java       |  12 +-
 .../lucene/index/TestSegmentToThreadMapping.java   |   3 +
 .../org/apache/lucene/index/TestVectorValues.java  | 722 +++++++++++++++++++++
 .../lucene/search/spans/TestSpanExplanations.java  |  38 ++
 .../test/org/apache/lucene/util/TestIOUtils.java   | 385 -----------
 .../lucene/util/automaton/TestAutomaton.java       |  36 +
 .../test/org/apache/lucene/util/fst/TestFSTs.java  |   2 +-
 lucene/demo/src/java/overview.html                 |   2 +-
 .../documentation/build.gradle                     |   7 +-
 .../src/assets}/lucene_green_300.gif               | Bin
 .../src/markdown}/index.template.md                |   0
 .../search/highlight/LimitTokenOffsetFilter.java   |   2 +-
 .../search/highlight/TermVectorLeafReader.java     |   8 +-
 lucene/licenses/junit-4.12.jar.sha1                |   1 -
 lucene/licenses/junit-4.13.1.jar.sha1              |   1 +
 lucene/luke/build.gradle                           |  33 +-
 .../apache/lucene/index/memory/MemoryIndex.java    |   9 +-
 lucene/packaging/build.gradle                      | 168 +++++
 lucene/queryparser/build.gradle                    |   2 -
 lucene/site/xsl/index.xsl                          | 117 ----
 .../search/suggest/document/TestSuggestField.java  |   4 +-
 .../lucene/analysis/BaseTokenStreamTestCase.java   | 122 ++--
 .../lucene/index/BaseIndexFileFormatTestCase.java  |   3 +-
 .../apache/lucene/index/MismatchedLeafReader.java  |   2 +
 .../apache/lucene/index/RandomPostingsTester.java  |   4 +-
 .../java/org/apache/lucene/search/QueryUtils.java  |   6 +
 .../org/apache/lucene/util/LuceneTestCase.java     |  13 -
 .../util/TestRuleSetupAndRestoreClassEnv.java      |   6 +-
 .../src/java/org/apache/lucene/util/TestUtil.java  |   9 +-
 lucene/version.properties                          |  10 -
 settings.gradle                                    |   3 +
 solr/CHANGES.txt                                   |  65 +-
 .../solr/prometheus/exporter/MetricsQuery.java     |   2 +-
 .../exporter/PrometheusExporterSettings.java       |   2 +-
 .../prometheus/PrometheusExporterTestBase.java     |   1 +
 .../org/apache/solr/cloud/CloudDescriptor.java     |   2 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |   1 -
 .../apache/solr/cloud/api/collections/Assign.java  |  72 +-
 .../OverseerCollectionMessageHandler.java          |   3 -
 .../solr/cloud/api/collections/SplitShardCmd.java  |   9 +-
 .../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 --
 .../java/org/apache/solr/core/CoreContainer.java   |  30 +-
 .../java/org/apache/solr/core/CoreDescriptor.java  |   2 +-
 .../java/org/apache/solr/core/MetricsConfig.java   |  71 +-
 .../src/java/org/apache/solr/core/PluginInfo.java  |   2 +-
 .../src/java/org/apache/solr/core/SolrConfig.java  |   2 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |   8 -
 .../java/org/apache/solr/core/SolrXmlConfig.java   |  17 +-
 .../java/org/apache/solr/core/XmlConfigFile.java   |   2 +-
 .../apache/solr/handler/ReplicationHandler.java    |  63 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |  33 +-
 .../solr/handler/admin/CollectionsHandler.java     |  50 --
 .../solr/handler/admin/ConfigSetsHandler.java      |  62 +-
 .../solr/handler/admin/CoreAdminOperation.java     |   2 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |  18 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |  15 +-
 .../handler/component/QueryElevationComponent.java |   4 +-
 .../solr/index/SlowCompositeReaderWrapper.java     |   6 +
 .../org/apache/solr/metrics/MetricSuppliers.java   | 267 ++++++--
 .../org/apache/solr/metrics/SolrMetricManager.java |  14 +-
 .../response/transform/ChildDocTransformer.java    |  11 +-
 .../apache/solr/schema/FieldTypePluginLoader.java  |   4 +-
 .../java/org/apache/solr/schema/IndexSchema.java   |   2 +-
 .../java/org/apache/solr/schema/SchemaField.java   |  11 +
 .../java/org/apache/solr/search/CacheConfig.java   |   4 +-
 .../solr/search/CollapsingQParserPlugin.java       |   2 +
 .../src/java/org/apache/solr/search/Insanity.java  |   3 +-
 .../solr/servlet/cache/HttpCacheHeaderUtil.java    |   7 +-
 .../apache/solr/uninverting/UninvertingReader.java |   3 +-
 .../src/java/org/apache/solr/update/PeerSync.java  |  30 +-
 .../src/java/org/apache/solr/util/PackageTool.java |  12 +-
 .../src/java/org/apache/solr/util/SolrCLI.java     |   1 +
 .../solr/util/plugin/AbstractPluginLoader.java     |   2 +-
 .../apache/solr/util/plugin/MapPluginLoader.java   |   2 +-
 .../solr/util/plugin/NamedListPluginLoader.java    |   2 +-
 .../src/test-files/solr/solr-metricsconfig.xml     |   2 +-
 solr/core/src/test-files/solr/solr.xml             |   2 +
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |   1 +
 .../solr/cloud/MetricsHistoryIntegrationTest.java  |   1 +
 .../MetricsHistoryWithAuthIntegrationTest.java     |   2 +-
 .../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   | 190 +++++-
 .../org/apache/solr/cloud/TestTlogReplica.java     |   1 +
 .../apache/solr/cloud/rule/ImplicitSnitchTest.java | 244 -------
 .../org/apache/solr/cloud/rule/RuleEngineTest.java | 323 ---------
 .../test/org/apache/solr/cloud/rule/RulesTest.java | 328 ----------
 .../org/apache/solr/core/TestCustomStream.java     |  19 -
 .../solr/handler/admin/AdminHandlersProxyTest.java |   1 +
 .../handler/admin/MetricsHistoryHandlerTest.java   |   1 +
 .../solr/handler/admin/TestCollectionAPIs.java     |   4 -
 .../org/apache/solr/metrics/MetricsConfigTest.java |  12 +
 .../solr/metrics/MetricsDisabledCloudTest.java     |  72 ++
 .../solr/metrics/SolrMetricsIntegrationTest.java   |  13 -
 .../TestChildDocTransformerHierarchy.java          |  47 ++
 .../solr/schema/TestUseDocValuesAsStored.java      |   2 +-
 .../test/org/apache/solr/search/TestDocSet.java    |   6 +
 .../solr/search/stats/TestDefaultStatsCache.java   |   1 +
 solr/dev-docs/overseer/overseer.adoc               |   7 +-
 {lucene => solr/documentation}/build.gradle        |   6 +-
 .../images => documentation/src/assets}/solr.svg   |   0
 .../src/markdown}/SYSTEM_REQUIREMENTS.md           |   0
 .../src/markdown}/index.template.md                |   2 +-
 .../src/markdown}/online-link.template.md          |   4 +-
 solr/licenses/junit-4.12.jar.sha1                  |   1 -
 solr/licenses/junit-4.13.1.jar.sha1                |   1 +
 solr/packaging/build.gradle                        |  20 +-
 solr/server/etc/security.policy                    |   2 +-
 solr/server/solr/solr.xml                          |   2 +
 solr/site/assets/images/favicon.ico                | Bin 3262 -> 0 bytes
 .../images/quickstart-admin-ui-facet-options.png   | Bin 10646 -> 0 bytes
 .../site/assets/images/quickstart-query-screen.png | Bin 278938 -> 0 bytes
 solr/site/assets/images/quickstart-range-facet.png | Bin 21592 -> 0 bytes
 solr/site/assets/images/quickstart-solrcloud.png   | Bin 50418 -> 0 bytes
 solr/site/assets/images/quickstart-spatial.png     | Bin 229121 -> 0 bytes
 solr/site/index.xsl                                | 112 ----
 solr/site/online-link.xsl                          |  69 --
 solr/solr-ref-guide/build.gradle                   | 280 ++++----
 solr/solr-ref-guide/src/_config.yml.template       |   2 +-
 solr/solr-ref-guide/src/_includes/head.html        |   5 +-
 .../authentication-and-authorization-plugins.adoc  |   2 +-
 .../src/basic-authentication-plugin.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 |   6 -
 .../src/common-query-parameters.adoc               |   2 +-
 solr/solr-ref-guide/src/configsets-api.adoc        |  11 +-
 solr/solr-ref-guide/src/configuration-apis.adoc    |   5 +-
 ...datadir-and-directoryfactory-in-solrconfig.adoc |   6 +-
 .../src/documents-fields-and-schema-design.adoc    |   2 +
 solr/solr-ref-guide/src/exporting-result-sets.adoc |   2 +-
 solr/solr-ref-guide/src/faceting.adoc              |   2 +-
 .../src/field-types-included-with-solr.adoc        |   6 +-
 solr/solr-ref-guide/src/filter-descriptions.adoc   |   4 +-
 .../src/hadoop-authentication-plugin.adoc          |   2 +-
 solr/solr-ref-guide/src/highlighting.adoc          |   2 +-
 .../src/implicit-requesthandlers.adoc              |  58 +-
 solr/solr-ref-guide/src/index-replication.adoc     |   2 +-
 .../src/indexconfig-in-solrconfig.adoc             |  17 +-
 .../src/indexing-nested-documents.adoc             |  10 +-
 solr/solr-ref-guide/src/language-analysis.adoc     |   2 +-
 solr/solr-ref-guide/src/learning-to-rank.adoc      |  50 +-
 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               |   2 +-
 solr/solr-ref-guide/src/math-expressions.adoc      |   3 +-
 solr/solr-ref-guide/src/metrics-history.adoc       |   9 +-
 solr/solr-ref-guide/src/metrics-reporting.adoc     |  15 +
 solr/solr-ref-guide/src/other-parsers.adoc         |  26 +-
 solr/solr-ref-guide/src/other-schema-elements.adoc |   6 +-
 solr/solr-ref-guide/src/query-re-ranking.adoc      |   8 +-
 .../src/query-syntax-and-parsing.adoc              |   2 +-
 ...andlers-and-searchcomponents-in-solrconfig.adoc |   4 +-
 .../src/rule-based-replica-placement.adoc          | 177 -----
 solr/solr-ref-guide/src/schemaless-mode.adoc       |  16 +-
 .../src/searching-nested-documents.adoc            |  42 +-
 .../src/shards-and-indexing-data-in-solrcloud.adoc |   6 +-
 solr/solr-ref-guide/src/solr-field-types.adoc      |   2 +-
 solr/solr-ref-guide/src/solr-upgrade-notes.adoc    |  94 ++-
 ...solrcloud-query-routing-and-read-tolerance.adoc |   2 +-
 solr/solr-ref-guide/src/solrcloud.adoc             |   5 +-
 solr/solr-ref-guide/src/statistics.adoc            |   4 +-
 .../src/stream-decorator-reference.adoc            |   4 +-
 .../src/stream-source-reference.adoc               |   2 +-
 solr/solr-ref-guide/src/streaming-expressions.adoc |   8 +-
 .../src/taking-solr-to-production.adoc             |  10 +-
 .../src/the-query-elevation-component.adoc         |   9 +-
 solr/solr-ref-guide/src/the-terms-component.adoc   |   2 +-
 .../src/update-request-processors.adoc             | 106 +--
 .../src/updating-parts-of-documents.adoc           |  12 +-
 solr/solr-ref-guide/src/using-solrj.adoc           |  22 +-
 solr/solr-ref-guide/src/v2-api.adoc                |  10 -
 solr/solr-ref-guide/src/vectorization.adoc         |   8 +-
 .../src/zookeeper-access-control.adoc              |   6 +-
 solr/solr-ref-guide/tools/BuildNavDataFiles.java   |   1 -
 .../solr-ref-guide/tools/CheckLinksAndAnchors.java |  11 -
 .../solrj/impl/SolrClientNodeStateProvider.java    |  50 +-
 .../solrj/request/CollectionAdminRequest.java      |   7 -
 .../apache/solr/common/cloud/DocCollection.java    |   6 -
 .../apache/solr/common/params/ConfigSetParams.java |   1 +
 .../java/org/apache/solr/common}/util/DOMUtil.java |   4 +-
 .../apache/solr/common}/util/PropertiesUtil.java   |   2 +-
 .../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       |   1 +
 .../solrj/impl/CloudSolrClientRetryTest.java       |   1 +
 .../client/solrj/impl/CloudSolrClientTest.java     |   1 +
 .../org/apache/solr/common}/util/DOMUtilTest.java  |   5 +-
 .../apache/solr/cloud/MiniSolrCloudCluster.java    |   3 +-
 .../apache/solr/cloud/SolrCloudAuthTestCase.java   |  12 +
 solr/webapp/web/css/angular/collections.css        |   5 +
 solr/webapp/web/index.html                         |   2 +-
 .../web/js/angular/controllers/collections.js      |   7 +-
 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/partials/collections.html          |  22 +-
 versions.lock                                      |   2 +-
 versions.props                                     |   2 +-
 326 files changed, 6381 insertions(+), 5426 deletions(-)



[lucene-solr] 01/03: SOLR-14944: Remove the "spins" metrics.

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

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

commit 9ab9d208c7272126d76cf72d6a642bb0f97e0c35
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Mon Oct 19 11:50:08 2020 +0200

    SOLR-14944: Remove the "spins" metrics.
---
 solr/CHANGES.txt                                             |  3 +++
 solr/core/src/java/org/apache/solr/core/CoreContainer.java   |  4 ----
 solr/core/src/java/org/apache/solr/core/SolrCore.java        |  1 -
 .../org/apache/solr/metrics/SolrMetricsIntegrationTest.java  | 12 ------------
 4 files changed, 3 insertions(+), 17 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 6ab0748..06384bd 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -128,6 +128,9 @@ Other Changes
 
 * SOLR-14930: Removed rule based replica placement (noble)
 
+* SOLR-14944: Remove the "spins" metrics - support for detection of spinning disks has been
+  removed in LUCENE-9576. (ab)
+
 Bug Fixes
 ---------------------
 * SOLR-14546: Fix for a relatively hard to hit issue in OverseerTaskProcessor that could lead to out of order execution
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index c341469..9f3f17f 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -777,16 +777,12 @@ public class CoreContainer {
         true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     solrMetricsContext.gauge(() -> dataHome.toString(),
         true, "path", SolrInfoBean.Category.CONTAINER.toString(), "fs");
-    solrMetricsContext.gauge(() -> false,
-        true, "spins", SolrInfoBean.Category.CONTAINER.toString(), "fs");
     solrMetricsContext.gauge(() -> cfg.getCoreRootDirectory().toFile().getTotalSpace(),
         true, "totalSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     solrMetricsContext.gauge(() -> cfg.getCoreRootDirectory().toFile().getUsableSpace(),
         true, "usableSpace", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     solrMetricsContext.gauge(() -> cfg.getCoreRootDirectory().toString(),
         true, "path", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
-    solrMetricsContext.gauge(() -> false,
-        true, "spins", SolrInfoBean.Category.CONTAINER.toString(), "fs", "coreRoot");
     // add version information
     solrMetricsContext.gauge(() -> this.getClass().getPackage().getSpecificationVersion(),
         true, "specification", SolrInfoBean.Category.CONTAINER.toString(), "version");
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 8555591..6fb7b60 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -1228,7 +1228,6 @@ public final class SolrCore implements SolrInfoBean, Closeable {
     parentContext.gauge(() -> dataDirFile.getTotalSpace(), true, "totalSpace", Category.CORE.toString(), "fs");
     parentContext.gauge(() -> dataDirFile.getUsableSpace(), true, "usableSpace", Category.CORE.toString(), "fs");
     parentContext.gauge(() -> dataDirPath.toAbsolutePath().toString(), true, "path", Category.CORE.toString(), "fs");
-    parentContext.gauge(() -> false, true, "spins", Category.CORE.toString(), "fs");
   }
 
   public String getMetricTag() {
diff --git a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
index 992b973..9677769 100644
--- a/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/metrics/SolrMetricsIntegrationTest.java
@@ -171,24 +171,12 @@ public class SolrMetricsIntegrationTest extends SolrTestCaseJ4 {
     assertTrue(metrics.containsKey("CONTAINER.fs.totalSpace"));
     assertTrue(metrics.containsKey("CONTAINER.fs.usableSpace"));
     assertTrue(metrics.containsKey("CONTAINER.fs.path"));
-    assertTrue(metrics.containsKey("CONTAINER.fs.spins"));
     assertTrue(metrics.containsKey("CONTAINER.fs.coreRoot.totalSpace"));
     assertTrue(metrics.containsKey("CONTAINER.fs.coreRoot.usableSpace"));
     assertTrue(metrics.containsKey("CONTAINER.fs.coreRoot.path"));
-    assertTrue(metrics.containsKey("CONTAINER.fs.coreRoot.spins"));
     assertTrue(metrics.containsKey("CONTAINER.version.specification"));
     assertTrue(metrics.containsKey("CONTAINER.version.implementation"));
     Gauge<?> g = (Gauge<?>)metrics.get("CONTAINER.fs.path");
     assertEquals(g.getValue(), cc.getSolrHome());
-    boolean spins = false;
-    g = (Gauge<?>)metrics.get("CONTAINER.fs.coreRoot.spins");
-    assertEquals(spins, g.getValue());
-    g = (Gauge<?>)metrics.get("CONTAINER.fs.spins");
-    if (cc.getConfig().getSolrDataHome() != null) {
-      spins = false;
-      assertEquals(spins, g.getValue());
-    } else {
-      assertEquals(spins, g.getValue());
-    }
   }
 }


[lucene-solr] 03/03: SOLR-14749: Move much of the singleton mgmgt into the utility class.

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

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

commit e549845ee72b7d547713904d3217141ffacee22f
Author: Andrzej Bialecki <ab...@apache.org>
AuthorDate: Mon Oct 19 13:40:53 2020 +0200

    SOLR-14749: Move much of the singleton mgmgt into the utility class.
---
 .../apache/solr/api/CustomContainerPlugins.java    |  49 ++-----
 .../src/java/org/apache/solr/cloud/Overseer.java   |  46 +-----
 .../org/apache/solr/core/ClusterSingletons.java    | 162 +++++++++++++++++++++
 .../java/org/apache/solr/core/CoreContainer.java   |  41 ++----
 .../test/org/apache/solr/cloud/OverseerTest.java   |   3 +-
 5 files changed, 186 insertions(+), 115 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/api/CustomContainerPlugins.java b/solr/core/src/java/org/apache/solr/api/CustomContainerPlugins.java
index 616fb9d..5f4d9a7 100644
--- a/solr/core/src/java/org/apache/solr/api/CustomContainerPlugins.java
+++ b/solr/core/src/java/org/apache/solr/api/CustomContainerPlugins.java
@@ -34,7 +34,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.lucene.util.ResourceLoaderAware;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.request.beans.PluginMeta;
-import org.apache.solr.cloud.ClusterSingleton;
 import org.apache.solr.common.MapWriter;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.annotation.JsonProperty;
@@ -57,9 +56,10 @@ import static org.apache.lucene.util.IOUtils.closeWhileHandlingException;
 import static org.apache.solr.common.util.Utils.makeMap;
 
 public class CustomContainerPlugins implements ClusterPropertiesListener, MapWriter {
-  private final ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper();
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
+  private final ObjectMapper mapper = SolrJacksonAnnotationInspector.createObjectMapper();
+
   private final List<PluginRegistryListener> listeners = new CopyOnWriteArrayList<>();
 
   final CoreContainer coreContainer;
@@ -124,7 +124,6 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
         ApiInfo apiInfo = currentPlugins.remove(e.getKey());
         if (apiInfo == null) continue;
         listeners.forEach(listener -> listener.deleted(apiInfo));
-        handleClusterSingleton(null, apiInfo);
         for (ApiHolder holder : apiInfo.holders) {
           Api old = containerApiBag.unregister(holder.api.getEndPoint().method()[0],
               getActualPath(apiInfo, holder.api.getEndPoint().path()[0]));
@@ -156,7 +155,6 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
           currentPlugins.put(e.getKey(), apiInfo);
           final ApiInfo apiInfoFinal = apiInfo;
           listeners.forEach(listener -> listener.added(apiInfoFinal));
-          handleClusterSingleton(apiInfo, null);
         } else {
           //this plugin is being updated
           ApiInfo old = currentPlugins.put(e.getKey(), apiInfo);
@@ -166,7 +164,6 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
           }
           final ApiInfo apiInfoFinal = apiInfo;
           listeners.forEach(listener -> listener.modified(old, apiInfoFinal));
-          handleClusterSingleton(apiInfo, old);
           if (old != null) {
             //this is an update of the plugin. But, it is possible that
             // some paths are remved in the newer version of the plugin
@@ -187,36 +184,6 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
     }
   }
 
-  private void handleClusterSingleton(ApiInfo newApiInfo, ApiInfo oldApiInfo) {
-    if (newApiInfo != null) {
-      // register new api
-      Object instance = newApiInfo.getInstance();
-      if (instance instanceof ClusterSingleton) {
-        ClusterSingleton singleton = (ClusterSingleton) instance;
-        coreContainer.getClusterSingletons().getSingletons().put(singleton.getName(), singleton);
-        // check to see if we should immediately start this singleton
-        if (coreContainer.getZkController() != null &&
-            coreContainer.getZkController().getOverseer() != null &&
-            !coreContainer.getZkController().getOverseer().isClosed()) {
-          try {
-            singleton.start();
-          } catch (Exception exc) {
-            log.warn("Exception starting ClusterSingleton {}: {}", newApiInfo, exc);
-          }
-        }
-      }
-    }
-    if (oldApiInfo != null) {
-      // stop & unregister the old api
-      Object instance = oldApiInfo.getInstance();
-      if (instance instanceof ClusterSingleton) {
-        ClusterSingleton singleton = (ClusterSingleton) instance;
-        singleton.stop();
-        coreContainer.getClusterSingletons().getSingletons().remove(singleton.getName());
-      }
-    }
-  }
-
   private static String getActualPath(ApiInfo apiInfo, String path) {
     path = path.replaceAll("\\$path-prefix", apiInfo.info.pathPrefix);
     path = path.replaceAll("\\$plugin-name", apiInfo.info.name);
@@ -329,7 +296,7 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
       }
 
       try {
-        List<Api> apis = AnnotatedApi.getApis(klas, null, false);
+        List<Api> apis = AnnotatedApi.getApis(klas, null, true);
         for (Object api : apis) {
           EndPoint endPoint = ((AnnotatedApi) api).getEndPoint();
           if (endPoint.path().length > 1 || endPoint.method().length > 1) {
@@ -381,7 +348,7 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
         }
       }
       this.holders = new ArrayList<>();
-      for (Api api : AnnotatedApi.getApis(instance.getClass(), instance, false)) {
+      for (Api api : AnnotatedApi.getApis(instance.getClass(), instance, true)) {
         holders.add(new ApiHolder((AnnotatedApi) api));
       }
     }
@@ -421,12 +388,18 @@ public class CustomContainerPlugins implements ClusterPropertiesListener, MapWri
     return null;
   }
 
-  interface PluginRegistryListener {
+  /**
+   * Listener for notifications about added / deleted / modified plugins.
+   */
+  public interface PluginRegistryListener {
 
+    /** Called when a new plugin is added. */
     void added(ApiInfo plugin);
 
+    /** Called when an existing plugin is deleted. */
     void deleted(ApiInfo plugin);
 
+    /** Called when an existing plugin is replaced. */
     void modified(ApiInfo old, ApiInfo replacement);
 
   }
diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
index 4c206ae..fc0d0eb 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
@@ -29,8 +29,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.function.BiConsumer;
 
 import org.apache.lucene.util.Version;
@@ -657,7 +655,7 @@ public class Overseer implements SolrCloseable {
       }
     });
 
-    startClusterSingletons();
+    getCoreContainer().getClusterSingletons().startClusterSingletons();
 
     assert ObjectReleaseTracker.track(this);
   }
@@ -781,50 +779,10 @@ public class Overseer implements SolrCloseable {
   /**
    * Start {@link ClusterSingleton} plugins when we become the leader.
    */
-  public void startClusterSingletons() {
-    CoreContainer.ClusterSingletons singletons = getCoreContainer().getClusterSingletons();
-    final Runnable initializer = () -> {
-      if (isClosed()) {
-        return;
-      }
-      try {
-        singletons.waitUntilReady(60, TimeUnit.SECONDS);
-      } catch (InterruptedException e) {
-        log.warn("Interrupted initialization of ClusterSingleton-s");
-        return;
-      } catch (TimeoutException te) {
-        log.warn("Timed out during initialization of ClusterSingleton-s");
-        return;
-      }
-      singletons.getSingletons().forEach((name, singleton) -> {
-        try {
-          singleton.start();
-        } catch (Exception e) {
-          log.warn("Exception starting ClusterSingleton {}: {}", singleton, e);
-        }
-      });
-    };
-    if (singletons.isReady()) {
-      // wait until all singleton-s are ready for the first startup
-      getCoreContainer().runAsync(initializer);
-    } else {
-      initializer.run();
-    }
-  }
 
   /**
    * Stop {@link ClusterSingleton} plugins when we lose leadership.
    */
-  private void stopClusterSingletons() {
-    CoreContainer.ClusterSingletons singletons = getCoreContainer().getClusterSingletons();
-    if (singletons == null) {
-      return;
-    }
-    singletons.getSingletons().forEach((name, singleton) -> {
-      singleton.stop();
-    });
-  }
-
   public Stats getStats() {
     return stats;
   }
@@ -866,7 +824,7 @@ public class Overseer implements SolrCloseable {
     }
     // stop singletons only on the leader
     if (!this.closed) {
-      stopClusterSingletons();
+      getCoreContainer().getClusterSingletons().stopClusterSingletons();
     }
     this.closed = true;
     doClose();
diff --git a/solr/core/src/java/org/apache/solr/core/ClusterSingletons.java b/solr/core/src/java/org/apache/solr/core/ClusterSingletons.java
new file mode 100644
index 0000000..c929e83
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/core/ClusterSingletons.java
@@ -0,0 +1,162 @@
+/*
+ * 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.core;
+
+import org.apache.solr.api.CustomContainerPlugins;
+import org.apache.solr.cloud.ClusterSingleton;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.invoke.MethodHandles;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+/**
+ * Helper class to manage the initial registration of {@link ClusterSingleton} plugins and
+ * to track the changes in loaded plugins in {@link org.apache.solr.api.CustomContainerPlugins}.
+ */
+public class ClusterSingletons {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final Map<String, ClusterSingleton> singletonMap = new ConcurrentHashMap<>();
+  private final Supplier<Boolean> runSingletons;
+  private final Consumer<Runnable> asyncRunner;
+  private final CustomContainerPlugins.PluginRegistryListener pluginListener;
+
+  // we use this latch to delay the initial startup of singletons, due to
+  // the leader election occurring in parallel with the rest of the load() method.
+  private final CountDownLatch readyLatch = new CountDownLatch(1);
+
+  /**
+   * Create a helper to manage singletons.
+   * @param runSingletons this function returns true when singletons should be running. It's
+   *                      used when adding or modifying existing plugins.
+   * @param asyncRunner async runner that will be used for starting up each singleton.
+   */
+  public ClusterSingletons(Supplier<Boolean> runSingletons, Consumer<Runnable> asyncRunner) {
+    this.runSingletons = runSingletons;
+    this.asyncRunner = asyncRunner;
+    pluginListener = new CustomContainerPlugins.PluginRegistryListener() {
+      @Override
+      public void added(CustomContainerPlugins.ApiInfo plugin) {
+        // register new api
+        Object instance = plugin.getInstance();
+        if (instance instanceof ClusterSingleton) {
+          ClusterSingleton singleton = (ClusterSingleton) instance;
+          singletonMap.put(singleton.getName(), singleton);
+          // check to see if we should immediately start this singleton
+          if (isReady() && runSingletons.get()) {
+            try {
+              singleton.start();
+            } catch (Exception exc) {
+              log.warn("Exception starting ClusterSingleton {}: {}", plugin, exc);
+            }
+          }
+        }
+      }
+
+      @Override
+      public void deleted(CustomContainerPlugins.ApiInfo plugin) {
+        Object instance = plugin.getInstance();
+        if (instance instanceof ClusterSingleton) {
+          ClusterSingleton singleton = (ClusterSingleton) instance;
+          singleton.stop();
+          singletonMap.remove(singleton.getName());
+        }
+      }
+
+      @Override
+      public void modified(CustomContainerPlugins.ApiInfo old, CustomContainerPlugins.ApiInfo replacement) {
+        added(replacement);
+        deleted(old);
+      }
+    };
+  }
+
+  public CustomContainerPlugins.PluginRegistryListener getPluginRegistryListener() {
+    return pluginListener;
+  }
+
+  public Map<String, ClusterSingleton> getSingletons() {
+    return singletonMap;
+  }
+
+  public boolean isReady() {
+    return readyLatch.getCount() == 0;
+  }
+
+  public void setReady() {
+    readyLatch.countDown();
+  }
+
+  public void waitUntilReady(long timeout, TimeUnit timeUnit)
+      throws InterruptedException, TimeoutException {
+    boolean await = readyLatch.await(timeout, timeUnit);
+    if (!await) {
+      throw new TimeoutException("Timed out waiting for ClusterSingletons to become ready.");
+    }
+  }
+
+  /**
+   * Start singletons when the helper is ready and when it's supposed to start
+   * (as determined by {@link #runSingletons} function).
+   */
+  public void startClusterSingletons() {
+    final Runnable initializer = () -> {
+      if (!runSingletons.get()) {
+        return;
+      }
+      try {
+        waitUntilReady(60, TimeUnit.SECONDS);
+      } catch (InterruptedException e) {
+        log.warn("Interrupted initialization of ClusterSingleton-s");
+        return;
+      } catch (TimeoutException te) {
+        log.warn("Timed out during initialization of ClusterSingleton-s");
+        return;
+      }
+      singletonMap.forEach((name, singleton) -> {
+        if (!runSingletons.get()) {
+          return;
+        }
+        try {
+          singleton.start();
+        } catch (Exception e) {
+          log.warn("Exception starting ClusterSingleton {}: {}", singleton, e);
+        }
+      });
+    };
+    if (isReady()) {
+      // wait until all singleton-s are ready for the first startup
+      asyncRunner.accept(initializer);
+    } else {
+      initializer.run();
+    }
+  }
+
+  public void stopClusterSingletons() {
+    singletonMap.forEach((name, singleton) -> {
+      singleton.stop();
+    });
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 36d5e0d..bdcd0b4 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -39,12 +39,9 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.function.Supplier;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -172,33 +169,6 @@ public class CoreContainer {
     }
   }
 
-  public static class ClusterSingletons {
-    private Map<String, ClusterSingleton> singletonMap = new ConcurrentHashMap<>();
-    // we use this latch to delay the initial startup of singletons, due to
-    // the leader election occurring in parallel with the rest of the load() method.
-    private CountDownLatch readyLatch = new CountDownLatch(1);
-
-    public Map<String, ClusterSingleton> getSingletons() {
-      return singletonMap;
-    }
-
-    public boolean isReady() {
-      return readyLatch.getCount() > 0;
-    }
-
-    public void setReady() {
-      readyLatch.countDown();
-    }
-
-    public void waitUntilReady(long timeout, TimeUnit timeUnit)
-        throws InterruptedException, TimeoutException {
-      boolean await = readyLatch.await(timeout, timeUnit);
-      if (!await) {
-        throw new TimeoutException("Timed out waiting for ClusterSingletons to become ready.");
-      }
-    }
-  }
-
   private volatile PluginBag<SolrRequestHandler> containerHandlers = new PluginBag<>(SolrRequestHandler.class, null);
 
   /**
@@ -276,7 +246,11 @@ public class CoreContainer {
 
   private final ObjectCache objectCache = new ObjectCache();
 
-  private final ClusterSingletons clusterSingletons = new ClusterSingletons();
+  private final ClusterSingletons clusterSingletons = new ClusterSingletons(
+      () -> getZkController() != null &&
+          getZkController().getOverseer() != null &&
+          !getZkController().getOverseer().isClosed(),
+      (r) -> this.runAsync(r));
   private PackageStoreAPI packageStoreAPI;
   private PackageLoader packageLoader;
 
@@ -695,6 +669,8 @@ public class CoreContainer {
       loader.reloadLuceneSPI();
     }
 
+    customContainerPlugins.registerListener(clusterSingletons.getPluginRegistryListener());
+
     packageStoreAPI = new PackageStoreAPI(this);
     containerHandlers.getApiBag().registerObject(packageStoreAPI.readAPI);
     containerHandlers.getApiBag().registerObject(packageStoreAPI.writeAPI);
@@ -915,7 +891,8 @@ public class CoreContainer {
       containerHandlers.keySet().forEach(handlerName -> {
         SolrRequestHandler handler = containerHandlers.get(handlerName);
         if (handler instanceof ClusterSingleton) {
-          clusterSingletons.singletonMap.put(handlerName, (ClusterSingleton) handler);
+          ClusterSingleton singleton = (ClusterSingleton) handler;
+          clusterSingletons.getSingletons().put(singleton.getName(), singleton);
         }
       });
 
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
index 125a4cd..89fda3e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
@@ -67,6 +67,7 @@ import org.apache.solr.common.util.SolrNamedThreadFactory;
 import org.apache.solr.common.util.TimeSource;
 import org.apache.solr.common.util.Utils;
 import org.apache.solr.core.CloudConfig;
+import org.apache.solr.core.ClusterSingletons;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.PluginInfo;
 import org.apache.solr.core.SolrResourceLoader;
@@ -1422,7 +1423,7 @@ public class OverseerTest extends SolrTestCaseJ4 {
         Mockito.withSettings().defaultAnswer(Mockito.CALLS_REAL_METHODS));
     when(mockAlwaysUpCoreContainer.isShutDown()).thenReturn(testDone);  // Allow retry on session expiry
     when(mockAlwaysUpCoreContainer.getResourceLoader()).thenReturn(new SolrResourceLoader());
-    CoreContainer.ClusterSingletons singletons = new CoreContainer.ClusterSingletons();
+    ClusterSingletons singletons = new ClusterSingletons(() -> true, r -> r.run());
     // don't wait for all singletons
     singletons.setReady();
     FieldSetter.setField(mockAlwaysUpCoreContainer, CoreContainer.class.getDeclaredField("clusterSingletons"), singletons);