From 40b3a72498b458fe9feaeb075b0ff6ffdf28a903 Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Wed, 29 Nov 2017 15:27:49 -0800 Subject: [PATCH] retry publishing IPNS records every 5 minutes on failure This way, if we *happen* to be offline while attempting a publish, we don't wait the full interval. License: MIT Signed-off-by: Steven Allen --- namesys/republisher/repub.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/namesys/republisher/repub.go b/namesys/republisher/repub.go index b7c864cbd..28a873f10 100644 --- a/namesys/republisher/repub.go +++ b/namesys/republisher/repub.go @@ -28,6 +28,7 @@ var log = logging.Logger("ipns-repub") var DefaultRebroadcastInterval = time.Hour * 4 var InitialRebroadcastDelay = time.Minute * 1 +var FailureRetryInterval = time.Minute * 5 const DefaultRecordLifetime = time.Hour * 24 @@ -56,17 +57,17 @@ func NewRepublisher(r routing.ValueStore, ds ds.Datastore, self ic.PrivKey, ks k } func (rp *Republisher) Run(proc goprocess.Process) { - tick := time.NewTicker(rp.Interval) - defer tick.Stop() - delayCh := time.After(InitialRebroadcastDelay) + timer := time.NewTimer(InitialRebroadcastDelay) + defer timer.Stop() for { select { - case <-delayCh: - delayCh = tick.C + case <-timer.C: + timer.Reset(rp.Interval) err := rp.republishEntries(proc) if err != nil { log.Error("Republisher failed to republish: ", err) + timer.Reset(FailureRetryInterval) } case <-proc.Closing(): return