<!--
 ! 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.
 !-->
<asterixConfiguration xmlns="asterixconf">

	<property>
		<name>nc.java.opts</name>
		<value>-Xmx1536m</value>
		<description>JVM parameters for each Node Contoller (NC)</description>
	</property>

	<property>
		<name>cc.java.opts</name>
		<value>-Xmx1024m</value>
		<description>JVM parameters for each Cluster Contoller (CC)
		</description>
	</property>

        <property>
                <name>max.wait.active.cluster</name>
                <value>60</value>
                <description>Maximum wait (in seconds) for a cluster to be ACTIVE (all nodes are available)
                        before a submitted query/statement can be executed. (Default = 60 seconds)
                </description>
        </property>

	<property>
		<name>storage.buffercache.pagesize</name>
		<value>131072</value>
		<description>The page size in bytes for pages in the buffer cache.
			(Default = "131072" // 128KB)
		</description>
	</property>

	<property>
		<name>storage.buffercache.size</name>
		<value>536870912</value>
		<description>The size of memory allocated to the disk buffer cache.
			The value should be a multiple of the buffer cache page size(Default
			= "536870912" // 512MB)
		</description>
	</property>

	<property>
		<name>storage.buffercache.maxopenfiles</name>
		<value>214748364</value>
		<description>The maximum number of open files in the buffer cache.
			(Default = "214748364")
		</description>
	</property>

	<property>
		<name>storage.memorycomponent.pagesize</name>
		<value>131072</value>
		<description>The page size in bytes for pages allocated to memory
			components. (Default = "131072" // 128KB)
		</description>
	</property>

	<property>
		<name>storage.memorycomponent.numpages</name>
		<value>256</value>
		<description>The number of pages to allocate for a memory component.
			(Default = 256)
		</description>
	</property>
	
	<property>
		<name>storage.metadata.memorycomponent.numpages</name>
		<value>64</value>
		<description>The number of pages to allocate for a memory component.
			(Default = 64)
		</description>
	</property>

    <property>
		<name>storage.memorycomponent.numcomponents</name>
		<value>2</value>
		<description>The number of memory components to be used per lsm index.
			(Default = 2)
		</description>
	</property>
	
	<property>
		<name>storage.memorycomponent.globalbudget</name>
		<value>536870912</value>
		<description>The total size of memory in bytes that the sum of all
			open memory
			components cannot exceed. (Default = "536870192" // 512MB)
		</description>
	</property>

	<property>
		<name>storage.lsm.bloomfilter.falsepositiverate</name>
		<value>0.01</value>
		<description>The maximum acceptable false positive rate for bloom
			filters associated with LSM indexes. (Default = "0.01" // 1%)
		</description>
	</property>
	
	<property>
		<name>txn.log.buffer.numpages</name>
		<value>8</value>
		<description>The number of in-memory log buffer pages. (Default = "8")
		</description>
	</property>

	<property>
		<name>txn.log.buffer.pagesize</name>
		<value>524288</value>
		<description>The size of pages in the in-memory log buffer. (Default =
			"524288" // 512KB)
		</description>
	</property>

	<property>
		<name>txn.log.partitionsize</name>
		<value>2147483648</value>
		<description>The maximum size of a log file partition allowed before
			rotating the log to the next partition. (Default = "2147483648" //
			2GB)
		</description>
	</property>

	<property>
		<name>txn.log.checkpoint.lsnthreshold</name>
		<value>67108864</value>
		<description>The size of the window that the maximum LSN is allowed to
			be ahead of the checkpoint LSN by. (Default = ""67108864" // 64M)
		</description>
	</property>

	<property>
		<name>txn.log.checkpoint.pollfrequency</name>
		<value>120</value>
		<description>The time in seconds between that the checkpoint thread
			waits between polls. (Default = "120" // 120s)
		</description>
	</property>

	<property>
		<name>txn.log.checkpoint.history</name>
		<value>0</value>
		<description>The number of old log partition files to keep before
			discarding. (Default = "0")
		</description>
	</property>

	<property>
		<name>txn.lock.escalationthreshold</name>
		<value>1000</value>
		<description>The number of entity level locks that need to be acquired
			before the locks are coalesced and escalated into a dataset level
			lock. (Default = "1000")
		</description>
	</property>

	<property>
		<name>txn.lock.shrinktimer</name>
		<value>5000</value>
		<description>The time in milliseconds to wait before deallocating
			unused lock manager memory. (Default = "5000" // 5s)
		</description>
	</property>

	<property>
		<name>txn.lock.timeout.waitthreshold</name>
		<value>60000</value>
		<description>The time in milliseconds to wait before labeling a
			transaction which has been waiting for a lock timed-out. (Default =
			"60000" // 60s)
		</description>
	</property>

	<property>
		<name>txn.lock.timeout.sweepthreshold</name>
		<value>10000</value>
		<description>The time in milliseconds the timeout thread waits between
			sweeps to detect timed-out transactions. (Default = "10000" // 10s)
		</description>
	</property>

	<property>
		<name>compiler.sortmemory</name>
		<value>33554432</value>
		<description>The amount of memory in bytes given to sort operations.
			(Default = "33554432" // 32mb)
		</description>
	</property>

	<property>
		<name>compiler.joinmemory</name>
		<value>33554432</value>
		<description>The amount of memory in bytes given to join operations.
			(Default = "33554432" // 32mb)
		</description>
	</property>

	<property>
		<name>compiler.framesize</name>
		<value>131072</value>
		<description>The Hyracks frame size that the compiler configures per
			job. (Default = "131072" // 128KB)
		</description>
	</property>

        <property>
                <name>compiler.pregelix.home</name>
                <value>~/pregelix</value>
        </property>

	<property>
		<name>web.port</name>
		<value>19001</value>
		<description>The port for the ASTERIX web interface. (Default = 19001)
		</description>
	</property>

	<property>
		<name>api.port</name>
		<value>19002</value>
		<description>The port for the ASTERIX API server. (Default = 19002)
		</description>
	</property>

	<property>
		<name>log.level</name>
		<value>INFO</value>
		<description>The minimum log level to be displayed. (Default = INFO)
		</description>
	</property>

	<property>
		<name>plot.activate</name>
		<value>false</value>
		<description>Enabling plot of Algebricks plan to tmp folder. (Default = false)
		</description>
	</property>

</asterixConfiguration>
