Skip to content

Commit

Permalink
fix auto update refresh timer for token (#1459)
Browse files Browse the repository at this point in the history
  • Loading branch information
baptiste-b-pegasys committed Jul 28, 2022
1 parent 49e4884 commit 4dc5fae
Showing 1 changed file with 23 additions and 19 deletions.
42 changes: 23 additions & 19 deletions qlight/token_holder.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type TokenHolder struct {
pluginManager *plugin.PluginManager
peerUpdater RunningPeerAuthUpdater
timer *time.Timer
cancelTimer func()
eta time.Time
}

func NewTokenHolder(psi string, pluginManager *plugin.PluginManager) (*TokenHolder, error) {
Expand Down Expand Up @@ -94,6 +94,10 @@ func (h *TokenHolder) refreshPlugin(pluginManager plugin.PluginManagerInterface,
func (h *TokenHolder) HttpCredentialsProvider(ctx context.Context) (string, error) {
if h.plugin != nil {
log.Debug("HttpCredentialsProvider using plugin")
err := h.updateTimer()
if err != nil {
log.Warn("update token timer", "err", err)
}
return h.plugin.TokenRefresh(ctx, h.token, h.psi)
}
log.Debug("HttpCredentialsProvider using token")
Expand Down Expand Up @@ -159,28 +163,28 @@ func (h *TokenHolder) updateTimer() error {
if err != nil {
return err
}
if expireIn <= 0 { // automatic refresh one second after if already expired
expireIn = time.Second
}
if h.timer != nil {
h.cancelTimer()
if h.timer != nil && time.Now().Add(expireIn).After(h.eta) {
if !h.timer.Stop() {
log.Debug("token updateTimer read timer.C", "expire in", expireIn)
<-h.timer.C
}
h.timer.Reset(expireIn)
} else {
h.timer = time.NewTimer(expireIn)
}
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case <-ctx.Done():
case <-h.timer.C:
log.Debug("refresh token timer triggered")
h.CurrentToken()
h.timer = nil
}
if h.timer == nil {
if expireIn <= 0 { // automatic refresh one second after if already expired
expireIn = time.Second
} else {
expireIn = expireIn - time.Duration(h.refreshAnticipation)*time.Millisecond
}
}()
h.cancelTimer = cancel
h.eta = time.Now().Add(expireIn)
log.Debug("token updateTimer new", "expire in", expireIn, "eta", h.eta)
h.timer = time.AfterFunc(expireIn, func() {
log.Debug("token updateTimer triggered", "expire in", expireIn, "eta", h.eta)
h.timer = nil
h.eta = time.Now()
h.CurrentToken()
})
}
return nil
}

Expand Down

0 comments on commit 4dc5fae

Please sign in to comment.