#
# 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=32
 # 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=5
 # 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