# Configuration of the UCW library and related utilities (included by cf/sherlock)

######## Memory Mapped Access to Files ##########################################

# Whenever you specify 0 for I/O buffer size, memory mapping is used instead.
FBMMap {

# Map this many bytes at once (needs to be a multiple of CPU page size)
WindowSize		1M

# When in need to extend a file, grow it by so many bytes (>= page size)
ExtendSize		1M

}

######## Direct Streamed I/O on Files ###########################################

FBDirect {

# Debug: Cheat by turning off O_DIRECT
#Cheat			1

}

######## Atomic Multi-Threaded I/O on Files #####################################

FBAtomic {

# Enable tracing
#Trace			1

}

######## Parametrized I/O on Files ##############################################

FBParam {

Defaults {

# Access type (std|direct|mmap).
Type			std

# Size of I/O buffer. Something of the order of megabytes for fast disks is recommended for direct I/O.
BufSize			64K

# Optimize for mixed forward/backward reading (standard I/O only)
KeepBackBuf		0

# Perform read-ahead (direct I/O only)
ReadAhead		1

# Maximum number of write-back requests queued (direct I/O only)
WriteBack		1

}

}

######## Temporary files ########################################################

Tempfiles {

# By default, we use the system's default temporary directory ($TMPDIR or /tmp),
# but sometimes it is better to store the temporary files in the local tree.
Dir			tmp

# Prefix of temporary file names
Prefix			temp-

# By default, we append a random number to Prefix to get a temporary file name.
# If Prefix points to a directory that is not writable by malicious users,
# we can be less careful and use more consistent names of temporary files
# formed by adding "pid(-tid)-counter" instead.
PublicDir		0

}

######## Threads ################################################################

Threads {

# Default thread stack size
DefaultStackSize	64K

}

######## Sorter #################################################################

Sorter {

# Trace sorting (1=basic statistics, 2=more stats, 3 and more for debugging)
Trace			2

# Trace array sorting (internal sorters)
TraceArray		0

# How much memory is the sorter allowed to use
SortBuffer		4M

# File access used by the sorter (see FBParam section for details)
FileAccess		std 256K

# Use a different file access method for small inputs (less than the specified size)
SmallFileAccess		std 64K
SmallInput		64M

# Min-/Maximum number of bits to use in the external radix-sort (beware, we will open
# 1+2^this files and require a stream buffer for each of them; however, while we are
# doing that, the sort buffer is not allocated). Set both to zero to disable radix-sorting.
MinRadixBits		2
MaxRadixBits		4

# The same for multi-way merging. The memory requirements are also the same,
# but please keep in mind that this can create lots of SortBuffer-sized files,
# so it is probably better to keep it disabled if you have a small SortBuffer.
MinMultiwayBits		2
MaxMultiwayBits		4

# If we did not use radix-sorter to the full width, we still might add some more
# bits to the width to get chunks which are even smaller than SortBuffer, because
# it can speed up internal sorting later. However, we also want to avoid small
# files, so we add only a little.
AddRadixBits		2

# Number of threads used for sorting (0=disable threading)
Threads			0

# Minimum size of input (in bytes) to consider multi-threaded internal sorting
ThreadThreshold		1M

# Chunks smaller than ThreadThreshold are sorted by a sequential algorithm, but
# if they are at least of the following size, different chunks are sorted in
# parallel. There is a slight space penalty for setting up the parallel process,
# so better avoid setting this number too small.
ThreadChunk		256

# Internal radix-sort stops at this size and switches to QuickSort (must be >0)
RadixThreshold		4K

# Debugging switches (see the source)
Debug			0

}

######## URL processing #########################################################

URL {

# Ignore spaces at the start/end of a URL
IgnoreSpaces		1

# Ignore underflows in relative paths (/../ from root)
IgnoreUnderflow		1

# Some URL's with many repeated components are filtered out to avoid infinite
# URL's (e.g. http://czech.recoder.cz/win/iso/win/iso/file.html, or
# http://a.com/?a=b&a=b&a=b, ...).
# The URL is split to components divided by any of the specified separators.
# Then the separators are forgotten and the components between them are
# examined.
ComponentSeparators	/&?

# URL is filtered out if there's a sequence of components in a row with at most
# MaxRepeatLength components and the sequence is repeated more than MinRepeatCount
# times.  Default values are high MinRepeatCount and low MaxRepeatLength, so the
# mechanism is disabled.
MinRepeatCount		4
MaxRepeatLength		4

# Maximum number of occurences of a single component in the entire URL (possibly interleaved
# by different components). The detector is disabled by default.
MaxOccurences		4

}

######## Logging ################################################################

Logging {

# In this section, you can define various logging streams which can be referred to by other sections.

# Stream {
#	# The name of the stream
#	Name		test-log
#
#	# When it should log the messages to a file, a name of the file should be specified.
#	# Escape sequences for current date and time as described in strftime(3) can be used.
#	FileName	log/test-%Y%m%d
#
#	# Instead of a file, a syslog facility can be specified. See syslog(3) for an explanation.
#	SyslogFacility	daemon
#
#	# You can request that syslog includes a process ID in each message. Due to inflexibility
#	# of the syslog protocol, all syslog streams active at a moment must agree on this setting.
#	# (default: 0)
#	SyslogPID	1
#
#	# When logging to files, timestamps with microsecond precision can be requested. (default: 0)
#	Microseconds	1
#
#	# Messages logged to this stream can be restricted to a subset of severity levels.
#	# Available levels are: debug info warn error info_r warn_r error_r fatal.
#	# This configuration item is a bitmap with a default of "all", so we need the ":reset" operator.
#	Levels:reset	info warn error fatal
#
#	# Similarly, messages can be restricted to a subset of message types. The types are
#	# specific for each program. This configuration item is a list of type names; by default
#	# it is empty, which is equivalent to all types being enabled.
#	Types:reset	default foo
#
#	# Should the message types be logged? They usually do not carry much useful
#	# information for the viewer of the log, so they are not included by default,
#	# but you might want to see them when tuning the Types setting. (default: 0)
#	ShowTypes	1
#
#	# If an error occurs when logging a message to this stream, the program normally
#	# logs a special error message to the other streams and continues running. You can
#	# however request to exit the program in such cases, so that the log files are
#	# guaranteed to be complete. (default: 0)
#	ErrorsFatal	1
#
#	# Let stderr of the program point to this file-based log_stream (default: 0)
#	StdErrFollows	1
#
#	# Some events are logworthy, but they could happen too frequently and flood the log.
#	# You can avoid the flooding by setting up a rate limiter for a specific subset of
#	# message types. If more limiters match the type of a message, only the last one applies.
#	Limit {
#		# A list of message types (default: empty = all types)
#		Types		default foo
#
#		# The maximum allowed sustained rate (messages/second, may be fractional)
#		Rate		1
#
#		# Maximum length of a burst temporarily exceeding the rate (default: try to guess)
#		Burst		2
#	}
#
#	# The messages that have passed the filters and limiters can be forwarded to other
#	# log streams. Logging loops are not healthy for your program :)  (a list of stream names)
#	Substream	another-stream
# }

}
