You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2017/05/12 23:39:25 UTC

[58/58] [abbrv] lucene-solr:jira/solr-10233: Merge branch 'master' into jira/solr-10233

Merge branch 'master' into jira/solr-10233


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

Branch: refs/heads/jira/solr-10233
Commit: 096ed90b36ae404049936e4b977af1c3a0eae75c
Parents: 14ea4ad 6e68e9e
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Fri May 12 16:38:03 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Fri May 12 16:38:03 2017 -0700

----------------------------------------------------------------------
 dev-tools/idea/.idea/libraries/HSQLDB.xml       |    2 +-
 lucene/CHANGES.txt                              |    6 +
 .../lucene/classification/BM25NBClassifier.java |  243 +
 .../classification/BM25NBClassifierTest.java    |  154 +
 .../lucene/search/DoubleValuesSource.java       |   47 +-
 .../org/apache/lucene/search/LRUQueryCache.java |    2 +-
 .../java/org/apache/lucene/util/Version.java    |    7 +
 .../lucene/search/TestDoubleValuesSource.java   |   63 +
 .../apache/lucene/search/TestLRUQueryCache.java |    2 +
 .../lucene/expressions/ExpressionRescorer.java  |   13 +-
 .../expressions/ExpressionValueSource.java      |   15 +
 .../lucene/expressions/TestDemoExpressions.java |   32 +-
 .../expressions/TestExpressionRescorer.java     |    2 +-
 .../facet/range/TestRangeFacetCounts.java       |    5 +
 lucene/ivy-versions.properties                  |   15 +-
 .../queries/function/FunctionScoreQuery.java    |   11 +-
 .../lucene/queries/function/ValueSource.java    |   11 +
 .../function/TestFunctionScoreExplanations.java |    2 +-
 .../function/TestFunctionScoreQuery.java        |    4 +-
 solr/CHANGES.txt                                |   49 +-
 solr/bin/install_solr_service.sh                |    4 +-
 solr/bin/solr                                   |   18 +
 solr/bin/solr.cmd                               |   28 +
 solr/build.xml                                  |    3 +
 solr/contrib/dataimporthandler/ivy.xml          |    2 +-
 .../TestVariableResolverEndToEnd.java           |    8 +-
 .../src/java/org/apache/solr/api/ApiBag.java    |    9 +-
 .../org/apache/solr/cloud/DistributedQueue.java |   47 +-
 .../cloud/OverseerCollectionMessageHandler.java |    5 +-
 .../java/org/apache/solr/cloud/RestoreCmd.java  |  120 +-
 .../solr/cloud/overseer/ZkStateWriter.java      |    3 +
 .../org/apache/solr/core/CoreContainer.java     |   11 +-
 .../org/apache/solr/core/MetricsConfig.java     |  121 +
 .../java/org/apache/solr/core/NodeConfig.java   |   32 +-
 .../org/apache/solr/core/SolrXmlConfig.java     |   29 +-
 .../apache/solr/handler/CalciteJDBCStream.java  |   75 +
 .../org/apache/solr/handler/SQLHandler.java     |    3 +-
 .../apache/solr/handler/SolrConfigHandler.java  |    4 +-
 .../org/apache/solr/handler/StreamHandler.java  |    2 +
 .../handler/admin/BaseHandlerApiSupport.java    |   76 +-
 .../handler/admin/CollectionHandlerApi.java     |  317 +-
 .../solr/handler/admin/CollectionsHandler.java  |   12 +-
 .../handler/admin/ConfigSetsHandlerApi.java     |  109 +-
 .../solr/handler/admin/CoreAdminHandlerApi.java |  172 +-
 .../solr/handler/admin/SecurityConfHandler.java |    4 +-
 .../handler/admin/SecurityConfHandlerLocal.java |    2 +-
 .../handler/admin/SecurityConfHandlerZk.java    |    2 +-
 .../apache/solr/metrics/MetricSuppliers.java    |  363 ++
 .../solr/metrics/SolrCoreMetricManager.java     |    2 +-
 .../apache/solr/metrics/SolrMetricManager.java  |   45 +-
 .../apache/solr/request/SolrQueryRequest.java   |    2 +-
 .../solr/request/SolrQueryRequestBase.java      |    2 +-
 .../org/apache/solr/schema/SchemaManager.java   |    2 +-
 .../org/apache/solr/search/FastLRUCache.java    |    2 +-
 .../java/org/apache/solr/search/LFUCache.java   |    2 +-
 .../java/org/apache/solr/search/LRUCache.java   |    2 +-
 .../security/AutorizationEditOperation.java     |    2 +-
 .../apache/solr/security/BasicAuthPlugin.java   |    2 +-
 .../solr/security/ConfigEditablePlugin.java     |    4 +-
 .../security/RuleBasedAuthorizationPlugin.java  |    2 +-
 .../security/Sha256AuthenticationProvider.java  |    8 +-
 .../org/apache/solr/servlet/HttpSolrCall.java   |    2 +-
 .../org/apache/solr/servlet/ResponseUtils.java  |    2 +-
 .../apache/solr/servlet/SolrDispatchFilter.java |    2 +-
 .../apache/solr/servlet/SolrRequestParsers.java |    2 +-
 .../org/apache/solr/update/SolrIndexConfig.java |   12 +
 .../org/apache/solr/util/CommandOperation.java  |  328 --
 .../src/java/org/apache/solr/util/SolrCLI.java  |  258 +
 .../org/apache/solr/util/SolrPluginUtils.java   |   21 +-
 .../collections.collection.Commands.modify.json |    2 +-
 .../test-files/lib-dirs/d/d1/empty-file-d1.txt  |    1 -
 .../collection1/conf/bad-schema-init-error.xml  |   25 -
 .../conf/schema-single-dynamic-copy-field.xml   |  663 ---
 .../collection1/conf/solrconfig-lazywriter.xml  |   29 -
 .../solrconfig-tlog-with-delayingcomponent.xml  |  124 -
 .../src/test-files/solr/solr-metricsconfig.xml  |   61 +
 .../core/src/test-files/solr/solr-multicore.xml |    0
 .../AbstractCloudBackupRestoreTestCase.java     |   27 +
 .../apache/solr/cloud/DistributedQueueTest.java |   36 +
 .../solr/cloud/overseer/ZkStateWriterTest.java  |   10 +-
 .../core/snapshots/TestSolrCloudSnapshots.java  |    5 +
 .../solr/handler/V2ApiIntegrationTest.java      |   67 +-
 .../handler/admin/SecurityConfHandlerTest.java  |    2 +-
 .../solr/handler/admin/TestApiFramework.java    |    2 +-
 .../solr/handler/admin/TestCollectionAPIs.java  |    2 +-
 .../org/apache/solr/metrics/JvmMetricsTest.java |    4 +-
 .../apache/solr/metrics/MetricsConfigTest.java  |  126 +
 .../solr/metrics/MockCounterSupplier.java       |   36 +
 .../solr/metrics/MockHistogramSupplier.java     |   40 +
 .../apache/solr/metrics/MockMeterSupplier.java  |   36 +
 .../apache/solr/metrics/MockTimerSupplier.java  |   46 +
 .../solr/metrics/SolrMetricTestUtils.java       |    4 +-
 .../metrics/SolrMetricsIntegrationTest.java     |    2 +-
 .../apache/solr/schema/TestSchemaManager.java   |    2 +-
 .../solr/security/BasicAuthIntegrationTest.java |   15 +-
 .../TestRuleBasedAuthorizationPlugin.java       |    4 +-
 .../TestSha256AuthenticationProvider.java       |    2 +-
 solr/example/example-DIH/ivy.xml                |    2 +-
 .../android-json-0.0.20131108.vaadin1.jar.sha1  |    1 +
 solr/licenses/android-json-LICENSE-ASL.txt      |  202 +
 solr/licenses/android-json-NOTICE.txt           |    0
 .../asciidoctor-ant-1.6.0-alpha.3.jar.sha1      |    1 +
 solr/licenses/asciidoctor-ant-LICENSE-ASL.txt   |  202 +
 solr/licenses/asciidoctor-ant-NOTICE.txt        |    5 +
 solr/licenses/hsqldb-1.8.0.10.jar.sha1          |    1 -
 solr/licenses/hsqldb-2.4.0.jar.sha1             |    1 +
 solr/licenses/hsqldb-LICENSE-BSD_LIKE.txt       |    9 +-
 solr/licenses/hsqldb-NOTICE.txt                 |  135 +-
 solr/licenses/jsoup-1.8.2.jar.sha1              |    1 +
 solr/licenses/jsoup-LICENSE-MIT.txt             |   21 +
 solr/licenses/slf4j-simple-1.7.7.jar.sha1       |    1 +
 solr/solr-ref-guide/README.adoc                 |   27 +
 solr/solr-ref-guide/build.xml                   |  238 +
 solr/solr-ref-guide/ivy.xml                     |   34 +
 .../meta-docs/asciidoc-syntax.adoc              |  223 +
 .../solr-ref-guide/meta-docs/editing-tools.adoc |   23 +
 solr/solr-ref-guide/meta-docs/jekyll.adoc       |   61 +
 solr/solr-ref-guide/meta-docs/pdf.adoc          |  129 +
 solr/solr-ref-guide/meta-docs/publish.adoc      |  204 +
 solr/solr-ref-guide/src/.gitignore              |    3 +
 solr/solr-ref-guide/src/404.md                  |    6 +
 solr/solr-ref-guide/src/README.md               |    3 +
 solr/solr-ref-guide/src/_config.yml.template    |  101 +
 solr/solr-ref-guide/src/_data/strings.yml       |    5 +
 solr/solr-ref-guide/src/_data/tags.yml          |    7 +
 solr/solr-ref-guide/src/_includes/archive.html  |   15 +
 solr/solr-ref-guide/src/_includes/feedback.html |   16 +
 solr/solr-ref-guide/src/_includes/footer.html   |    9 +
 .../src/_includes/google_analytics.html         |    6 +
 solr/solr-ref-guide/src/_includes/head.html     |   35 +
 .../src/_includes/head_print.html               |   33 +
 solr/solr-ref-guide/src/_includes/image.html    |    1 +
 .../src/_includes/inline_image.html             |    1 +
 solr/solr-ref-guide/src/_includes/links.html    |   44 +
 solr/solr-ref-guide/src/_includes/sidebar.html  |   65 +
 solr/solr-ref-guide/src/_includes/taglogic.html |   22 +
 solr/solr-ref-guide/src/_includes/toc.html      |   21 +
 solr/solr-ref-guide/src/_includes/topnav.html   |   64 +
 solr/solr-ref-guide/src/_layouts/default.html   |   55 +
 .../src/_layouts/default_print.html             |   25 +
 solr/solr-ref-guide/src/_layouts/none.html      |    3 +
 solr/solr-ref-guide/src/_layouts/page.html      |   80 +
 .../solr-ref-guide/src/_layouts/page_print.html |   15 +
 solr/solr-ref-guide/src/_layouts/post.html      |   41 +
 solr/solr-ref-guide/src/a-quick-overview.adoc   |   33 +
 solr/solr-ref-guide/src/a-step-closer.adoc      |   54 +
 solr/solr-ref-guide/src/about-filters.adoc      |   29 +
 solr/solr-ref-guide/src/about-this-guide.adoc   |   57 +
 solr/solr-ref-guide/src/about-tokenizers.adoc   |   31 +
 ...adding-custom-plugins-in-solrcloud-mode.adoc |  156 +
 solr/solr-ref-guide/src/analysis-screen.adoc    |   17 +
 solr/solr-ref-guide/src/analyzers.adoc          |  103 +
 ...uthentication-and-authorization-plugins.adoc |  170 +
 .../src/basic-authentication-plugin.adoc        |  140 +
 solr/solr-ref-guide/src/blob-store-api.adoc     |  135 +
 solr/solr-ref-guide/src/blockjoin-faceting.adoc |   99 +
 .../solr-ref-guide/src/charfilterfactories.adoc |  159 +
 .../src/choosing-an-output-format.adoc          |    9 +
 solr/solr-ref-guide/src/client-api-lineup.adoc  |   29 +
 solr/solr-ref-guide/src/client-apis.adoc        |   22 +
 solr/solr-ref-guide/src/cloud-screens.adoc      |   29 +
 solr/solr-ref-guide/src/codec-factory.adoc      |   21 +
 .../src/collapse-and-expand-results.adoc        |  133 +
 .../src/collection-specific-tools.adoc          |   30 +
 solr/solr-ref-guide/src/collections-api.adoc    | 1889 ++++++
 .../src/collections-core-admin.adoc             |   25 +
 .../combining-distribution-and-replication.adoc |   19 +
 .../src/command-line-utilities.adoc             |  120 +
 .../src/common-query-parameters.adoc            |  365 ++
 solr/solr-ref-guide/src/config-api.adoc         |  521 ++
 solr/solr-ref-guide/src/config-sets.adoc        |   26 +
 solr/solr-ref-guide/src/configsets-api.adoc     |  155 +
 solr/solr-ref-guide/src/configuration-apis.adoc |   11 +
 .../solr-ref-guide/src/configuring-logging.adoc |  110 +
 .../src/configuring-solrconfig-xml.adoc         |  155 +
 solr/solr-ref-guide/src/content-streams.adoc    |   48 +
 solr/solr-ref-guide/src/copying-fields.adoc     |   40 +
 .../solr-ref-guide/src/core-specific-tools.adoc |   36 +
 solr/solr-ref-guide/src/coreadmin-api.adoc      |  353 ++
 .../src/cross-data-center-replication-cdcr.adoc |  761 +++
 solr/solr-ref-guide/src/css/comments.css        |  164 +
 solr/solr-ref-guide/src/css/customstyles.css    |  883 +++
 .../solr-ref-guide/src/css/font-awesome.min.css |    4 +
 .../solr-ref-guide/src/css/lavish-bootstrap.css | 5420 ++++++++++++++++++
 solr/solr-ref-guide/src/css/printstyles.css     |  160 +
 solr/solr-ref-guide/src/css/ref-guide.css       | 2826 +++++++++
 solr/solr-ref-guide/src/css/theme-solr.css      |  127 +
 ...adir-and-directoryfactory-in-solrconfig.adoc |   45 +
 solr/solr-ref-guide/src/dataimport-screen.adoc  |   13 +
 solr/solr-ref-guide/src/de-duplication.adoc     |  100 +
 .../src/defining-core-properties.adoc           |   79 +
 solr/solr-ref-guide/src/defining-fields.adoc    |   57 +
 .../detecting-languages-during-indexing.adoc    |   82 +
 .../src/distributed-requests.adoc               |  123 +
 .../distributed-search-with-index-sharding.adoc |  165 +
 .../src/documents-fields-and-schema-design.adoc |   28 +
 solr/solr-ref-guide/src/documents-screen.adoc   |   73 +
 solr/solr-ref-guide/src/docvalues.adoc          |   75 +
 solr/solr-ref-guide/src/draft-background.png    |  Bin 0 -> 5391 bytes
 solr/solr-ref-guide/src/dynamic-fields.adoc     |   20 +
 solr/solr-ref-guide/src/enabling-ssl.adoc       |  345 ++
 solr/solr-ref-guide/src/errata.adoc             |   17 +
 .../src/exporting-result-sets.adoc              |   55 +
 solr/solr-ref-guide/src/faceting.adoc           |  738 +++
 solr/solr-ref-guide/src/feed.xml                |   28 +
 .../src/field-properties-by-use-case.adoc       |   34 +
 .../field-type-definitions-and-properties.adoc  |  115 +
 .../src/field-types-included-with-solr.adoc     |   40 +
 solr/solr-ref-guide/src/files-screen.adoc       |   23 +
 .../solr-ref-guide/src/filter-descriptions.adoc | 1779 ++++++
 .../src/fonts/Inconsolata/Inconsolata-Bold.ttf  |  Bin 0 -> 109948 bytes
 .../fonts/Inconsolata/Inconsolata-Regular.ttf   |  Bin 0 -> 96964 bytes
 .../src/fonts/Inconsolata/OFL.txt               |   92 +
 .../src/fonts/Noto_Sans/LICENSE.txt             |  202 +
 .../src/fonts/Noto_Sans/NotoSans-Bold.ttf       |  Bin 0 -> 415132 bytes
 .../src/fonts/Noto_Sans/NotoSans-BoldItalic.ttf |  Bin 0 -> 290436 bytes
 .../src/fonts/Noto_Sans/NotoSans-Italic.ttf     |  Bin 0 -> 279268 bytes
 .../src/fonts/Noto_Sans/NotoSans-Regular.ttf    |  Bin 0 -> 414820 bytes
 .../src/fonts/fontawesome/FontAwesome.otf       |  Bin 0 -> 85908 bytes
 .../fonts/fontawesome/fontawesome-webfont.eot   |  Bin 0 -> 56006 bytes
 .../fonts/fontawesome/fontawesome-webfont.svg   |  520 ++
 .../fonts/fontawesome/fontawesome-webfont.ttf   |  Bin 0 -> 112160 bytes
 .../fonts/fontawesome/fontawesome-webfont.woff  |  Bin 0 -> 65452 bytes
 .../glyphicons/glyphicons-halflings-regular.eot |  Bin 0 -> 20127 bytes
 .../glyphicons/glyphicons-halflings-regular.svg |  288 +
 .../glyphicons/glyphicons-halflings-regular.ttf |  Bin 0 -> 45404 bytes
 .../glyphicons-halflings-regular.woff           |  Bin 0 -> 23424 bytes
 .../glyphicons-halflings-regular.woff2          |  Bin 0 -> 18028 bytes
 .../src/fonts/mplus1mn/mplus1mn-bold-ascii.ttf  |  Bin 0 -> 15868 bytes
 .../mplus1mn/mplus1mn-bold_italic-ascii.ttf     |  Bin 0 -> 15908 bytes
 .../fonts/mplus1mn/mplus1mn-italic-ascii.ttf    |  Bin 0 -> 15928 bytes
 .../mplus1mn/mplus1mn-regular-ascii-conums.ttf  |  Bin 0 -> 20024 bytes
 .../src/fonts/mplus1p-regular-fallback.ttf      |  Bin 0 -> 1405716 bytes
 solr/solr-ref-guide/src/format-of-solr-xml.adoc |  151 +
 solr/solr-ref-guide/src/function-queries.adoc   |  252 +
 solr/solr-ref-guide/src/further-assistance.adoc |    7 +
 solr/solr-ref-guide/src/getting-assistance.adoc |   25 +
 .../src/getting-started-with-solrcloud.adoc     |  159 +
 solr/solr-ref-guide/src/getting-started.adoc    |   27 +
 solr/solr-ref-guide/src/graph-traversal.adoc    |  532 ++
 .../src/hadoop-authentication-plugin.adoc       |  116 +
 solr/solr-ref-guide/src/highlighting.adoc       |  293 +
 .../solr-ref-guide/src/how-solrcloud-works.adoc |   37 +
 .../a-quick-overview/sample-client-app-arch.png |  Bin 0 -> 52100 bytes
 .../a-quick-overview/sample-client-app-arch.svg |  488 ++
 .../images/analysis-screen/analysis_normal.png  |  Bin 0 -> 57653 bytes
 .../images/analysis-screen/analysis_verbose.png |  Bin 0 -> 66742 bytes
 .../src/images/cloud-screens/cloud-graph.png    |  Bin 0 -> 54929 bytes
 .../src/images/cloud-screens/cloud-radial.png   |  Bin 0 -> 62572 bytes
 .../src/images/cloud-screens/cloud-tree.png     |  Bin 0 -> 105371 bytes
 .../collection_dashboard.png                    |  Bin 0 -> 69978 bytes
 .../collections-core-admin/DeleteShard.png      |  Bin 0 -> 161077 bytes
 .../collections-core-admin/collection-admin.png |  Bin 0 -> 60968 bytes
 .../worddav4101c16174820e932b44baa22abcfcd1.png |  Bin 0 -> 54328 bytes
 .../core-specific-tools/core_dashboard.png      |  Bin 0 -> 84253 bytes
 .../CDCR_arch.png                               |  Bin 0 -> 83216 bytes
 .../src/images/dataimport-screen/dataimport.png |  Bin 0 -> 126440 bytes
 .../documents-screen/documents_add_screen.png   |  Bin 0 -> 58783 bytes
 .../src/images/files-screen/files-screen.png    |  Bin 0 -> 129388 bytes
 .../images/getting-assistance/Assistance.png    |  Bin 0 -> 6429 bytes
 .../src/images/icons/bullet_blue.gif            |  Bin 0 -> 60 bytes
 .../images/icons/contenttypes/home_page_16.png  |  Bin 0 -> 272 bytes
 .../src/images/icons/emoticons/warning.png      |  Bin 0 -> 444 bytes
 .../worddav2b7e14725d898b4104cdd9c502fc77cd.png |  Bin 0 -> 26388 bytes
 .../images/java-properties/javaproperties.png   |  Bin 0 -> 86999 bytes
 .../src/images/logging/level_menu.png           |  Bin 0 -> 68035 bytes
 .../src/images/logging/logging.png              |  Bin 0 -> 49911 bytes
 .../other-parsers/graph_qparser_example.png     |  Bin 0 -> 46673 bytes
 .../other-parsers/graph_qparser_example.svg     |  606 ++
 .../worddav16392965e726e04513a21641fabad474.png |  Bin 0 -> 54279 bytes
 .../worddav88969a784fb8a63d8c46e9c043f5f953.png |  Bin 0 -> 246343 bytes
 .../overview-of-the-solr-admin-ui/dashboard.png |  Bin 0 -> 92750 bytes
 .../images/parallel-sql-interface/cluster.png   |  Bin 0 -> 3067133 bytes
 solr/solr-ref-guide/src/images/ping/ping.png    |  Bin 0 -> 10064 bytes
 .../plugins-stats-screen/plugin-searcher.png    |  Bin 0 -> 103571 bytes
 .../src/images/query-screen/query-top.png       |  Bin 0 -> 112162 bytes
 .../images/replication-screen/replication.png   |  Bin 0 -> 55601 bytes
 .../result-clustering/carrot2-workbench.png     |  Bin 0 -> 210974 bytes
 .../src/images/result-clustering/carrot2.png    |  Bin 0 -> 403362 bytes
 .../images/running-solr/SolrAdminDashboard.png  |  Bin 0 -> 249171 bytes
 .../running-solr/solr34_responseHeader.png      |  Bin 0 -> 269440 bytes
 .../analysis_compare_0.png                      |  Bin 0 -> 57666 bytes
 .../analysis_compare_1.png                      |  Bin 0 -> 93162 bytes
 .../analysis_compare_2.png                      |  Bin 0 -> 85136 bytes
 .../analysis_compare_3.png                      |  Bin 0 -> 89766 bytes
 .../analysis_compare_4.png                      |  Bin 0 -> 97789 bytes
 .../schema_browser_terms.png                    |  Bin 0 -> 219326 bytes
 .../src/images/segments-info/segments_info.png  |  Bin 0 -> 40880 bytes
 .../zeppelin_solrjdbc_1.png                     |  Bin 0 -> 72998 bytes
 .../zeppelin_solrjdbc_2.png                     |  Bin 0 -> 41166 bytes
 .../zeppelin_solrjdbc_3.png                     |  Bin 0 -> 62482 bytes
 .../zeppelin_solrjdbc_4.png                     |  Bin 0 -> 62527 bytes
 .../zeppelin_solrjdbc_5.png                     |  Bin 0 -> 42257 bytes
 .../zeppelin_solrjdbc_6.png                     |  Bin 0 -> 44941 bytes
 .../dbvisualizer_solrjdbc_1.png                 |  Bin 0 -> 171124 bytes
 .../dbvisualizer_solrjdbc_11.png                |  Bin 0 -> 54439 bytes
 .../dbvisualizer_solrjdbc_12.png                |  Bin 0 -> 130739 bytes
 .../dbvisualizer_solrjdbc_13.png                |  Bin 0 -> 82449 bytes
 .../dbvisualizer_solrjdbc_14.png                |  Bin 0 -> 75971 bytes
 .../dbvisualizer_solrjdbc_15.png                |  Bin 0 -> 118023 bytes
 .../dbvisualizer_solrjdbc_16.png                |  Bin 0 -> 162783 bytes
 .../dbvisualizer_solrjdbc_17.png                |  Bin 0 -> 122613 bytes
 .../dbvisualizer_solrjdbc_19.png                |  Bin 0 -> 84112 bytes
 .../dbvisualizer_solrjdbc_2.png                 |  Bin 0 -> 115345 bytes
 .../dbvisualizer_solrjdbc_20.png                |  Bin 0 -> 145134 bytes
 .../dbvisualizer_solrjdbc_3.png                 |  Bin 0 -> 106194 bytes
 .../dbvisualizer_solrjdbc_4.png                 |  Bin 0 -> 110362 bytes
 .../dbvisualizer_solrjdbc_5.png                 |  Bin 0 -> 95829 bytes
 .../dbvisualizer_solrjdbc_6.png                 |  Bin 0 -> 106536 bytes
 .../dbvisualizer_solrjdbc_7.png                 |  Bin 0 -> 111281 bytes
 .../dbvisualizer_solrjdbc_9.png                 |  Bin 0 -> 117209 bytes
 .../squirrelsql_solrjdbc_1.png                  |  Bin 0 -> 42001 bytes
 .../squirrelsql_solrjdbc_10.png                 |  Bin 0 -> 53660 bytes
 .../squirrelsql_solrjdbc_11.png                 |  Bin 0 -> 59264 bytes
 .../squirrelsql_solrjdbc_12.png                 |  Bin 0 -> 47968 bytes
 .../squirrelsql_solrjdbc_13.png                 |  Bin 0 -> 43717 bytes
 .../squirrelsql_solrjdbc_14.png                 |  Bin 0 -> 44009 bytes
 .../squirrelsql_solrjdbc_15.png                 |  Bin 0 -> 92630 bytes
 .../squirrelsql_solrjdbc_2.png                  |  Bin 0 -> 56592 bytes
 .../squirrelsql_solrjdbc_3.png                  |  Bin 0 -> 52196 bytes
 .../squirrelsql_solrjdbc_4.png                  |  Bin 0 -> 42390 bytes
 .../squirrelsql_solrjdbc_5.png                  |  Bin 0 -> 56778 bytes
 .../squirrelsql_solrjdbc_7.png                  |  Bin 0 -> 62070 bytes
 .../squirrelsql_solrjdbc_9.png                  |  Bin 0 -> 63722 bytes
 .../src/images/spatial-search/bbox.png          |  Bin 0 -> 14893 bytes
 .../src/images/spatial-search/circle.png        |  Bin 0 -> 14843 bytes
 .../src/images/stream-screen/StreamScreen.png   |  Bin 0 -> 51471 bytes
 .../src/images/thread-dump/thread_dump_1.png    |  Bin 0 -> 106104 bytes
 .../src/images/thread-dump/thread_dump_2.png    |  Bin 0 -> 118045 bytes
 .../velocity-search-ui/techproducts_browse.png  |  Bin 0 -> 74854 bytes
 .../src/implicit-requesthandlers.adoc           |   61 +
 solr/solr-ref-guide/src/index-replication.adoc  |  293 +
 solr/solr-ref-guide/src/index.adoc              |   30 +
 .../src/indexconfig-in-solrconfig.adoc          |  198 +
 .../src/indexing-and-basic-data-operations.adoc |   33 +
 solr/solr-ref-guide/src/indexupgrader-tool.adoc |   23 +
 .../src/initparams-in-solrconfig.adoc           |  106 +
 solr/solr-ref-guide/src/installing-solr.adoc    |   40 +
 .../src/introduction-to-client-apis.adoc        |   15 +
 ...ntroduction-to-scaling-and-distribution.adoc |   29 +
 .../src/introduction-to-solr-indexing.adoc      |   40 +
 solr/solr-ref-guide/src/java-properties.adoc    |    8 +
 solr/solr-ref-guide/src/js/customscripts.js     |   56 +
 solr/solr-ref-guide/src/js/jekyll-search.js     |    1 +
 .../solr-ref-guide/src/js/jquery.navgoco.min.js |    8 +
 solr/solr-ref-guide/src/js/toc.js               |   82 +
 solr/solr-ref-guide/src/jvm-settings.adoc       |   38 +
 .../src/kerberos-authentication-plugin.adoc     |  379 ++
 solr/solr-ref-guide/src/language-analysis.adoc  | 1608 ++++++
 solr/solr-ref-guide/src/learning-to-rank.adoc   |  744 +++
 .../src/legacy-scaling-and-distribution.adoc    |   18 +
 .../src/lib-directives-in-solrconfig.adoc       |   24 +
 solr/solr-ref-guide/src/licenses/LICENSE        |   21 +
 .../src/licenses/LICENSE-BSD-NAVGOCO.txt        |   27 +
 .../src/local-parameters-in-queries.adoc        |   70 +
 solr/solr-ref-guide/src/logging.adoc            |   22 +
 .../major-changes-from-solr-5-to-solr-6.adoc    |   73 +
 .../src/making-and-restoring-backups.adoc       |  221 +
 solr/solr-ref-guide/src/managed-resources.adoc  |  280 +
 solr/solr-ref-guide/src/managing-solr.adoc      |   26 +
 .../src/mbean-request-handler.adoc              |   44 +
 solr/solr-ref-guide/src/merging-indexes.adoc    |   35 +
 solr/solr-ref-guide/src/metrics-reporting.adoc  |  264 +
 solr/solr-ref-guide/src/morelikethis.adoc       |   83 +
 .../src/near-real-time-searching.adoc           |  121 +
 solr/solr-ref-guide/src/other-parsers.adoc      |  978 ++++
 .../src/other-schema-elements.adoc              |   90 +
 ...w-of-documents-fields-and-schema-design.adoc |   47 +
 .../src/overview-of-searching-in-solr.adoc      |   45 +
 .../src/overview-of-the-solr-admin-ui.adoc      |   22 +
 .../src/pagination-of-results.adoc              |  253 +
 .../src/parallel-sql-interface.adoc             |  418 ++
 .../solr-ref-guide/src/parameter-reference.adoc |   51 +
 .../src/pdf/SolrRefGuide-all.adoc               |   15 +
 .../src/pdf/themes/refguide-theme.yml           |  259 +
 .../src/performance-statistics-reference.adoc   |  119 +
 solr/solr-ref-guide/src/phonetic-matching.adoc  |  114 +
 solr/solr-ref-guide/src/ping.adoc               |   66 +
 .../src/plugins-stats-screen.adoc               |   12 +
 solr/solr-ref-guide/src/post-tool.adoc          |  167 +
 .../src/putting-the-pieces-together.adoc        |   61 +
 solr/solr-ref-guide/src/query-re-ranking.adoc   |   55 +
 solr/solr-ref-guide/src/query-screen.adoc       |   42 +
 .../src/query-settings-in-solrconfig.adoc       |  217 +
 .../src/query-syntax-and-parsing.adoc           |   17 +
 .../read-and-write-side-fault-tolerance.adoc    |   99 +
 solr/solr-ref-guide/src/realtime-get.adoc       |  102 +
 solr/solr-ref-guide/src/relevance.adoc          |   31 +
 solr/solr-ref-guide/src/replication-screen.adoc |   21 +
 .../src/request-parameters-api.adoc             |  187 +
 .../src/requestdispatcher-in-solrconfig.adoc    |   82 +
 ...lers-and-searchcomponents-in-solrconfig.adoc |  167 +
 solr/solr-ref-guide/src/response-writers.adoc   |  324 ++
 solr/solr-ref-guide/src/result-clustering.adoc  |  346 ++
 solr/solr-ref-guide/src/result-grouping.adoc    |  239 +
 .../src/rule-based-authorization-plugin.adoc    |  225 +
 .../src/rule-based-replica-placement.adoc       |  181 +
 .../src/running-solr-on-hdfs.adoc               |  224 +
 solr/solr-ref-guide/src/running-solr.adoc       |  273 +
 .../src/running-your-analyzer.adoc              |   42 +
 solr/solr-ref-guide/src/schema-api.adoc         | 1228 ++++
 .../src/schema-browser-screen.adoc              |   21 +
 ...schema-factory-definition-in-solrconfig.adoc |   81 +
 solr/solr-ref-guide/src/schemaless-mode.adoc    |  268 +
 solr/solr-ref-guide/src/search.json             |   21 +
 solr/solr-ref-guide/src/searching.adoc          |   41 +
 solr/solr-ref-guide/src/securing-solr.adoc      |   19 +
 solr/solr-ref-guide/src/segments-info.adoc      |    9 +
 ...tting-up-an-external-zookeeper-ensemble.adoc |  182 +
 .../shards-and-indexing-data-in-solrcloud.adoc  |  105 +
 solr/solr-ref-guide/src/sitemap.xml             |   17 +
 .../src/solr-control-script-reference.adoc      |  634 ++
 .../src/solr-cores-and-solr-xml.adoc            |   22 +
 solr/solr-ref-guide/src/solr-field-types.adoc   |   24 +
 solr/solr-ref-guide/src/solr-glossary.adoc      |  188 +
 .../src/solr-jdbc-apache-zeppelin.adoc          |   54 +
 .../src/solr-jdbc-dbvisualizer.adoc             |  120 +
 .../src/solr-jdbc-python-jython.adoc            |  126 +
 solr/solr-ref-guide/src/solr-jdbc-r.adoc        |   37 +
 .../src/solr-jdbc-squirrel-sql.adoc             |   80 +
 solr/solr-ref-guide/src/solr-plugins.adoc       |   10 +
 solr/solr-ref-guide/src/solr-sunOnly-small.png  |  Bin 0 -> 7528 bytes
 .../solrcloud-configuration-and-parameters.adoc |   18 +
 ...lrcloud-with-legacy-configuration-files.adoc |   55 +
 solr/solr-ref-guide/src/solrcloud.adoc          |   31 +
 solr/solr-ref-guide/src/spatial-search.adoc     |  355 ++
 solr/solr-ref-guide/src/spell-checking.adoc     |  374 ++
 solr/solr-ref-guide/src/stream-screen.adoc      |   12 +
 .../src/streaming-expressions.adoc              | 1971 +++++++
 solr/solr-ref-guide/src/suggester.adoc          |  460 ++
 .../src/taking-solr-to-production.adoc          |  287 +
 .../src/the-dismax-query-parser.adoc            |  215 +
 .../src/the-extended-dismax-query-parser.adoc   |  247 +
 .../src/the-query-elevation-component.adoc      |  138 +
 .../src/the-standard-query-parser.adoc          |  402 ++
 .../solr-ref-guide/src/the-stats-component.adoc |  179 +
 .../src/the-term-vector-component.adoc          |  147 +
 .../solr-ref-guide/src/the-terms-component.adoc |  295 +
 .../src/the-well-configured-solr-instance.adoc  |   27 +
 solr/solr-ref-guide/src/thread-dump.adoc        |   33 +
 solr/solr-ref-guide/src/tokenizers.adoc         |  501 ++
 .../transforming-and-indexing-custom-json.adoc  |  362 ++
 .../src/transforming-result-documents.adoc      |  324 ++
 solr/solr-ref-guide/src/uima-integration.adoc   |  110 +
 ...anding-analyzers-tokenizers-and-filters.adoc |   44 +
 .../src/update-request-processors.adoc          |  346 ++
 .../src/updatehandlers-in-solrconfig.adoc       |  134 +
 .../src/updating-parts-of-documents.adoc        |  273 +
 .../src/upgrading-a-solr-cluster.adoc           |   89 +
 solr/solr-ref-guide/src/upgrading-solr.adoc     |   62 +
 .../src/uploading-data-with-index-handlers.adoc |  546 ++
 ...g-data-with-solr-cell-using-apache-tika.adoc |  345 ++
 ...store-data-with-the-data-import-handler.adoc |  940 +++
 solr/solr-ref-guide/src/using-javascript.adoc   |   13 +
 .../solr-ref-guide/src/using-jmx-with-solr.adoc |  108 +
 solr/solr-ref-guide/src/using-python.adoc       |   61 +
 .../src/using-solr-from-ruby.adoc               |  100 +
 solr/solr-ref-guide/src/using-solrj.adoc        |  145 +
 ...-the-solr-administration-user-interface.adoc |   34 +
 ...zookeeper-to-manage-configuration-files.adoc |   81 +
 solr/solr-ref-guide/src/v2-api.adoc             |  177 +
 .../src/velocity-response-writer.adoc           |  107 +
 solr/solr-ref-guide/src/velocity-search-ui.adoc |   12 +
 ...king-with-currencies-and-exchange-rates.adoc |   88 +
 solr/solr-ref-guide/src/working-with-dates.adoc |  157 +
 .../src/working-with-enum-fields.adoc           |   60 +
 ...rking-with-external-files-and-processes.adoc |  294 +
 .../src/zookeeper-access-control.adoc           |  148 +
 .../tools/BuildNavAndPDFBody.java               |  283 +
 .../tools/CheckLinksAndAnchors.java             |  229 +
 solr/solr-ref-guide/tools/ReducePDFSize.java    |   90 +
 .../solr/client/solrj/impl/CloudSolrClient.java |   23 +-
 .../solr/client/solrj/impl/HttpSolrClient.java  |   14 +
 .../solr/client/solrj/io/stream/JDBCStream.java |  342 +-
 .../solrj/io/stream/NormalizeEvaluator.java     |   76 +
 .../solrj/io/stream/ReverseEvaluator.java       |   67 +
 .../solrj/request/CollectionAdminRequest.java   |   35 +-
 .../solrj/request/CollectionApiMapping.java     |  407 ++
 .../client/solrj/request/CoreApiMapping.java    |  118 +
 .../solr/client/solrj/request/V2Request.java    |  125 +
 .../common/params/CollectionAdminParams.java    |   10 +
 .../apache/solr/common/params/CommonParams.java |    4 +-
 .../solr/common/util/CommandOperation.java      |  318 +
 .../client/solrj/io/stream/JDBCStreamTest.java  |   34 +-
 .../solrj/io/stream/StreamExpressionTest.java   |  111 +-
 .../client/solrj/request/TestV2Request.java     |   89 +
 .../java/org/apache/solr/SolrTestCaseJ4.java    |    2 +
 .../java/org/apache/solr/util/TestHarness.java  |    6 +-
 488 files changed, 55204 insertions(+), 2128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionMessageHandler.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
