func (slv *slave) SendSlaveOfToMaster() error { slv.mtx.Lock() var mi = slv.mi var cli = slv.cli slv.mtx.Unlock() if cli == nil { return nil } var err error var pkg []byte if mi.Migration { var p ctrl.PkgMigrate p.ClientReq = false p.MasterAddr = mi.MasterAddr p.SlaveAddr = mi.SlaveAddr p.SlotId = mi.SlotId pkg, err = ctrl.Encode(proto.CmdMigrate, 0, 0, &p) if err != nil { return err } } else { lastSeq, valid := slv.bin.GetMasterSeq() if !valid { slv.mc.SetStatus(ctrl.SlaveNeedClear) // Any better solution? log.Fatalf("Slave lastSeq %d is out of sync, please clear old data! "+ "(Restart may fix this issue)", lastSeq) } var p ctrl.PkgSlaveOf p.ClientReq = false p.MasterAddr = mi.MasterAddr p.SlaveAddr = mi.SlaveAddr p.LastSeq = lastSeq log.Printf("Connect to master %s with lastSeq %d\n", mi.MasterAddr, p.LastSeq) pkg, err = ctrl.Encode(proto.CmdSlaveOf, 0, 0, &p) if err != nil { return err } } cli.AddResp(pkg) return slv.mc.SetStatus(ctrl.SlaveFullSync) }