File tree Expand file tree Collapse file tree 1 file changed +10
-0
lines changed
go/vt/vttablet/tabletserver/repltracker Expand file tree Collapse file tree 1 file changed +10
-0
lines changed Original file line number Diff line number Diff line change @@ -60,6 +60,7 @@ type heartbeatReader struct {
60
60
61
61
lagMu sync.Mutex
62
62
lastKnownLag time.Duration
63
+ lastKnownTime time.Time
63
64
lastKnownError error
64
65
}
65
66
@@ -103,6 +104,7 @@ func (r *heartbeatReader) Open() {
103
104
log .Info ("Heartbeat Reader: opening" )
104
105
105
106
r .pool .Open (r .env .Config ().DB .AppWithDB (), r .env .Config ().DB .DbaWithDB (), r .env .Config ().DB .AppDebugWithDB ())
107
+ r .lastKnownTime = r .now ()
106
108
r .ticks .Start (func () { r .readHeartbeat () })
107
109
r .isOpen = true
108
110
}
@@ -130,9 +132,16 @@ func (r *heartbeatReader) Close() {
130
132
func (r * heartbeatReader ) Status () (time.Duration , error ) {
131
133
r .lagMu .Lock ()
132
134
defer r .lagMu .Unlock ()
135
+
133
136
if r .lastKnownError != nil {
134
137
return 0 , r .lastKnownError
135
138
}
139
+
140
+ // Return an error if we didn't receive a heartbeat for more than two seconds
141
+ if ! r .lastKnownTime .IsZero () && r .now ().Sub (r .lastKnownTime ) > 2 * r .interval {
142
+ return 0 , fmt .Errorf ("no heartbeat received in over 2x the heartbeat interval" )
143
+ }
144
+
136
145
return r .lastKnownLag , nil
137
146
}
138
147
@@ -162,6 +171,7 @@ func (r *heartbeatReader) readHeartbeat() {
162
171
reads .Add (1 )
163
172
164
173
r .lagMu .Lock ()
174
+ r .lastKnownTime = r .now ()
165
175
r .lastKnownLag = lag
166
176
r .lastKnownError = nil
167
177
r .lagMu .Unlock ()
You can’t perform that action at this time.
0 commit comments