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 {
6060
6161 lagMu sync.Mutex
6262 lastKnownLag time.Duration
63+ lastKnownTime time.Time
6364 lastKnownError error
6465}
6566
@@ -103,6 +104,7 @@ func (r *heartbeatReader) Open() {
103104 log .Info ("Heartbeat Reader: opening" )
104105
105106 r .pool .Open (r .env .Config ().DB .AppWithDB (), r .env .Config ().DB .DbaWithDB (), r .env .Config ().DB .AppDebugWithDB ())
107+ r .lastKnownTime = r .now ()
106108 r .ticks .Start (func () { r .readHeartbeat () })
107109 r .isOpen = true
108110}
@@ -130,9 +132,16 @@ func (r *heartbeatReader) Close() {
130132func (r * heartbeatReader ) Status () (time.Duration , error ) {
131133 r .lagMu .Lock ()
132134 defer r .lagMu .Unlock ()
135+
133136 if r .lastKnownError != nil {
134137 return 0 , r .lastKnownError
135138 }
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+
136145 return r .lastKnownLag , nil
137146}
138147
@@ -162,6 +171,7 @@ func (r *heartbeatReader) readHeartbeat() {
162171 reads .Add (1 )
163172
164173 r .lagMu .Lock ()
174+ r .lastKnownTime = r .now ()
165175 r .lastKnownLag = lag
166176 r .lastKnownError = nil
167177 r .lagMu .Unlock ()
You can’t perform that action at this time.
0 commit comments