forked from mirror/ledisdb
add ledis-dump tool
This commit is contained in:
parent
b2fa4082ff
commit
55056660e3
|
@ -0,0 +1,62 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"github.com/siddontang/ledisdb/server"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var host = flag.String("host", "127.0.0.1", "ledis server host")
|
||||||
|
var port = flag.Int("port", 6380, "ledis server port")
|
||||||
|
var sock = flag.String("sock", "", "ledis unix socket domain")
|
||||||
|
var dumpFile = flag.String("o", "./ledis.dump", "dump file to save")
|
||||||
|
|
||||||
|
var fullSyncCmd = []byte("*1\r\n$8\r\nfullsync\r\n") //fullsync
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
var c net.Conn
|
||||||
|
var err error
|
||||||
|
var f *os.File
|
||||||
|
|
||||||
|
if f, err = os.OpenFile(*dumpFile, os.O_CREATE|os.O_WRONLY, os.ModePerm); err != nil {
|
||||||
|
println(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
if len(*sock) != 0 {
|
||||||
|
c, err = net.Dial("unix", *sock)
|
||||||
|
} else {
|
||||||
|
addr := fmt.Sprintf("%s:%d", *host, *port)
|
||||||
|
c, err = net.Dial("tcp", addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
println(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer c.Close()
|
||||||
|
|
||||||
|
println("dump begin")
|
||||||
|
|
||||||
|
if _, err = c.Write(fullSyncCmd); err != nil {
|
||||||
|
println(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rb := bufio.NewReaderSize(c, 16*1024)
|
||||||
|
|
||||||
|
if err = server.ReadBulkTo(rb, f); err != nil {
|
||||||
|
println(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
println("dump end")
|
||||||
|
}
|
|
@ -81,7 +81,7 @@ func (c *client) run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *client) readLine() ([]byte, error) {
|
func (c *client) readLine() ([]byte, error) {
|
||||||
return readLine(c.rb)
|
return ReadLine(c.rb)
|
||||||
}
|
}
|
||||||
|
|
||||||
//A client sends to the Redis server a RESP Array consisting of just Bulk Strings.
|
//A client sends to the Redis server a RESP Array consisting of just Bulk Strings.
|
||||||
|
|
|
@ -254,7 +254,7 @@ func (m *master) fullSync() error {
|
||||||
|
|
||||||
defer os.Remove(dumpPath)
|
defer os.Remove(dumpPath)
|
||||||
|
|
||||||
err = readBulkTo(m.rb, f)
|
err = ReadBulkTo(m.rb, f)
|
||||||
f.Close()
|
f.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("read dump data error %s", err.Error())
|
log.Error("read dump data error %s", err.Error())
|
||||||
|
@ -291,7 +291,7 @@ func (m *master) sync() error {
|
||||||
|
|
||||||
m.syncBuf.Reset()
|
m.syncBuf.Reset()
|
||||||
|
|
||||||
err := readBulkTo(m.rb, &m.syncBuf)
|
err := ReadBulkTo(m.rb, &m.syncBuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ var (
|
||||||
errLineFormat = errors.New("bad response line format")
|
errLineFormat = errors.New("bad response line format")
|
||||||
)
|
)
|
||||||
|
|
||||||
func readLine(rb *bufio.Reader) ([]byte, error) {
|
func ReadLine(rb *bufio.Reader) ([]byte, error) {
|
||||||
p, err := rb.ReadSlice('\n')
|
p, err := rb.ReadSlice('\n')
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -27,8 +27,8 @@ func readLine(rb *bufio.Reader) ([]byte, error) {
|
||||||
return p[:i], nil
|
return p[:i], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readBulkTo(rb *bufio.Reader, w io.Writer) error {
|
func ReadBulkTo(rb *bufio.Reader, w io.Writer) error {
|
||||||
l, err := readLine(rb)
|
l, err := ReadLine(rb)
|
||||||
if len(l) == 0 {
|
if len(l) == 0 {
|
||||||
return errBulkFormat
|
return errBulkFormat
|
||||||
} else if l[0] == '$' {
|
} else if l[0] == '$' {
|
||||||
|
@ -43,7 +43,7 @@ func readBulkTo(rb *bufio.Reader, w io.Writer) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if l, err = readLine(rb); err != nil {
|
if l, err = ReadLine(rb); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if len(l) != 0 {
|
} else if len(l) != 0 {
|
||||||
return errBulkFormat
|
return errBulkFormat
|
||||||
|
|
Loading…
Reference in New Issue