forked from ngaut/unistore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
160 lines (143 loc) · 5.79 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// Copyright 2019-present PingCAP, Inc.
//
// Licensed 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,
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import (
"time"
"github.com/pingcap/badger/options"
"github.com/pingcap/log"
)
type Config struct {
Server Server `toml:"server"` // Unistore server options
Engine Engine `toml:"engine"` // Engine options.
RaftStore RaftStore `toml:"raftstore"` // RaftStore configs
Coprocessor Coprocessor `toml:"coprocessor"` // Coprocessor options
PessimisticTxn PessimisticTxn `toml:"pessimistic-txn"` // Pessimistic txn related
}
type Server struct {
PDAddr string `toml:"pd-addr"`
StoreAddr string `toml:"store-addr"`
StatusAddr string `toml:"status-addr"`
LogLevel string `toml:"log-level"`
RegionSize int64 `toml:"region-size"` // Average region size.
MaxProcs int `toml:"max-procs"` // Max CPU cores to use, set 0 to use all CPU cores in the machine.
Raft bool `toml:"raft"` // Enable raft.
LogfilePath string `toml:"log-file"` // Log file path for unistore server
}
type RaftStore struct {
PdHeartbeatTickInterval string `toml:"pd-heartbeat-tick-interval"` // pd-heartbeat-tick-interval in seconds
RaftStoreMaxLeaderLease string `toml:"raft-store-max-leader-lease"` // raft-store-max-leader-lease in milliseconds
RaftBaseTickInterval string `toml:"raft-base-tick-interval"` // raft-base-tick-interval in milliseconds
RaftHeartbeatTicks int `toml:"raft-heartbeat-ticks"` // raft-heartbeat-ticks times
RaftElectionTimeoutTicks int `toml:"raft-election-timeout-ticks"` // raft-election-timeout-ticks times
CustomRaftLog bool `toml:"custom-raft-log"`
}
type Coprocessor struct {
RegionMaxKeys int64 `toml:"region-max-keys"`
RegionSplitKeys int64 `toml:"region-split-keys"`
}
type Engine struct {
DBPath string `toml:"db-path"` // Directory to store the data in. Should exist and be writable.
ValueThreshold int `toml:"value-threshold"` // If value size >= this threshold, only store value offsets in tree.
MaxMemTableSize int64 `toml:"max-mem-table-size"` // Each mem table is at most this size.
MaxTableSize int64 `toml:"max-table-size"` // Each table file is at most this size.
L1Size int64 `toml:"l1-size"`
NumMemTables int `toml:"num-mem-tables"` // Maximum number of tables to keep in memory, before stalling.
NumL0Tables int `toml:"num-L0-tables"` // Maximum number of Level 0 tables before we start compacting.
NumL0TablesStall int `toml:"num-L0-tables-stall"` // Maximum number of Level 0 tables before stalling.
VlogFileSize int64 `toml:"vlog-file-size"` // Value log file size.
// Sync all writes to disk. Setting this to true would slow down data loading significantly.")
SyncWrite bool `toml:"sync-write"`
NumCompactors int `toml:"num-compactors"`
SurfStartLevel int `toml:"surf-start-level"`
BlockCacheSize int64 `toml:"block-cache-size"`
IndexCacheSize int64 `toml:"index-cache-size"`
Compression []string `toml:"compression"` // Compression types for each level
IngestCompression string `toml:"ingest-compression"`
// Only used in tests.
VolatileMode bool
CompactL0WhenClose bool `toml:"compact-l0-when-close"`
}
type PessimisticTxn struct {
// The default and maximum delay in milliseconds before responding to TiDB when pessimistic
// transactions encounter locks
WaitForLockTimeout int64 `toml:"wait-for-lock-timeout"`
// The duration between waking up lock waiter, in milliseconds
WakeUpDelayDuration int64 `toml:"wake-up-delay-duration"`
}
func ParseCompression(s string) options.CompressionType {
switch s {
case "snappy":
return options.Snappy
case "zstd":
return options.ZSTD
default:
return options.None
}
}
const MB = 1024 * 1024
var DefaultConf = Config{
Server: Server{
PDAddr: "127.0.0.1:2379",
StoreAddr: "127.0.0.1:9191",
StatusAddr: "127.0.0.1:9291",
RegionSize: 64 * MB,
LogLevel: "info",
MaxProcs: 0,
Raft: true,
LogfilePath: "",
},
RaftStore: RaftStore{
PdHeartbeatTickInterval: "20s",
RaftStoreMaxLeaderLease: "9s",
RaftBaseTickInterval: "1s",
RaftHeartbeatTicks: 2,
RaftElectionTimeoutTicks: 10,
CustomRaftLog: true,
},
Engine: Engine{
DBPath: "/tmp/badger",
ValueThreshold: 256,
MaxMemTableSize: 64 * MB,
MaxTableSize: 8 * MB,
NumMemTables: 3,
NumL0Tables: 4,
NumL0TablesStall: 8,
VlogFileSize: 256 * MB,
NumCompactors: 3,
SurfStartLevel: 8,
L1Size: 512 * MB,
Compression: make([]string, 7),
BlockCacheSize: 0, // 0 means disable block cache, use mmap to access sst.
IndexCacheSize: 0,
CompactL0WhenClose: true,
},
Coprocessor: Coprocessor{
RegionMaxKeys: 1440000,
RegionSplitKeys: 960000,
},
PessimisticTxn: PessimisticTxn{
WaitForLockTimeout: 1000, // 1000ms same with tikv default value
WakeUpDelayDuration: 100, // 100ms same with tikv default value
},
}
// parseDuration parses duration argument string.
func ParseDuration(durationStr string) time.Duration {
dur, err := time.ParseDuration(durationStr)
if err != nil {
dur, err = time.ParseDuration(durationStr + "s")
}
if err != nil || dur < 0 {
log.S().Fatalf("invalid duration=%v", durationStr)
}
return dur
}