Fix some lint error (#385)

* Fix some lint error

* Fix misspell

* Improve make lint
This commit is contained in:
Lunny Xiao 2020-05-10 18:17:39 +08:00 committed by GitHub
parent b08f85e6fb
commit 1ee5a02c6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 440 additions and 539 deletions

View File

@ -32,6 +32,13 @@ build-commands:
go build -mod=vendor -o $(DIST)/ledis-load -tags '$(GO_BUILD_TAGS)' -ldflags '-s -w $(LDFLAGS)' cmd/ledis-load/*.go go build -mod=vendor -o $(DIST)/ledis-load -tags '$(GO_BUILD_TAGS)' -ldflags '-s -w $(LDFLAGS)' cmd/ledis-load/*.go
go build -mod=vendor -o $(DIST)/ledis-repair -tags '$(GO_BUILD_TAGS)' -ldflags '-s -w $(LDFLAGS)' cmd/ledis-repair/*.go go build -mod=vendor -o $(DIST)/ledis-repair -tags '$(GO_BUILD_TAGS)' -ldflags '-s -w $(LDFLAGS)' cmd/ledis-repair/*.go
.PHONY: lint
lint:
@hash golint > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
cd /tmp && GO111MODULE=on go get -u -v golang.org/x/lint/golint; \
fi
golint $(PACKAGES)
vet: vet:
go vet -mod=vendor -tags '$(GO_BUILD_TAGS)' ./... go vet -mod=vendor -tags '$(GO_BUILD_TAGS)' ./...
@ -39,7 +46,7 @@ test:
go test -mod=vendor --race -tags '$(GO_BUILD_TAGS)' -cover -coverprofile coverage.out -timeout 10m $(PACKAGES) go test -mod=vendor --race -tags '$(GO_BUILD_TAGS)' -cover -coverprofile coverage.out -timeout 10m $(PACKAGES)
clean: clean:
go clean -i ./... go clean -i $(PACKAGES)
fmt: fmt:
gofmt -w -s . 2>&1 | grep -vE 'vendor' | awk '{print} END{if(NR>0) {exit 1}}' gofmt -w -s . 2>&1 | grep -vE 'vendor' | awk '{print} END{if(NR>0) {exit 1}}'

View File

@ -1,8 +1,8 @@
# LedisDB # LedisDB
[![Build Status](https://travis-ci.org/ledisdb/ledisdb.svg?branch=develop)](https://travis-ci.org/ledisdb/ledisdb) [![codecov](https://codecov.io/gh/ledisdb/ledisdb/branch/master/graph/badge.svg)](https://codecov.io/gh/ledisdb/ledisdb) [![Build Status](https://travis-ci.org/ledisdb/ledisdb.svg?branch=develop)](https://travis-ci.org/ledisdb/ledisdb) [![codecov](https://codecov.io/gh/ledisdb/ledisdb/branch/master/graph/badge.svg)](https://codecov.io/gh/ledisdb/ledisdb) [![goreportcard](https://goreportcard.com/badge/github.com/ledisdb/ledisdb)](https://goreportcard.com/report/github.com/ledisdb/ledisdb)
Ledisdb is a high-performance NoSQL database, similar to Redis, written in [Go](http://golang.org/). It supports many data structures including kv, list, hash, zset, set. Ledisdb is a high-performance NoSQL database library and server written in [Go](http://golang.org). It's similar to Redis but store data in disk. It supports many data structures including kv, list, hash, zset, set.
LedisDB now supports multiple different databases as backends. LedisDB now supports multiple different databases as backends.

View File

@ -250,7 +250,7 @@ var round = flag.Int("r", 1, "benchmark round number")
var valueSize = flag.Int("vsize", 100, "kv value size") var valueSize = flag.Int("vsize", 100, "kv value size")
var tests = flag.String("t", "set,get,randget,del,lpush,lrange,lpop,hset,hget,hdel,zadd,zincr,zrange,zrevrange,zdel", "only run the comma separated list of tests") var tests = flag.String("t", "set,get,randget,del,lpush,lrange,lpop,hset,hget,hdel,zadd,zincr,zrange,zrevrange,zdel", "only run the comma separated list of tests")
func CmdBenchmark() { func Benchmark() {
benchIP = flag.String("ip", "127.0.0.1", "redis/ledis/ssdb server ip") benchIP = flag.String("ip", "127.0.0.1", "redis/ledis/ssdb server ip")
number = flag.Int("n", 1000, "request number") number = flag.Int("n", 1000, "request number")
benchPort = flag.Int("port", 6380, "redis/ledis/ssdb server port") benchPort = flag.Int("port", 6380, "redis/ledis/ssdb server port")

View File

@ -1,4 +1,5 @@
//This file was generated by .tools/generate_commands.py on Sat Oct 28 2017 18:15:49 -0500 // Package cmd
// This file was generated by .tools/generate_commands.py on Sat Oct 28 2017 18:15:49 -0500
package cmd package cmd
import ( import (
@ -164,7 +165,7 @@ var (
historyPath = "/tmp/ledis-cli" historyPath = "/tmp/ledis-cli"
) )
func CmdCli() { func Cli() {
var dbn = flag.Int("n", 0, "ledisdb database number(default 0)") var dbn = flag.Int("n", 0, "ledisdb database number(default 0)")
flag.Parse() flag.Parse()

View File

@ -8,7 +8,7 @@ import (
"github.com/siddontang/goredis" "github.com/siddontang/goredis"
) )
func CmdDump() { func Dump() {
var host = flag.String("host", "127.0.0.1", "ledis server host") var host = flag.String("host", "127.0.0.1", "ledis server host")
var dumpPort = flag.Int("port", 6380, "ledis server port") var dumpPort = flag.Int("port", 6380, "ledis server port")
var sock = flag.String("sock", "", "ledis unix socket domain") var sock = flag.String("sock", "", "ledis unix socket domain")

View File

@ -18,5 +18,5 @@ func main() {
} }
fmt.Println() fmt.Println()
cmd.CmdBenchmark() cmd.Benchmark()
} }

View File

@ -18,5 +18,5 @@ func main() {
} }
fmt.Println() fmt.Println()
cmd.CmdCli() cmd.Cli()
} }

View File

@ -18,5 +18,5 @@ func main() {
} }
fmt.Println() fmt.Println()
cmd.CmdDump() cmd.Dump()
} }

View File

@ -18,5 +18,5 @@ func main() {
} }
fmt.Println() fmt.Println()
cmd.CmdLoad() cmd.Load()
} }

View File

@ -18,5 +18,5 @@ func main() {
} }
fmt.Println() fmt.Println()
cmd.CmdRepair() cmd.Repair()
} }

View File

@ -3,6 +3,8 @@ package main
import ( import (
"fmt" "fmt"
_ "net/http/pprof"
"github.com/ledisdb/ledisdb/cmd" "github.com/ledisdb/ledisdb/cmd"
) )
@ -18,5 +20,5 @@ func main() {
} }
fmt.Println() fmt.Println()
cmd.CmdServer() cmd.Server()
} }

View File

@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"os" "os"
_ "net/http/pprof"
"github.com/ledisdb/ledisdb/cmd" "github.com/ledisdb/ledisdb/cmd"
) )
@ -46,18 +48,18 @@ func main() {
switch subCmd { switch subCmd {
case "repair": case "repair":
cmd.CmdRepair() cmd.Repair()
case "benchmark": case "benchmark":
cmd.CmdBenchmark() cmd.Benchmark()
case "cli": case "cli":
cmd.CmdCli() cmd.Cli()
case "dump": case "dump":
cmd.CmdDump() cmd.Dump()
case "help": case "help":
printSubCmds() printSubCmds()
case "server": case "server":
fallthrough fallthrough
default: default:
cmd.CmdServer() cmd.Server()
} }
} }

View File

@ -7,7 +7,7 @@ import (
"github.com/ledisdb/ledisdb/ledis" "github.com/ledisdb/ledisdb/ledis"
) )
func CmdLoad() { func Load() {
var configPath = flag.String("config", "", "ledisdb config file") var configPath = flag.String("config", "", "ledisdb config file")
var dumpPath = flag.String("dump_file", "", "ledisdb dump file") var dumpPath = flag.String("dump_file", "", "ledisdb dump file")

View File

@ -7,7 +7,7 @@ import (
"github.com/ledisdb/ledisdb/store" "github.com/ledisdb/ledisdb/store"
) )
func CmdRepair() { func Repair() {
var fileName = flag.String("config", "", "ledisdb config file") var fileName = flag.String("config", "", "ledisdb config file")
flag.Parse() flag.Parse()

View File

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"log" "log"
"net/http" "net/http"
_ "net/http/pprof"
"os" "os"
"os/signal" "os/signal"
"runtime" "runtime"
@ -28,7 +27,7 @@ var rplSync = flag.Bool("rpl_sync", false, "enable sync replication or not")
var ttlCheck = flag.Int("ttl_check", 0, "TTL check interval") var ttlCheck = flag.Int("ttl_check", 0, "TTL check interval")
var databases = flag.Int("databases", 0, "ledisdb maximum database number") var databases = flag.Int("databases", 0, "ledisdb maximum database number")
func CmdServer() { func Server() {
var configFile = flag.String("config", "", "ledisdb config file") var configFile = flag.String("config", "", "ledisdb config file")
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())

View File

@ -197,7 +197,7 @@ func (db *DB) decodeScanKey(storeDataType byte, ek []byte) (key []byte, err erro
return return
} }
// for specail data scan // for special data scan
func (db *DB) buildDataScanKeyRange(storeDataType byte, key []byte, cursor []byte, reverse bool) (minKey []byte, maxKey []byte, err error) { func (db *DB) buildDataScanKeyRange(storeDataType byte, key []byte, cursor []byte, reverse bool) (minKey []byte, maxKey []byte, err error) {
if !reverse { if !reverse {
@ -232,7 +232,7 @@ func (db *DB) encodeDataScanMaxKey(storeDataType byte, key []byte, cursor []byte
return nil, err return nil, err
} }
// here, the last byte is the start seperator, set it to stop seperator // here, the last byte is the start separator, set it to stop separator
k[len(k)-1] = k[len(k)-1] + 1 k[len(k)-1] = k[len(k)-1] + 1
return k, nil return k, nil
} }

View File

@ -596,7 +596,7 @@ func (db *DB) SMclear(keys ...[]byte) (int64, error) {
return int64(len(keys)), err return int64(len(keys)), err
} }
// SExpire expries the set. // SExpire expires the set.
func (db *DB) SExpire(key []byte, duration int64) (int64, error) { func (db *DB) SExpire(key []byte, duration int64) (int64, error) {
if duration <= 0 { if duration <= 0 {
return 0, errExpireValue return 0, errExpireValue

View File

@ -349,15 +349,13 @@ func (m *mmapReadFile) Name() string {
func newWriteFile(useMmap bool, name string, size int64) (writeFile, error) { func newWriteFile(useMmap bool, name string, size int64) (writeFile, error) {
if useMmap { if useMmap {
return newMmapWriteFile(name, size) return newMmapWriteFile(name, size)
} else {
return newRawWriteFile(name, size)
} }
return newRawWriteFile(name, size)
} }
func newReadFile(useMmap bool, name string) (readFile, error) { func newReadFile(useMmap bool, name string) (readFile, error) {
if useMmap { if useMmap {
return newMmapReadFile(name) return newMmapReadFile(name)
} else {
return newRawReadFile(name)
} }
return newRawReadFile(name)
} }

View File

@ -211,8 +211,8 @@ func (t *tableReader) repair() error {
meta, err = newWriteFile(false, fmtTableMetaName(t.base, t.index), int64(defaultLogNumInFile*4)) meta, err = newWriteFile(false, fmtTableMetaName(t.base, t.index), int64(defaultLogNumInFile*4))
var l Log var l Log
var pos int64 = 0 var pos int64
var nextPos int64 = 0 var nextPos int64
b := make([]byte, 4) b := make([]byte, 4)
t.first = 0 t.first = 0

View File

@ -126,10 +126,10 @@ func (r *Replication) Log(data []byte) (*Log, error) {
return nil, err return nil, err
} }
commitId := r.commitID commitID := r.commitID
if lastID < commitId { if lastID < commitID {
lastID = commitId lastID = commitID
} else if lastID > commitId { } else if lastID > commitID {
r.m.Unlock() r.m.Unlock()
return nil, ErrCommitIDBehind return nil, ErrCommitIDBehind
} }

View File

@ -10,12 +10,11 @@ func hsetCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HSet(args[0], args[1], args[2]); err != nil { n, err := c.db.HSet(args[0], args[1], args[2])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -25,12 +24,11 @@ func hgetCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.HGet(args[0], args[1]); err != nil { v, err := c.db.HGet(args[0], args[1])
if err != nil {
return err return err
} else {
c.resp.writeBulk(v)
} }
c.resp.writeBulk(v)
return nil return nil
} }
@ -41,15 +39,15 @@ func hexistsCommand(c *client) error {
} }
var n int64 = 1 var n int64 = 1
if v, err := c.db.HGet(args[0], args[1]); err != nil { v, err := c.db.HGet(args[0], args[1])
if err != nil {
return err return err
} else {
if v == nil {
n = 0
}
c.resp.writeInteger(n)
} }
if v == nil {
n = 0
}
c.resp.writeInteger(n)
return nil return nil
} }
@ -59,12 +57,11 @@ func hdelCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HDel(args[0], args[1:]...); err != nil { n, err := c.db.HDel(args[0], args[1:]...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -74,12 +71,11 @@ func hlenCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HLen(args[0]); err != nil { n, err := c.db.HLen(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -94,12 +90,11 @@ func hincrbyCommand(c *client) error {
return ErrValue return ErrValue
} }
var n int64 n, err := c.db.HIncrBy(args[0], args[1], delta)
if n, err = c.db.HIncrBy(args[0], args[1], delta); err != nil { if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -125,10 +120,8 @@ func hmsetCommand(c *client) error {
if err := c.db.HMset(key, kvs...); err != nil { if err := c.db.HMset(key, kvs...); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
@ -138,12 +131,11 @@ func hmgetCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.HMget(args[0], args[1:]...); err != nil { v, err := c.db.HMget(args[0], args[1:]...)
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -153,12 +145,11 @@ func hgetallCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.HGetAll(args[0]); err != nil { v, err := c.db.HGetAll(args[0])
if err != nil {
return err return err
} else {
c.resp.writeFVPairArray(v)
} }
c.resp.writeFVPairArray(v)
return nil return nil
} }
@ -168,12 +159,11 @@ func hkeysCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.HKeys(args[0]); err != nil { v, err := c.db.HKeys(args[0])
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -183,12 +173,11 @@ func hvalsCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.HValues(args[0]); err != nil { v, err := c.db.HValues(args[0])
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -198,12 +187,11 @@ func hclearCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HClear(args[0]); err != nil { n, err := c.db.HClear(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -213,12 +201,11 @@ func hmclearCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HMclear(args...); err != nil { n, err := c.db.HMclear(args...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -233,12 +220,11 @@ func hexpireCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.HExpire(args[0], duration); err != nil { v, err := c.db.HExpire(args[0], duration)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -253,12 +239,11 @@ func hexpireAtCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.HExpireAt(args[0], when); err != nil { v, err := c.db.HExpireAt(args[0], when)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -268,12 +253,11 @@ func httlCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.HTTL(args[0]); err != nil { v, err := c.db.HTTL(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -283,12 +267,11 @@ func hpersistCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HPersist(args[0]); err != nil { n, err := c.db.HPersist(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -297,11 +280,11 @@ func hkeyexistsCommand(c *client) error {
if len(args) != 1 { if len(args) != 1 {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.HKeyExists(args[0]); err != nil { n, err := c.db.HKeyExists(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }

View File

@ -28,13 +28,11 @@ func getCommand(c *client) error {
if v, err := c.db.GetSlice(args[0]); err != nil { if v, err := c.db.GetSlice(args[0]); err != nil {
return err return err
} else if v == nil {
c.resp.writeBulk(nil)
} else { } else {
if v == nil { c.resp.writeBulk(v.Data())
c.resp.writeBulk(nil) v.Free()
} else {
c.resp.writeBulk(v.Data())
v.Free()
}
} }
return nil return nil
} }
@ -47,10 +45,8 @@ func setCommand(c *client) error {
if err := c.db.Set(args[0], args[1]); err != nil { if err := c.db.Set(args[0], args[1]); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
@ -60,12 +56,11 @@ func getsetCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.GetSet(args[0], args[1]); err != nil { v, err := c.db.GetSet(args[0], args[1])
if err != nil {
return err return err
} else {
c.resp.writeBulk(v)
} }
c.resp.writeBulk(v)
return nil return nil
} }
@ -75,12 +70,11 @@ func setnxCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SetNX(args[0], args[1]); err != nil { n, err := c.db.SetNX(args[0], args[1])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -97,10 +91,8 @@ func setexCommand(c *client) error {
if err := c.db.SetEX(args[0], sec, args[2]); err != nil { if err := c.db.SetEX(args[0], sec, args[2]); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
@ -110,12 +102,11 @@ func existsCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.Exists(args[0]); err != nil { n, err := c.db.Exists(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -125,12 +116,11 @@ func incrCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.Incr(c.args[0]); err != nil { n, err := c.db.Incr(c.args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -140,12 +130,11 @@ func decrCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.Decr(c.args[0]); err != nil { n, err := c.db.Decr(c.args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -160,12 +149,11 @@ func incrbyCommand(c *client) error {
return ErrValue return ErrValue
} }
if n, err := c.db.IncrBy(c.args[0], delta); err != nil { n, err := c.db.IncrBy(c.args[0], delta)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -180,12 +168,11 @@ func decrbyCommand(c *client) error {
return ErrValue return ErrValue
} }
if n, err := c.db.DecrBy(c.args[0], delta); err != nil { n, err := c.db.DecrBy(c.args[0], delta)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -195,12 +182,11 @@ func delCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.Del(args...); err != nil { n, err := c.db.Del(args...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -218,10 +204,8 @@ func msetCommand(c *client) error {
if err := c.db.MSet(kvs...); err != nil { if err := c.db.MSet(kvs...); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
@ -235,12 +219,11 @@ func mgetCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.MGet(args...); err != nil { v, err := c.db.MGet(args...)
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -255,12 +238,11 @@ func expireCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.Expire(args[0], duration); err != nil { v, err := c.db.Expire(args[0], duration)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -275,12 +257,11 @@ func expireAtCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.ExpireAt(args[0], when); err != nil { v, err := c.db.ExpireAt(args[0], when)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -290,12 +271,11 @@ func ttlCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.TTL(args[0]); err != nil { v, err := c.db.TTL(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -305,12 +285,11 @@ func persistCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.Persist(args[0]); err != nil { n, err := c.db.Persist(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -320,11 +299,11 @@ func appendCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.Append(args[0], args[1]); err != nil { n, err := c.db.Append(args[0], args[1])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -345,12 +324,11 @@ func getrangeCommand(c *client) error {
return err return err
} }
if v, err := c.db.GetRange(key, start, end); err != nil { v, err := c.db.GetRange(key, start, end)
if err != nil {
return err return err
} else {
c.resp.writeBulk(v)
} }
c.resp.writeBulk(v)
return nil return nil
} }
@ -369,11 +347,11 @@ func setrangeCommand(c *client) error {
value := args[2] value := args[2]
if n, err := c.db.SetRange(key, offset, value); err != nil { n, err := c.db.SetRange(key, offset, value)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -382,11 +360,11 @@ func strlenCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.StrLen(c.args[0]); err != nil { n, err := c.db.StrLen(c.args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -419,11 +397,11 @@ func bitcountCommand(c *client) error {
return err return err
} }
if n, err := c.db.BitCount(key, start, end); err != nil { n, err := c.db.BitCount(key, start, end)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -437,12 +415,11 @@ func bitopCommand(c *client) error {
destKey := args[1] destKey := args[1]
srcKeys := args[2:] srcKeys := args[2:]
if n, err := c.db.BitOP(op, destKey, srcKeys...); err != nil { n, err := c.db.BitOP(op, destKey, srcKeys...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -462,11 +439,11 @@ func bitposCommand(c *client) error {
return err return err
} }
if n, err := c.db.BitPos(key, bit, start, end); err != nil { n, err := c.db.BitPos(key, bit, start, end)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -482,11 +459,11 @@ func getbitCommand(c *client) error {
return err return err
} }
if n, err := c.db.GetBit(key, offset); err != nil { n, err := c.db.GetBit(key, offset)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -507,11 +484,11 @@ func setbitCommand(c *client) error {
return err return err
} }
if n, err := c.db.SetBit(key, offset, value); err != nil { n, err := c.db.SetBit(key, offset, value)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }

View File

@ -16,12 +16,11 @@ func lpushCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.LPush(args[0], args[1:]...); err != nil { n, err := c.db.LPush(args[0], args[1:]...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -31,12 +30,11 @@ func rpushCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.RPush(args[0], args[1:]...); err != nil { n, err := c.db.RPush(args[0], args[1:]...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -46,12 +44,11 @@ func lpopCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.LPop(args[0]); err != nil { v, err := c.db.LPop(args[0])
if err != nil {
return err return err
} else {
c.resp.writeBulk(v)
} }
c.resp.writeBulk(v)
return nil return nil
} }
@ -61,12 +58,11 @@ func rpopCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.RPop(args[0]); err != nil { v, err := c.db.RPop(args[0])
if err != nil {
return err return err
} else {
c.resp.writeBulk(v)
} }
c.resp.writeBulk(v)
return nil return nil
} }
@ -76,12 +72,11 @@ func llenCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.LLen(args[0]); err != nil { n, err := c.db.LLen(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -96,12 +91,11 @@ func lindexCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.LIndex(args[0], int32(index)); err != nil { v, err := c.db.LIndex(args[0], int32(index))
if err != nil {
return err return err
} else {
c.resp.writeBulk(v)
} }
c.resp.writeBulk(v)
return nil return nil
} }
@ -125,12 +119,11 @@ func lrangeCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.LRange(args[0], int32(start), int32(stop)); err != nil { v, err := c.db.LRange(args[0], int32(start), int32(stop))
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -158,12 +151,11 @@ func lclearCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.LClear(args[0]); err != nil { n, err := c.db.LClear(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -173,12 +165,11 @@ func lmclearCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.LMclear(args...); err != nil { n, err := c.db.LMclear(args...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -193,12 +184,11 @@ func lexpireCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.LExpire(args[0], duration); err != nil { v, err := c.db.LExpire(args[0], duration)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -213,12 +203,11 @@ func lexpireAtCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.LExpireAt(args[0], when); err != nil { v, err := c.db.LExpireAt(args[0], when)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -228,12 +217,11 @@ func lttlCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.LTTL(args[0]); err != nil { v, err := c.db.LTTL(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -243,12 +231,11 @@ func lpersistCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.LPersist(args[0]); err != nil { n, err := c.db.LPersist(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -258,11 +245,11 @@ func blpopCommand(c *client) error {
return err return err
} }
if ay, err := c.db.BLPop(keys, timeout); err != nil { ay, err := c.db.BLPop(keys, timeout)
if err != nil {
return err return err
} else {
c.resp.writeArray(ay)
} }
c.resp.writeArray(ay)
return nil return nil
} }
@ -272,11 +259,11 @@ func brpopCommand(c *client) error {
return err return err
} }
if ay, err := c.db.BRPop(keys, timeout); err != nil { ay, err := c.db.BRPop(keys, timeout)
if err != nil {
return err return err
} else {
c.resp.writeArray(ay)
} }
c.resp.writeArray(ay)
return nil return nil
} }
@ -408,11 +395,11 @@ func lkeyexistsCommand(c *client) error {
if len(args) != 1 { if len(args) != 1 {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.LKeyExists(args[0]); err != nil { n, err := c.db.LKeyExists(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -437,10 +424,8 @@ func lTrimCommand(c *client) error {
if err := c.db.LTrim(args[0], start, stop); err != nil { if err := c.db.LTrim(args[0], start, stop); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
@ -458,12 +443,11 @@ func lTrimFrontCommand(c *client) error {
return ErrValue return ErrValue
} }
if n, err := c.db.LTrimFront(args[0], trimSize); err != nil { n, err := c.db.LTrimFront(args[0], trimSize)
if err != nil {
return err return err
} else {
c.resp.writeInteger(int64(n))
} }
c.resp.writeInteger(int64(n))
return nil return nil
} }
@ -481,12 +465,11 @@ func lTrimBackCommand(c *client) error {
return ErrValue return ErrValue
} }
if n, err := c.db.LTrimBack(args[0], trimSize); err != nil { n, err := c.db.LTrimBack(args[0], trimSize)
if err != nil {
return err return err
} else {
c.resp.writeInteger(int64(n))
} }
c.resp.writeInteger(int64(n))
return nil return nil
} }

View File

@ -19,12 +19,11 @@ func dumpCommand(c *client) error {
} }
key := c.args[0] key := c.args[0]
if data, err := c.db.Dump(key); err != nil { data, err := c.db.Dump(key)
if err != nil {
return err return err
} else {
c.resp.writeBulk(data)
} }
c.resp.writeBulk(data)
return nil return nil
} }
@ -34,12 +33,11 @@ func ldumpCommand(c *client) error {
} }
key := c.args[0] key := c.args[0]
if data, err := c.db.LDump(key); err != nil { data, err := c.db.LDump(key)
if err != nil {
return err return err
} else {
c.resp.writeBulk(data)
} }
c.resp.writeBulk(data)
return nil return nil
} }
@ -49,12 +47,11 @@ func hdumpCommand(c *client) error {
} }
key := c.args[0] key := c.args[0]
if data, err := c.db.HDump(key); err != nil { data, err := c.db.HDump(key)
if err != nil {
return err return err
} else {
c.resp.writeBulk(data)
} }
c.resp.writeBulk(data)
return nil return nil
} }
@ -64,12 +61,11 @@ func sdumpCommand(c *client) error {
} }
key := c.args[0] key := c.args[0]
if data, err := c.db.SDump(key); err != nil { data, err := c.db.SDump(key)
if err != nil {
return err return err
} else {
c.resp.writeBulk(data)
} }
c.resp.writeBulk(data)
return nil return nil
} }
@ -79,12 +75,11 @@ func zdumpCommand(c *client) error {
} }
key := c.args[0] key := c.args[0]
if data, err := c.db.ZDump(key); err != nil { data, err := c.db.ZDump(key)
if err != nil {
return err return err
} else {
c.resp.writeBulk(data)
} }
c.resp.writeBulk(data)
return nil return nil
} }
@ -104,10 +99,8 @@ func restoreCommand(c *client) error {
if err = c.db.Restore(key, ttl, data); err != nil { if err = c.db.Restore(key, ttl, data); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
@ -128,12 +121,11 @@ func xrestoreCommand(c *client) error {
if err = c.db.Restore(key, ttl, data); err != nil { if err = c.db.Restore(key, ttl, data); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
} }
c.resp.writeStatus(OK)
return nil return nil
} }
func xdump(db *ledis.DB, tp string, key []byte) ([]byte, error) { func xdump(db *ledis.DB, tp string, key []byte) ([]byte, error) {
var err error var err error
var data []byte var data []byte
@ -216,11 +208,11 @@ func xdumpCommand(c *client) error {
tp := strings.ToUpper(string(args[0])) tp := strings.ToUpper(string(args[0]))
key := args[1] key := args[1]
if data, err := xdump(c.db, tp, key); err != nil { data, err := xdump(c.db, tp, key)
if err != nil {
return err return err
} else {
c.resp.writeBulk(data)
} }
c.resp.writeBulk(data)
return nil return nil
} }
@ -272,18 +264,18 @@ func newMigrateKeyLocker() *migrateKeyLocker {
return m return m
} }
func (a *App) newMigrateKeyLockers() { func (app *App) newMigrateKeyLockers() {
a.migrateKeyLockers = make(map[string]*migrateKeyLocker) app.migrateKeyLockers = make(map[string]*migrateKeyLocker)
a.migrateKeyLockers[KVName] = newMigrateKeyLocker() app.migrateKeyLockers[KVName] = newMigrateKeyLocker()
a.migrateKeyLockers[HashName] = newMigrateKeyLocker() app.migrateKeyLockers[HashName] = newMigrateKeyLocker()
a.migrateKeyLockers[ListName] = newMigrateKeyLocker() app.migrateKeyLockers[ListName] = newMigrateKeyLocker()
a.migrateKeyLockers[SetName] = newMigrateKeyLocker() app.migrateKeyLockers[SetName] = newMigrateKeyLocker()
a.migrateKeyLockers[ZSetName] = newMigrateKeyLocker() app.migrateKeyLockers[ZSetName] = newMigrateKeyLocker()
} }
func (a *App) migrateKeyLock(tp string, key []byte) bool { func (app *App) migrateKeyLock(tp string, key []byte) bool {
l, ok := a.migrateKeyLockers[strings.ToUpper(tp)] l, ok := app.migrateKeyLockers[strings.ToUpper(tp)]
if !ok { if !ok {
return false return false
} }
@ -291,8 +283,8 @@ func (a *App) migrateKeyLock(tp string, key []byte) bool {
return l.Lock(key) return l.Lock(key)
} }
func (a *App) migrateKeyUnlock(tp string, key []byte) { func (app *App) migrateKeyUnlock(tp string, key []byte) {
l, ok := a.migrateKeyLockers[strings.ToUpper(tp)] l, ok := app.migrateKeyLockers[strings.ToUpper(tp)]
if !ok { if !ok {
return return
} }
@ -438,9 +430,8 @@ func xmigrateCommand(c *client) error {
if err == errNoKey { if err == errNoKey {
c.resp.writeStatus(NOKEY) c.resp.writeStatus(NOKEY)
return nil return nil
} else {
return err
} }
return err
} }
c.resp.writeStatus(OK) c.resp.writeStatus(OK)

View File

@ -52,15 +52,15 @@ func testDumpRestore(c *goredis.PoolConn, dump string, key string, t *testing.T)
} }
func TestMigrate(t *testing.T) { func TestMigrate(t *testing.T) {
data_dir := "/tmp/test_migrate" dataDir := "/tmp/test_migrate"
os.RemoveAll(data_dir) os.RemoveAll(dataDir)
s1Cfg := config.NewConfigDefault() s1Cfg := config.NewConfigDefault()
s1Cfg.DataDir = fmt.Sprintf("%s/s1", data_dir) s1Cfg.DataDir = fmt.Sprintf("%s/s1", dataDir)
s1Cfg.Addr = "127.0.0.1:11185" s1Cfg.Addr = "127.0.0.1:11185"
s2Cfg := config.NewConfigDefault() s2Cfg := config.NewConfigDefault()
s2Cfg.DataDir = fmt.Sprintf("%s/s2", data_dir) s2Cfg.DataDir = fmt.Sprintf("%s/s2", dataDir)
s2Cfg.Addr = "127.0.0.1:11186" s2Cfg.Addr = "127.0.0.1:11186"
s1, err := NewApp(s1Cfg) s1, err := NewApp(s1Cfg)

View File

@ -104,14 +104,14 @@ func syncCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
var logId uint64 var logID uint64
var err error var err error
if logId, err = ledis.StrUint64(args[0], nil); err != nil { if logID, err = ledis.StrUint64(args[0], nil); err != nil {
return ErrCmdParams return ErrCmdParams
} }
lastLogID := logId - 1 lastLogID := logID - 1
stat, err := c.app.ldb.ReplicationStat() stat, err := c.app.ldb.ReplicationStat()
if err != nil { if err != nil {
@ -119,7 +119,7 @@ func syncCommand(c *client) error {
} }
if lastLogID > stat.LastID { if lastLogID > stat.LastID {
return fmt.Errorf("invalid sync logid %d > %d + 1", logId, stat.LastID) return fmt.Errorf("invalid sync logid %d > %d + 1", logID, stat.LastID)
} }
c.lastLogID.Set(lastLogID) c.lastLogID.Set(lastLogID)
@ -132,21 +132,20 @@ func syncCommand(c *client) error {
c.syncBuf.Write(dummyBuf) c.syncBuf.Write(dummyBuf)
if _, _, err := c.app.ldb.ReadLogsToTimeout(logId, &c.syncBuf, 1, c.app.quit); err != nil { if _, _, err := c.app.ldb.ReadLogsToTimeout(logID, &c.syncBuf, 1, c.app.quit); err != nil {
return err return err
} else {
buf := c.syncBuf.Bytes()
stat, err = c.app.ldb.ReplicationStat()
if err != nil {
return err
}
binary.BigEndian.PutUint64(buf, stat.LastID)
c.resp.writeBulk(buf)
} }
buf := c.syncBuf.Bytes()
stat, err = c.app.ldb.ReplicationStat()
if err != nil {
return err
}
binary.BigEndian.PutUint64(buf, stat.LastID)
c.resp.writeBulk(buf)
return nil return nil
} }
@ -171,11 +170,11 @@ func replconfCommand(c *client) error {
if _, err = num.ParseUint16(hack.String(args[i+1])); err != nil { if _, err = num.ParseUint16(hack.String(args[i+1])); err != nil {
return err return err
} }
if host, _, err = net.SplitHostPort(c.remoteAddr); err != nil { host, _, err = net.SplitHostPort(c.remoteAddr)
if err != nil {
return err return err
} else {
c.slaveListeningAddr = net.JoinHostPort(host, hack.String(args[i+1]))
} }
c.slaveListeningAddr = net.JoinHostPort(host, hack.String(args[i+1]))
c.app.addSlave(c) c.app.addSlave(c)
default: default:
@ -200,16 +199,16 @@ func roleCommand(c *client) error {
ay := make([]interface{}, 0, 5) ay := make([]interface{}, 0, 5)
var lastId int64 = 0 var lastID int64 = 0
stat, _ := c.app.ldb.ReplicationStat() stat, _ := c.app.ldb.ReplicationStat()
if stat != nil { if stat != nil {
lastId = int64(stat.LastID) lastID = int64(stat.LastID)
} }
if isMaster { if isMaster {
ay = append(ay, []byte("master")) ay = append(ay, []byte("master"))
ay = append(ay, lastId) ay = append(ay, lastID)
items := make([]interface{}, 0, 3) items := make([]interface{}, 0, 3)
@ -229,7 +228,7 @@ func roleCommand(c *client) error {
ay = append(ay, []byte(host)) ay = append(ay, []byte(host))
ay = append(ay, int64(port)) ay = append(ay, int64(port))
ay = append(ay, []byte(replStatetring(c.app.m.state.Get()))) ay = append(ay, []byte(replStatetring(c.app.m.state.Get())))
ay = append(ay, lastId) ay = append(ay, lastID)
} }
c.resp.writeArray(ay) c.resp.writeArray(ay)

View File

@ -36,11 +36,11 @@ func checkDataEqual(master *App, slave *App) error {
} }
func TestReplication(t *testing.T) { func TestReplication(t *testing.T) {
data_dir := "/tmp/test_replication" dataDir := "/tmp/test_replication"
os.RemoveAll(data_dir) os.RemoveAll(dataDir)
masterCfg := config.NewConfigDefault() masterCfg := config.NewConfigDefault()
masterCfg.DataDir = fmt.Sprintf("%s/master", data_dir) masterCfg.DataDir = fmt.Sprintf("%s/master", dataDir)
masterCfg.Addr = "127.0.0.1:11182" masterCfg.Addr = "127.0.0.1:11182"
masterCfg.UseReplication = true masterCfg.UseReplication = true
masterCfg.Replication.Sync = true masterCfg.Replication.Sync = true
@ -56,7 +56,7 @@ func TestReplication(t *testing.T) {
defer master.Close() defer master.Close()
slaveCfg := config.NewConfigDefault() slaveCfg := config.NewConfigDefault()
slaveCfg.DataDir = fmt.Sprintf("%s/slave", data_dir) slaveCfg.DataDir = fmt.Sprintf("%s/slave", dataDir)
slaveCfg.Addr = "127.0.0.1:11183" slaveCfg.Addr = "127.0.0.1:11183"
slaveCfg.SlaveOf = masterCfg.Addr slaveCfg.SlaveOf = masterCfg.Addr
slaveCfg.UseReplication = true slaveCfg.UseReplication = true

View File

@ -34,10 +34,9 @@ func authCommand(c *client) error {
c.isAuthed = true c.isAuthed = true
c.resp.writeStatus(OK) c.resp.writeStatus(OK)
return nil return nil
} else {
c.isAuthed = false
return ErrAuthenticationFailure
} }
c.isAuthed = false
return ErrAuthenticationFailure
} }
func echoCommand(c *client) error { func echoCommand(c *client) error {
@ -54,31 +53,30 @@ func selectCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if index, err := strconv.Atoi(hack.String(c.args[0])); err != nil { index, err := strconv.Atoi(hack.String(c.args[0]))
if err != nil {
return err return err
} else {
// if c.db.IsInMulti() {
// if err := c.script.Select(index); err != nil {
// return err
// } else {
// c.db = c.script.DB
// }
// } else {
// if db, err := c.ldb.Select(index); err != nil {
// return err
// } else {
// c.db = db
// }
// }
if db, err := c.ldb.Select(index); err != nil {
return err
} else {
c.db = db
}
c.resp.writeStatus(OK)
} }
// if c.db.IsInMulti() {
// if err := c.script.Select(index); err != nil {
// return err
// } else {
// c.db = c.script.DB
// }
// } else {
// if db, err := c.ldb.Select(index); err != nil {
// return err
// } else {
// c.db = db
// }
// }
db, err := c.ldb.Select(index)
if err != nil {
return err
}
c.db = db
c.resp.writeStatus(OK)
return nil return nil
} }
@ -170,10 +168,9 @@ func configCommand(c *client) error {
case "rewrite": case "rewrite":
if err := c.app.cfg.Rewrite(); err != nil { if err := c.app.cfg.Rewrite(); err != nil {
return err return err
} else {
c.resp.writeStatus(OK)
return nil
} }
c.resp.writeStatus(OK)
return nil
case "get": case "get":
return configGetCommand(c) return configGetCommand(c)
default: default:

View File

@ -10,12 +10,11 @@ func saddCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SAdd(args[0], args[1:]...); err != nil { n, err := c.db.SAdd(args[0], args[1:]...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -39,10 +38,8 @@ func soptGeneric(c *client, optType byte) error {
if err != nil { if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -67,10 +64,8 @@ func soptStoreGeneric(c *client, optType byte) error {
if err != nil { if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -80,12 +75,11 @@ func scardCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SCard(args[0]); err != nil { n, err := c.db.SCard(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -112,12 +106,11 @@ func sismemberCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SIsMember(args[0], args[1]); err != nil { n, err := c.db.SIsMember(args[0], args[1])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -127,12 +120,11 @@ func smembersCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.SMembers(args[0]); err != nil { v, err := c.db.SMembers(args[0])
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(v)
} }
c.resp.writeSliceArray(v)
return nil return nil
} }
@ -143,12 +135,11 @@ func sremCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SRem(args[0], args[1:]...); err != nil { n, err := c.db.SRem(args[0], args[1:]...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -167,12 +158,11 @@ func sclearCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SClear(args[0]); err != nil { n, err := c.db.SClear(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -182,12 +172,11 @@ func smclearCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SMclear(args...); err != nil { n, err := c.db.SMclear(args...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -202,12 +191,11 @@ func sexpireCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.SExpire(args[0], duration); err != nil { v, err := c.db.SExpire(args[0], duration)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -222,12 +210,11 @@ func sexpireAtCommand(c *client) error {
return ErrValue return ErrValue
} }
if v, err := c.db.SExpireAt(args[0], when); err != nil { v, err := c.db.SExpireAt(args[0], when)
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -237,12 +224,11 @@ func sttlCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.STTL(args[0]); err != nil { v, err := c.db.STTL(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -253,12 +239,11 @@ func spersistCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SPersist(args[0]); err != nil { n, err := c.db.SPersist(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -267,11 +252,11 @@ func skeyexistsCommand(c *client) error {
if len(args) != 1 { if len(args) != 1 {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.SKeyExists(args[0]); err != nil { n, err := c.db.SKeyExists(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }

View File

@ -102,11 +102,11 @@ func handleXSort(c *client, tp string) error {
return err return err
} }
if n, err := c.db.RPush(storeKey, ay...); err != nil { n, err := c.db.RPush(storeKey, ay...)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
} }
return nil return nil
} }

View File

@ -55,12 +55,11 @@ func zcardCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.ZCard(args[0]); err != nil { n, err := c.db.ZCard(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -206,12 +205,11 @@ func zcountCommand(c *client) error {
return nil return nil
} }
if n, err := c.db.ZCount(args[0], min, max); err != nil { n, err := c.db.ZCount(args[0], min, max)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -263,7 +261,6 @@ func zremrangebyrankCommand(c *client) error {
} }
n, err := c.db.ZRemRangeByRank(key, start, stop) n, err := c.db.ZRemRangeByRank(key, start, stop)
if err == nil { if err == nil {
c.resp.writeInteger(n) c.resp.writeInteger(n)
} }
@ -331,11 +328,11 @@ func zrangeGeneric(c *client, reverse bool) error {
} }
} }
if datas, err := c.db.ZRangeGeneric(key, start, stop, reverse); err != nil { datas, err := c.db.ZRangeGeneric(key, start, stop, reverse)
if err != nil {
return err return err
} else {
c.resp.writeScorePairArray(datas, withScores)
} }
c.resp.writeScorePairArray(datas, withScores)
return nil return nil
} }
@ -408,12 +405,11 @@ func zrangebyscoreGeneric(c *client, reverse bool) error {
return nil return nil
} }
if datas, err := c.db.ZRangeByScoreGeneric(key, min, max, offset, count, reverse); err != nil { datas, err := c.db.ZRangeByScoreGeneric(key, min, max, offset, count, reverse)
if err != nil {
return err return err
} else {
c.resp.writeScorePairArray(datas, withScores)
} }
c.resp.writeScorePairArray(datas, withScores)
return nil return nil
} }
@ -501,12 +497,11 @@ func zttlCommand(c *client) error {
return ErrCmdParams return ErrCmdParams
} }
if v, err := c.db.ZTTL(args[0]); err != nil { v, err := c.db.ZTTL(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(v)
} }
c.resp.writeInteger(v)
return nil return nil
} }
@ -713,12 +708,11 @@ func zrangebylexCommand(c *client) error {
} }
key := args[0] key := args[0]
if ay, err := c.db.ZRangeByLex(key, min, max, rangeType, offset, count); err != nil { ay, err := c.db.ZRangeByLex(key, min, max, rangeType, offset, count)
if err != nil {
return err return err
} else {
c.resp.writeSliceArray(ay)
} }
c.resp.writeSliceArray(ay)
return nil return nil
} }
@ -734,12 +728,11 @@ func zremrangebylexCommand(c *client) error {
} }
key := args[0] key := args[0]
if n, err := c.db.ZRemRangeByLex(key, min, max, rangeType); err != nil { n, err := c.db.ZRemRangeByLex(key, min, max, rangeType)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -755,12 +748,11 @@ func zlexcountCommand(c *client) error {
} }
key := args[0] key := args[0]
if n, err := c.db.ZLexCount(key, min, max, rangeType); err != nil { n, err := c.db.ZLexCount(key, min, max, rangeType)
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }
@ -769,11 +761,11 @@ func zkeyexistsCommand(c *client) error {
if len(args) != 1 { if len(args) != 1 {
return ErrCmdParams return ErrCmdParams
} }
if n, err := c.db.ZKeyExists(args[0]); err != nil { n, err := c.db.ZKeyExists(args[0])
if err != nil {
return err return err
} else {
c.resp.writeInteger(n)
} }
c.resp.writeInteger(n)
return nil return nil
} }

View File

@ -21,7 +21,7 @@ type info struct {
Server struct { Server struct {
OS string OS string
ProceessId int ProceessID int
} }
Replication struct { Replication struct {
@ -39,7 +39,7 @@ func newInfo(app *App) (i *info, err error) {
i.app = app i.app = app
i.Server.OS = runtime.GOOS i.Server.OS = runtime.GOOS
i.Server.ProceessId = os.Getpid() i.Server.ProceessID = os.Getpid()
return i, nil return i, nil
} }
@ -103,7 +103,7 @@ func (i *info) dumpServer(buf *bytes.Buffer) {
buf.WriteString("# Server\r\n") buf.WriteString("# Server\r\n")
i.dumpPairs(buf, infoPair{"os", i.Server.OS}, i.dumpPairs(buf, infoPair{"os", i.Server.OS},
infoPair{"process_id", i.Server.ProceessId}, infoPair{"process_id", i.Server.ProceessID},
infoPair{"addr", i.app.cfg.Addr}, infoPair{"addr", i.app.cfg.Addr},
infoPair{"http_addr", i.app.cfg.HttpAddr}, infoPair{"http_addr", i.app.cfg.HttpAddr},
infoPair{"readonly", i.app.cfg.Readonly}, infoPair{"readonly", i.app.cfg.Readonly},

View File

@ -298,9 +298,8 @@ func (m *master) nextSyncLogID() (uint64, error) {
if s.LastID > s.CommitID { if s.LastID > s.CommitID {
return s.LastID + 1, nil return s.LastID + 1, nil
} else {
return s.CommitID + 1, nil
} }
return s.CommitID + 1, nil
} }
func (m *master) sync() error { func (m *master) sync() error {
@ -321,9 +320,8 @@ func (m *master) sync() error {
if err = m.conn.ReceiveBulkTo(&m.syncBuf); err != nil { if err = m.conn.ReceiveBulkTo(&m.syncBuf); err != nil {
if strings.Contains(err.Error(), ledis.ErrLogMissed.Error()) { if strings.Contains(err.Error(), ledis.ErrLogMissed.Error()) {
return m.fullSync() return m.fullSync()
} else {
return err
} }
return err
} }
m.state.Set(replConnectedState) m.state.Set(replConnectedState)
@ -393,9 +391,8 @@ func (app *App) tryReSlaveof() error {
if len(app.cfg.SlaveOf) == 0 { if len(app.cfg.SlaveOf) == 0 {
return nil return nil
} else {
return app.m.startReplication(app.cfg.SlaveOf, true)
} }
return app.m.startReplication(app.cfg.SlaveOf, true)
} }
func (app *App) addSlave(c *client) { func (app *App) addSlave(c *client) {
@ -459,14 +456,14 @@ func (app *App) publishNewLog(l *rpl.Log) {
} }
n := 0 n := 0
logId := l.ID logID := l.ID
for _, s := range app.slaves { for _, s := range app.slaves {
lastLogID := s.lastLogID.Get() lastLogID := s.lastLogID.Get()
if lastLogID == logId { if lastLogID == logID {
//slave has already owned this log //slave has already owned this log
n++ n++
} else if lastLogID > logId { } else if lastLogID > logID {
log.Errorf("invalid slave %s, lastlogid %d > %d", s.slaveListeningAddr, lastLogID, logId) log.Errorf("invalid slave %s, lastlogid %d > %d", s.slaveListeningAddr, lastLogID, logID)
} }
} }
@ -483,8 +480,8 @@ func (app *App) publishNewLog(l *rpl.Log) {
n := 0 n := 0
for i := 0; i < slaveNum; i++ { for i := 0; i < slaveNum; i++ {
id := <-app.slaveSyncAck id := <-app.slaveSyncAck
if id < logId { if id < logID {
log.Infof("some slave may close with last logid %d < %d", id, logId) log.Infof("some slave may close with last logid %d < %d", id, logID)
} else { } else {
n++ n++
if n >= total { if n >= total {

View File

@ -52,11 +52,8 @@ func (db *DB) Put(key []byte, value []byte) error {
if db.needSyncCommit() { if db.needSyncCommit() {
return db.db.SyncPut(key, value) return db.db.SyncPut(key, value)
} else {
return db.db.Put(key, value)
} }
return db.db.Put(key, value)
} }
func (db *DB) Delete(key []byte) error { func (db *DB) Delete(key []byte) error {
@ -64,9 +61,8 @@ func (db *DB) Delete(key []byte) error {
if db.needSyncCommit() { if db.needSyncCommit() {
return db.db.SyncDelete(key) return db.db.SyncDelete(key)
} else {
return db.db.Delete(key)
} }
return db.db.Delete(key)
} }
func (db *DB) NewWriteBatch() *WriteBatch { func (db *DB) NewWriteBatch() *WriteBatch {
@ -110,14 +106,14 @@ func (db *DB) RevRangeIterator(min []byte, max []byte, rangeType uint8) *RangeLi
return NewRevRangeLimitIterator(db.NewIterator(), &Range{min, max, rangeType}, &Limit{0, -1}) return NewRevRangeLimitIterator(db.NewIterator(), &Range{min, max, rangeType}, &Limit{0, -1})
} }
//count < 0, unlimit. //RangeLimitIterator count < 0, unlimit.
// //
//offset must >= 0, if < 0, will get nothing. //offset must >= 0, if < 0, will get nothing.
func (db *DB) RangeLimitIterator(min []byte, max []byte, rangeType uint8, offset int, count int) *RangeLimitIterator { func (db *DB) RangeLimitIterator(min []byte, max []byte, rangeType uint8, offset int, count int) *RangeLimitIterator {
return NewRangeLimitIterator(db.NewIterator(), &Range{min, max, rangeType}, &Limit{offset, count}) return NewRangeLimitIterator(db.NewIterator(), &Range{min, max, rangeType}, &Limit{offset, count})
} }
//count < 0, unlimit. //RevRangeLimitIterator count < 0, unlimit.
// //
//offset must >= 0, if < 0, will get nothing. //offset must >= 0, if < 0, will get nothing.
func (db *DB) RevRangeLimitIterator(min []byte, max []byte, rangeType uint8, offset int, count int) *RangeLimitIterator { func (db *DB) RevRangeLimitIterator(min []byte, max []byte, rangeType uint8, offset int, count int) *RangeLimitIterator {
@ -133,20 +129,19 @@ func (db *DB) needSyncCommit() bool {
return false return false
} else if db.cfg.DBSyncCommit == 2 { } else if db.cfg.DBSyncCommit == 2 {
return true return true
} else {
n := time.Now()
need := false
db.m.Lock()
if n.Sub(db.lastCommit) > time.Second {
need = true
}
db.lastCommit = n
db.m.Unlock()
return need
} }
n := time.Now()
need := false
db.m.Lock()
if n.Sub(db.lastCommit) > time.Second {
need = true
}
db.lastCommit = n
db.m.Unlock()
return need
} }
func (db *DB) GetSlice(key []byte) (Slice, error) { func (db *DB) GetSlice(key []byte) (Slice, error) {
@ -156,14 +151,12 @@ func (db *DB) GetSlice(key []byte) (Slice, error) {
db.st.statGet(v, err) db.st.statGet(v, err)
db.st.GetTotalTime.Add(time.Now().Sub(t)) db.st.GetTotalTime.Add(time.Now().Sub(t))
return v, err return v, err
} else {
v, err := db.Get(key)
if err != nil {
return nil, err
} else if v == nil {
return nil, nil
} else {
return driver.GoSlice(v), nil
}
} }
v, err := db.Get(key)
if err != nil {
return nil, err
} else if v == nil {
return nil, nil
}
return driver.GoSlice(v), nil
} }

View File

@ -18,7 +18,7 @@ const (
RangeOpen uint8 = 0x11 RangeOpen uint8 = 0x11
) )
// min must less or equal than max // Range min must less or equal than max
// //
// range type: // range type:
// //
@ -44,7 +44,7 @@ type Iterator struct {
st *Stat st *Stat
} }
// Returns a copy of key. // Key returns a copy of key.
func (it *Iterator) Key() []byte { func (it *Iterator) Key() []byte {
k := it.it.Key() k := it.it.Key()
if k == nil { if k == nil {
@ -54,7 +54,7 @@ func (it *Iterator) Key() []byte {
return append([]byte{}, k...) return append([]byte{}, k...)
} }
// Returns a copy of value. // Value returns a copy of value.
func (it *Iterator) Value() []byte { func (it *Iterator) Value() []byte {
v := it.it.Value() v := it.it.Value()
if v == nil { if v == nil {
@ -64,19 +64,19 @@ func (it *Iterator) Value() []byte {
return append([]byte{}, v...) return append([]byte{}, v...)
} }
// Returns a reference of key. // RawKey returns a reference of key.
// you must be careful that it will be changed after next iterate. // you must be careful that it will be changed after next iterate.
func (it *Iterator) RawKey() []byte { func (it *Iterator) RawKey() []byte {
return it.it.Key() return it.it.Key()
} }
// Returns a reference of value. // RawValue returns a reference of value.
// you must be careful that it will be changed after next iterate. // you must be careful that it will be changed after next iterate.
func (it *Iterator) RawValue() []byte { func (it *Iterator) RawValue() []byte {
return it.it.Value() return it.it.Value()
} }
// Copy key to b, if b len is small or nil, returns a new one. // BufKey copy key to b, if b len is small or nil, returns a new one.
func (it *Iterator) BufKey(b []byte) []byte { func (it *Iterator) BufKey(b []byte) []byte {
k := it.RawKey() k := it.RawKey()
if k == nil { if k == nil {
@ -90,7 +90,7 @@ func (it *Iterator) BufKey(b []byte) []byte {
return append(b, k...) return append(b, k...)
} }
// Copy value to b, if b len is small or nil, returns a new one. // BufValue copy value to b, if b len is small or nil, returns a new one.
func (it *Iterator) BufValue(b []byte) []byte { func (it *Iterator) BufValue(b []byte) []byte {
v := it.RawValue() v := it.RawValue()
if v == nil { if v == nil {
@ -142,7 +142,7 @@ func (it *Iterator) Seek(key []byte) {
it.it.Seek(key) it.it.Seek(key)
} }
// Finds by key, if not found, nil returns. // Find finds by key, if not found, nil returns.
func (it *Iterator) Find(key []byte) []byte { func (it *Iterator) Find(key []byte) []byte {
it.Seek(key) it.Seek(key)
if it.Valid() { if it.Valid() {
@ -157,7 +157,7 @@ func (it *Iterator) Find(key []byte) []byte {
return nil return nil
} }
// Finds by key, if not found, nil returns, else a reference of value returns. // RawFind finds by key, if not found, nil returns, else a reference of value returns.
// you must be careful that it will be changed after next iterate. // you must be careful that it will be changed after next iterate.
func (it *Iterator) RawFind(key []byte) []byte { func (it *Iterator) RawFind(key []byte) []byte {
it.Seek(key) it.Seek(key)

View File

@ -30,15 +30,14 @@ func (s *Snapshot) GetSlice(key []byte) (Slice, error) {
v, err := d.GetSlice(key) v, err := d.GetSlice(key)
s.st.statGet(v, err) s.st.statGet(v, err)
return v, err return v, err
}
v, err := s.Get(key)
if err != nil {
return nil, err
} else if v == nil {
return nil, nil
} else { } else {
v, err := s.Get(key) return driver.GoSlice(v), nil
if err != nil {
return nil, err
} else if v == nil {
return nil, nil
} else {
return driver.GoSlice(v), nil
}
} }
} }

View File

@ -8,17 +8,16 @@ import (
"github.com/ledisdb/ledisdb/config" "github.com/ledisdb/ledisdb/config"
"github.com/ledisdb/ledisdb/store/driver" "github.com/ledisdb/ledisdb/store/driver"
_ "github.com/ledisdb/ledisdb/store/goleveldb" _ "github.com/ledisdb/ledisdb/store/goleveldb" // register goleveldb
_ "github.com/ledisdb/ledisdb/store/leveldb" _ "github.com/ledisdb/ledisdb/store/leveldb" // register leveldb
_ "github.com/ledisdb/ledisdb/store/rocksdb" _ "github.com/ledisdb/ledisdb/store/rocksdb" // register rocksdb
) )
func getStorePath(cfg *config.Config) string { func getStorePath(cfg *config.Config) string {
if len(cfg.DBPath) > 0 { if len(cfg.DBPath) > 0 {
return cfg.DBPath return cfg.DBPath
} else {
return path.Join(cfg.DataDir, fmt.Sprintf("%s_data", cfg.DBName))
} }
return path.Join(cfg.DataDir, fmt.Sprintf("%s_data", cfg.DBName))
} }
func Open(cfg *config.Config) (*DB, error) { func Open(cfg *config.Config) (*DB, error) {
@ -57,6 +56,3 @@ func Repair(cfg *config.Config) error {
return s.Repair(path, cfg) return s.Repair(path, cfg)
} }
func init() {
}

View File

@ -59,7 +59,7 @@ func (wb *WriteBatch) Rollback() error {
return wb.wb.Rollback() return wb.wb.Rollback()
} }
// the data will be undefined after commit or rollback // BatchData the data will be undefined after commit or rollback
func (wb *WriteBatch) BatchData() *BatchData { func (wb *WriteBatch) BatchData() *BatchData {
data := wb.wb.Data() data := wb.wb.Data()
if wb.data == nil { if wb.data == nil {