follow replication
This commit is contained in:
parent
4a15a20e27
commit
2d6a6ff0a0
@ -90,14 +90,16 @@ func (c *Controller) writeAOF(value resp.Value, d *commandDetailsT) error {
|
|||||||
if !d.updated {
|
if !d.updated {
|
||||||
return nil // just ignore writes if the command did not update
|
return nil // just ignore writes if the command did not update
|
||||||
}
|
}
|
||||||
// process hooks
|
if c.config.FollowHost == "" {
|
||||||
if hm, ok := c.hookcols[d.key]; ok {
|
// process hooks, for leader only
|
||||||
for _, hook := range hm {
|
if hm, ok := c.hookcols[d.key]; ok {
|
||||||
if err := c.DoHook(hook, d); err != nil {
|
for _, hook := range hm {
|
||||||
if d.revert != nil {
|
if err := c.DoHook(hook, d); err != nil {
|
||||||
d.revert()
|
if d.revert != nil {
|
||||||
|
d.revert()
|
||||||
|
}
|
||||||
|
return errAOFHook{err}
|
||||||
}
|
}
|
||||||
return errAOFHook{err}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -260,18 +262,16 @@ func (c *Controller) liveAOF(pos int64, conn net.Conn, rd *server.AnyReaderWrite
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
rd := resp.NewReader(f)
|
|
||||||
|
b := make([]byte, 4096)
|
||||||
|
// The reader needs to be OK with the eof not
|
||||||
for {
|
for {
|
||||||
v, _, err := rd.ReadValue()
|
n, err := f.Read(b)
|
||||||
if err != io.EOF {
|
if err != io.EOF && n > 0 {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
data, err := v.MarshalRESP()
|
if _, err := conn.Write(b[:n]); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if _, err := conn.Write(data); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
|
@ -231,6 +231,7 @@ func (c *Controller) followStep(host string, port int, followc uint64) error {
|
|||||||
if telnet || v.Type() != resp.Array {
|
if telnet || v.Type() != resp.Array {
|
||||||
return errors.New("invalid multibulk")
|
return errors.New("invalid multibulk")
|
||||||
}
|
}
|
||||||
|
|
||||||
aofsz, err := c.followHandleCommand(vals, followc, nullw)
|
aofsz, err := c.followHandleCommand(vals, followc, nullw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Loading…
x
Reference in New Issue
Block a user