<?xml version="1.0" ?>

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

<config>
  <luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
  <schemaFactory class="ClassicIndexSchemaFactory"/>
  <dataDir>${solr.data.dir:}</dataDir>

  <xi:include href="solrconfig.snippet.randomindexconfig.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>

  <updateHandler class="solr.DirectUpdateHandler2">
  </updateHandler>

  <requestHandler name="/select" class="solr.SearchHandler">
    <bool name="httpCaching">true</bool>
  </requestHandler>

  <!-- test query parameter defaults -->
  <requestHandler name="/defaults" class="solr.SearchHandler">

  </requestHandler>

  <!-- test query parameter defaults -->
  <requestHandler name="/lazy" class="solr.SearchHandler" startup="lazy">
  </requestHandler>

  <requestHandler name="/replication" class="solr.ReplicationHandler">
    <lst name="follower">
      <str name="leaderUrl">http://127.0.0.1:TEST_PORT/solr/collection1</str>
      <str name="pollInterval">00:00:01</str>
      <str name="compression">COMPRESSION</str>
    </lst>
  </requestHandler>

  <requestDispatcher>
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="-1"/>
    <httpCaching lastModifiedFrom="openTime" etagSeed="Solr" never304="false">
      <cacheControl>max-age=30, public</cacheControl>
    </httpCaching>
  </requestDispatcher>

</config>
