Skip to content

Commit 19c80ef

Browse files
committed
*: fix the change master bug
1 parent e3f721a commit 19c80ef

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

mysqlcluster/syncer/readonly_statefulset.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,10 +318,16 @@ func putMySQLReadOnly(s *StatefulSetSyncer, host string) error {
318318
s.log.V(1).Info("slave status has gotten error", "error", err)
319319
}
320320
if isReplicating == corev1.ConditionFalse {
321-
// chang master
322-
changeSql := fmt.Sprintf(`stop slave;CHANGE MASTER TO MASTER_HOST='%s', MASTER_PORT=%d, MASTER_USER='%s', MASTER_PASSWORD='%s',
321+
// No.1 start slave
322+
if errStart := sqlRunner.QueryExec(internal.NewQuery("start slave;")); errStart != nil {
323+
s.log.V(1).Info("start slave gotten error", "error", errStart)
324+
// No2. change master and start
325+
changeSql := fmt.Sprintf(`stop slave;CHANGE MASTER TO MASTER_HOST='%s', MASTER_PORT=%d, MASTER_USER='%s', MASTER_PASSWORD='%s',
323326
MASTER_AUTO_POSITION=1; start slave;`, buildMasterName(s), 3306, "root", cfg.Password)
324-
sqlRunner.QueryExec(internal.NewQuery(changeSql))
327+
if err2 := sqlRunner.QueryExec(internal.NewQuery(changeSql)); err2 != nil {
328+
s.log.V(1).Info("change master and start slave gotten error", "error", err2)
329+
}
330+
}
325331
}
326332
}
327333
return errOut

mysqlcluster/syncer/status.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,6 @@ func (s *StatusSyncer) RoCheckStatus(ctx context.Context, cli client.Client, pod
610610
host := fmt.Sprintf("%s.%s.%s", podName, s.GetNameForResource(utils.ReadOnlyHeadlessSVC), s.Namespace)
611611
index := s.getRoStatusIndex(host)
612612
node := &s.Status.Nodes[index]
613-
node.Message = ""
614613

615614
isInitial, isReadonly, isCloseSemi, isReplicating := corev1.ConditionUnknown, corev1.ConditionUnknown, corev1.ConditionUnknown, corev1.ConditionUnknown
616615
isSupperReadOnly := corev1.ConditionUnknown
@@ -661,7 +660,21 @@ func (s *StatusSyncer) RoCheckStatus(ctx context.Context, cli client.Client, pod
661660
}
662661
// 3. change master
663662
if _, isReplicating, err = internal.CheckSlaveStatus(sqlRunner, s.Spec.ReplicaLag); err != nil {
664-
node.Message = err.Error()
663+
parts := strings.Split(node.Message, " ")
664+
now := time.Now().Unix()
665+
var last int64
666+
var err2 error
667+
if len(parts[0]) == 0 {
668+
node.Message = fmt.Sprintf("%d unixtime error:", now) + err.Error()
669+
} else if last, err2 = strconv.ParseInt(parts[0], 10, 64); err2 != nil {
670+
s.log.Info("get times from message", "times", last)
671+
}
672+
if now-last > 10 {
673+
node.Message = fmt.Sprintf("%d unixseconds error:", now) + err.Error()
674+
}
675+
676+
} else {
677+
node.Message = ""
665678
}
666679
}
667680
//update node Rostatus

0 commit comments

Comments
 (0)