mirror of https://github.com/ledisdb/ledisdb.git
Fix some lint error (#385)
* Fix some lint error * Fix misspell * Improve make lint
This commit is contained in:
parent
b08f85e6fb
commit
1ee5a02c6c
9
Makefile
9
Makefile
|
@ -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-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:
|
||||
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)
|
||||
|
||||
clean:
|
||||
go clean -i ./...
|
||||
go clean -i $(PACKAGES)
|
||||
|
||||
fmt:
|
||||
gofmt -w -s . 2>&1 | grep -vE 'vendor' | awk '{print} END{if(NR>0) {exit 1}}'
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# 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.
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ var round = flag.Int("r", 1, "benchmark round number")
|
|||
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")
|
||||
|
||||
func CmdBenchmark() {
|
||||
func Benchmark() {
|
||||
benchIP = flag.String("ip", "127.0.0.1", "redis/ledis/ssdb server ip")
|
||||
number = flag.Int("n", 1000, "request number")
|
||||
benchPort = flag.Int("port", 6380, "redis/ledis/ssdb server port")
|
||||
|
|
|
@ -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
|
||||
|
||||
import (
|
||||
|
@ -164,7 +165,7 @@ var (
|
|||
historyPath = "/tmp/ledis-cli"
|
||||
)
|
||||
|
||||
func CmdCli() {
|
||||
func Cli() {
|
||||
var dbn = flag.Int("n", 0, "ledisdb database number(default 0)")
|
||||
|
||||
flag.Parse()
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/siddontang/goredis"
|
||||
)
|
||||
|
||||
func CmdDump() {
|
||||
func Dump() {
|
||||
var host = flag.String("host", "127.0.0.1", "ledis server host")
|
||||
var dumpPort = flag.Int("port", 6380, "ledis server port")
|
||||
var sock = flag.String("sock", "", "ledis unix socket domain")
|
||||
|
|
|
@ -18,5 +18,5 @@ func main() {
|
|||
}
|
||||
fmt.Println()
|
||||
|
||||
cmd.CmdBenchmark()
|
||||
cmd.Benchmark()
|
||||
}
|
||||
|
|
|
@ -18,5 +18,5 @@ func main() {
|
|||
}
|
||||
fmt.Println()
|
||||
|
||||
cmd.CmdCli()
|
||||
cmd.Cli()
|
||||
}
|
||||
|
|
|
@ -18,5 +18,5 @@ func main() {
|
|||
}
|
||||
fmt.Println()
|
||||
|
||||
cmd.CmdDump()
|
||||
cmd.Dump()
|
||||
}
|
||||
|
|
|
@ -18,5 +18,5 @@ func main() {
|
|||
}
|
||||
fmt.Println()
|
||||
|
||||
cmd.CmdLoad()
|
||||
cmd.Load()
|
||||
}
|
||||
|
|
|
@ -18,5 +18,5 @@ func main() {
|
|||
}
|
||||
fmt.Println()
|
||||
|
||||
cmd.CmdRepair()
|
||||
cmd.Repair()
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ package main
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
_ "net/http/pprof"
|
||||
|
||||
"github.com/ledisdb/ledisdb/cmd"
|
||||
)
|
||||
|
||||
|
@ -18,5 +20,5 @@ func main() {
|
|||
}
|
||||
fmt.Println()
|
||||
|
||||
cmd.CmdServer()
|
||||
cmd.Server()
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
_ "net/http/pprof"
|
||||
|
||||
"github.com/ledisdb/ledisdb/cmd"
|
||||
)
|
||||
|
||||
|
@ -46,18 +48,18 @@ func main() {
|
|||
|
||||
switch subCmd {
|
||||
case "repair":
|
||||
cmd.CmdRepair()
|
||||
cmd.Repair()
|
||||
case "benchmark":
|
||||
cmd.CmdBenchmark()
|
||||
cmd.Benchmark()
|
||||
case "cli":
|
||||
cmd.CmdCli()
|
||||
cmd.Cli()
|
||||
case "dump":
|
||||
cmd.CmdDump()
|
||||
cmd.Dump()
|
||||
case "help":
|
||||
printSubCmds()
|
||||
case "server":
|
||||
fallthrough
|
||||
default:
|
||||
cmd.CmdServer()
|
||||
cmd.Server()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
"github.com/ledisdb/ledisdb/ledis"
|
||||
)
|
||||
|
||||
func CmdLoad() {
|
||||
func Load() {
|
||||
var configPath = flag.String("config", "", "ledisdb config file")
|
||||
var dumpPath = flag.String("dump_file", "", "ledisdb dump file")
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
"github.com/ledisdb/ledisdb/store"
|
||||
)
|
||||
|
||||
func CmdRepair() {
|
||||
func Repair() {
|
||||
var fileName = flag.String("config", "", "ledisdb config file")
|
||||
|
||||
flag.Parse()
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"os"
|
||||
"os/signal"
|
||||
"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 databases = flag.Int("databases", 0, "ledisdb maximum database number")
|
||||
|
||||
func CmdServer() {
|
||||
func Server() {
|
||||
var configFile = flag.String("config", "", "ledisdb config file")
|
||||
|
||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||
|
|
|
@ -197,7 +197,7 @@ func (db *DB) decodeScanKey(storeDataType byte, ek []byte) (key []byte, err erro
|
|||
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) {
|
||||
if !reverse {
|
||||
|
@ -232,7 +232,7 @@ func (db *DB) encodeDataScanMaxKey(storeDataType byte, key []byte, cursor []byte
|
|||
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
|
||||
return k, nil
|
||||
}
|
||||
|
|
|
@ -596,7 +596,7 @@ func (db *DB) SMclear(keys ...[]byte) (int64, error) {
|
|||
return int64(len(keys)), err
|
||||
}
|
||||
|
||||
// SExpire expries the set.
|
||||
// SExpire expires the set.
|
||||
func (db *DB) SExpire(key []byte, duration int64) (int64, error) {
|
||||
if duration <= 0 {
|
||||
return 0, errExpireValue
|
||||
|
|
|
@ -349,15 +349,13 @@ func (m *mmapReadFile) Name() string {
|
|||
func newWriteFile(useMmap bool, name string, size int64) (writeFile, error) {
|
||||
if useMmap {
|
||||
return newMmapWriteFile(name, size)
|
||||
} else {
|
||||
return newRawWriteFile(name, size)
|
||||
}
|
||||
return newRawWriteFile(name, size)
|
||||
}
|
||||
|
||||
func newReadFile(useMmap bool, name string) (readFile, error) {
|
||||
if useMmap {
|
||||
return newMmapReadFile(name)
|
||||
} else {
|
||||
return newRawReadFile(name)
|
||||
}
|
||||
return newRawReadFile(name)
|
||||
}
|
||||
|
|
|
@ -211,8 +211,8 @@ func (t *tableReader) repair() error {
|
|||
meta, err = newWriteFile(false, fmtTableMetaName(t.base, t.index), int64(defaultLogNumInFile*4))
|
||||
|
||||
var l Log
|
||||
var pos int64 = 0
|
||||
var nextPos int64 = 0
|
||||
var pos int64
|
||||
var nextPos int64
|
||||
b := make([]byte, 4)
|
||||
|
||||
t.first = 0
|
||||
|
|
|
@ -126,10 +126,10 @@ func (r *Replication) Log(data []byte) (*Log, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
commitId := r.commitID
|
||||
if lastID < commitId {
|
||||
lastID = commitId
|
||||
} else if lastID > commitId {
|
||||
commitID := r.commitID
|
||||
if lastID < commitID {
|
||||
lastID = commitID
|
||||
} else if lastID > commitID {
|
||||
r.m.Unlock()
|
||||
return nil, ErrCommitIDBehind
|
||||
}
|
||||
|
|
|
@ -10,12 +10,11 @@ func hsetCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -25,12 +24,11 @@ func hgetCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeBulk(v)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -41,15 +39,15 @@ func hexistsCommand(c *client) error {
|
|||
}
|
||||
|
||||
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
|
||||
} else {
|
||||
if v == nil {
|
||||
n = 0
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
if v == nil {
|
||||
n = 0
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -59,12 +57,11 @@ func hdelCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -74,12 +71,11 @@ func hlenCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.HLen(args[0]); err != nil {
|
||||
n, err := c.db.HLen(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -94,12 +90,11 @@ func hincrbyCommand(c *client) error {
|
|||
return ErrValue
|
||||
}
|
||||
|
||||
var n int64
|
||||
if n, err = c.db.HIncrBy(args[0], args[1], delta); err != nil {
|
||||
n, err := c.db.HIncrBy(args[0], args[1], delta)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -125,10 +120,8 @@ func hmsetCommand(c *client) error {
|
|||
|
||||
if err := c.db.HMset(key, kvs...); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -138,12 +131,11 @@ func hmgetCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -153,12 +145,11 @@ func hgetallCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.HGetAll(args[0]); err != nil {
|
||||
v, err := c.db.HGetAll(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeFVPairArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeFVPairArray(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -168,12 +159,11 @@ func hkeysCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.HKeys(args[0]); err != nil {
|
||||
v, err := c.db.HKeys(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -183,12 +173,11 @@ func hvalsCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.HValues(args[0]); err != nil {
|
||||
v, err := c.db.HValues(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -198,12 +187,11 @@ func hclearCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.HClear(args[0]); err != nil {
|
||||
n, err := c.db.HClear(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -213,12 +201,11 @@ func hmclearCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.HMclear(args...); err != nil {
|
||||
n, err := c.db.HMclear(args...)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -233,12 +220,11 @@ func hexpireCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -253,12 +239,11 @@ func hexpireAtCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -268,12 +253,11 @@ func httlCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.HTTL(args[0]); err != nil {
|
||||
v, err := c.db.HTTL(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -283,12 +267,11 @@ func hpersistCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.HPersist(args[0]); err != nil {
|
||||
n, err := c.db.HPersist(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -297,11 +280,11 @@ func hkeyexistsCommand(c *client) error {
|
|||
if len(args) != 1 {
|
||||
return ErrCmdParams
|
||||
}
|
||||
if n, err := c.db.HKeyExists(args[0]); err != nil {
|
||||
n, err := c.db.HKeyExists(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
169
server/cmd_kv.go
169
server/cmd_kv.go
|
@ -28,13 +28,11 @@ func getCommand(c *client) error {
|
|||
|
||||
if v, err := c.db.GetSlice(args[0]); err != nil {
|
||||
return err
|
||||
} else if v == nil {
|
||||
c.resp.writeBulk(nil)
|
||||
} else {
|
||||
if v == nil {
|
||||
c.resp.writeBulk(nil)
|
||||
} else {
|
||||
c.resp.writeBulk(v.Data())
|
||||
v.Free()
|
||||
}
|
||||
c.resp.writeBulk(v.Data())
|
||||
v.Free()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -47,10 +45,8 @@ func setCommand(c *client) error {
|
|||
|
||||
if err := c.db.Set(args[0], args[1]); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -60,12 +56,11 @@ func getsetCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeBulk(v)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -75,12 +70,11 @@ func setnxCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -97,10 +91,8 @@ func setexCommand(c *client) error {
|
|||
|
||||
if err := c.db.SetEX(args[0], sec, args[2]); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -110,12 +102,11 @@ func existsCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.Exists(args[0]); err != nil {
|
||||
n, err := c.db.Exists(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -125,12 +116,11 @@ func incrCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -140,12 +130,11 @@ func decrCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -160,12 +149,11 @@ func incrbyCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -180,12 +168,11 @@ func decrbyCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -195,12 +182,11 @@ func delCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.Del(args...); err != nil {
|
||||
n, err := c.db.Del(args...)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -218,10 +204,8 @@ func msetCommand(c *client) error {
|
|||
|
||||
if err := c.db.MSet(kvs...); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -235,12 +219,11 @@ func mgetCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.MGet(args...); err != nil {
|
||||
v, err := c.db.MGet(args...)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -255,12 +238,11 @@ func expireCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -275,12 +257,11 @@ func expireAtCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -290,12 +271,11 @@ func ttlCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.TTL(args[0]); err != nil {
|
||||
v, err := c.db.TTL(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -305,12 +285,11 @@ func persistCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.Persist(args[0]); err != nil {
|
||||
n, err := c.db.Persist(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -320,11 +299,11 @@ func appendCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -345,12 +324,11 @@ func getrangeCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeBulk(v)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(v)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
@ -369,11 +347,11 @@ func setrangeCommand(c *client) error {
|
|||
|
||||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -382,11 +360,11 @@ func strlenCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -419,11 +397,11 @@ func bitcountCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -437,12 +415,11 @@ func bitopCommand(c *client) error {
|
|||
destKey := args[1]
|
||||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -462,11 +439,11 @@ func bitposCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -482,11 +459,11 @@ func getbitCommand(c *client) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if n, err := c.db.GetBit(key, offset); err != nil {
|
||||
n, err := c.db.GetBit(key, offset)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -507,11 +484,11 @@ func setbitCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -16,12 +16,11 @@ func lpushCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -31,12 +30,11 @@ func rpushCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -46,12 +44,11 @@ func lpopCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.LPop(args[0]); err != nil {
|
||||
v, err := c.db.LPop(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(v)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -61,12 +58,11 @@ func rpopCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.RPop(args[0]); err != nil {
|
||||
v, err := c.db.RPop(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(v)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -76,12 +72,11 @@ func llenCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.LLen(args[0]); err != nil {
|
||||
n, err := c.db.LLen(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -96,12 +91,11 @@ func lindexCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeBulk(v)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -125,12 +119,11 @@ func lrangeCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -158,12 +151,11 @@ func lclearCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.LClear(args[0]); err != nil {
|
||||
n, err := c.db.LClear(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -173,12 +165,11 @@ func lmclearCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.LMclear(args...); err != nil {
|
||||
n, err := c.db.LMclear(args...)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -193,12 +184,11 @@ func lexpireCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -213,12 +203,11 @@ func lexpireAtCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -228,12 +217,11 @@ func lttlCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.LTTL(args[0]); err != nil {
|
||||
v, err := c.db.LTTL(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -243,12 +231,11 @@ func lpersistCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.LPersist(args[0]); err != nil {
|
||||
n, err := c.db.LPersist(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -258,11 +245,11 @@ func blpopCommand(c *client) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if ay, err := c.db.BLPop(keys, timeout); err != nil {
|
||||
ay, err := c.db.BLPop(keys, timeout)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeArray(ay)
|
||||
}
|
||||
c.resp.writeArray(ay)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -272,11 +259,11 @@ func brpopCommand(c *client) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if ay, err := c.db.BRPop(keys, timeout); err != nil {
|
||||
ay, err := c.db.BRPop(keys, timeout)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeArray(ay)
|
||||
}
|
||||
c.resp.writeArray(ay)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
@ -408,11 +395,11 @@ func lkeyexistsCommand(c *client) error {
|
|||
if len(args) != 1 {
|
||||
return ErrCmdParams
|
||||
}
|
||||
if n, err := c.db.LKeyExists(args[0]); err != nil {
|
||||
n, err := c.db.LKeyExists(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -437,10 +424,8 @@ func lTrimCommand(c *client) error {
|
|||
|
||||
if err := c.db.LTrim(args[0], start, stop); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -458,12 +443,11 @@ func lTrimFrontCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(int64(n))
|
||||
}
|
||||
|
||||
c.resp.writeInteger(int64(n))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -481,12 +465,11 @@ func lTrimBackCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(int64(n))
|
||||
}
|
||||
|
||||
c.resp.writeInteger(int64(n))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -19,12 +19,11 @@ func dumpCommand(c *client) error {
|
|||
}
|
||||
|
||||
key := c.args[0]
|
||||
if data, err := c.db.Dump(key); err != nil {
|
||||
data, err := c.db.Dump(key)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(data)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -34,12 +33,11 @@ func ldumpCommand(c *client) error {
|
|||
}
|
||||
|
||||
key := c.args[0]
|
||||
if data, err := c.db.LDump(key); err != nil {
|
||||
data, err := c.db.LDump(key)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(data)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -49,12 +47,11 @@ func hdumpCommand(c *client) error {
|
|||
}
|
||||
|
||||
key := c.args[0]
|
||||
if data, err := c.db.HDump(key); err != nil {
|
||||
data, err := c.db.HDump(key)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(data)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -64,12 +61,11 @@ func sdumpCommand(c *client) error {
|
|||
}
|
||||
|
||||
key := c.args[0]
|
||||
if data, err := c.db.SDump(key); err != nil {
|
||||
data, err := c.db.SDump(key)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(data)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -79,12 +75,11 @@ func zdumpCommand(c *client) error {
|
|||
}
|
||||
|
||||
key := c.args[0]
|
||||
if data, err := c.db.ZDump(key); err != nil {
|
||||
data, err := c.db.ZDump(key)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeBulk(data)
|
||||
}
|
||||
|
||||
c.resp.writeBulk(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -104,10 +99,8 @@ func restoreCommand(c *client) error {
|
|||
|
||||
if err = c.db.Restore(key, ttl, data); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -128,12 +121,11 @@ func xrestoreCommand(c *client) error {
|
|||
|
||||
if err = c.db.Restore(key, ttl, data); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
|
||||
func xdump(db *ledis.DB, tp string, key []byte) ([]byte, error) {
|
||||
var err error
|
||||
var data []byte
|
||||
|
@ -216,11 +208,11 @@ func xdumpCommand(c *client) error {
|
|||
tp := strings.ToUpper(string(args[0]))
|
||||
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
|
||||
} else {
|
||||
c.resp.writeBulk(data)
|
||||
}
|
||||
c.resp.writeBulk(data)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -272,18 +264,18 @@ func newMigrateKeyLocker() *migrateKeyLocker {
|
|||
return m
|
||||
}
|
||||
|
||||
func (a *App) newMigrateKeyLockers() {
|
||||
a.migrateKeyLockers = make(map[string]*migrateKeyLocker)
|
||||
func (app *App) newMigrateKeyLockers() {
|
||||
app.migrateKeyLockers = make(map[string]*migrateKeyLocker)
|
||||
|
||||
a.migrateKeyLockers[KVName] = newMigrateKeyLocker()
|
||||
a.migrateKeyLockers[HashName] = newMigrateKeyLocker()
|
||||
a.migrateKeyLockers[ListName] = newMigrateKeyLocker()
|
||||
a.migrateKeyLockers[SetName] = newMigrateKeyLocker()
|
||||
a.migrateKeyLockers[ZSetName] = newMigrateKeyLocker()
|
||||
app.migrateKeyLockers[KVName] = newMigrateKeyLocker()
|
||||
app.migrateKeyLockers[HashName] = newMigrateKeyLocker()
|
||||
app.migrateKeyLockers[ListName] = newMigrateKeyLocker()
|
||||
app.migrateKeyLockers[SetName] = newMigrateKeyLocker()
|
||||
app.migrateKeyLockers[ZSetName] = newMigrateKeyLocker()
|
||||
}
|
||||
|
||||
func (a *App) migrateKeyLock(tp string, key []byte) bool {
|
||||
l, ok := a.migrateKeyLockers[strings.ToUpper(tp)]
|
||||
func (app *App) migrateKeyLock(tp string, key []byte) bool {
|
||||
l, ok := app.migrateKeyLockers[strings.ToUpper(tp)]
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
@ -291,8 +283,8 @@ func (a *App) migrateKeyLock(tp string, key []byte) bool {
|
|||
return l.Lock(key)
|
||||
}
|
||||
|
||||
func (a *App) migrateKeyUnlock(tp string, key []byte) {
|
||||
l, ok := a.migrateKeyLockers[strings.ToUpper(tp)]
|
||||
func (app *App) migrateKeyUnlock(tp string, key []byte) {
|
||||
l, ok := app.migrateKeyLockers[strings.ToUpper(tp)]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
@ -438,9 +430,8 @@ func xmigrateCommand(c *client) error {
|
|||
if err == errNoKey {
|
||||
c.resp.writeStatus(NOKEY)
|
||||
return nil
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
c.resp.writeStatus(OK)
|
||||
|
|
|
@ -52,15 +52,15 @@ func testDumpRestore(c *goredis.PoolConn, dump string, key string, t *testing.T)
|
|||
}
|
||||
|
||||
func TestMigrate(t *testing.T) {
|
||||
data_dir := "/tmp/test_migrate"
|
||||
os.RemoveAll(data_dir)
|
||||
dataDir := "/tmp/test_migrate"
|
||||
os.RemoveAll(dataDir)
|
||||
|
||||
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"
|
||||
|
||||
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"
|
||||
|
||||
s1, err := NewApp(s1Cfg)
|
||||
|
|
|
@ -104,14 +104,14 @@ func syncCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
var logId uint64
|
||||
var logID uint64
|
||||
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
|
||||
}
|
||||
|
||||
lastLogID := logId - 1
|
||||
lastLogID := logID - 1
|
||||
|
||||
stat, err := c.app.ldb.ReplicationStat()
|
||||
if err != nil {
|
||||
|
@ -119,7 +119,7 @@ func syncCommand(c *client) error {
|
|||
}
|
||||
|
||||
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)
|
||||
|
@ -132,21 +132,20 @@ func syncCommand(c *client) error {
|
|||
|
||||
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
|
||||
} 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
|
||||
}
|
||||
|
||||
|
@ -171,11 +170,11 @@ func replconfCommand(c *client) error {
|
|||
if _, err = num.ParseUint16(hack.String(args[i+1])); err != nil {
|
||||
return err
|
||||
}
|
||||
if host, _, err = net.SplitHostPort(c.remoteAddr); err != nil {
|
||||
host, _, err = net.SplitHostPort(c.remoteAddr)
|
||||
if err != nil {
|
||||
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)
|
||||
default:
|
||||
|
@ -200,16 +199,16 @@ func roleCommand(c *client) error {
|
|||
|
||||
ay := make([]interface{}, 0, 5)
|
||||
|
||||
var lastId int64 = 0
|
||||
var lastID int64 = 0
|
||||
|
||||
stat, _ := c.app.ldb.ReplicationStat()
|
||||
if stat != nil {
|
||||
lastId = int64(stat.LastID)
|
||||
lastID = int64(stat.LastID)
|
||||
}
|
||||
|
||||
if isMaster {
|
||||
ay = append(ay, []byte("master"))
|
||||
ay = append(ay, lastId)
|
||||
ay = append(ay, lastID)
|
||||
|
||||
items := make([]interface{}, 0, 3)
|
||||
|
||||
|
@ -229,7 +228,7 @@ func roleCommand(c *client) error {
|
|||
ay = append(ay, []byte(host))
|
||||
ay = append(ay, int64(port))
|
||||
ay = append(ay, []byte(replStatetring(c.app.m.state.Get())))
|
||||
ay = append(ay, lastId)
|
||||
ay = append(ay, lastID)
|
||||
}
|
||||
|
||||
c.resp.writeArray(ay)
|
||||
|
|
|
@ -36,11 +36,11 @@ func checkDataEqual(master *App, slave *App) error {
|
|||
}
|
||||
|
||||
func TestReplication(t *testing.T) {
|
||||
data_dir := "/tmp/test_replication"
|
||||
os.RemoveAll(data_dir)
|
||||
dataDir := "/tmp/test_replication"
|
||||
os.RemoveAll(dataDir)
|
||||
|
||||
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.UseReplication = true
|
||||
masterCfg.Replication.Sync = true
|
||||
|
@ -56,7 +56,7 @@ func TestReplication(t *testing.T) {
|
|||
defer master.Close()
|
||||
|
||||
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.SlaveOf = masterCfg.Addr
|
||||
slaveCfg.UseReplication = true
|
||||
|
|
|
@ -34,10 +34,9 @@ func authCommand(c *client) error {
|
|||
c.isAuthed = true
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
} else {
|
||||
c.isAuthed = false
|
||||
return ErrAuthenticationFailure
|
||||
}
|
||||
c.isAuthed = false
|
||||
return ErrAuthenticationFailure
|
||||
}
|
||||
|
||||
func echoCommand(c *client) error {
|
||||
|
@ -54,31 +53,30 @@ func selectCommand(c *client) error {
|
|||
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
|
||||
} 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
|
||||
}
|
||||
|
@ -170,10 +168,9 @@ func configCommand(c *client) error {
|
|||
case "rewrite":
|
||||
if err := c.app.cfg.Rewrite(); err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
}
|
||||
c.resp.writeStatus(OK)
|
||||
return nil
|
||||
case "get":
|
||||
return configGetCommand(c)
|
||||
default:
|
||||
|
|
|
@ -10,12 +10,11 @@ func saddCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -39,10 +38,8 @@ func soptGeneric(c *client, optType byte) error {
|
|||
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
@ -67,10 +64,8 @@ func soptStoreGeneric(c *client, optType byte) error {
|
|||
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -80,12 +75,11 @@ func scardCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.SCard(args[0]); err != nil {
|
||||
n, err := c.db.SCard(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -112,12 +106,11 @@ func sismemberCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -127,12 +120,11 @@ func smembersCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.SMembers(args[0]); err != nil {
|
||||
v, err := c.db.SMembers(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeSliceArray(v)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(v)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
@ -143,12 +135,11 @@ func sremCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
@ -167,12 +158,11 @@ func sclearCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.SClear(args[0]); err != nil {
|
||||
n, err := c.db.SClear(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -182,12 +172,11 @@ func smclearCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.SMclear(args...); err != nil {
|
||||
n, err := c.db.SMclear(args...)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -202,12 +191,11 @@ func sexpireCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -222,12 +210,11 @@ func sexpireAtCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -237,12 +224,11 @@ func sttlCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.STTL(args[0]); err != nil {
|
||||
v, err := c.db.STTL(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
@ -253,12 +239,11 @@ func spersistCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.SPersist(args[0]); err != nil {
|
||||
n, err := c.db.SPersist(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -267,11 +252,11 @@ func skeyexistsCommand(c *client) error {
|
|||
if len(args) != 1 {
|
||||
return ErrCmdParams
|
||||
}
|
||||
if n, err := c.db.SKeyExists(args[0]); err != nil {
|
||||
n, err := c.db.SKeyExists(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -102,11 +102,11 @@ func handleXSort(c *client, tp string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if n, err := c.db.RPush(storeKey, ay...); err != nil {
|
||||
n, err := c.db.RPush(storeKey, ay...)
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -55,12 +55,11 @@ func zcardCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if n, err := c.db.ZCard(args[0]); err != nil {
|
||||
n, err := c.db.ZCard(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -206,12 +205,11 @@ func zcountCommand(c *client) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -263,7 +261,6 @@ func zremrangebyrankCommand(c *client) error {
|
|||
}
|
||||
|
||||
n, err := c.db.ZRemRangeByRank(key, start, stop)
|
||||
|
||||
if err == nil {
|
||||
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
|
||||
} else {
|
||||
c.resp.writeScorePairArray(datas, withScores)
|
||||
}
|
||||
c.resp.writeScorePairArray(datas, withScores)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -408,12 +405,11 @@ func zrangebyscoreGeneric(c *client, reverse bool) error {
|
|||
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
|
||||
} else {
|
||||
c.resp.writeScorePairArray(datas, withScores)
|
||||
}
|
||||
|
||||
c.resp.writeScorePairArray(datas, withScores)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -501,12 +497,11 @@ func zttlCommand(c *client) error {
|
|||
return ErrCmdParams
|
||||
}
|
||||
|
||||
if v, err := c.db.ZTTL(args[0]); err != nil {
|
||||
v, err := c.db.ZTTL(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(v)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(v)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -713,12 +708,11 @@ func zrangebylexCommand(c *client) error {
|
|||
}
|
||||
|
||||
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
|
||||
} else {
|
||||
c.resp.writeSliceArray(ay)
|
||||
}
|
||||
|
||||
c.resp.writeSliceArray(ay)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -734,12 +728,11 @@ func zremrangebylexCommand(c *client) error {
|
|||
}
|
||||
|
||||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -755,12 +748,11 @@ func zlexcountCommand(c *client) error {
|
|||
}
|
||||
|
||||
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
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -769,11 +761,11 @@ func zkeyexistsCommand(c *client) error {
|
|||
if len(args) != 1 {
|
||||
return ErrCmdParams
|
||||
}
|
||||
if n, err := c.db.ZKeyExists(args[0]); err != nil {
|
||||
n, err := c.db.ZKeyExists(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
} else {
|
||||
c.resp.writeInteger(n)
|
||||
}
|
||||
c.resp.writeInteger(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ type info struct {
|
|||
|
||||
Server struct {
|
||||
OS string
|
||||
ProceessId int
|
||||
ProceessID int
|
||||
}
|
||||
|
||||
Replication struct {
|
||||
|
@ -39,7 +39,7 @@ func newInfo(app *App) (i *info, err error) {
|
|||
i.app = app
|
||||
|
||||
i.Server.OS = runtime.GOOS
|
||||
i.Server.ProceessId = os.Getpid()
|
||||
i.Server.ProceessID = os.Getpid()
|
||||
|
||||
return i, nil
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ func (i *info) dumpServer(buf *bytes.Buffer) {
|
|||
buf.WriteString("# Server\r\n")
|
||||
|
||||
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{"http_addr", i.app.cfg.HttpAddr},
|
||||
infoPair{"readonly", i.app.cfg.Readonly},
|
||||
|
|
|
@ -298,9 +298,8 @@ func (m *master) nextSyncLogID() (uint64, error) {
|
|||
|
||||
if s.LastID > s.CommitID {
|
||||
return s.LastID + 1, nil
|
||||
} else {
|
||||
return s.CommitID + 1, nil
|
||||
}
|
||||
return s.CommitID + 1, nil
|
||||
}
|
||||
|
||||
func (m *master) sync() error {
|
||||
|
@ -321,9 +320,8 @@ func (m *master) sync() error {
|
|||
if err = m.conn.ReceiveBulkTo(&m.syncBuf); err != nil {
|
||||
if strings.Contains(err.Error(), ledis.ErrLogMissed.Error()) {
|
||||
return m.fullSync()
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
m.state.Set(replConnectedState)
|
||||
|
@ -393,9 +391,8 @@ func (app *App) tryReSlaveof() error {
|
|||
|
||||
if len(app.cfg.SlaveOf) == 0 {
|
||||
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) {
|
||||
|
@ -459,14 +456,14 @@ func (app *App) publishNewLog(l *rpl.Log) {
|
|||
}
|
||||
|
||||
n := 0
|
||||
logId := l.ID
|
||||
logID := l.ID
|
||||
for _, s := range app.slaves {
|
||||
lastLogID := s.lastLogID.Get()
|
||||
if lastLogID == logId {
|
||||
if lastLogID == logID {
|
||||
//slave has already owned this log
|
||||
n++
|
||||
} else if lastLogID > logId {
|
||||
log.Errorf("invalid slave %s, lastlogid %d > %d", s.slaveListeningAddr, lastLogID, logId)
|
||||
} else if 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
|
||||
for i := 0; i < slaveNum; i++ {
|
||||
id := <-app.slaveSyncAck
|
||||
if id < logId {
|
||||
log.Infof("some slave may close with last logid %d < %d", id, logId)
|
||||
if id < logID {
|
||||
log.Infof("some slave may close with last logid %d < %d", id, logID)
|
||||
} else {
|
||||
n++
|
||||
if n >= total {
|
||||
|
|
51
store/db.go
51
store/db.go
|
@ -52,11 +52,8 @@ func (db *DB) Put(key []byte, value []byte) error {
|
|||
|
||||
if db.needSyncCommit() {
|
||||
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 {
|
||||
|
@ -64,9 +61,8 @@ func (db *DB) Delete(key []byte) error {
|
|||
|
||||
if db.needSyncCommit() {
|
||||
return db.db.SyncDelete(key)
|
||||
} else {
|
||||
return db.db.Delete(key)
|
||||
}
|
||||
return db.db.Delete(key)
|
||||
}
|
||||
|
||||
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})
|
||||
}
|
||||
|
||||
//count < 0, unlimit.
|
||||
//RangeLimitIterator count < 0, unlimit.
|
||||
//
|
||||
//offset must >= 0, if < 0, will get nothing.
|
||||
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})
|
||||
}
|
||||
|
||||
//count < 0, unlimit.
|
||||
//RevRangeLimitIterator count < 0, unlimit.
|
||||
//
|
||||
//offset must >= 0, if < 0, will get nothing.
|
||||
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
|
||||
} else if db.cfg.DBSyncCommit == 2 {
|
||||
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) {
|
||||
|
@ -156,14 +151,12 @@ func (db *DB) GetSlice(key []byte) (Slice, error) {
|
|||
db.st.statGet(v, err)
|
||||
db.st.GetTotalTime.Add(time.Now().Sub(t))
|
||||
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
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ const (
|
|||
RangeOpen uint8 = 0x11
|
||||
)
|
||||
|
||||
// min must less or equal than max
|
||||
// Range min must less or equal than max
|
||||
//
|
||||
// range type:
|
||||
//
|
||||
|
@ -44,7 +44,7 @@ type Iterator struct {
|
|||
st *Stat
|
||||
}
|
||||
|
||||
// Returns a copy of key.
|
||||
// Key returns a copy of key.
|
||||
func (it *Iterator) Key() []byte {
|
||||
k := it.it.Key()
|
||||
if k == nil {
|
||||
|
@ -54,7 +54,7 @@ func (it *Iterator) Key() []byte {
|
|||
return append([]byte{}, k...)
|
||||
}
|
||||
|
||||
// Returns a copy of value.
|
||||
// Value returns a copy of value.
|
||||
func (it *Iterator) Value() []byte {
|
||||
v := it.it.Value()
|
||||
if v == nil {
|
||||
|
@ -64,19 +64,19 @@ func (it *Iterator) Value() []byte {
|
|||
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.
|
||||
func (it *Iterator) RawKey() []byte {
|
||||
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.
|
||||
func (it *Iterator) RawValue() []byte {
|
||||
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 {
|
||||
k := it.RawKey()
|
||||
if k == nil {
|
||||
|
@ -90,7 +90,7 @@ func (it *Iterator) BufKey(b []byte) []byte {
|
|||
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 {
|
||||
v := it.RawValue()
|
||||
if v == nil {
|
||||
|
@ -142,7 +142,7 @@ func (it *Iterator) Seek(key []byte) {
|
|||
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 {
|
||||
it.Seek(key)
|
||||
if it.Valid() {
|
||||
|
@ -157,7 +157,7 @@ func (it *Iterator) Find(key []byte) []byte {
|
|||
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.
|
||||
func (it *Iterator) RawFind(key []byte) []byte {
|
||||
it.Seek(key)
|
||||
|
|
|
@ -30,15 +30,14 @@ func (s *Snapshot) GetSlice(key []byte) (Slice, error) {
|
|||
v, err := d.GetSlice(key)
|
||||
s.st.statGet(v, err)
|
||||
return v, err
|
||||
}
|
||||
v, err := s.Get(key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if v == nil {
|
||||
return nil, nil
|
||||
} else {
|
||||
v, err := s.Get(key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if v == nil {
|
||||
return nil, nil
|
||||
} else {
|
||||
return driver.GoSlice(v), nil
|
||||
}
|
||||
return driver.GoSlice(v), nil
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,17 +8,16 @@ import (
|
|||
"github.com/ledisdb/ledisdb/config"
|
||||
"github.com/ledisdb/ledisdb/store/driver"
|
||||
|
||||
_ "github.com/ledisdb/ledisdb/store/goleveldb"
|
||||
_ "github.com/ledisdb/ledisdb/store/leveldb"
|
||||
_ "github.com/ledisdb/ledisdb/store/rocksdb"
|
||||
_ "github.com/ledisdb/ledisdb/store/goleveldb" // register goleveldb
|
||||
_ "github.com/ledisdb/ledisdb/store/leveldb" // register leveldb
|
||||
_ "github.com/ledisdb/ledisdb/store/rocksdb" // register rocksdb
|
||||
)
|
||||
|
||||
func getStorePath(cfg *config.Config) string {
|
||||
if len(cfg.DBPath) > 0 {
|
||||
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) {
|
||||
|
@ -57,6 +56,3 @@ func Repair(cfg *config.Config) error {
|
|||
|
||||
return s.Repair(path, cfg)
|
||||
}
|
||||
|
||||
func init() {
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ func (wb *WriteBatch) Rollback() error {
|
|||
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 {
|
||||
data := wb.wb.Data()
|
||||
if wb.data == nil {
|
||||
|
|
Loading…
Reference in New Issue