----------------------------------------------------------------------
diff --cc solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
index 2fa847c,23b2fb5..722cc1f
--- a/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RestoreCmd.java
@@@ -62,7 -67,8 +69,11 @@@ import static org.apache.solr.common.pa
  import static org.apache.solr.common.params.CollectionParams.CollectionAction.CREATESHARD;
  import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
  import static org.apache.solr.common.params.CommonParams.NAME;
- 
+ import static org.apache.solr.common.cloud.ZkStateReader.REPLICATION_FACTOR;
++import static org.apache.solr.common.cloud.ZkStateReader.NRT_REPLICAS;
++import static org.apache.solr.common.cloud.ZkStateReader.PULL_REPLICAS;
++import static org.apache.solr.common.cloud.ZkStateReader.TLOG_REPLICAS;
+ import static org.apache.solr.common.cloud.ZkStateReader.MAX_SHARDS_PER_NODE;
  
  public class RestoreCmd implements OverseerCollectionMessageHandler.Cmd {
    private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@@ -95,6 -102,22 +107,30 @@@
      String backupCollection = properties.getProperty(BackupManager.COLLECTION_NAME_PROP);
      DocCollection backupCollectionState = backupMgr.readCollectionState(location, backupName, backupCollection);
  
+     // Get the Solr nodes to restore a collection.
+     final List<String> nodeList = OverseerCollectionMessageHandler.getLiveOrLiveAndCreateNodeSetList(
+         zkStateReader.getClusterState().getLiveNodes(), message, RANDOM);
+ 
+     int numShards = backupCollectionState.getActiveSlices().size();
 -    int repFactor = message.getInt(REPLICATION_FACTOR, backupCollectionState.getReplicationFactor());
++    
++    int numNrtReplicas = getInt(message, NRT_REPLICAS, backupCollectionState.getNumNrtReplicas(), 0);
++    if (numNrtReplicas == 0) {
++      numNrtReplicas = getInt(message, REPLICATION_FACTOR, backupCollectionState.getReplicationFactor(), 0);
++    }
++    int numTlogReplicas = getInt(message, TLOG_REPLICAS, backupCollectionState.getNumTlogReplicas(), 0);
++    int numPullReplicas = getInt(message, PULL_REPLICAS, backupCollectionState.getNumPullReplicas(), 0);
++    int totalReplicasPerShard = numNrtReplicas + numTlogReplicas + numPullReplicas;
++    
+     int maxShardsPerNode = message.getInt(MAX_SHARDS_PER_NODE, backupCollectionState.getMaxShardsPerNode());
+     int availableNodeCount = nodeList.size();
 -    if ((numShards * repFactor) > (availableNodeCount * maxShardsPerNode)) {
++    if ((numShards * totalReplicasPerShard) > (availableNodeCount * maxShardsPerNode)) {
+       throw new SolrException(ErrorCode.BAD_REQUEST,
+           String.format(Locale.ROOT, "Solr cloud with available number of nodes:%d is insufficient for"
 -              + " restoring a collection with %d shards, replication factor %d and maxShardsPerNode %d."
++              + " restoring a collection with %d shards, total replicas per shard %d and maxShardsPerNode %d."
+               + " Consider increasing maxShardsPerNode value OR number of available nodes.",
 -              availableNodeCount, numShards, repFactor, maxShardsPerNode));
++              availableNodeCount, numShards, totalReplicasPerShard, maxShardsPerNode));
+     }
+ 
      //Upload the configs
      String configName = (String) properties.get(COLL_CONF);
      String restoreConfigName = message.getStr(COLL_CONF, configName);
