You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2016/12/06 23:13:45 UTC

[50/50] [abbrv] lucene-solr:apiv2: Merge branch 'master' into apiv2

Merge branch '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/d26d694b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d26d694b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d26d694b

Branch: refs/heads/apiv2
Commit: d26d694b2ada96e32e8822cd9a261581afa0f04d
Parents: 47fd492 c164f7e
Author: Steve Rowe <sa...@apache.org>
Authored: Tue Dec 6 18:12:12 2016 -0500
Committer: Steve Rowe <sa...@apache.org>
Committed: Tue Dec 6 18:12:12 2016 -0500

----------------------------------------------------------------------
 dev-tools/README.txt                            |   11 +-
 dev-tools/doap/README.txt                       |    8 +
 dev-tools/doap/lucene.rdf                       |  721 +++++++
 dev-tools/doap/solr.rdf                         |  469 +++++
 dev-tools/scripts/smokeTestRelease.py           |   50 +-
 lucene/CHANGES.txt                              |   92 +-
 .../ASCIIFoldingFilterFactory.java              |   17 +-
 .../TestAsciiFoldingFilterFactory.java          |   54 +
 lucene/analysis/kuromoji/ivy.xml                |    2 +-
 .../analysis/ja/JapaneseTokenizerFactory.java   |   17 +-
 .../ja/dict/TokenInfoDictionary$fst.dat         |  Bin 1716198 -> 1698563 bytes
 .../analysis/ja/util/ConnectionCostsWriter.java |    1 -
 .../ja/util/TokenInfoDictionaryBuilder.java     |    4 +-
 .../index/TestBackwardsCompatibility.java       |   86 +-
 .../org/apache/lucene/index/index.6.3.0-cfs.zip |  Bin 0 -> 15869 bytes
 .../apache/lucene/index/index.6.3.0-nocfs.zip   |  Bin 0 -> 15876 bytes
 .../org/apache/lucene/index/sorted.6.2.0.zip    |  Bin 0 -> 157007 bytes
 .../org/apache/lucene/index/sorted.6.2.1.zip    |  Bin 0 -> 100974 bytes
 .../org/apache/lucene/index/sorted.6.3.0.zip    |  Bin 0 -> 71090 bytes
 lucene/benchmark/build.xml                      |    6 +-
 lucene/benchmark/conf/highlighters-postings.alg |    4 +-
 lucene/benchmark/conf/highlighters-tv.alg       |    2 +-
 lucene/build.xml                                |    9 +-
 .../KNearestNeighborClassifier.java             |    8 +-
 .../KNearestNeighborDocumentClassifier.java     |    6 +-
 .../blocktreeords/OrdsBlockTreeTermsWriter.java |    4 +-
 .../codecs/memory/DirectPostingsFormat.java     |    3 +
 .../lucene/codecs/memory/FSTOrdTermsReader.java |    3 +
 .../lucene/codecs/memory/FSTTermsReader.java    |    3 +
 .../codecs/memory/MemoryPostingsFormat.java     |   18 +-
 .../codecs/simpletext/SimpleTextBKDReader.java  |  281 ++-
 .../codecs/simpletext/SimpleTextBKDWriter.java  | 1661 ++++++++++++++++
 .../simpletext/SimpleTextPointsReader.java      |    5 +-
 .../simpletext/SimpleTextPointsWriter.java      |  188 +-
 .../simpletext/SimpleTextSegmentInfoFormat.java |  148 +-
 lucene/common-build.xml                         |   18 +-
 .../apache/lucene/codecs/DocValuesConsumer.java |   10 +-
 .../org/apache/lucene/codecs/NormsConsumer.java |    2 +-
 .../lucene/codecs/StoredFieldsWriter.java       |    2 +-
 .../apache/lucene/codecs/TermVectorsWriter.java |    2 +-
 .../codecs/blocktree/BlockTreeTermsWriter.java  |    4 +-
 .../lucene/codecs/blocktree/FieldReader.java    |    3 +
 .../CompressingStoredFieldsWriter.java          |    2 +-
 .../CompressingTermVectorsWriter.java           |    2 +-
 .../GrowableByteArrayDataOutput.java            |    2 +-
 .../codecs/lucene60/Lucene60PointsFormat.java   |   10 +-
 .../codecs/lucene60/Lucene60PointsWriter.java   |    2 +-
 .../lucene/codecs/lucene60/package-info.java    |    4 +-
 .../lucene62/Lucene62SegmentInfoFormat.java     |  118 +-
 .../lucene/codecs/lucene62/package-info.java    |    4 +-
 .../lucene/codecs/lucene70/package-info.java    |   15 +-
 .../lucene/index/BinaryDocValuesWriter.java     |   15 +-
 .../org/apache/lucene/index/CheckIndex.java     |  312 +--
 .../lucene/index/DefaultIndexingChain.java      |    4 +
 .../apache/lucene/index/DocsWithFieldSet.java   |   62 +
 .../org/apache/lucene/index/IndexWriter.java    |   39 +-
 .../apache/lucene/index/IndexWriterConfig.java  |    3 +-
 .../lucene/index/MappingMultiPostingsEnum.java  |    2 +-
 .../org/apache/lucene/index/MergeState.java     |   76 +-
 .../org/apache/lucene/index/MultiSorter.java    |   82 +-
 .../apache/lucene/index/NormValuesWriter.java   |   15 +-
 .../lucene/index/NumericDocValuesWriter.java    |   15 +-
 .../lucene/index/SortedDocValuesWriter.java     |   15 +-
 .../index/SortedNumericDocValuesWriter.java     |   15 +-
 .../lucene/index/SortedSetDocValuesWriter.java  |   15 +-
 .../java/org/apache/lucene/index/Sorter.java    |  102 +-
 .../src/java/org/apache/lucene/index/Terms.java |    8 +-
 .../org/apache/lucene/search/BooleanQuery.java  |   11 +-
 .../lucene/search/DocValuesRewriteMethod.java   |   35 +-
 .../lucene/search/RandomAccessWeight.java       |   76 -
 .../lucene/search/SortedNumericSortField.java   |    5 +
 .../lucene/search/similarities/Axiomatic.java   |  159 ++
 .../search/similarities/AxiomaticF1EXP.java     |   95 +
 .../search/similarities/AxiomaticF1LOG.java     |   88 +
 .../search/similarities/AxiomaticF2EXP.java     |   94 +
 .../search/similarities/AxiomaticF2LOG.java     |   86 +
 .../search/similarities/AxiomaticF3EXP.java     |   94 +
 .../search/similarities/AxiomaticF3LOG.java     |   83 +
 .../search/similarities/BM25Similarity.java     |   20 +-
 .../search/similarities/BooleanSimilarity.java  |   95 +
 .../search/similarities/ClassicSimilarity.java  |   13 +
 .../search/similarities/TFIDFSimilarity.java    |   12 +-
 .../lucene/search/spans/SpanNotQuery.java       |   14 +-
 .../java/org/apache/lucene/util/BytesRef.java   |    2 +-
 .../org/apache/lucene/util/BytesRefBuilder.java |    4 +-
 .../org/apache/lucene/util/QueryBuilder.java    |   25 +-
 .../org/apache/lucene/util/RollingBuffer.java   |    9 +-
 .../org/apache/lucene/util/UnicodeUtil.java     |    5 +
 .../org/apache/lucene/util/bkd/BKDReader.java   |  654 ++++---
 .../org/apache/lucene/util/bkd/BKDWriter.java   |  293 ++-
 .../apache/lucene/util/bkd/HeapPointReader.java |    7 +-
 .../apache/lucene/util/bkd/HeapPointWriter.java |   22 +-
 .../util/bkd/MutablePointsReaderUtils.java      |   21 +-
 .../lucene/util/bkd/OfflinePointReader.java     |    8 +-
 .../lucene/util/bkd/OfflinePointWriter.java     |   10 +-
 .../org/apache/lucene/util/bkd/PointReader.java |   14 +-
 .../org/apache/lucene/util/bkd/PointWriter.java |    6 +-
 .../org/apache/lucene/util/fst/Builder.java     |   28 +-
 .../java/org/apache/lucene/util/fst/FST.java    |  633 +-----
 .../apache/lucene/util/fst/package-info.java    |    1 -
 .../TestGrowableByteArrayDataOutput.java        |    4 +-
 .../lucene/index/TestDocsWithFieldSet.java      |   80 +
 .../apache/lucene/index/TestIndexSorting.java   | 1222 ++++++++++--
 .../apache/lucene/index/TestIndexWriter.java    |   30 +
 .../org/apache/lucene/index/TestTermsEnum.java  |   18 +
 .../apache/lucene/search/TestPointQueries.java  |    3 +
 .../similarities/TestAxiomaticSimilarity.java   |   86 +
 .../similarities/TestBooleanSimilarity.java     |  117 ++
 .../apache/lucene/search/spans/TestBasics.java  |   30 +-
 .../apache/lucene/search/spans/TestSpans.java   |   79 +-
 .../org/apache/lucene/util/TestUnicodeUtil.java |    6 +-
 .../lucene/util/automaton/TestUTF32ToUTF8.java  |    2 +-
 .../apache/lucene/util/bkd/Test2BBKDPoints.java |   11 +-
 .../org/apache/lucene/util/bkd/TestBKD.java     |   54 +
 .../org/apache/lucene/util/fst/Test2BFST.java   |   17 +-
 .../org/apache/lucene/util/fst/TestFSTs.java    |   29 +-
 .../apache/lucene/facet/TestDrillSideways.java  |   32 +-
 .../uhighlight/AnalysisOffsetStrategy.java      |  255 ++-
 .../CompositeOffsetsPostingsEnum.java           |  145 ++
 .../uhighlight/DefaultPassageFormatter.java     |  204 +-
 .../search/uhighlight/FieldHighlighter.java     |   30 +-
 .../search/uhighlight/FieldOffsetStrategy.java  |  115 +-
 .../uhighlight/MemoryIndexOffsetStrategy.java   |  131 ++
 .../uhighlight/MultiTermHighlighting.java       |  237 +--
 .../uhighlight/MultiValueTokenStream.java       |  148 --
 .../lucene/search/uhighlight/OffsetsEnum.java   |    9 +-
 .../lucene/search/uhighlight/Passage.java       |  276 +--
 .../lucene/search/uhighlight/PhraseHelper.java  |  177 +-
 .../uhighlight/PostingsOffsetStrategy.java      |    3 +-
 .../PostingsWithTermVectorsOffsetStrategy.java  |    8 +-
 .../uhighlight/TermVectorOffsetStrategy.java    |   15 +-
 .../uhighlight/TokenStreamFromTermVector.java   |  395 ----
 .../uhighlight/TokenStreamOffsetStrategy.java   |  172 ++
 .../search/uhighlight/UnifiedHighlighter.java   |  166 +-
 .../uhighlight/TestUnifiedHighlighter.java      |  275 +++
 .../uhighlight/TestUnifiedHighlighterMTQ.java   |  141 +-
 .../TestUnifiedHighlighterRanking.java          |    5 +-
 .../TestUnifiedHighlighterStrictPhrases.java    |   77 +
 .../TestUnifiedHighlighterExtensibility.java    |   14 +-
 lucene/ivy-versions.properties                  |   11 +-
 ...jetty-continuation-9.3.14.v20161028.jar.sha1 |    1 +
 .../jetty-continuation-9.3.8.v20160314.jar.sha1 |    1 -
 .../jetty-http-9.3.14.v20161028.jar.sha1        |    1 +
 .../jetty-http-9.3.8.v20160314.jar.sha1         |    1 -
 .../licenses/jetty-io-9.3.14.v20161028.jar.sha1 |    1 +
 .../licenses/jetty-io-9.3.8.v20160314.jar.sha1  |    1 -
 .../jetty-server-9.3.14.v20161028.jar.sha1      |    1 +
 .../jetty-server-9.3.8.v20160314.jar.sha1       |    1 -
 .../jetty-servlet-9.3.14.v20161028.jar.sha1     |    1 +
 .../jetty-servlet-9.3.8.v20160314.jar.sha1      |    1 -
 .../jetty-util-9.3.14.v20161028.jar.sha1        |    1 +
 .../jetty-util-9.3.8.v20160314.jar.sha1         |    1 -
 .../lucene/queryparser/classic/QueryParser.java |   78 +-
 .../lucene/queryparser/classic/QueryParser.jj   |   28 +
 .../queryparser/classic/QueryParserBase.java    |    2 +-
 .../queryparser/classic/TestQueryParser.java    |   14 +
 .../queryparser/util/QueryParserTestBase.java   |    4 +
 .../lucene/replicator/nrt/PrimaryNode.java      |    2 +-
 .../idversion/VersionBlockTreeTermsWriter.java  |    4 +-
 .../apache/lucene/document/NearestNeighbor.java |   44 +-
 .../lucene/search/DocValuesNumbersQuery.java    |   44 +-
 .../lucene/search/DocValuesRangeQuery.java      |   68 +-
 .../lucene/search/DocValuesTermsQuery.java      |   35 +-
 lucene/site/changes/changes2html.pl             |  106 +-
 .../serialized/SerializedDVStrategy.java        |   30 +-
 .../analyzing/AnalyzingInfixSuggester.java      |   82 +-
 .../document/CompletionFieldsConsumer.java      |    4 +
 .../suggest/fst/FSTCompletionBuilder.java       |    4 +-
 .../analyzing/AnalyzingInfixSuggesterTest.java  |  111 ++
 .../document/TestPrefixCompletionQuery.java     |   49 +-
 .../index/BasePostingsFormatTestCase.java       |   45 +
 .../index/BaseSegmentInfoFormatTestCase.java    |   91 +-
 .../lucene/index/MockRandomMergePolicy.java     |    4 +-
 .../org/apache/lucene/search/CheckHits.java     |   10 +-
 .../search/similarities/RandomSimilarity.java   |    2 +
 .../util/TestRuleSetupAndRestoreClassEnv.java   |    3 +-
 .../org/apache/lucene/util/fst/FSTTester.java   |   14 +-
 solr/CHANGES.txt                                |  271 ++-
 solr/bin/solr                                   |   80 +-
 solr/bin/solr.cmd                               |   72 +-
 solr/bin/solr.in.cmd                            |    6 +-
 solr/bin/solr.in.sh                             |    4 +
 solr/build.xml                                  |    4 +-
 .../plugin/AnalyticsStatisticsCollector.java    |   20 +-
 solr/contrib/ltr/README.md                      |   10 +-
 solr/contrib/ltr/example/solrconfig.xml         |    4 +-
 .../LTRFeatureLoggerTransformerFactory.java     |  256 +++
 .../ltr/response/transform/package-info.java    |   23 +
 .../solr/ltr/search/LTRQParserPlugin.java       |  241 +++
 .../apache/solr/ltr/search/package-info.java    |   23 +
 .../LTRFeatureLoggerTransformerFactory.java     |  254 ---
 .../solr/response/transform/package-info.java   |   23 -
 .../apache/solr/search/LTRQParserPlugin.java    |  233 ---
 .../org/apache/solr/search/package-info.java    |   23 -
 solr/contrib/ltr/src/java/overview.html         |    6 +-
 .../solr/collection1/conf/solrconfig-ltr.xml    |    4 +-
 .../collection1/conf/solrconfig-ltr_Th10_10.xml |    4 +-
 .../collection1/conf/solrconfig-multiseg.xml    |    6 +-
 .../apache/solr/ltr/TestLTRQParserPlugin.java   |   14 +
 .../solr/ltr/store/rest/TestModelManager.java   |    2 +-
 solr/contrib/morphlines-core/ivy.xml            |    4 +-
 .../UIMAUpdateRequestProcessorTest.java         |   62 +-
 solr/core/ivy.xml                               |    1 +
 .../java/org/apache/solr/api/V2HttpCall.java    |    7 +-
 .../org/apache/solr/cloud/DistributedQueue.java |   14 +-
 .../java/org/apache/solr/cloud/Overseer.java    |   13 +-
 .../apache/solr/cloud/OverseerStatusCmd.java    |   16 +-
 .../solr/cloud/OverseerTaskProcessor.java       |    6 +-
 .../apache/solr/cloud/OverseerTaskQueue.java    |    8 +-
 .../solr/cloud/overseer/ZkStateWriter.java      |    4 +-
 .../src/java/org/apache/solr/core/SolrCore.java |   32 +-
 .../solr/core/snapshots/SolrSnapshotsTool.java  |  468 +++++
 .../org/apache/solr/handler/ExportHandler.java  |   48 +
 .../org/apache/solr/handler/ExportWriter.java   | 1720 +++++++++++++++++
 .../apache/solr/handler/RequestHandlerBase.java |   19 +-
 .../solr/handler/component/ExpandComponent.java |    6 +
 .../handler/component/HighlightComponent.java   |  108 +-
 .../handler/component/HttpShardHandler.java     |   50 +-
 .../component/HttpShardHandlerFactory.java      |   21 +-
 .../solr/handler/component/QueryComponent.java  |   50 +-
 .../component/QueryElevationComponent.java      |   28 +-
 .../component/ReplicaListTransformer.java       |   35 +
 .../ShufflingReplicaListTransformer.java        |   39 +
 .../solr/highlight/DefaultSolrHighlighter.java  |   15 +-
 .../solr/highlight/PostingsSolrHighlighter.java |    9 +-
 .../solr/highlight/UnifiedSolrHighlighter.java  |  365 ++++
 .../org/apache/solr/parser/QueryParser.java     |   11 +-
 .../java/org/apache/solr/parser/QueryParser.jj  |    7 +-
 .../apache/solr/parser/SolrQueryParserBase.java |  194 +-
 .../apache/solr/request/DocValuesFacets.java    |   13 +-
 .../org/apache/solr/request/NumericFacets.java  |    4 +-
 .../solr/request/macro/MacroExpander.java       |    2 +
 .../solr/response/JSONResponseWriter.java       |   75 +-
 .../solr/response/SortingResponseWriter.java    | 1805 ------------------
 .../solr/response/TextResponseWriter.java       |   30 +-
 .../java/org/apache/solr/schema/FieldType.java  |   48 +-
 .../solr/schema/FieldTypePluginLoader.java      |   59 +-
 .../solr/schema/HasImplicitIndexAnalyzer.java   |   25 +
 .../solr/schema/ManagedIndexSchemaFactory.java  |   12 +
 .../apache/solr/schema/PreAnalyzedField.java    |    2 +-
 .../org/apache/solr/schema/SchemaManager.java   |    2 +-
 .../solr/search/ExtendedDismaxQParser.java      |    6 +-
 .../org/apache/solr/search/FastLRUCache.java    |   28 +-
 .../solr/search/FunctionRangeQParserPlugin.java |    4 +-
 .../apache/solr/search/JoinQParserPlugin.java   |    1 +
 .../java/org/apache/solr/search/LRUCache.java   |    4 +-
 .../java/org/apache/solr/search/QParser.java    |   29 +
 .../apache/solr/search/SolrIndexSearcher.java   |   26 +
 .../java/org/apache/solr/search/SortSpec.java   |   10 +
 .../solr/search/facet/FacetProcessor.java       |   26 +-
 .../apache/solr/search/facet/FacetRequest.java  |   20 +
 .../search/grouping/GroupingSpecification.java  |   70 +-
 .../distributed/command/QueryCommand.java       |    2 +-
 .../SearchGroupShardResponseProcessor.java      |    4 +-
 .../TopGroupsShardResponseProcessor.java        |    8 +-
 .../GroupedEndResultTransformer.java            |    4 +-
 .../apache/solr/search/mlt/CloudMLTQParser.java |   19 +-
 .../org/apache/solr/servlet/HttpSolrCall.java   |   85 +-
 .../solr/store/blockcache/BlockCache.java       |   16 +-
 .../store/blockcache/BlockDirectoryCache.java   |   29 +-
 .../ClassificationUpdateProcessor.java          |   59 +-
 .../ClassificationUpdateProcessorFactory.java   |  199 +-
 .../ClassificationUpdateProcessorParams.java    |  112 ++
 .../apache/solr/util/ConcurrentLRUCache.java    |  427 +++--
 .../java/org/apache/solr/util/CryptoKeys.java   |    6 +-
 .../apache/solr/util/RecordingJSONParser.java   |   17 +-
 .../src/java/org/apache/solr/util/SolrCLI.java  |    3 +-
 .../org/apache/solr/util/SolrPluginUtils.java   |    6 +-
 .../java/org/apache/solr/util/stats/Clock.java  |   84 -
 .../java/org/apache/solr/util/stats/EWMA.java   |  126 --
 .../util/stats/ExponentiallyDecayingSample.java |  218 ---
 .../org/apache/solr/util/stats/Histogram.java   |  238 ---
 .../java/org/apache/solr/util/stats/Meter.java  |  143 --
 .../java/org/apache/solr/util/stats/Sample.java |   52 -
 .../org/apache/solr/util/stats/Snapshot.java    |  168 --
 .../java/org/apache/solr/util/stats/Timer.java  |  203 --
 .../apache/solr/util/stats/TimerContext.java    |   55 -
 .../org/apache/solr/util/stats/TimerUtils.java  |   58 +
 .../apache/solr/util/stats/UniformSample.java   |  108 --
 solr/core/src/resources/ImplicitPlugins.json    |    6 +-
 .../conf/schema-unifiedhighlight.xml            |   46 +
 .../conf/solrconfig-classification.xml          |   15 +
 .../conf/managed-schema                         |   41 +
 .../conf/solrconfig.xml                         |   51 +
 .../solr/cloud/DocValuesNotIndexedTest.java     |  527 +++++
 .../org/apache/solr/cloud/OverseerTest.java     |   30 +-
 .../apache/solr/core/RequestHandlersTest.java   |    4 +-
 .../test/org/apache/solr/core/SolrCoreTest.java |    2 +-
 .../handler/admin/CoreAdminHandlerTest.java     |    2 +
 .../component/ReplicaListTransformerTest.java   |  163 ++
 .../ShufflingReplicaListTransformerTest.java    |   76 +
 .../handler/component/TestExpandComponent.java  |   15 +
 .../highlight/FastVectorHighlighterTest.java    |    9 +-
 .../apache/solr/highlight/HighlighterTest.java  |   26 +-
 .../highlight/TestPostingsSolrHighlighter.java  |    2 +-
 .../highlight/TestUnifiedSolrHighlighter.java   |  229 +++
 .../solr/request/macro/TestMacroExpander.java   |   13 +
 .../apache/solr/response/JSONWriterTest.java    |   20 +-
 .../apache/solr/response/SmileWriterTest.java   |   17 +-
 .../apache/solr/response/TestExportWriter.java  |  195 ++
 .../response/TestJavabinTupleStreamParser.java  |  195 ++
 .../apache/solr/response/TestPushWriter.java    |   81 +
 .../response/TestSortingResponseWriter.java     |  190 --
 .../ManagedSchemaRoundRobinCloudTest.java       |   98 +
 .../PreAnalyzedFieldManagedSchemaCloudTest.java |   73 +
 .../solr/search/TestExtendedDismaxParser.java   |    4 +-
 .../apache/solr/search/TestSolrQueryParser.java |  198 +-
 .../solr/search/facet/TestJsonFacets.java       |   19 +
 .../solr/servlet/HttpSolrCallGetCoreTest.java   |  167 ++
 .../store/blockcache/BlockDirectoryTest.java    |   25 +-
 ...lassificationUpdateProcessorFactoryTest.java |  208 +-
 ...ificationUpdateProcessorIntegrationTest.java |  192 ++
 .../ClassificationUpdateProcessorTest.java      |  506 +++++
 .../SignatureUpdateProcessorFactoryTest.java    |   28 +-
 .../TestPartialUpdateDeduplication.java         |    2 -
 .../apache/solr/util/stats/TimerUtilsTest.java  |   58 +
 solr/licenses/commons-fileupload-1.3.1.jar.sha1 |    1 -
 solr/licenses/commons-fileupload-1.3.2.jar.sha1 |    1 +
 ...jetty-continuation-9.3.14.v20161028.jar.sha1 |    1 +
 .../jetty-continuation-9.3.8.v20160314.jar.sha1 |    1 -
 .../jetty-deploy-9.3.14.v20161028.jar.sha1      |    1 +
 .../jetty-deploy-9.3.8.v20160314.jar.sha1       |    1 -
 .../jetty-http-9.3.14.v20161028.jar.sha1        |    1 +
 .../jetty-http-9.3.8.v20160314.jar.sha1         |    1 -
 .../licenses/jetty-io-9.3.14.v20161028.jar.sha1 |    1 +
 solr/licenses/jetty-io-9.3.8.v20160314.jar.sha1 |    1 -
 .../jetty-jmx-9.3.14.v20161028.jar.sha1         |    1 +
 .../licenses/jetty-jmx-9.3.8.v20160314.jar.sha1 |    1 -
 .../jetty-rewrite-9.3.14.v20161028.jar.sha1     |    1 +
 .../jetty-rewrite-9.3.8.v20160314.jar.sha1      |    1 -
 .../jetty-security-9.3.14.v20161028.jar.sha1    |    1 +
 .../jetty-security-9.3.8.v20160314.jar.sha1     |    1 -
 .../jetty-server-9.3.14.v20161028.jar.sha1      |    1 +
 .../jetty-server-9.3.8.v20160314.jar.sha1       |    1 -
 .../jetty-servlet-9.3.14.v20161028.jar.sha1     |    1 +
 .../jetty-servlet-9.3.8.v20160314.jar.sha1      |    1 -
 .../jetty-servlets-9.3.14.v20161028.jar.sha1    |    1 +
 .../jetty-servlets-9.3.8.v20160314.jar.sha1     |    1 -
 .../jetty-util-9.3.14.v20161028.jar.sha1        |    1 +
 .../jetty-util-9.3.8.v20160314.jar.sha1         |    1 -
 .../jetty-webapp-9.3.14.v20161028.jar.sha1      |    1 +
 .../jetty-webapp-9.3.8.v20160314.jar.sha1       |    1 -
 .../jetty-xml-9.3.14.v20161028.jar.sha1         |    1 +
 .../licenses/jetty-xml-9.3.8.v20160314.jar.sha1 |    1 -
 solr/licenses/metrics-core-3.0.1.jar.sha1       |    1 -
 solr/licenses/metrics-core-3.1.2.jar.sha1       |    1 +
 .../metrics-healthchecks-3.0.1.jar.sha1         |    1 -
 .../metrics-healthchecks-3.1.2.jar.sha1         |    1 +
 solr/licenses/start.jar.sha1                    |    2 +-
 solr/server/etc/jetty-ssl.xml                   |    4 +-
 .../scripts/cloud-scripts/snapshotscli.sh       |  176 ++
 .../basic_configs/conf/solrconfig.xml           |    3 +
 .../conf/solrconfig.xml                         |    3 +
 .../conf/solrconfig.xml                         |    5 +-
 solr/solrj/ivy.xml                              |    4 +
 .../solr/client/solrj/impl/CloudSolrClient.java |  349 ++--
 .../solrj/impl/ConcurrentUpdateSolrClient.java  |   16 +-
 .../impl/ZkClientClusterStateProvider.java      |  188 ++
 .../org/apache/solr/client/solrj/io/Tuple.java  |   19 +-
 .../client/solrj/io/sql/ConnectionImpl.java     |    9 +
 .../solr/client/solrj/io/sql/StatementImpl.java |    9 +-
 .../client/solrj/io/stream/CloudSolrStream.java |   54 +-
 .../io/stream/FeaturesSelectionStream.java      |    8 +-
 .../solr/client/solrj/io/stream/JDBCStream.java |   58 +-
 .../io/stream/JavabinTupleStreamParser.java     |  189 ++
 .../client/solrj/io/stream/ParallelStream.java  |    8 +-
 .../solr/client/solrj/io/stream/SolrStream.java |   11 +-
 .../client/solrj/io/stream/TextLogitStream.java |   12 +-
 .../client/solrj/io/stream/TopicStream.java     |   41 +-
 .../client/solrj/io/stream/TupleStream.java     |   67 +-
 .../client/solrj/response/LukeResponse.java     |   31 +
 .../org/apache/solr/common/IteratorWriter.java  |   65 +
 .../java/org/apache/solr/common/MapWriter.java  |   90 +
 .../java/org/apache/solr/common/PushWriter.java |   42 +
 .../org/apache/solr/common/SolrDocument.java    |    4 +
 .../apache/solr/common/cloud/ClusterState.java  |    7 +
 .../apache/solr/common/cloud/DocCollection.java |   42 +-
 .../apache/solr/common/cloud/ZkStateReader.java |   10 +-
 .../solr/common/params/HighlightParams.java     |  118 +-
 .../apache/solr/common/util/JavaBinCodec.java   |  198 +-
 .../solr/client/solrj/SolrExampleTests.java     |   10 +-
 .../solrj/impl/CloudSolrClientCacheTest.java    |  205 ++
 .../impl/TestCloudSolrClientConnections.java    |    4 +-
 .../solr/client/solrj/io/sql/JdbcTest.java      |   61 +-
 .../client/solrj/io/stream/JDBCStreamTest.java  |   59 +-
 .../solrj/io/stream/StreamExpressionTest.java   |  326 ++--
 .../client/solrj/io/stream/StreamingTest.java   | 1428 ++++++++------
 .../solr/common/params/CommonParamsTest.java    |    8 +-
 .../solr/common/util/TestJsonRecordReader.java  |   35 +-
 .../java/org/apache/solr/SolrTestCaseJ4.java    |   22 +
 .../apache/solr/cloud/SolrCloudTestCase.java    |    3 +-
 .../java/org/apache/solr/util/TestHarness.java  |   27 +-
 .../web/js/angular/controllers/analysis.js      |   12 +-
 solr/webapp/web/partials/analysis.html          |    2 +-
 394 files changed, 20980 insertions(+), 9624 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/api/V2HttpCall.java
