Skip to content

Commit

Permalink
tso: add retry for UpdateTSO (#9021)
Browse files Browse the repository at this point in the history
close #9020

Signed-off-by: lhy1024 <[email protected]>

Co-authored-by: ti-chi-bot[bot] <108142056+ti-chi-bot[bot]@users.noreply.github.com>
  • Loading branch information
lhy1024 and ti-chi-bot[bot] authored Feb 5, 2025
1 parent f6d4ca5 commit ac4e640
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions pkg/tso/global_allocator.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,21 @@ func (gta *GlobalTSOAllocator) IsInitialize() bool {
}

// UpdateTSO is used to update the TSO in memory and the time window in etcd.
func (gta *GlobalTSOAllocator) UpdateTSO() error {
return gta.timestampOracle.UpdateTimestamp()
func (gta *GlobalTSOAllocator) UpdateTSO() (err error) {
// When meet network partition, we need to manually retry to update the global tso,
// next request succeeds with the new endpoint, according to https://github.com/etcd-io/etcd/issues/8711
maxRetryCount := 3
for range maxRetryCount {
err = gta.timestampOracle.UpdateTimestamp()
if err == nil {
return nil
}
log.Warn("try to update the global tso but failed", errs.ZapError(err))
// Etcd client retry with roundRobinQuorumBackoff https://github.com/etcd-io/etcd/blob/d62cdeee4863001b09e772ed013eb1342a1d0f89/client/v3/client.go#L488
// And its default interval is 25ms, so we sleep 50ms here. https://github.com/etcd-io/etcd/blob/d62cdeee4863001b09e772ed013eb1342a1d0f89/client/v3/options.go#L53
time.Sleep(50 * time.Millisecond)
}
return
}

// SetTSO sets the physical part with given TSO.
Expand Down

0 comments on commit ac4e640

Please sign in to comment.