#/**
# * 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=1
zkNumRetries=0
zkRetryStartBackoffMillis=100
zkRetryMaxBackoffMillis=200
# bkc zookeeper settings
bkcZKSessionTimeoutSeconds=60
bkcZKNumRetries=20
bkcZKRetryStartBackoffMillis=100
bkcZKRetryMaxBackoffMillis=200

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

# bookkeeper client timeouts
bkcWriteTimeoutSeconds=2
bkcReadTimeoutSeconds=2
bkcNumWorkerThreads=32
bkc.numChannelsPerBookie=1
bkc.enableTaskExecutionStats=true
bkc.connectTimeoutMillis=200
bkc.enableParallelRecoveryRead=true
bkc.recoveryReadBatchSize=5
bkc.enablePerHostStats=true

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

# Metadata Settings

# ledger metadata version that supports sequence id
ledger-metadata-layout=5

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

### Recovery Related Settings

# recover log segments in background
recoverLogSegmentsInBackground=false
# disable max id in proxy
maxIdSanityCheck=false
# use allocator pool for proxy
enableLedgerAllocatorPool=true
# ledger allocator pool path
ledgerAllocatorPoolPath=.write_proxy_allocation_pool
# ledger allocator pool size
ledgerAllocatorPoolCoreSize=40
# 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
bkc.writeRequestToChannelAsync=true

# enable immediate flush
enableImmediateFlush=true
# 0k output buffer
output-buffer-size=0
# disable periodical flush
periodicFlushFrequencyMilliSeconds=0
enableTaskExecutionStats=true
taskExecutionWarnTimeMicros=100000

### Ledger Rolling Related Settings

# retention policy
retention-size=4
# rolling ledgers (enable time rolling): 120 minutes = 2 hours
rolling-interval=120
# max logsegment bytes : 2GB
maxLogSegmentBytes=2147483648
# rolling concurrency
logSegmentRollingConcurrency=1
# disable sanityCheckDelete
sanityCheckDelete=false
# compression codec
compressionType=lz4

### Per Stream Stats
enablePerStreamStat=true

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

# proxy server settings
server_mode=DURABLE
serviceTimeoutMs=60000
streamProbationTimeoutMs=120000
server_threads=16
server_dlsn_version=1
server_enable_perstream_stat=true
server_graceful_shutdown_period_ms=20000

# write limits
perWriterOutstandingWriteLimit=-1
globalOutstandingWriteLimit=-1
outstandingWriteLimitDarkmode=false

# bytes per second limit applied at the host level (50MBps on 1Gib machines)
bpsHardServiceLimit=52428800
# bytes per second limit after which no new streams may be acquired (65MBps on 1Gib machines)
bpsStreamAcquireServiceLimit=47185920

# limit the maximum number of streams
maxAcquiredPartitionsPerProxy=-1
