Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.4 KiB
135 lines
2.4 KiB
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 |
|
} |
|
}
|
|
|