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

[master]
; host address of master, required; must be configured at network card, enabled
hostName=127.0.0.1
; port that master listens to, optional; default is 8715
port=8715
; port that master web console listens to
webPort=8080
; interval of re-balance, optional; default is 30000ms
consumerBalancePeriodMs=30000
; delay of first re-balance after master start; turn up when cluster grown
firstBalanceDelayAfterStartMs=60000
; timeout of consumer heartbeat, optional; default is 30000ms
consumerHeartbeatTimeoutMs=30000
; timeout of producer heartbeat, optional; default is 45000ms
producerHeartbeatTimeoutMs=45000
; timeout of broker heartbeat, optional; default is 25000ms
brokerHeartbeatTimeoutMs=25000
; configure modify authorization_token
confModAuthToken=abc
webResourcePath=resources
; configure useWebProxy
useWebProxy=false

[meta_zookeeper]
; root path of TubeMQ znodes on ZK
zkNodeRoot=/tubemq
; connect string of ZK servers
zkServerAddr=localhost:2181
; timeout of ZK heartbeat; default is 30000ms
zkSessionTimeoutMs=30000
; timeout of ZK connection; default is 30000ms
zkConnectionTimeoutMs=30000
; sync time on ZK; default is 5000ms
zkSyncTimeMs=5000
; interval to commits data on ZK; default is 5000ms
zkCommitPeriodMs=5000
; Master Select status check duration, default is 5000ms
zkMasterCheckPeriodMs=5000


;[meta_bdb]
; name of replication group, default is `tubemqMasterGroup`, you'd better set individual value for every tubeMQ cluster
;repGroupName=tubemqMasterGroup
; name of current node; MUST BE DIFFERENT for every node in the same group
;repNodeName=tubemqMasterGroupNode1
; port for node to communicate to other nodes in replication group, default is 9001
;repNodePort=9001
; bdb meta data path; can be absolute, or relative to TubeMQ base directory ($BASE_DIR)
;   optional, default is "var/meta_data"
;   should be the same to `[bdbStore].bdbEnvHome` if upgrade from version prior 0.5.0
;   or `[master].metaDataPath` if upgrade from version prior 1.0.0
;metaDataPath=var/meta_data
; helperHost(and port) for node to join master cluster and the port should keep consistent with `repNodePort`; for the
; first time of starting, this value for every node in master cluster should keep same
; the default is 127.0.0.1:9001
;repHelperHost=masterHostName:9001
; meta data disk sync policy
;   the overall durability is a function of metaLocalSyncPolicy plus the repReplicaAckPolicy used by the master,
;     and the metaReplicaSyncPolicy in effect at each Replica
;   see https://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/Durability.html for detail
;   1 for SYNC, will write and synchronously flush the log to disk upon transaction commit
;   2 for NO_SYNC, do not synchronously flush the log upon transaction commit (if application or system fails, data may lost)
;   3 for WRITE_NO_SYNC, synchronously written to the OS's file system buffers upon transaction commit, but the data is not
;     actually forced to disk(if the system fails,data may lost)
; sync policy for "local", optional; default is 1(SYNC)
;metaLocalSyncPolicy=1
; sync policy for "replica", optional; default is 3(WRITE_NO_SYNC)
;metaReplicaSyncPolicy=3
; replication acknowledge policy, optional; default is 1(SIMPLE_MAJORITY)
;   1 for SIMPLE_MAJORITY
;   2 for ALL
;   3 for NONE
;repReplicaAckPolicy=1
; interval for node status check task, optional; default is 10000(ms)
;repStatusCheckTimeoutMs=10000

[prometheus]
; whether to enable prometheus service
promEnable=false
; port that prometheus listens to, optional, default is 9081
promHttpPort=9081
; cluster name which the node belong to
promClusterName=InLong

