<!--
  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.
  -->

<solr>
  <str name="adminHandler">testAdminHandler</str>
  <str name="collectionsHandler">testCollectionsHandler</str>
  <int name="coreLoadThreads">11</int>
  <str name="coreRootDirectory">${coreRootDirectory:testCoreRootDirectory}</str>
  <str name="infoHandler">testInfoHandler</str>
  <str name="configSetsHandler">testConfigSetsHandler</str>
  <str name="managementPath">testManagementPath</str>
  <str name="sharedLib">testSharedLib</str>
  <str name="allowPaths">${solr.allowPaths:}</str>
  <str name="shareSchema">${shareSchema:true}</str>
  <int name="transientCacheSize">66</int>
  <int name="replayUpdatesThreads">100</int>
  <int name="maxBooleanClauses">42</int>

  <solrcloud>
    <int name="distribUpdateConnTimeout">22</int>
    <int name="distribUpdateSoTimeout">33</int>
    <int name="maxUpdateConnections">3</int>
    <int name="maxUpdateConnectionsPerHost">37</int>
    <int name="leaderVoteWait">55</int>
    <str name="host">testHost</str>
    <str name="hostContext">testHostContext</str>
    <int name="hostPort">${hostPort:44}</int>
    <int name="zkClientTimeout">77</int>
    <str name="zkHost">testZkHost</str>
    <str name="zkACLProvider">DefaultZkACLProvider</str>
    <str name="zkCredentialsProvider">DefaultZkCredentialsProvider</str>
  </solrcloud>

  <logging>
    <str name="class">testLoggingClass</str>
    <str name="enabled">true</str>
    <watcher>
      <int name="size">88</int>
      <int name="threshold">99</int>
    </watcher>
  </logging>

  <shardHandlerFactory name="testShardHandlerFactory" class="testHttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:100}</int>
    <int name="connTimeout">${connTimeout:110}</int>
  </shardHandlerFactory>

  <backup>
    <repository name="local" class="a.b.C" default="true"/>
  </backup>

</solr>