@@@ -170,9 -193,16 +206,16 @@@
        inQueue.offer(Utils.toJSON(new ZkNodeProps(propMap)));
      }
  
-     // TODO how do we leverage the CREATE_NODE_SET / RULE / SNITCH logic in createCollection?
+     // TODO how do we leverage the RULE / SNITCH logic in createCollection?
  
      ClusterState clusterState = zkStateReader.getClusterState();
+ 
+     List<String> sliceNames = new ArrayList<>();
+     restoreCollection.getSlices().forEach(x -> sliceNames.add(x.getName()));
+ 
+     Map<ReplicaAssigner.Position, String> positionVsNodes = ocmh.identifyNodes(clusterState, nodeList,
 -        message, sliceNames, repFactor);
++        message, sliceNames, numNrtReplicas, numTlogReplicas, numPullReplicas);
+ 
      //Create one replica per shard and copy backed up data to it
      for (Slice slice : restoreCollection.getSlices()) {
        log.debug("Adding replica for shard={} collection={} ", slice.getName(), restoreCollection);
@@@ -180,12 -210,19 +223,25 @@@
        propMap.put(Overseer.QUEUE_OPERATION, CREATESHARD);
        propMap.put(COLLECTION_PROP, restoreCollectionName);
        propMap.put(SHARD_ID_PROP, slice.getName());
 +      
-       if (restoreCollection.getNumNrtReplicas() != null && restoreCollection.getNumNrtReplicas() >= 1) {
++      if (numNrtReplicas >= 1) {
 +        propMap.put(REPLICA_TYPE, Replica.Type.NRT.name());
-       } else if (restoreCollection.getNumTlogReplicas() != null && restoreCollection.getNumTlogReplicas() >= 1) {
++      } else if (numTlogReplicas >= 1) {
 +        propMap.put(REPLICA_TYPE, Replica.Type.TLOG.name());
 +      }
+ 
+       // Get the first node matching the shard to restore in
+       String node;
+       for (Map.Entry<ReplicaAssigner.Position, String> pvn : positionVsNodes.entrySet()) {
+         ReplicaAssigner.Position position = pvn.getKey();
+         if (position.shard == slice.getName()) {
+           node = pvn.getValue();
+           propMap.put(CoreAdminParams.NODE, node);
+           positionVsNodes.remove(position);
+           break;
+         }
+       }
+ 
        // add async param
        if (asyncId != null) {
          propMap.put(ASYNC, asyncId);
@@@ -224,51 -261,30 +280,52 @@@
      //refresh the location copy of collection state
      restoreCollection = zkStateReader.getClusterState().getCollection(restoreCollectionName);
  
-     //Add the remaining replicas for each shard, considering it's type
-     int numNrtReplicas = restoreCollection.getNumNrtReplicas() != null?
-         restoreCollection.getNumNrtReplicas():0;
-     if (numNrtReplicas == 0) {
-       numNrtReplicas = restoreCollection.getReplicationFactor() != null?
-           restoreCollection.getReplicationFactor():0;
-     }
-     int numTlogReplicas = restoreCollection.getNumTlogReplicas() != null?
-         restoreCollection.getNumTlogReplicas():0;
-     int numPullReplicas = restoreCollection.getNumPullReplicas() != null?
-         restoreCollection.getNumPullReplicas():0;
-     
-     int createdNrtReplicas = 0, createdTlogReplicas = 0, createdPullReplicas = 0;
-     
-     // We already created either a REALTIME or an TLOG replica as leader
-     if (numNrtReplicas > 0) {
-       createdNrtReplicas++;
-     } else if (createdTlogReplicas > 0) {
-       createdTlogReplicas++;
-     }
-     
-     int totalReplicasPerShard = numNrtReplicas + numTlogReplicas + numPullReplicas;
-     
 -    //Add the remaining replicas for each shard
 -    Integer numReplicas = restoreCollection.getReplicationFactor();
 -    if (numReplicas != null && numReplicas > 1) {
 +    if (totalReplicasPerShard > 1) {
        log.info("Adding replicas to restored collection={}", restoreCollection);
--
        for (Slice slice : restoreCollection.getSlices()) {
 -        for (int i = 1; i < numReplicas; i++) {
 -          log.debug("Adding replica for shard={} collection={} ", slice.getName(), restoreCollection);
++
++        //Add the remaining replicas for each shard, considering it's type
++        int createdNrtReplicas = 0, createdTlogReplicas = 0, createdPullReplicas = 0;
++
++        // We already created either a NRT or an TLOG replica as leader
++        if (numNrtReplicas > 0) {
++          createdNrtReplicas++;
++        } else if (createdTlogReplicas > 0) {
++          createdTlogReplicas++;
++        }
++        
 +        for (int i = 1; i < totalReplicasPerShard; i++) {
 +          Replica.Type typeToCreate;
 +          if (createdNrtReplicas < numNrtReplicas) {
 +            createdNrtReplicas++;
 +            typeToCreate = Replica.Type.NRT;
 +          } else if (createdTlogReplicas < numTlogReplicas) {
 +            createdTlogReplicas++;
 +            typeToCreate = Replica.Type.TLOG;
 +          } else {
 +            createdPullReplicas++;
 +            typeToCreate = Replica.Type.PULL;
++            assert createdPullReplicas <= numPullReplicas: "Unexpected number of replicas";
 +          }
-           
++
 +          log.debug("Adding replica for shard={} collection={} of type {} ", slice.getName(), restoreCollection, typeToCreate);
            HashMap<String, Object> propMap = new HashMap<>();
            propMap.put(COLLECTION_PROP, restoreCollectionName);
            propMap.put(SHARD_ID_PROP, slice.getName());
 +          propMap.put(REPLICA_TYPE, typeToCreate.name());
+ 
+           // Get the first node matching the shard to restore in
+           String node;
+           for (Map.Entry<ReplicaAssigner.Position, String> pvn : positionVsNodes.entrySet()) {
+             ReplicaAssigner.Position position = pvn.getKey();
+             if (position.shard == slice.getName()) {
+               node = pvn.getValue();
+               propMap.put(CoreAdminParams.NODE, node);
+               positionVsNodes.remove(position);
+               break;
+             }
+           }
+ 
            // add async param
            if (asyncId != null) {
              propMap.put(ASYNC, asyncId);
@@@ -282,4 -298,4 +339,9 @@@
  
      log.info("Completed restoring collection={} backupName={}", restoreCollection, backupName);
    }
++
++  private int getInt(ZkNodeProps message, String propertyName, Integer default1, int default2) {
++    Integer value = message.getInt(REPLICATION_FACTOR, default1);
++    return value!=null?value:default2;
++  }
  }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/core/src/java/org/apache/solr/cloud/overseer/ZkStateWriter.java
----------------------------------------------------------------------

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

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
----------------------------------------------------------------------
diff --cc solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
index e488c53,3414759..a6d130e
--- a/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
+++ b/solr/core/src/test/org/apache/solr/cloud/AbstractCloudBackupRestoreTestCase.java
@@@ -28,8 -30,8 +30,9 @@@ import java.util.TreeMap
  import org.apache.lucene.util.TestUtil;
  import org.apache.solr.client.solrj.SolrQuery;
  import org.apache.solr.client.solrj.SolrServerException;
+ import org.apache.solr.client.solrj.embedded.JettySolrRunner;
  import org.apache.solr.client.solrj.impl.CloudSolrClient;
 +import org.apache.solr.client.solrj.impl.HttpSolrClient;
  import org.apache.solr.client.solrj.request.CollectionAdminRequest;
  import org.apache.solr.client.solrj.request.CollectionAdminRequest.ClusterProp;
  import org.apache.solr.client.solrj.response.RequestStatusState;
@@@ -237,10 -235,24 +240,24 @@@ public abstract class AbstractCloudBack
        CollectionAdminRequest.Restore restore = CollectionAdminRequest.restoreCollection(restoreCollectionName, backupName)
            .setLocation(backupLocation).setRepositoryName(getBackupRepoName());
  
 -      if (origShardToDocCount.size() > cluster.getJettySolrRunners().size()) {
 +      if (backupCollection.getReplicas().size() > cluster.getJettySolrRunners().size()) {
          // may need to increase maxShardsPerNode (e.g. if it was shard split, then now we need more)
 -        restore.setMaxShardsPerNode(origShardToDocCount.size());
 +        restore.setMaxShardsPerNode((int)Math.ceil(backupCollection.getReplicas().size()/cluster.getJettySolrRunners().size()));
        }
+ 
+       if (rarely()) { // Try with createNodeSet configuration
+         int nodeSetSize = cluster.getJettySolrRunners().size() / 2;
+         List<String> nodeStrs = new ArrayList<>(nodeSetSize);
+         Iterator<JettySolrRunner> iter = cluster.getJettySolrRunners().iterator();
+         for (int i = 0; i < nodeSetSize ; i++) {
+           nodeStrs.add(iter.next().getNodeName());
+         }
+         restore.setCreateNodeSet(String.join(",", nodeStrs));
+         restore.setCreateNodeSetShuffle(usually());
+         // we need to double maxShardsPerNode value since we reduced number of available nodes by half.
+         restore.setMaxShardsPerNode(origShardToDocCount.size() * 2);
+       }
+ 
        Properties props = new Properties();
        props.setProperty("customKey", "customVal");
        restore.setProperties(props);

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

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
----------------------------------------------------------------------
diff --cc solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
index d5a2af6,0c1116a..0b8dd74
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/CollectionAdminRequest.java
@@@ -48,6 -45,10 +48,9 @@@ import org.apache.solr.common.params.So
  import org.apache.solr.common.util.ContentStream;
  import org.apache.solr.common.util.NamedList;
  
 -import static org.apache.solr.common.params.CollectionAdminParams.COUNT_PROP;
+ import static org.apache.solr.common.params.CollectionAdminParams.CREATE_NODE_SET_PARAM;
+ import static org.apache.solr.common.params.CollectionAdminParams.CREATE_NODE_SET_SHUFFLE_PARAM;
+ 
  /**
   * This class is experimental and subject to change.
   *
@@@ -435,10 -410,9 +438,11 @@@ public abstract class CollectionAdminRe
      public Create setNumShards(Integer numShards) {this.numShards = numShards; return this; }
      public Create setMaxShardsPerNode(Integer numShards) { this.maxShardsPerNode = numShards; return this; }
      public Create setAutoAddReplicas(boolean autoAddReplicas) { this.autoAddReplicas = autoAddReplicas; return this; }
 -    public Create setRealtimeReplicas(Integer realtimeReplicas) { this.realtimeReplicas = realtimeReplicas; return this;}
 -    @Deprecated
 -    public Create setReplicationFactor(Integer repl) { this.replicationFactor = repl; return this; }
 +    public Create setNrtReplicas(Integer nrtReplicas) { this.nrtReplicas = nrtReplicas; return this;}
 +    public Create setTlogReplicas(Integer tlogReplicas) { this.tlogReplicas = tlogReplicas; return this;}
++    public Create setPullReplicas(Integer pullReplicas) { this.pullReplicas = pullReplicas; return this;}
 +
 +    public Create setReplicationFactor(Integer repl) { this.nrtReplicas = repl; return this; }
      public Create setStateFormat(Integer stateFormat) { this.stateFormat = stateFormat; return this; }
      public Create setRule(String... s){ this.rule = s; return this; }
      public Create setSnitch(String... s){ this.snitch = s; return this; }
@@@ -449,13 -423,9 +453,14 @@@
      public String getShards() { return  shards; }
      public Integer getNumShards() { return numShards; }
      public Integer getMaxShardsPerNode() { return maxShardsPerNode; }
 -    public Integer getReplicationFactor() { return replicationFactor; }
 +    
 +    public Integer getReplicationFactor() { return getNumNrtReplicas(); }
 +    public Integer getNumNrtReplicas() { return nrtReplicas; }
      public Boolean getAutoAddReplicas() { return autoAddReplicas; }
 -    public Integer getRealtimeReplicas() { return realtimeReplicas; }
 +    public Integer getNrtReplicas() { return nrtReplicas; }
 +    public Integer getTlogReplicas() {return tlogReplicas;}
++    public Integer getPullReplicas() {return pullReplicas;}
 +
      public Integer getStateFormat() { return stateFormat; }
      
      /**

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/096ed90b/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
----------------------------------------------------------------------