You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2016/03/18 09:30:36 UTC

[49/50] lucene-solr:apiv2: SOLR-8029: Merge remote-tracking branch 'remotes/origin/master' into apiv2

SOLR-8029: Merge remote-tracking branch 'remotes/origin/master' into apiv2


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4541cc56
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4541cc56
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4541cc56

Branch: refs/heads/apiv2
Commit: 4541cc562cbf2a84625dc2d4e33e52308147d265
Parents: 7209e04 5ea86b1
Author: Noble Paul <no...@apache.org>
Authored: Fri Mar 18 13:58:35 2016 +0530
Committer: Noble Paul <no...@apache.org>
Committed: Fri Mar 18 13:58:35 2016 +0530

----------------------------------------------------------------------
 dev-tools/idea/solr/core/src/java/solr-core.iml |   1 +
 .../idea/solr/core/src/solr-core-tests.iml      |   1 +
 lucene/CHANGES.txt                              |  33 +-
 .../lucene50/TestLucene50DocValuesFormat.java   |   2 +-
 .../classification/ClassificationTestBase.java  |   7 +-
 .../DocumentClassificationTestBase.java         |   4 +-
 .../classification/utils/DataSplitterTest.java  |   5 +-
 .../simpletext/SimpleTextPointsWriter.java      |   8 +-
 .../org/apache/lucene/codecs/PointsWriter.java  |  14 +-
 .../lucene54/Lucene54DocValuesConsumer.java     |  21 +-
 .../codecs/lucene60/Lucene60PointsWriter.java   |  20 +-
 .../org/apache/lucene/document/DoublePoint.java |  24 +-
 .../org/apache/lucene/document/FloatPoint.java  |  24 +-
 .../org/apache/lucene/document/IntPoint.java    |  24 +-
 .../org/apache/lucene/document/LongPoint.java   |  22 +-
 .../org/apache/lucene/index/CheckIndex.java     |   7 +
 .../apache/lucene/index/CompositeReader.java    |   2 -
 .../org/apache/lucene/index/IndexReader.java    |   2 -
 .../org/apache/lucene/index/MultiDocValues.java |   6 +-
 .../org/apache/lucene/index/PointValues.java    |  90 ++-
 .../apache/lucene/index/PointValuesWriter.java  |  16 +-
 .../index/SingletonSortedSetDocValues.java      |   1 -
 .../index/SlowCompositeReaderWrapper.java       | 271 --------
 .../lucene/search/LegacyNumericRangeQuery.java  |  12 +-
 .../apache/lucene/search/PointInSetQuery.java   |  10 +-
 .../apache/lucene/search/PointRangeQuery.java   |  38 +-
 .../org/apache/lucene/util/IntroSorter.java     |   6 +-
 .../org/apache/lucene/util/OfflineSorter.java   |  44 +-
 .../org/apache/lucene/util/bkd/BKDWriter.java   | 226 +++---
 .../apache/lucene/util/bkd/HeapPointReader.java |  17 +-
 .../apache/lucene/util/bkd/HeapPointWriter.java |  47 +-
 .../lucene/util/bkd/OfflinePointReader.java     | 102 ++-
 .../lucene/util/bkd/OfflinePointWriter.java     |  24 +-
 .../org/apache/lucene/util/bkd/PointReader.java |  37 +-
 .../lucene54/TestLucene54DocValuesFormat.java   |   6 +-
 .../org/apache/lucene/index/Test2BPoints.java   | 148 ++++
 .../index/TestAllFilesCheckIndexHeader.java     |   8 +-
 .../index/TestAllFilesDetectTruncation.java     |   4 +-
 .../index/TestBinaryDocValuesUpdates.java       |  28 +-
 .../apache/lucene/index/TestCustomNorms.java    |   4 +-
 .../index/TestDemoParallelLeafReader.java       |  21 +-
 .../lucene/index/TestDirectoryReader.java       |   2 +-
 .../org/apache/lucene/index/TestDocValues.java  |  14 +-
 .../lucene/index/TestDocValuesIndexing.java     |  25 +-
 .../lucene/index/TestDocsAndPositions.java      |   4 +-
 .../apache/lucene/index/TestDocumentWriter.java |   2 +-
 .../apache/lucene/index/TestDuelingCodecs.java  |   4 +-
 .../index/TestExitableDirectoryReader.java      |  17 +-
 .../lucene/index/TestFilterLeafReader.java      |   8 +-
 .../test/org/apache/lucene/index/TestFlex.java  |   2 +-
 .../lucene/index/TestIndexReaderClose.java      |  52 +-
 .../apache/lucene/index/TestIndexWriter.java    |   6 +-
 .../lucene/index/TestLazyProxSkipping.java      |   2 +-
 .../apache/lucene/index/TestMultiDocValues.java |  16 +-
 .../lucene/index/TestMultiLevelSkipList.java    |   2 +-
 .../test/org/apache/lucene/index/TestNorms.java |   4 +-
 .../index/TestNumericDocValuesUpdates.java      |  30 +-
 .../org/apache/lucene/index/TestOmitNorms.java  |   8 +-
 .../apache/lucene/index/TestOmitPositions.java  |   2 +-
 .../org/apache/lucene/index/TestOmitTf.java     |   6 +-
 .../org/apache/lucene/index/TestOrdinalMap.java |   5 +-
 .../index/TestParallelCompositeReader.java      |  34 +-
 .../lucene/index/TestParallelLeafReader.java    |  28 +-
 .../index/TestParallelReaderEmptyIndex.java     |  22 +-
 .../lucene/index/TestParallelTermEnum.java      |   4 +-
 .../org/apache/lucene/index/TestPayloads.java   |  11 +-
 .../apache/lucene/index/TestPointValues.java    |  97 ++-
 .../lucene/index/TestPostingsOffsets.java       |   5 +-
 .../apache/lucene/index/TestReaderClosed.java   |   6 +-
 .../index/TestReaderWrapperDVTypeCheck.java     |   5 +-
 .../lucene/index/TestSegmentTermEnum.java       |   2 +-
 .../lucene/index/TestSortedSetDocValues.java    |  27 +
 .../apache/lucene/index/TestStressAdvance.java  |   2 +-
 .../lucene/index/TestSwappedIndexFiles.java     |   3 +-
 .../org/apache/lucene/index/TestTermsEnum.java  |   6 +-
 .../lucene/search/TestDisjunctionMaxQuery.java  |   6 +-
 .../lucene/search/TestMinShouldMatch2.java      |   2 +-
 .../lucene/search/TestMultiPhraseEnum.java      |   8 +-
 .../apache/lucene/search/TestPhraseQuery.java   |   4 +-
 .../apache/lucene/search/TestPointQueries.java  |  88 +++
 .../lucene/search/TestPositionIncrement.java    |  10 +-
 .../lucene/search/TestSimilarityProvider.java   |  11 +-
 .../apache/lucene/search/TestTermScorer.java    |   9 +-
 .../TestUsageTrackingFilterCachingPolicy.java   |  17 +-
 .../search/spans/TestFieldMaskingSpanQuery.java |  11 +-
 .../search/spans/TestNearSpansOrdered.java      |  29 +-
 .../lucene/search/spans/TestSpanCollection.java |  11 +-
 .../search/spans/TestSpanContainQuery.java      |   7 +-
 .../apache/lucene/search/spans/TestSpans.java   |  13 +-
 .../apache/lucene/util/TestOfflineSorter.java   |   2 +-
 .../apache/lucene/util/bkd/Test2BBKDPoints.java | 121 ++++
 .../org/apache/lucene/util/bkd/TestBKD.java     |  22 +-
 .../expressions/TestExpressionValueSource.java  |   4 +-
 .../DefaultSortedSetDocValuesReaderState.java   |  55 +-
 .../sortedset/TestSortedSetDocValuesFacets.java |  36 -
 .../lucene/search/grouping/TestGrouping.java    |  12 +-
 lucene/ivy-versions.properties                  |   2 +-
 .../lucene/search/join/TestBlockJoin.java       |  25 +-
 .../apache/lucene/search/join/TestJoinUtil.java |   8 +-
 .../jetty-continuation-9.3.6.v20151106.jar.sha1 |   1 -
 .../jetty-continuation-9.3.8.v20160314.jar.sha1 |   1 +
 .../jetty-http-9.3.6.v20151106.jar.sha1         |   1 -
 .../jetty-http-9.3.8.v20160314.jar.sha1         |   1 +
 .../licenses/jetty-io-9.3.6.v20151106.jar.sha1  |   1 -
 .../licenses/jetty-io-9.3.8.v20160314.jar.sha1  |   1 +
 .../jetty-server-9.3.6.v20151106.jar.sha1       |   1 -
 .../jetty-server-9.3.8.v20160314.jar.sha1       |   1 +
 .../jetty-servlet-9.3.6.v20151106.jar.sha1      |   1 -
 .../jetty-servlet-9.3.8.v20160314.jar.sha1      |   1 +
 .../jetty-util-9.3.6.v20151106.jar.sha1         |   1 -
 .../jetty-util-9.3.8.v20160314.jar.sha1         |   1 +
 .../apache/lucene/index/memory/MemoryIndex.java | 628 ++++++++++++++---
 .../lucene/index/memory/TestMemoryIndex.java    | 293 ++++++++
 .../memory/TestMemoryIndexAgainstRAMDir.java    | 204 +++++-
 .../index/SlowCompositeReaderWrapper.java       | 275 ++++++++
 .../apache/lucene/uninverting/FieldCache.java   | 113 ++-
 .../lucene/uninverting/FieldCacheImpl.java      | 164 ++++-
 .../lucene/uninverting/UninvertingReader.java   |  97 ++-
 .../index/TestSlowCompositeReaderWrapper.java   |  91 +++
 .../lucene/uninverting/TestDocTermOrds.java     |  14 +-
 .../lucene/uninverting/TestFieldCache.java      | 147 ++--
 .../uninverting/TestFieldCacheReopen.java       |  11 +-
 .../TestFieldCacheSanityChecker.java            |  10 +-
 .../lucene/uninverting/TestFieldCacheSort.java  | 684 +++++++++++++++++--
 .../uninverting/TestFieldCacheSortRandom.java   |   8 +-
 .../uninverting/TestFieldCacheVsDocValues.java  |   6 +-
 .../uninverting/TestFieldCacheWithThreads.java  |  13 +-
 .../uninverting/TestLegacyFieldCache.java       | 498 ++++++++++++++
 .../lucene/uninverting/TestNumericTerms32.java  |   6 +-
 .../lucene/uninverting/TestNumericTerms64.java  |   8 +-
 .../uninverting/TestUninvertingReader.java      |   6 +-
 .../queries/function/FunctionRangeQuery.java    |   5 +-
 .../lucene/queries/function/FunctionValues.java |  20 +-
 .../queries/function/ValueSourceScorer.java     |   7 +-
 .../docvalues/DocTermsIndexDocValues.java       |   5 +-
 .../function/docvalues/DoubleDocValues.java     |  16 +-
 .../function/docvalues/IntDocValues.java        |   9 +-
 .../function/docvalues/LongDocValues.java       |   9 +-
 .../function/valuesource/EnumFieldSource.java   |   8 +-
 .../lucene/queries/CommonTermsQueryTest.java    |   6 +-
 .../apache/lucene/queries/TermsQueryTest.java   |   4 +-
 .../function/TestSortedSetFieldSource.java      |   2 +-
 .../lucene/queries/payloads/PayloadHelper.java  |   3 +-
 .../queries/payloads/TestPayloadSpans.java      |  42 +-
 .../queries/payloads/TestPayloadTermQuery.java  |  11 +-
 .../flexible/core/nodes/package-info.java       |   4 +-
 .../flexible/standard/StandardQueryParser.java  |  29 +-
 .../LegacyNumericRangeQueryNodeBuilder.java     |  93 +++
 .../builders/NumericRangeQueryNodeBuilder.java  |  91 ---
 .../builders/PointRangeQueryNodeBuilder.java    | 137 ++++
 .../builders/StandardQueryTreeBuilder.java      |  12 +-
 .../standard/config/LegacyNumericConfig.java    | 166 +++++
 .../LegacyNumericFieldConfigListener.java       |  75 ++
 .../flexible/standard/config/NumericConfig.java | 164 -----
 .../config/NumericFieldConfigListener.java      |  73 --
 .../flexible/standard/config/PointsConfig.java  | 124 ++++
 .../standard/config/PointsConfigListener.java   |  65 ++
 .../config/StandardQueryConfigHandler.java      |  39 +-
 .../standard/nodes/LegacyNumericQueryNode.java  | 153 +++++
 .../nodes/LegacyNumericRangeQueryNode.java      | 153 +++++
 .../standard/nodes/NumericQueryNode.java        | 151 ----
 .../standard/nodes/NumericRangeQueryNode.java   | 151 ----
 .../flexible/standard/nodes/PointQueryNode.java | 151 ++++
 .../standard/nodes/PointRangeQueryNode.java     | 124 ++++
 .../LegacyNumericQueryNodeProcessor.java        | 154 +++++
 .../LegacyNumericRangeQueryNodeProcessor.java   | 170 +++++
 .../processors/NumericQueryNodeProcessor.java   | 152 -----
 .../NumericRangeQueryNodeProcessor.java         | 168 -----
 .../processors/PointQueryNodeProcessor.java     | 136 ++++
 .../PointRangeQueryNodeProcessor.java           | 148 ++++
 .../StandardQueryNodeProcessorPipeline.java     |   6 +-
 .../lucene/queryparser/xml/CoreParser.java      |   1 +
 .../LegacyNumericRangeQueryBuilder.java         |   2 +
 .../xml/builders/PointRangeQueryBuilder.java    |  95 +++
 .../standard/TestLegacyNumericQueryParser.java  | 535 +++++++++++++++
 .../standard/TestNumericQueryParser.java        | 535 ---------------
 .../flexible/standard/TestPointQueryParser.java |  82 +++
 .../lucene/queryparser/xml/PointRangeQuery.xml  |  31 +
 .../lucene/queryparser/xml/TestCoreParser.java  |   9 +-
 .../lucene/document/InetAddressPoint.java       |  23 +-
 .../org/apache/lucene/document/LatLonPoint.java |  78 ++-
 .../document/LatLonPointDistanceComparator.java | 213 ++++++
 .../document/LatLonPointDistanceQuery.java      | 148 +++-
 .../document/LatLonPointInPolygonQuery.java     |  65 +-
 .../lucene/document/LatLonPointSortField.java   | 106 +++
 .../lucene/document/TestBigIntegerPoint.java    |  19 +-
 .../lucene/document/TestInetAddressPoint.java   |  25 +-
 .../apache/lucene/document/TestLatLonPoint.java |  35 +-
 .../document/TestLatLonPointDistanceQuery.java  |   4 +-
 .../document/TestLatLonPointDistanceSort.java   | 289 ++++++++
 .../document/TestLatLonPointInPolygonQuery.java |  49 ++
 .../apache/lucene/spatial/SpatialTestCase.java  |   4 +-
 .../spatial3d/PointInGeo3DShapeQuery.java       |   4 +-
 .../apache/lucene/spatial3d/TestGeo3DPoint.java |  14 +
 .../index/BaseDocValuesFormatTestCase.java      |  64 +-
 .../index/BaseIndexFileFormatTestCase.java      |   6 +-
 .../lucene/index/BasePointsFormatTestCase.java  |   4 +-
 .../index/BasePostingsFormatTestCase.java       |  66 +-
 .../index/BaseStoredFieldsFormatTestCase.java   |   2 +-
 .../index/BaseTermVectorsFormatTestCase.java    |  12 +-
 .../org/apache/lucene/search/QueryUtils.java    |   6 +-
 .../lucene/search/spans/MultiSpansWrapper.java  |  51 --
 .../lucene/store/MockDirectoryWrapper.java      |   2 +-
 .../org/apache/lucene/util/LuceneTestCase.java  |  53 +-
 .../java/org/apache/lucene/util/TestUtil.java   |  14 +-
 .../lucene/analysis/TestMockAnalyzer.java       |   2 +-
 .../TestCompressingStoredFieldsFormat.java      |   5 +-
 .../TestCompressingTermVectorsFormat.java       |   8 +-
 .../lucene/index/TestAssertingLeafReader.java   |   5 +-
 lucene/tools/javadoc/ecj.javadocs.prefs         |   2 +-
 lucene/tools/junit4/cached-timehints.txt        |   2 +-
 solr/CHANGES.txt                                |  70 +-
 solr/common-build.xml                           |   4 +-
 .../extraction/ExtractingRequestHandler.java    |   9 +-
 .../cloud/OverseerCollectionMessageHandler.java |   1 +
 .../org/apache/solr/core/CoreContainer.java     |  15 +-
 .../src/java/org/apache/solr/core/SolrCore.java |  13 +-
 .../org/apache/solr/handler/SQLHandler.java     |   9 +-
 .../org/apache/solr/handler/SchemaHandler.java  |  17 +-
 .../apache/solr/handler/SolrConfigHandler.java  |  17 +-
 .../org/apache/solr/handler/StreamHandler.java  |   9 +-
 .../solr/handler/UpdateRequestHandler.java      |   9 +-
 .../solr/handler/admin/ClusterStatus.java       |  16 +-
 .../solr/handler/admin/CollectionsHandler.java  |  82 ++-
 .../solr/handler/admin/SecurityConfHandler.java |  16 +-
 .../solr/handler/component/SearchHandler.java   |  11 +-
 .../apache/solr/handler/loader/JsonLoader.java  |   6 +-
 .../solr/response/GeoJSONResponseWriter.java    | 345 ++++++++++
 .../solr/response/JSONResponseWriter.java       |   2 +-
 .../transform/GeoTransformerFactory.java        | 224 ++++++
 .../response/transform/TransformerFactory.java  |   1 +
 .../response/transform/WriteableGeoJSON.java    |  55 ++
 .../solr/schema/AbstractSpatialFieldType.java   |  87 ++-
 .../org/apache/solr/schema/DateRangeField.java  |   4 +-
 .../java/org/apache/solr/schema/EnumField.java  |   2 +-
 .../java/org/apache/solr/schema/TrieField.java  |   8 +-
 .../apache/solr/search/FunctionRangeQuery.java  |   2 +-
 .../apache/solr/search/SolrIndexSearcher.java   |   4 +-
 .../apache/solr/search/facet/FacetField.java    |  13 +-
 .../search/function/ValueSourceRangeFilter.java |   2 +-
 .../solr/security/AuthorizationContext.java     |   3 +
 .../security/AutorizationEditOperation.java     | 176 +++++
 .../org/apache/solr/security/Permission.java    | 119 ++++
 .../solr/security/PermissionNameProvider.java   |  72 ++
 .../security/RuleBasedAuthorizationPlugin.java  | 290 +-------
 .../org/apache/solr/servlet/HttpSolrCall.java   |   5 +
 .../solr/update/DirectUpdateHandler2.java       |   4 +-
 .../org/apache/solr/update/SolrCoreState.java   |   8 +-
 .../org/apache/solr/update/TransactionLog.java  |   4 +-
 .../org/apache/solr/update/VersionInfo.java     |   8 +-
 .../ClassificationUpdateProcessor.java          | 102 +++
 .../ClassificationUpdateProcessorFactory.java   | 223 ++++++
 .../org/apache/solr/util/CommandOperation.java  |  27 +
 .../src/resources/WellKnownPermissions.json     |  51 --
 .../collection1/conf/schema-classification.xml  |  43 ++
 .../conf/schema-non-stored-docvalues.xml        | 131 ++--
 .../solr/collection1/conf/schema-spatial.xml    |   1 +
 .../conf/solrconfig-classification.xml          |  53 ++
 .../solr/cloud/CollectionsAPISolrJTest.java     |   2 +-
 .../org/apache/solr/cloud/DeleteStatusTest.java | 172 +++--
 .../apache/solr/cloud/SolrCloudExampleTest.java |   1 -
 .../apache/solr/cloud/TestCollectionAPI.java    |  19 +
 .../org/apache/solr/handler/JsonLoaderTest.java |  20 +
 .../handler/admin/SecurityConfHandlerTest.java  |  30 +-
 .../response/TestGeoJSONResponseWriter.java     | 279 ++++++++
 .../solr/schema/SpatialRPTFieldTypeTest.java    |  38 +-
 .../solr/schema/TestUseDocValuesAsStored.java   | 217 +++++-
 .../org/apache/solr/search/TestRangeQuery.java  |   5 +-
 .../solr/search/facet/TestJsonFacets.java       |  50 +-
 .../solr/security/BasicAuthIntegrationTest.java |   3 +-
 .../solr/security/MockAuthorizationPlugin.java  |  10 +-
 .../TestRuleBasedAuthorizationPlugin.java       |  99 ++-
 .../test/org/apache/solr/update/TestUpdate.java |  21 +
 ...lassificationUpdateProcessorFactoryTest.java | 234 +++++++
 .../jetty-continuation-9.3.6.v20151106.jar.sha1 |   1 -
 .../jetty-continuation-9.3.8.v20160314.jar.sha1 |   1 +
 .../jetty-deploy-9.3.6.v20151106.jar.sha1       |   1 -
 .../jetty-deploy-9.3.8.v20160314.jar.sha1       |   1 +
 .../jetty-http-9.3.6.v20151106.jar.sha1         |   1 -
 .../jetty-http-9.3.8.v20160314.jar.sha1         |   1 +
 solr/licenses/jetty-io-9.3.6.v20151106.jar.sha1 |   1 -
 solr/licenses/jetty-io-9.3.8.v20160314.jar.sha1 |   1 +
 .../licenses/jetty-jmx-9.3.6.v20151106.jar.sha1 |   1 -
 .../licenses/jetty-jmx-9.3.8.v20160314.jar.sha1 |   1 +
 .../jetty-rewrite-9.3.6.v20151106.jar.sha1      |   1 -
 .../jetty-rewrite-9.3.8.v20160314.jar.sha1      |   1 +
 .../jetty-security-9.3.6.v20151106.jar.sha1     |   1 -
 .../jetty-security-9.3.8.v20160314.jar.sha1     |   1 +
 .../jetty-server-9.3.6.v20151106.jar.sha1       |   1 -
 .../jetty-server-9.3.8.v20160314.jar.sha1       |   1 +
 .../jetty-servlet-9.3.6.v20151106.jar.sha1      |   1 -
 .../jetty-servlet-9.3.8.v20160314.jar.sha1      |   1 +
 .../jetty-servlets-9.3.6.v20151106.jar.sha1     |   1 -
 .../jetty-servlets-9.3.8.v20160314.jar.sha1     |   1 +
 .../jetty-util-9.3.6.v20151106.jar.sha1         |   1 -
 .../jetty-util-9.3.8.v20160314.jar.sha1         |   1 +
 .../jetty-webapp-9.3.6.v20151106.jar.sha1       |   1 -
 .../jetty-webapp-9.3.8.v20160314.jar.sha1       |   1 +
 .../licenses/jetty-xml-9.3.6.v20151106.jar.sha1 |   1 -
 .../licenses/jetty-xml-9.3.8.v20160314.jar.sha1 |   1 +
 solr/licenses/start.jar.sha1                    |   2 +-
 .../basic_configs/conf/managed-schema           |  32 +-
 .../conf/managed-schema                         |  53 +-
 .../conf/managed-schema                         |  43 +-
 .../client/solrj/io/stream/DaemonStream.java    |   6 +-
 .../solrj/request/CollectionAdminRequest.java   | 568 +++++++++++++--
 .../client/solrj/request/CoreAdminRequest.java  |  23 +-
 .../solrj/util/SolrIdentifierValidator.java     |  28 +-
 .../apache/solr/common/cloud/ClusterState.java  |   4 +-
 .../org/apache/solr/common/cloud/DocRouter.java |  27 +-
 .../common/params/CollectionAdminParams.java    |   2 +
 .../apache/solr/common/util/JavaBinCodec.java   |   4 +-
 .../solrj/io/stream/StreamExpressionTest.java   |   8 +-
 .../request/TestCollectionAdminRequest.java     |   9 +-
 .../client/solrj/request/TestCoreAdmin.java     |  13 +-
 .../java/org/apache/solr/cloud/ChaosMonkey.java | 100 +--
 solr/webapp/web/css/angular/common.css          |  13 +-
 solr/webapp/web/css/styles/common.css           |  16 +-
 solr/webapp/web/index.html                      |   6 +-
 solr/webapp/web/old.html                        |   5 +-
 solr/webapp/web/partials/query.html             |  12 +-
 321 files changed, 11983 insertions(+), 3947 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/core/CoreContainer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
