modify RenewPeriodic to retry failed Renews until TTL elapses

This commit is contained in:
Robert Johnson 2015-05-06 16:40:45 -07:00
parent e7b00723f4
commit d934906905
1 changed files with 17 additions and 3 deletions

View File

@ -1,6 +1,7 @@
package api package api
import ( import (
"fmt"
"time" "time"
) )
@ -131,19 +132,32 @@ func (s *Session) RenewPeriodic(initialTTL string, id string, q *WriteOptions, d
if err != nil { if err != nil {
return err return err
} }
waitDur := ttl / 2
lastRenewTime := time.Now()
var lastErr error
for { for {
if time.Since(lastRenewTime) > ttl {
return lastErr
}
select { select {
case <-time.After(ttl / 2): case <-time.After(waitDur):
entry, _, err := s.Renew(id, q) entry, _, err := s.Renew(id, q)
if err != nil { if err != nil {
return err waitDur = time.Second
lastErr = err
continue
} }
if entry == nil { if entry == nil {
return nil waitDur = time.Second
lastErr = fmt.Errorf("No SessionEntry returned")
continue
} }
// Handle the server updating the TTL // Handle the server updating the TTL
ttl, _ = time.ParseDuration(entry.TTL) ttl, _ = time.ParseDuration(entry.TTL)
waitDur = ttl / 2
lastRenewTime = time.Now()
case <-doneCh: case <-doneCh:
// Attempt a session destroy // Attempt a session destroy