@@ -929,7 +929,10 @@ func (job *RedisSwitchPreCheck) checkReplicationSync(newMasterConn *myredis.Redi
929929 var masterTime , masterDbsize , slaveTime int64
930930 oldMasterAddr := fmt .Sprintf ("%s:%d" , storagePair .MasterInfo .IP , storagePair .MasterInfo .Port )
931931 newMasterAddr := fmt .Sprintf ("%s:%d" , storagePair .SlaveInfo .IP , storagePair .SlaveInfo .Port )
932-
932+ if err := job .trySetHeartBeatWhenDbmonStoped (storagePair ); err != nil {
933+ time .Sleep (time .Second * 2 )
934+ job .trySetHeartBeatWhenDbmonStoped (storagePair )
935+ }
933936 if err := newMasterConn .SelectDB (1 ); err != nil {
934937 return fmt .Errorf ("[%s] select db 1, exec cmd err:%+v" , newMasterAddr , err )
935938 }
@@ -976,6 +979,30 @@ func (job *RedisSwitchPreCheck) checkReplicationSync(newMasterConn *myredis.Redi
976979 return nil
977980}
978981
982+ // setHeartBeatWhenDbmonStoped # here we just set on the master heartbeat:
983+ func (job * RedisSwitchPreCheck ) trySetHeartBeatWhenDbmonStoped (storagePair InstanceSwitchParam ) error {
984+ oldMasterAddr := fmt .Sprintf ("%s:%d" , storagePair .MasterInfo .IP , storagePair .MasterInfo .Port )
985+ oldMasterConn , err := myredis .NewRedisClientWithTimeout (oldMasterAddr ,
986+ job .params .ClusterMeta .StoragePassword , 0 , job .params .ClusterMeta .ClusterType , time .Second * 10 )
987+ if err != nil {
988+ job .runtime .Logger .Warn ("[%s] conntect 2 old master failed :%+v" , oldMasterAddr , err )
989+ return err
990+ }
991+ defer oldMasterConn .Close ()
992+
993+ if err := oldMasterConn .SelectDB (1 ); err != nil {
994+ job .runtime .Logger .Warn ("[%s] select db 1 on master failed :%+v" , oldMasterAddr , err )
995+ return err
996+ }
997+ job .runtime .Logger .Info ("[%s] try reset dbmon heartbeat key [%s] value 2 current" , oldMasterAddr , fmt .Sprintf ("%s:time" , oldMasterAddr ))
998+ rst := oldMasterConn .InstanceClient .Set (context .TODO (), fmt .Sprintf ("%s:time" , oldMasterAddr ), time .Now ().Unix (), 0 )
999+ if rst .Err () != nil {
1000+ job .runtime .Logger .Warn ("[%s] set on old master failed :%+v" , oldMasterAddr , err )
1001+ return err
1002+ }
1003+ return nil
1004+ }
1005+
9791006// precheckStorageLogin make sure all todo switch redis can login
9801007func (job * RedisSwitchPreCheck ) precheckStorageLogin () error {
9811008 wg := & sync.WaitGroup {}
0 commit comments