index 805662c,da24c25..6b393a3
--- a/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
@@@ -45,18 -42,15 +44,20 @@@ import org.apache.solr.schema.IndexSche
  import org.apache.solr.schema.ManagedIndexSchema;
  import org.apache.solr.schema.SchemaManager;
  import org.apache.solr.schema.ZkIndexSchemaReader;
 +import org.apache.solr.api.Api;
 +import org.apache.solr.api.ApiBag;
 +import org.apache.solr.api.ApiSupport;
+ import org.apache.solr.security.AuthorizationContext;
+ import org.apache.solr.security.PermissionNameProvider;
  import org.apache.solr.util.plugin.SolrCoreAware;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import static org.apache.solr.common.params.CommonParams.JSON;
 +import static org.apache.solr.core.ConfigSetProperties.IMMUTABLE_CONFIGSET_ARG;
 +import static org.apache.solr.api.ApiBag.wrapRequestHandler;
  
- public class SchemaHandler extends RequestHandlerBase implements ApiSupport , SolrCoreAware {
+ public class SchemaHandler extends RequestHandlerBase implements SolrCoreAware, PermissionNameProvider {
    private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
    private boolean isImmutableConfigSet = false;
  

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index e7bbc95,eac9b11..42239dd
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@@ -90,9 -89,8 +93,9 @@@ import static org.apache.solr.core.Solr
  import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_NAME;
  import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_NAME_IN_OVERLAY;
  import static org.apache.solr.schema.FieldType.CLASS_NAME;
 +import static org.apache.solr.api.ApiBag.wrapRequestHandler;
  
- public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAware {
+ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAware, PermissionNameProvider {
    private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
    public static final String CONFIGSET_EDITING_DISABLED_ARG = "disable.configEdit";
    public static final boolean configEditing_disabled = Boolean.getBoolean(CONFIGSET_EDITING_DISABLED_ARG);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index c8d2c27,f0a332e..2d69a2f
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@@ -16,46 -16,8 +16,45 @@@
   */
  package org.apache.solr.handler.admin;
  
 +import static org.apache.solr.client.solrj.response.RequestStatusState.*;
 +import static org.apache.solr.cloud.Overseer.QUEUE_OPERATION;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.COLL_CONF;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.COLL_PROP_PREFIX;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.CREATE_NODE_SET;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.CREATE_NODE_SET_SHUFFLE;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.NUM_SLICES;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.ONLY_ACTIVE_NODES;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.ONLY_IF_DOWN;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.REQUESTID;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.SHARDS_PROP;
 +import static org.apache.solr.cloud.OverseerCollectionMessageHandler.SHARD_UNIQUE;
 +import static org.apache.solr.common.SolrException.ErrorCode.BAD_REQUEST;
 +import static org.apache.solr.common.cloud.DocCollection.DOC_ROUTER;
 +import static org.apache.solr.common.cloud.DocCollection.RULE;
 +import static org.apache.solr.common.cloud.DocCollection.SNITCH;
 +import static org.apache.solr.common.cloud.DocCollection.STATE_FORMAT;
 +import static org.apache.solr.common.cloud.ZkStateReader.AUTO_ADD_REPLICAS;
 +import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
 +import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
 +import static org.apache.solr.common.cloud.ZkStateReader.PROPERTY_PROP;
 +import static org.apache.solr.common.cloud.ZkStateReader.PROPERTY_VALUE_PROP;
 +import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
 +import static org.apache.solr.common.cloud.ZkStateReader.REPLICA_PROP;
 +import static org.apache.solr.common.cloud.ZkStateReader.SHARD_ID_PROP;
 +import static org.apache.solr.common.params.CollectionParams.CollectionAction.*;
 +import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
 +import static org.apache.solr.common.params.CommonParams.NAME;
 +import static org.apache.solr.common.params.CommonParams.VALUE_LONG;
 +import static org.apache.solr.common.params.CoreAdminParams.DATA_DIR;
 +import static org.apache.solr.common.params.CoreAdminParams.DELETE_DATA_DIR;
 +import static org.apache.solr.common.params.CoreAdminParams.DELETE_INDEX;
 +import static org.apache.solr.common.params.CoreAdminParams.DELETE_INSTANCE_DIR;
 +import static org.apache.solr.common.params.CoreAdminParams.INSTANCE_DIR;
 +import static org.apache.solr.common.params.ShardParams._ROUTE_;
 +import static org.apache.solr.common.util.StrUtils.formatString;
 +
  import java.io.IOException;
  import java.lang.invoke.MethodHandles;
- 
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collection;
@@@ -67,9 -29,10 +66,11 @@@ import java.util.Map
  import java.util.Set;
  import java.util.concurrent.TimeUnit;
  
+ import com.google.common.collect.ImmutableList;
+ import com.google.common.collect.ImmutableSet;
  import org.apache.commons.io.IOUtils;
  import org.apache.commons.lang.StringUtils;
 +import org.apache.solr.api.Api;
  import org.apache.solr.client.solrj.SolrResponse;
  import org.apache.solr.client.solrj.impl.HttpSolrClient;
  import org.apache.solr.client.solrj.request.CoreAdminRequest;
@@@ -145,9 -145,18 +185,19 @@@ public class CollectionsHandler extend
     */
    public CollectionsHandler(final CoreContainer coreContainer) {
      this.coreContainer = coreContainer;
 +    v2Handler = new CollectionHandlerApi(this);
    }
  
+   @Override
+   public PermissionNameProvider.Name getPermissionName(AuthorizationContext ctx) {
+     String action = ctx.getParams().get("action");
+     if (action == null) return null;
+     CollectionParams.CollectionAction collectionAction = CollectionParams.CollectionAction.get(action);
+     if (collectionAction == null) return null;
+     return collectionAction.isWrite ?
+         PermissionNameProvider.Name.COLL_EDIT_PERM :
+         PermissionNameProvider.Name.COLL_READ_PERM;
+   }
  
    @Override
    final public void init(NamedList args) {
@@@ -197,34 -225,9 +247,35 @@@
      rsp.setHttpCaching(false);
    }
  
 +  void invokeAction(SolrQueryRequest req, SolrQueryResponse rsp, CoreContainer cores, CollectionAction action, CollectionOperation operation) throws Exception {
 +    if (!coreContainer.isZooKeeperAware()) {
 +      throw new SolrException(BAD_REQUEST,
 +          "Invalid request. collections can be accessed only in SolrCloud mode");
 +    }
 +    SolrResponse response = null;
 +    Map<String, Object> props = operation.call(req, rsp, this);
 +    String asyncId = req.getParams().get(ASYNC);
 +    if (props != null) {
 +      if (asyncId != null) {
 +        props.put(ASYNC, asyncId);
 +      }
 +      props.put(QUEUE_OPERATION, operation.action.toLower());
 +      ZkNodeProps zkProps = new ZkNodeProps(props);
 +      if (operation.sendToOCPQueue) {
 +        response = handleResponse(operation.action.toLower(), zkProps, rsp, operation.timeOut);
 +      }
 +      else Overseer.getStateUpdateQueue(coreContainer.getZkController().getZkClient()).offer(Utils.toJSON(props));
 +      final String collectionName = zkProps.getStr(NAME);
 +      if (action.equals(CollectionAction.CREATE) && asyncId == null) {
 +        if (rsp.getException() == null) {
 +          waitForActiveCollection(collectionName, zkProps, cores, response);
 +        }
 +      }
 +    }
 +  }
  
  
+ 
    static final Set<String> KNOWN_ROLES = ImmutableSet.of("overseer");
  
    public static long DEFAULT_COLLECTION_OP_TIMEOUT = 180*1000;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
index 94bbb3e,0f4dd7b..eb63410
--- a/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SecurityConfHandler.java
@@@ -36,17 -33,13 +36,19 @@@ import org.apache.solr.handler.RequestH
  import org.apache.solr.handler.SolrConfigHandler;
  import org.apache.solr.request.SolrQueryRequest;
  import org.apache.solr.response.SolrQueryResponse;
+ import org.apache.solr.security.AuthorizationContext;
 +import org.apache.solr.security.AuthenticationPlugin;
 +import org.apache.solr.security.AuthorizationPlugin;
  import org.apache.solr.security.ConfigEditablePlugin;
+ import org.apache.solr.security.PermissionNameProvider;
  import org.apache.solr.util.CommandOperation;
 +import org.apache.solr.api.Api;
 +import org.apache.solr.api.ApiBag;
 +import org.apache.solr.api.ApiSupport;
 +import org.apache.solr.api.SpecProvider;
  import org.apache.zookeeper.KeeperException;
  
- public class SecurityConfHandler extends RequestHandlerBase {
+ public class SecurityConfHandler extends RequestHandlerBase implements PermissionNameProvider {
    private CoreContainer cores;
  
    public SecurityConfHandler(CoreContainer coreContainer) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
index 03805db,3145113..330a3b9
--- a/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPlugin.java
@@@ -29,28 -26,20 +26,27 @@@ import java.util.List
  import java.util.Map;
  import java.util.Objects;
  import java.util.Set;
- import java.util.function.Predicate;
  
 +import com.google.common.collect.ImmutableSet;
 +import org.apache.solr.common.SolrException;
 +import org.apache.solr.common.params.CollectionParams;
 +import org.apache.solr.common.util.Map2;
 +import org.apache.solr.common.util.Utils;
  import org.apache.solr.util.CommandOperation;
 +import org.apache.solr.api.ApiBag;
 +import org.apache.solr.api.SpecProvider;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
- import static java.util.Collections.singleton;
- import static org.apache.solr.common.util.Utils.fromJSONResource;
+ import static java.util.Arrays.asList;
+ import static java.util.Collections.unmodifiableMap;
+ import static java.util.function.Function.identity;
+ import static java.util.stream.Collectors.toMap;
  import static org.apache.solr.handler.admin.SecurityConfHandler.getListValue;
  import static org.apache.solr.handler.admin.SecurityConfHandler.getMapValue;
- import static org.apache.solr.common.params.CommonParams.NAME;
- import static org.apache.solr.common.util.Utils.getDeepCopy;
  
  
 -public class RuleBasedAuthorizationPlugin implements AuthorizationPlugin, ConfigEditablePlugin {
 +public class RuleBasedAuthorizationPlugin implements AuthorizationPlugin, ConfigEditablePlugin, SpecProvider {
    private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
  
    private final Map<String, Set<String>> usersVsRoles = new HashMap<>();
@@@ -320,158 -233,6 +240,12 @@@
      return latestConf;
    }
  
-   enum OPERATION {
-     SET_USER_ROLE("set-user-role") {
-       @Override
-       public Map<String, Object> edit(Map<String, Object> latestConf, CommandOperation op) {
-         Map<String, Object> roleMap = getMapValue(latestConf, "user-role");
-         Map<String, Object> map = op.getDataMap();
-         if (op.hasError()) return null;
-         for (Map.Entry<String, Object> e : map.entrySet()) {
-           if (e.getValue() == null) {
-             roleMap.remove(e.getKey());
-             continue;
-           }
-           if (e.getValue() instanceof String || e.getValue() instanceof List) {
-             roleMap.put(e.getKey(), e.getValue());
-           } else {
-             op.addError("Unexpected value ");
-             return null;
-           }
-         }
-         return latestConf;
-       }
-     },
-     SET_PERMISSION("set-permission") {
-       @Override
-       public Map<String, Object> edit(Map<String, Object> latestConf, CommandOperation op) {
-         String name = op.getStr(NAME);
-         Map<String, Object> dataMap = op.getDataMap();
-         if (op.hasError()) return null;
-         dataMap = getDeepCopy(dataMap, 3);
-         String before = (String) dataMap.remove("before");
-         for (String key : dataMap.keySet()) {
-           if (!Permission.knownKeys.contains(key)) op.addError("Unknown key, " + key);
-         }
-         try {
-           Permission.load(dataMap);
-         } catch (Exception e) {
-           op.addError(e.getMessage());
-           return null;
-         }
-         List<Map> permissions = getListValue(latestConf, "permissions");
-         List<Map> permissionsCopy = new ArrayList<>();
-         boolean added = false;
-         for (Map e : permissions) {
-           Object n = e.get(NAME);
-           if (n.equals(before) || n.equals(name)) {
-             added = true;
-             permissionsCopy.add(dataMap);
-           }
-           if (!n.equals(name)) permissionsCopy.add(e);
-         }
-         if (!added && before != null) {
-           op.addError("Invalid 'before' :" + before);
-           return null;
-         }
-         if (!added) permissionsCopy.add(dataMap);
-         latestConf.put("permissions", permissionsCopy);
-         return latestConf;
-       }
-     },
-     UPDATE_PERMISSION("update-permission") {
-       @Override
-       public Map<String, Object> edit(Map<String, Object> latestConf, CommandOperation op) {
-         String name = op.getStr(NAME);
-         if (op.hasError()) return null;
-         for (Map permission : (List<Map>) getListValue(latestConf, "permissions")) {
-           if (name.equals(permission.get(NAME))) {
-             LinkedHashMap copy = new LinkedHashMap<>(permission);
-             copy.putAll(op.getDataMap());
-             op.setCommandData(copy);
-             return SET_PERMISSION.edit(latestConf, op);
-           }
-         }
-         op.addError("No such permission " + name);
-         return null;
-       }
-     },
-     DELETE_PERMISSION("delete-permission") {
-       @Override
-       public Map<String, Object> edit(Map<String, Object> latestConf, CommandOperation op) {
-         List<String> names = op.getStrs("");
-         if (names == null || names.isEmpty()) {
-           op.addError("Invalid command");
-           return null;
-         }
-         names = new ArrayList<>(names);
-         List<Map> copy = new ArrayList<>();
-         List<Map> p = getListValue(latestConf, "permissions");
-         for (Map map : p) {
-           Object n = map.get(NAME);
-           if (names.contains(n)) {
-             names.remove(n);
-             continue;
-           } else {
-             copy.add(map);
-           }
-         }
-         if (!names.isEmpty()) {
-           op.addError("Unknown permission name(s) " + names);
-           return null;
-         }
-         latestConf.put("permissions", copy);
-         return latestConf;
-       }
-     };
- 
-     public abstract Map<String, Object> edit(Map<String, Object> latestConf, CommandOperation op);
- 
-     public final String name;
- 
-     OPERATION(String s) {
-       this.name = s;
-     }
- 
-     public static OPERATION get(String name) {
-       for (OPERATION o : values()) if (o.name.equals(name)) return o;
-       return null;
-     }
-   }
- 
-   public static final Set<String> HTTP_METHODS = ImmutableSet.of("GET", "POST", "DELETE", "PUT", "HEAD");
- 
-   private static final Map<String, Map<String,Object>>  well_known_permissions =
-       (Map<String, Map<String, Object>>) fromJSONResource("WellKnownPermissions.json");
- 
-   static {
-     ((Map) well_known_permissions.get("collection-admin-edit")).put(Predicate.class.getName(), getCollectionActionPredicate(true));
-     ((Map) well_known_permissions.get("collection-admin-read")).put(Predicate.class.getName(), getCollectionActionPredicate(false));
-   }
- 
-   private static Predicate<AuthorizationContext> getCollectionActionPredicate(final boolean isEdit) {
-     return new Predicate<AuthorizationContext>() {
-       @Override
-       public boolean test(AuthorizationContext context) {
-         String action = context.getParams().get("action");
-         if (action == null) return false;
-         CollectionParams.CollectionAction collectionAction = CollectionParams.CollectionAction.get(action);
-         if (collectionAction == null) return false;
-         return isEdit ? collectionAction.isWrite : !collectionAction.isWrite;
-       }
-     };
-   }
- 
- 
-   public static void main(String[] args) {
-     System.out.println(Utils.toJSONString(well_known_permissions));
- 
-   }
+   private static final Map<String, AutorizationEditOperation> ops = unmodifiableMap(asList(AutorizationEditOperation.values()).stream().collect(toMap(AutorizationEditOperation::getOperationName, identity())));
  
 +
 +  @Override
 +  public Map2 getSpec() {
 +    return ApiBag.getSpec("cluster.security.RuleBasedAuthorization").getSpec();
 +
 +  }
  }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/java/org/apache/solr/util/CommandOperation.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4541cc56/solr/core/src/test/org/apache/solr/security/BasicAuthIntegrationTest.java
----------------------------------------------------------------------