forked from mirror/ledisdb
change configuration
Config struct now not includes other configs, but shows all People can see configuration clearly
This commit is contained in:
parent
edeee8f645
commit
7a763da082
|
@ -2,5 +2,6 @@
|
||||||
|
|
||||||
. ./dev.sh
|
. ./dev.sh
|
||||||
|
|
||||||
go get -u github.com/siddontang/go-log/log
|
go get github.com/siddontang/go-log/log
|
||||||
go get -u github.com/siddontang/go-snappy/snappy
|
go get github.com/siddontang/go-snappy/snappy
|
||||||
|
go get github.com/siddontang/copier
|
|
@ -2,13 +2,16 @@
|
||||||
"addr": "127.0.0.1:6380",
|
"addr": "127.0.0.1:6380",
|
||||||
"data_dir": "/tmp/ledis_server",
|
"data_dir": "/tmp/ledis_server",
|
||||||
"db": {
|
"db": {
|
||||||
"data_db" : {
|
|
||||||
"compression": false,
|
"compression": false,
|
||||||
"block_size": 32768,
|
"block_size": 32768,
|
||||||
"write_buffer_size": 67108864,
|
"write_buffer_size": 67108864,
|
||||||
"cache_size": 524288000,
|
"cache_size": 524288000,
|
||||||
"max_open_files":1024
|
"max_open_files":1024
|
||||||
}
|
},
|
||||||
|
|
||||||
|
"binlog" : {
|
||||||
|
"use" : false,
|
||||||
|
"max_open_files" : 1024
|
||||||
},
|
},
|
||||||
|
|
||||||
"access_log" : "access.log"
|
"access_log" : "access.log"
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package ledis
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
DataDir string `json:"data_dir"`
|
||||||
|
|
||||||
|
DB struct {
|
||||||
|
Compression bool `json:"compression"`
|
||||||
|
BlockSize int `json:"block_size"`
|
||||||
|
WriteBufferSize int `json:"write_buffer_size"`
|
||||||
|
CacheSize int `json:"cache_size"`
|
||||||
|
MaxOpenFiles int `json:"max_open_files"`
|
||||||
|
} `json:"db"`
|
||||||
|
|
||||||
|
BinLog struct {
|
||||||
|
Use bool `json:"use"`
|
||||||
|
MaxFileSize int `json:"max_file_size"`
|
||||||
|
MaxFileNum int `json:"max_file_num"`
|
||||||
|
} `json:"binlog"`
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package ledis
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/siddontang/copier"
|
||||||
"github.com/siddontang/go-log/log"
|
"github.com/siddontang/go-log/log"
|
||||||
"github.com/siddontang/ledisdb/leveldb"
|
"github.com/siddontang/ledisdb/leveldb"
|
||||||
"path"
|
"path"
|
||||||
|
@ -10,18 +11,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
DataDir string `json:"data_dir"`
|
|
||||||
|
|
||||||
//if you not set leveldb path, use data_dir/data
|
|
||||||
DataDB leveldb.Config `json:"data_db"`
|
|
||||||
|
|
||||||
UseBinLog bool `json:"use_bin_log"`
|
|
||||||
|
|
||||||
//if you not set bin log path, use data_dir/bin_log
|
|
||||||
BinLog BinLogConfig `json:"bin_log"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type DB struct {
|
type DB struct {
|
||||||
l *Ledis
|
l *Ledis
|
||||||
|
|
||||||
|
@ -60,16 +49,31 @@ func OpenWithJsonConfig(configJson json.RawMessage) (*Ledis, error) {
|
||||||
return Open(&cfg)
|
return Open(&cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func openDB(cfg *Config) (*leveldb.DB, error) {
|
||||||
|
dbPath := path.Join(cfg.DataDir, "data")
|
||||||
|
|
||||||
|
dbCfg := new(leveldb.Config)
|
||||||
|
copier.Copy(dbCfg, &cfg.DB)
|
||||||
|
dbCfg.Path = dbPath
|
||||||
|
|
||||||
|
return leveldb.Open(dbCfg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func openBinLog(cfg *Config) (*BinLog, error) {
|
||||||
|
binLogPath := path.Join(cfg.DataDir, "bin_log")
|
||||||
|
c := new(BinLogConfig)
|
||||||
|
copier.Copy(c, &cfg.BinLog)
|
||||||
|
c.Path = binLogPath
|
||||||
|
|
||||||
|
return NewBinLog(c)
|
||||||
|
}
|
||||||
|
|
||||||
func Open(cfg *Config) (*Ledis, error) {
|
func Open(cfg *Config) (*Ledis, error) {
|
||||||
if len(cfg.DataDir) == 0 {
|
if len(cfg.DataDir) == 0 {
|
||||||
return nil, fmt.Errorf("must set correct data_dir")
|
return nil, fmt.Errorf("must set correct data_dir")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(cfg.DataDB.Path) == 0 {
|
ldb, err := openDB(cfg)
|
||||||
cfg.DataDB.Path = path.Join(cfg.DataDir, "data")
|
|
||||||
}
|
|
||||||
|
|
||||||
ldb, err := leveldb.Open(&cfg.DataDB)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -81,11 +85,8 @@ func Open(cfg *Config) (*Ledis, error) {
|
||||||
|
|
||||||
l.ldb = ldb
|
l.ldb = ldb
|
||||||
|
|
||||||
if cfg.UseBinLog {
|
if cfg.BinLog.Use {
|
||||||
if len(cfg.BinLog.Path) == 0 {
|
l.binlog, err = openBinLog(cfg)
|
||||||
cfg.BinLog.Path = path.Join(cfg.DataDir, "bin_log")
|
|
||||||
}
|
|
||||||
l.binlog, err = NewBinLog(&cfg.BinLog)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ func getTestDB() *DB {
|
||||||
var d = []byte(`
|
var d = []byte(`
|
||||||
{
|
{
|
||||||
"data_dir" : "/tmp/test_ledis",
|
"data_dir" : "/tmp/test_ledis",
|
||||||
"data_db" : {
|
"db" : {
|
||||||
"compression":true,
|
"compression":true,
|
||||||
"block_size" : 32768,
|
"block_size" : 32768,
|
||||||
"write_buffer_size" : 2097152,
|
"write_buffer_size" : 2097152,
|
||||||
|
|
|
@ -35,8 +35,8 @@ func TestReplication(t *testing.T) {
|
||||||
master, err = OpenWithJsonConfig([]byte(`
|
master, err = OpenWithJsonConfig([]byte(`
|
||||||
{
|
{
|
||||||
"data_dir" : "/tmp/test_repl/master",
|
"data_dir" : "/tmp/test_repl/master",
|
||||||
"use_bin_log" : true,
|
"binlog" : {
|
||||||
"bin_log" : {
|
"use" : true,
|
||||||
"max_file_size" : 50
|
"max_file_size" : 50
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/siddontang/copier"
|
||||||
"github.com/siddontang/ledisdb/ledis"
|
"github.com/siddontang/ledisdb/ledis"
|
||||||
"net"
|
"net"
|
||||||
"path"
|
"path"
|
||||||
|
@ -30,10 +31,6 @@ func NewApp(cfg *Config) (*App, error) {
|
||||||
return nil, fmt.Errorf("must set data_dir first")
|
return nil, fmt.Errorf("must set data_dir first")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(cfg.DB.DataDir) == 0 {
|
|
||||||
cfg.DB.DataDir = cfg.DataDir
|
|
||||||
}
|
|
||||||
|
|
||||||
app := new(App)
|
app := new(App)
|
||||||
|
|
||||||
app.quit = make(chan struct{})
|
app.quit = make(chan struct{})
|
||||||
|
@ -66,7 +63,7 @@ func NewApp(cfg *Config) (*App, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if app.ldb, err = ledis.Open(&cfg.DB); err != nil {
|
if app.ldb, err = openLedis(cfg); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,6 +72,19 @@ func NewApp(cfg *Config) (*App, error) {
|
||||||
return app, nil
|
return app, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func openLedis(cfg *Config) (*ledis.Ledis, error) {
|
||||||
|
c := new(ledis.Config)
|
||||||
|
|
||||||
|
c.DataDir = cfg.DataDir
|
||||||
|
|
||||||
|
copier.Copy(&c.DB, &cfg.DB)
|
||||||
|
copier.Copy(&c.BinLog, &cfg.BinLog)
|
||||||
|
|
||||||
|
println("max open files", c.DB.MaxOpenFiles)
|
||||||
|
|
||||||
|
return ledis.Open(c)
|
||||||
|
}
|
||||||
|
|
||||||
func (app *App) Close() {
|
func (app *App) Close() {
|
||||||
if app.closed {
|
if app.closed {
|
||||||
return
|
return
|
||||||
|
|
|
@ -34,13 +34,12 @@ func startTestApp() {
|
||||||
{
|
{
|
||||||
"data_dir" : "/tmp/testdb",
|
"data_dir" : "/tmp/testdb",
|
||||||
"addr" : "127.0.0.1:16380",
|
"addr" : "127.0.0.1:16380",
|
||||||
"db" : {
|
"db" : {
|
||||||
"data_db" : {
|
"compression":true,
|
||||||
"compression":true,
|
"block_size" : 32768,
|
||||||
"block_size" : 32768,
|
"write_buffer_size" : 2097152,
|
||||||
"write_buffer_size" : 2097152,
|
"cache_size" : 20971520,
|
||||||
"cache_size" : 20971520
|
"max_open_files" : 1024
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`)
|
`)
|
||||||
|
|
|
@ -32,7 +32,7 @@ func TestReplication(t *testing.T) {
|
||||||
masterCfg := new(Config)
|
masterCfg := new(Config)
|
||||||
masterCfg.DataDir = fmt.Sprintf("%s/master", data_dir)
|
masterCfg.DataDir = fmt.Sprintf("%s/master", data_dir)
|
||||||
masterCfg.Addr = "127.0.0.1:11182"
|
masterCfg.Addr = "127.0.0.1:11182"
|
||||||
masterCfg.DB.UseBinLog = true
|
masterCfg.BinLog.Use = true
|
||||||
|
|
||||||
var master *App
|
var master *App
|
||||||
var slave *App
|
var slave *App
|
||||||
|
|
|
@ -2,7 +2,6 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/siddontang/ledisdb/ledis"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,8 +10,19 @@ type Config struct {
|
||||||
|
|
||||||
DataDir string `json:"data_dir"`
|
DataDir string `json:"data_dir"`
|
||||||
|
|
||||||
//if you not set db path, use data_dir
|
DB struct {
|
||||||
DB ledis.Config `json:"db"`
|
Compression bool `json:"compression"`
|
||||||
|
BlockSize int `json:"block_size"`
|
||||||
|
WriteBufferSize int `json:"write_buffer_size"`
|
||||||
|
CacheSize int `json:"cache_size"`
|
||||||
|
MaxOpenFiles int `json:"max_open_files"`
|
||||||
|
} `json:"db"`
|
||||||
|
|
||||||
|
BinLog struct {
|
||||||
|
Use bool `json:"use"`
|
||||||
|
MaxFileSize int `json:"max_file_size"`
|
||||||
|
MaxFileNum int `json:"max_file_num"`
|
||||||
|
} `json:"binlog"`
|
||||||
|
|
||||||
//set slaveof to enable replication from master
|
//set slaveof to enable replication from master
|
||||||
//empty, no replication
|
//empty, no replication
|
||||||
|
|
Loading…
Reference in New Issue