summaryrefslogtreecommitdiffstats
path: root/vendor/gitea.com/lunny/nodb/config/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gitea.com/lunny/nodb/config/config.go')
-rw-r--r--vendor/gitea.com/lunny/nodb/config/config.go135
1 files changed, 135 insertions, 0 deletions
diff --git a/vendor/gitea.com/lunny/nodb/config/config.go b/vendor/gitea.com/lunny/nodb/config/config.go
new file mode 100644
index 0000000000..01ca070ccb
--- /dev/null
+++ b/vendor/gitea.com/lunny/nodb/config/config.go
@@ -0,0 +1,135 @@
+package config
+
+import (
+ "io/ioutil"
+
+ "github.com/pelletier/go-toml"
+)
+
+type Size int
+
+const (
+ DefaultAddr string = "127.0.0.1:6380"
+ DefaultHttpAddr string = "127.0.0.1:11181"
+
+ DefaultDBName string = "goleveldb"
+
+ DefaultDataDir string = "./data"
+)
+
+const (
+ MaxBinLogFileSize int = 1024 * 1024 * 1024
+ MaxBinLogFileNum int = 10000
+
+ DefaultBinLogFileSize int = MaxBinLogFileSize
+ DefaultBinLogFileNum int = 10
+)
+
+type LevelDBConfig struct {
+ Compression bool `toml:"compression"`
+ BlockSize int `toml:"block_size"`
+ WriteBufferSize int `toml:"write_buffer_size"`
+ CacheSize int `toml:"cache_size"`
+ MaxOpenFiles int `toml:"max_open_files"`
+}
+
+type LMDBConfig struct {
+ MapSize int `toml:"map_size"`
+ NoSync bool `toml:"nosync"`
+}
+
+type BinLogConfig struct {
+ MaxFileSize int `toml:"max_file_size"`
+ MaxFileNum int `toml:"max_file_num"`
+}
+
+type Config struct {
+ DataDir string `toml:"data_dir"`
+
+ DBName string `toml:"db_name"`
+
+ LevelDB LevelDBConfig `toml:"leveldb"`
+
+ LMDB LMDBConfig `toml:"lmdb"`
+
+ BinLog BinLogConfig `toml:"binlog"`
+
+ SlaveOf string `toml:"slaveof"`
+
+ AccessLog string `toml:"access_log"`
+}
+
+func NewConfigWithFile(fileName string) (*Config, error) {
+ data, err := ioutil.ReadFile(fileName)
+ if err != nil {
+ return nil, err
+ }
+
+ return NewConfigWithData(data)
+}
+
+func NewConfigWithData(data []byte) (*Config, error) {
+ cfg := NewConfigDefault()
+
+ err := toml.Unmarshal(data, cfg)
+ if err != nil {
+ return nil, err
+ }
+
+ return cfg, nil
+}
+
+func NewConfigDefault() *Config {
+ cfg := new(Config)
+
+ cfg.DataDir = DefaultDataDir
+
+ cfg.DBName = DefaultDBName
+
+ // disable binlog
+ cfg.BinLog.MaxFileNum = 0
+ cfg.BinLog.MaxFileSize = 0
+
+ // disable replication
+ cfg.SlaveOf = ""
+
+ // disable access log
+ cfg.AccessLog = ""
+
+ cfg.LMDB.MapSize = 20 * 1024 * 1024
+ cfg.LMDB.NoSync = true
+
+ return cfg
+}
+
+func (cfg *LevelDBConfig) Adjust() {
+ if cfg.CacheSize <= 0 {
+ cfg.CacheSize = 4 * 1024 * 1024
+ }
+
+ if cfg.BlockSize <= 0 {
+ cfg.BlockSize = 4 * 1024
+ }
+
+ if cfg.WriteBufferSize <= 0 {
+ cfg.WriteBufferSize = 4 * 1024 * 1024
+ }
+
+ if cfg.MaxOpenFiles < 1024 {
+ cfg.MaxOpenFiles = 1024
+ }
+}
+
+func (cfg *BinLogConfig) Adjust() {
+ if cfg.MaxFileSize <= 0 {
+ cfg.MaxFileSize = DefaultBinLogFileSize
+ } else if cfg.MaxFileSize > MaxBinLogFileSize {
+ cfg.MaxFileSize = MaxBinLogFileSize
+ }
+
+ if cfg.MaxFileNum <= 0 {
+ cfg.MaxFileNum = DefaultBinLogFileNum
+ } else if cfg.MaxFileNum > MaxBinLogFileNum {
+ cfg.MaxFileNum = MaxBinLogFileNum
+ }
+}