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

[DBOptions]
 # set by jni: options.setCreateIfMissing
 create_if_missing=true
 # set by jni: options.setInfoLogLevel
 info_log_level=INFO_LEVEL
 # set by jni: options.setKeepLogFileNum
 keep_log_file_num=30
 # set by jni: options.setLogFileTimeToRoll
 log_file_time_to_roll=86400
 # set by jni: options.setMaxBackgroundJobs or options.setIncreaseParallelism
 max_background_jobs=2
 # set by jni: options.setMaxSubcompactions
 max_subcompactions=1
 # set by jni: options.setMaxTotalWalSize
 max_total_wal_size=536870912
 # set by jni: options.setMaxOpenFiles
 max_open_files=-1
 # set by jni: options.setDeleteObsoleteFilesPeriodMicros
 delete_obsolete_files_period_micros=3600000000

[CFOptions "default"]
 # set by jni: options.setCompressionType
 compression=kLZ4Compression
 # set by jni: options.setWriteBufferSize
 write_buffer_size=67108864
 # set by jni: options.setMaxWriteBufferNumber
 max_write_buffer_number=4
 # set by jni: options.setNumLevels
 num_levels=7
 # set by jni: options.setLevelZeroFileNumCompactionTrigger
 level0_file_num_compaction_trigger=4
 # set by jni: options.setMaxBytesForLevelBase
 max_bytes_for_level_base=268435456
 # set by jni: options.setTargetFileSizeBase
 target_file_size_base=67108864
 # set by jni: options.setLevelCompactionDynamicLevelBytes
 level_compaction_dynamic_level_bytes=true

[TableOptions/BlockBasedTable "default"]
 # set by jni: tableOptions.setBlockSize
 block_size=65536
 # set by jni: tableOptions.setBlockCache
 block_cache=206150041
 # set by jni: tableOptions.setFormatVersion
 format_version=2
 # set by jni: tableOptions.setChecksumType
 checksum=kxxHash
 # set by jni: tableOptions.setFilterPolicy, bloomfilter:[bits_per_key]:[use_block_based_builder]
 filter_policy=rocksdb.BloomFilter:10:false
 # set by jni: tableOptions.setCacheIndexAndFilterBlocks
 cache_index_and_filter_blocks=true
