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

########################
# ZooKeeper Client Settings
########################

# zookeeper settings
zkSessionTimeoutSeconds=30
zkNumRetries=0
zkRetryStartBackoffMillis=100
zkRetryMaxBackoffMillis=200
# bkc zookeeper settings
bkcZKSessionTimeoutSeconds=60
bkcZKNumRetries=20
bkcZKRetryStartBackoffMillis=100
bkcZKRetryMaxBackoffMillis=200

########################
# BookKeeper Client Settings
########################

# bookkeeper client timeouts
bkcWriteTimeoutSeconds=10
bkcReadTimeoutSeconds=1
bkcNumWorkerThreads=16
# bkcNumIOThreads=16
bkc.numChannelsPerBookie=1
bkc.enableTaskExecutionStats=true
bkc.connectTimeoutMillis=1000
bkc.enablePerHostStats=true

########################
# DL Settings
########################

# lock timeout
lockTimeoutSeconds=0
# dl worker threads
numWorkerThreads=16

### Recovery Related Settings

# recover log segments in background
recoverLogSegmentsInBackground=true
# disable max id in proxy
maxIdSanityCheck=true
# use allocator pool for proxy
enableLedgerAllocatorPool=false
# ledger allocator pool size
ledgerAllocatorPoolCoreSize=20
# check stream exists or not
createStreamIfNotExists=true
# encode dc id in version
encodeDCIDInVersion=true
# logSegmentNameVersion
logSegmentNameVersion=1

### Write Performance Related Settings

# ensemble size
ensemble-size=3
write-quorum-size=3
ack-quorum-size=2
bkc.ensemblePlacementPolicy=org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy
bkc.delayEnsembleChange=true

# sync settings
# buffer size is large because when we rewrite we perform a very large write to persist
# all queue state at once (up to max queue memory size, ex. 16MB). the write will be
# throttled if it takes too long, which can hurt performance, so important to optimize
# for this case.
output-buffer-size=512000
enableImmediateFlush=false
periodicFlushFrequencyMilliSeconds=6
logFlushTimeoutSeconds=120

### Ledger Rolling Related Settings

# retention policy
retention-size=0
# rolling ledgers (disable time rolling/enable size rolling)
rolling-interval=0

# max logsegment bytes=2GB
# much larger than max journal size, effectively never roll and let drpc do it
maxLogSegmentBytes=2147483648

# rolling concurrency
logSegmentRollingConcurrency=1
# disable sanityCheckDelete
sanityCheckDelete=false
ledgerAllocatorPoolName=drpc-alloc-pool

### Readahead settings

enableReadAhead=true
ReadAheadBatchSize=10
ReadAheadMaxEntries=100
ReadAheadWaitTime=10

### Rate limit

rpsSoftWriteLimit=1
rpsHardWriteLimit=5
rpsHardServiceLimit=15

### Config

dynamicConfigReloadIntervalSec=5