index c4849e7,0000000..5d8bc15
mode 100644,000000..100644
--- a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
+++ b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
@@@ -1,323 -1,0 +1,328 @@@
 +/*
 + * 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.api;
 +
 +import javax.servlet.http.HttpServletRequest;
 +import javax.servlet.http.HttpServletResponse;
 +import java.lang.invoke.MethodHandles;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.LinkedHashMap;
 +import java.util.LinkedList;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Set;
 +
 +import com.google.common.collect.ImmutableSet;
 +import org.apache.solr.client.solrj.SolrRequest;
 +import org.apache.solr.common.SolrException;
 +import org.apache.solr.common.cloud.DocCollection;
 +import org.apache.solr.common.cloud.ZkStateReader;
 +import org.apache.solr.common.params.CommonParams;
 +import org.apache.solr.common.util.ValidatingJsonMap;
 +import org.apache.solr.core.CoreContainer;
 +import org.apache.solr.core.PluginBag;
 +import org.apache.solr.core.SolrCore;
 +import org.apache.solr.logging.MDCLoggingContext;
 +import org.apache.solr.request.SolrQueryRequest;
 +import org.apache.solr.request.SolrRequestHandler;
 +import org.apache.solr.response.QueryResponseWriter;
 +import org.apache.solr.response.SolrQueryResponse;
 +import org.apache.solr.security.AuthorizationContext;
 +import org.apache.solr.servlet.HttpSolrCall;
 +import org.apache.solr.servlet.SolrDispatchFilter;
 +import org.apache.solr.servlet.SolrRequestParsers;
 +import org.apache.solr.util.JsonSchemaValidator;
 +import org.apache.solr.util.PathTrie;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +
 +import static org.apache.solr.common.params.CommonParams.JSON;
 +import static org.apache.solr.common.params.CommonParams.WT;
 +import static org.apache.solr.servlet.SolrDispatchFilter.Action.ADMIN;
 +import static org.apache.solr.servlet.SolrDispatchFilter.Action.PASSTHROUGH;
 +import static org.apache.solr.servlet.SolrDispatchFilter.Action.PROCESS;
 +import static org.apache.solr.util.PathTrie.getPathSegments;
 +
 +
 +public class V2HttpCall extends HttpSolrCall {
 +  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 +  private Api api;
 +  private List<String> pieces;
 +  private String prefix;
 +  HashMap<String, String> parts = new HashMap<>();
 +  static final Set<String> knownPrefixes = ImmutableSet.of("cluster", "node", "collections", "cores", "c");
 +
 +  public V2HttpCall(SolrDispatchFilter solrDispatchFilter, CoreContainer cc,
 +                    HttpServletRequest request, HttpServletResponse response, boolean retry) {
 +    super(solrDispatchFilter, cc, request, response, retry);
 +  }
 +
 +  protected void init() throws Exception {
 +    String path = this.path;
 +    String fullPath = path = path.substring(3);//strip off '/v2'
 +    try {
 +      pieces = getPathSegments(path);
 +      if (pieces.size() == 0) {
 +        prefix = "c";
 +        path = "/c";
 +      } else {
 +        prefix = pieces.get(0);
 +      }
 +
 +      boolean isCompositeApi = false;
 +      if (knownPrefixes.contains(prefix)) {
 +        api = getApiInfo(cores.getRequestHandlers(), path, req.getMethod(), fullPath, parts);
 +        if (api != null) {
 +          isCompositeApi = api instanceof CompositeApi;
 +          if (!isCompositeApi) {
 +            solrReq = SolrRequestParsers.DEFAULT.parse(null, path, req);
 +            solrReq.getContext().put(CoreContainer.class.getName(), cores);
 +            requestType = AuthorizationContext.RequestType.ADMIN;
 +            action = ADMIN;
 +            return;
 +          }
 +        }
 +      }
 +
 +      if ("c".equals(prefix) || "collections".equals(prefix)) {
 +        String collectionName = origCorename = corename = pieces.get(1);
 +        DocCollection collection = getDocCollection(collectionName);
 +        if (collection == null)
 +          throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "no such collection or alias");
-         core = getCoreByCollection(collection.getName());
++
++        boolean isPreferLeader = false;
++        if (path.endsWith("/update") || path.contains("/update/")) {
++          isPreferLeader = true;
++        }
++        core = getCoreByCollection(collection.getName(), isPreferLeader);
 +        if (core == null) {
 +          //this collection exists , but this node does not have a replica for that collection
 +          //todo find a better way to compute remote
 +          extractRemotePath(corename, origCorename, 0);
 +          return;
 +        }
 +
 +      } else if ("cores".equals(prefix)) {
 +        origCorename = corename = pieces.get(1);
 +        core = cores.getCore(corename);
 +      }
 +      if (core == null)
 +        throw new SolrException(SolrException.ErrorCode.NOT_FOUND, "no core retrieved for " + corename);
 +
 +
 +      this.path = path = path.substring(prefix.length() + pieces.get(1).length() + 2);
 +      Api apiInfo = getApiInfo(core.getRequestHandlers(), path, req.getMethod(), fullPath, parts);
 +      if (isCompositeApi && apiInfo instanceof CompositeApi) {
 +        ((CompositeApi) this.api).add(apiInfo);
 +      } else {
 +        api = apiInfo;
 +      }
 +      MDCLoggingContext.setCore(core);
 +      parseRequest();
 +
 +      if (usingAliases) {
 +        processAliases(aliases, collectionsList);
 +      }
 +
 +      action = PROCESS;
 +      // we are done with a valid handler
 +    } catch (RuntimeException rte) {
 +      log.error("Error in init()", rte);
 +      throw rte;
 +    } finally {
 +      if (api == null) action = PASSTHROUGH;
 +      if (solrReq != null) solrReq.getContext().put(CommonParams.PATH, path);
 +    }
 +  }
 +
 +  protected void parseRequest() throws Exception {
 +    config = core.getSolrConfig();
 +    // get or create/cache the parser for the core
 +    SolrRequestParsers parser = config.getRequestParsers();
 +
 +    // With a valid handler and a valid core...
 +
 +    if (solrReq == null) solrReq = parser.parse(core, path, req);
 +  }
 +
 +  protected DocCollection getDocCollection(String collectionName) {
 +    if (!cores.isZooKeeperAware()) {
 +      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Solr not running in cloud mode ");
 +    }
 +    ZkStateReader zkStateReader = cores.getZkController().getZkStateReader();
 +    DocCollection collection = zkStateReader.getClusterState().getCollectionOrNull(collectionName);
 +    if (collection == null) {
 +      collectionName = corename = lookupAliases(collectionName);
 +      collection = zkStateReader.getClusterState().getCollectionOrNull(collectionName);
 +    }
 +    return collection;
 +  }
 +
 +  public static Api getApiInfo(PluginBag<SolrRequestHandler> requestHandlers,
 +                               String path, String method,
 +                               String fullPath,
 +                               Map<String, String> parts) {
 +    fullPath = fullPath == null ? path : fullPath;
 +    Api api = requestHandlers.v2lookup(path, method, parts);
 +    if (api == null && path.endsWith(ApiBag.INTROSPECT)) {
 +      // the particular http method does not have any ,
 +      // just try if any other method has this path
 +      api = requestHandlers.v2lookup(path, null, parts);
 +    }
 +
 +    if (api == null) {
 +      return getSubPathApi(requestHandlers, path, fullPath, new CompositeApi(null));
 +    }
 +
 +    if (api instanceof ApiBag.IntrospectApi) {
 +      final Map<String, Api> apis = new LinkedHashMap<>();
 +      for (String m : SolrRequest.SUPPORTED_METHODS) {
 +        Api x = requestHandlers.v2lookup(path, m, parts);
 +        if (x != null) apis.put(m, x);
 +      }
 +      api = new CompositeApi(new Api(ApiBag.EMPTY_SPEC) {
 +        @Override
 +        public void call(SolrQueryRequest req, SolrQueryResponse rsp) {
 +          String method = req.getParams().get("method");
 +          Set<Api> added = new HashSet<>();
 +          for (Map.Entry<String, Api> e : apis.entrySet()) {
 +            if (method == null || e.getKey().equals(method)) {
 +              if (!added.contains(e.getValue())) {
 +                e.getValue().call(req, rsp);
 +                added.add(e.getValue());
 +              }
 +            }
 +          }
 +        }
 +      });
 +      getSubPathApi(requestHandlers,path, fullPath, (CompositeApi) api);
 +    }
 +
 +
 +    return api;
 +  }
 +
 +  private static CompositeApi getSubPathApi(PluginBag<SolrRequestHandler> requestHandlers, String path, String fullPath, CompositeApi compositeApi) {
 +
 +    String newPath = path.endsWith(ApiBag.INTROSPECT) ? path.substring(0, path.length() - ApiBag.INTROSPECT.length()) : path;
 +    Map<String, Set<String>> subpaths = new LinkedHashMap<>();
 +
 +    getSubPaths(newPath, requestHandlers.getApiBag(), subpaths);
 +    final Map<String, Set<String>> subPaths = subpaths;
 +    if (subPaths.isEmpty()) return null;
 +    return compositeApi.add(new Api(() -> ValidatingJsonMap.EMPTY) {
 +      @Override
 +      public void call(SolrQueryRequest req1, SolrQueryResponse rsp) {
 +        String prefix = null;
 +        prefix = fullPath.endsWith(ApiBag.INTROSPECT) ?
 +            fullPath.substring(0, fullPath.length() - ApiBag.INTROSPECT.length()) :
 +            fullPath;
 +        LinkedHashMap<String, Set<String>> result = new LinkedHashMap<>(subPaths.size());
 +        for (Map.Entry<String, Set<String>> e : subPaths.entrySet()) {
 +          if (e.getKey().endsWith(ApiBag.INTROSPECT)) continue;
 +          result.put(prefix + e.getKey(), e.getValue());
 +        }
 +
 +        Map m = (Map) rsp.getValues().get("availableSubPaths");
 +        if(m != null){
 +          m.putAll(result);
 +        } else {
 +          rsp.add("availableSubPaths", result);
 +        }
 +      }
 +    });
 +  }
 +
 +  private static void getSubPaths(String path, ApiBag bag, Map<String, Set<String>> pathsVsMethod) {
 +    for (SolrRequest.METHOD m : SolrRequest.METHOD.values()) {
 +      PathTrie<Api> registry = bag.getRegistry(m.toString());
 +      if (registry != null) {
 +        HashSet<String> subPaths = new HashSet<>();
 +        registry.lookup(path, new HashMap<>(), subPaths);
 +        for (String subPath : subPaths) {
 +          Set<String> supportedMethods = pathsVsMethod.get(subPath);
 +          if (supportedMethods == null) pathsVsMethod.put(subPath, supportedMethods = new HashSet<>());
 +          supportedMethods.add(m.toString());
 +        }
 +      }
 +    }
 +  }
 +
 +  public static class CompositeApi extends Api {
 +    private LinkedList<Api> apis = new LinkedList<>();
 +
 +    public CompositeApi(Api api) {
 +      super(ApiBag.EMPTY_SPEC);
 +      if (api != null) apis.add(api);
 +    }
 +
 +    @Override
 +    public void call(SolrQueryRequest req, SolrQueryResponse rsp) {
 +      for (Api api : apis) {
 +        api.call(req, rsp);
 +      }
 +
 +    }
 +
 +    public CompositeApi add(Api api) {
 +      apis.add(api);
 +      return this;
 +    }
 +  }
 +
 +  @Override
 +  protected void handleAdmin(SolrQueryResponse solrResp) {
 +    api.call(this.solrReq, solrResp);
 +  }
 +
 +  @Override
 +  protected void execute(SolrQueryResponse rsp) {
 +    try {
 +      api.call(solrReq, rsp);
 +    } catch (RuntimeException e) {
 +      throw e;
 +    }
 +  }
 +
 +  @Override
 +  protected Object _getHandler() {
 +    return api;
 +  }
 +
 +  public Map<String,String> getUrlParts(){
 +    return parts;
 +  }
 +
 +  @Override
 +  protected QueryResponseWriter getResponseWriter() {
 +    String wt = solrReq.getParams().get(WT, JSON);
 +    if (core != null) return core.getResponseWriters().get(wt);
 +    return SolrCore.DEFAULT_RESPONSE_WRITERS.get(wt);
 +  }
 +
 +  @Override
 +  protected ValidatingJsonMap getSpec() {
 +    return api == null ? null : api.getSpec();
 +  }
 +
 +  @Override
 +  protected Map<String, JsonSchemaValidator> getValidators() {
 +    return api == null ? null : api.getCommandSchema();
 +  }
 +}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
index 0721193,218b6de..4ec1985
--- a/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
+++ b/solr/core/src/java/org/apache/solr/handler/RequestHandlerBase.java
@@@ -18,10 -18,9 +18,11 @@@ package org.apache.solr.handler
  
  import java.lang.invoke.MethodHandles;
  import java.net.URL;
 +import java.util.Collection;
  import java.util.concurrent.atomic.LongAdder;
  
 +import com.google.common.collect.ImmutableList;
+ import com.codahale.metrics.Timer;
  import org.apache.solr.common.SolrException;
  import org.apache.solr.common.params.SolrParams;
  import org.apache.solr.common.util.NamedList;
@@@ -35,12 -34,7 +36,10 @@@ import org.apache.solr.request.SolrRequ
  import org.apache.solr.response.SolrQueryResponse;
  import org.apache.solr.search.SyntaxError;
  import org.apache.solr.util.SolrPluginUtils;
- import org.apache.solr.util.stats.Snapshot;
- import org.apache.solr.util.stats.Timer;
- import org.apache.solr.util.stats.TimerContext;
+ import org.apache.solr.util.stats.TimerUtils;
 +import org.apache.solr.api.Api;
 +import org.apache.solr.api.ApiBag;
 +import org.apache.solr.api.ApiSupport;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
index 70764d1,1f98da9..b244015
--- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
+++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
@@@ -786,7 -757,7 +792,7 @@@ public class HttpSolrCall 
      return result;
    }
  
-   protected SolrCore getCoreByCollection(String collectionName) {
 -  private SolrCore getCoreByCollection(String collectionName, boolean isPreferLeader) {
++  protected SolrCore getCoreByCollection(String collectionName, boolean isPreferLeader) {
      ZkStateReader zkStateReader = cores.getZkController().getZkStateReader();
  
      ClusterState clusterState = zkStateReader.getClusterState();
@@@ -1064,32 -1021,35 +1060,61 @@@
    static final String CONNECTION_HEADER = "Connection";
    static final String TRANSFER_ENCODING_HEADER = "Transfer-Encoding";
    static final String CONTENT_LENGTH_HEADER = "Content-Length";
 +  List<CommandOperation> parsedCommands;
 +
 +  public List<CommandOperation> getCommands(boolean validateInput) {
 +    if (parsedCommands == null) {
 +      Iterable<ContentStream> contentStreams = solrReq.getContentStreams();
 +      if (contentStreams == null) parsedCommands = Collections.EMPTY_LIST;
 +      else {
 +        for (ContentStream contentStream : contentStreams) {
 +          try {
 +            parsedCommands = ApiBag.getCommandOperations(contentStream.getReader(), getValidators(), validateInput);
 +          } catch (IOException e) {
 +            throw new SolrException(ErrorCode.BAD_REQUEST, "Error reading commands");
 +          }
 +          break;
 +        }
 +      }
 +    }
 +    return CommandOperation.clone(parsedCommands);
 +  }
 +  protected ValidatingJsonMap getSpec() {
 +    return null;
 +  }
 +
 +  protected Map<String, JsonSchemaValidator> getValidators(){
 +    return Collections.EMPTY_MAP;
 +  }
  
+   /**
+    * A faster method for randomly picking items when you do not need to
+    * consume all items.
+    */
+   private static class RandomIterator<E> implements Iterator<E> {
+     private Random rand;
+     private ArrayList<E> elements;
+     private int size;
+ 
+     public RandomIterator(Random rand, Collection<E> elements) {
+       this.rand = rand;
+       this.elements = new ArrayList<>(elements);
+       this.size = elements.size();
+     }
+ 
+     @Override
+     public boolean hasNext() {
+       return size > 0;
+     }
  
+     @Override
+     public E next() {
+       int idx = rand.nextInt(size);
+       E e1 = elements.get(idx);
+       E e2 = elements.get(size-1);
+       elements.set(idx,e2);
+       size--;
+       return e1;
+     }
+   }
  }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/core/src/resources/ImplicitPlugins.json
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/core/src/test/org/apache/solr/core/SolrCoreTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d26d694b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
----------------------------------------------------------------------