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

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

# bookkeeper client timeouts
bkcReadTimeoutSeconds=20
bkcNumWorkerThreads=16
bkc.numChannelsPerBookie=1
bkc.enableTaskExecutionStats=true
bkc.connectTimeoutMillis=200

### Readers
bkc.firstSpeculativeReadTimeout = 10
bkc.maxSpeculativeReadTimeout = 30
bkc.firstSpeculativeReadLACTimeout = 10
bkc.maxSpeculativeReadLACTimeout = 2000
bkc.ensemblePlacementPolicy=org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy
ReadAheadMaxEntries = 1000
ReadAheadBatchSize = 4
numWorkerThreads = 16
readLACLongPollTimeout = 10000
traceReadAheadDeliveryLatency = true
traceReadAheadMetadataChanges = true
readTimeout = 20

### Writers

# Metadata Settings
# ledger metadata version that supports sequence id
ledger-metadata-layout=5
# use allocator pool for proxy
enableLedgerAllocatorPool=false
# check stream exists or not
createStreamIfNotExists=true
# encode dc id in version
encodeDCIDInVersion=true

### Write Performance Related Settings

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

# flush policies
enableImmediateFlush=false
output-buffer-size=16000
periodicFlushFrequencyMilliSeconds=10

# 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

### Stats
# Exporting codahale stats
codahaleStatsHttpPort=10002
