@@ -51,8 +51,20 @@ func CheckFailOverCtx(failOverNode, victimNode, peerNode models.Node) error {
51
51
if victimNode .FailOverPeers == nil {
52
52
return nil
53
53
}
54
+ if peerNode .Mutex != nil {
55
+ peerNode .Mutex .Lock ()
56
+ }
54
57
_ , peerHasFailovered := peerNode .FailOverPeers [victimNode .ID .String ()]
58
+ if peerNode .Mutex != nil {
59
+ peerNode .Mutex .Unlock ()
60
+ }
61
+ if victimNode .Mutex != nil {
62
+ victimNode .Mutex .Lock ()
63
+ }
55
64
_ , victimHasFailovered := victimNode .FailOverPeers [peerNode .ID .String ()]
65
+ if victimNode .Mutex != nil {
66
+ victimNode .Mutex .Unlock ()
67
+ }
56
68
if peerHasFailovered && victimHasFailovered &&
57
69
victimNode .FailedOverBy == failOverNode .ID && peerNode .FailedOverBy == failOverNode .ID {
58
70
return errors .New ("failover ctx is already set" )
@@ -68,14 +80,38 @@ func SetFailOverCtx(failOverNode, victimNode, peerNode models.Node) error {
68
80
if victimNode .FailOverPeers == nil {
69
81
victimNode .FailOverPeers = make (map [string ]struct {})
70
82
}
83
+ if peerNode .Mutex != nil {
84
+ peerNode .Mutex .Lock ()
85
+ }
71
86
_ , peerHasFailovered := peerNode .FailOverPeers [victimNode .ID .String ()]
87
+ if peerNode .Mutex != nil {
88
+ peerNode .Mutex .Unlock ()
89
+ }
90
+ if victimNode .Mutex != nil {
91
+ victimNode .Mutex .Lock ()
92
+ }
72
93
_ , victimHasFailovered := victimNode .FailOverPeers [peerNode .ID .String ()]
94
+ if victimNode .Mutex != nil {
95
+ victimNode .Mutex .Unlock ()
96
+ }
73
97
if peerHasFailovered && victimHasFailovered &&
74
98
victimNode .FailedOverBy == failOverNode .ID && peerNode .FailedOverBy == failOverNode .ID {
75
99
return errors .New ("failover ctx is already set" )
76
100
}
101
+ if peerNode .Mutex != nil {
102
+ peerNode .Mutex .Lock ()
103
+ }
77
104
peerNode .FailOverPeers [victimNode .ID .String ()] = struct {}{}
105
+ if peerNode .Mutex != nil {
106
+ peerNode .Mutex .Unlock ()
107
+ }
108
+ if victimNode .Mutex != nil {
109
+ victimNode .Mutex .Lock ()
110
+ }
78
111
victimNode .FailOverPeers [peerNode .ID .String ()] = struct {}{}
112
+ if victimNode .Mutex != nil {
113
+ victimNode .Mutex .Unlock ()
114
+ }
79
115
victimNode .FailedOverBy = failOverNode .ID
80
116
peerNode .FailedOverBy = failOverNode .ID
81
117
if err := logic .UpsertNode (& victimNode ); err != nil {
0 commit comments