Skip to content

Commit 343e7eb

Browse files
[release-20.0] Fix vttablet not being marked as not serving when MySQL stalls (vitessio#17883) (vitessio#18452)
Signed-off-by: Arthur Schreiber <[email protected]> Co-authored-by: vitess-bot[bot] <108069721+vitess-bot[bot]@users.noreply.github.com>
1 parent a4a6ed3 commit 343e7eb

File tree

1 file changed

+10
-0
lines changed
  • go/vt/vttablet/tabletserver/repltracker

1 file changed

+10
-0
lines changed

go/vt/vttablet/tabletserver/repltracker/reader.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff 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() {
130132
func (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()

0 commit comments

Comments
 (0)