@cryptotaxi247 / kubo / commits / 40b3a7249

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 <steven@stebalien.com>

Steven Allen committed Nov 29, 2017 at 15:27 UTC 40b3a72498b458fe9feaeb075b0ff6ffdf28a903
1 file changed +6 -5
namesys/republisher/repub.go
+6 -5
@@ -28,6 +28,7 @@ var log = logging.Logger("ipns-repub")
28
29 var DefaultRebroadcastInterval = time.Hour * 4
30 var InitialRebroadcastDelay = time.Minute * 1
31 +var FailureRetryInterval = time.Minute * 5
32
33 const DefaultRecordLifetime = time.Hour * 24
34
@@ -56,17 +57,17 @@ func NewRepublisher(r routing.ValueStore, ds ds.Datastore, self ic.PrivKey, ks k
57 }
58
59 func (rp *Republisher) Run(proc goprocess.Process) {
59 - tick := time.NewTicker(rp.Interval)
60 - defer tick.Stop()
61 - delayCh := time.After(InitialRebroadcastDelay)
60 + timer := time.NewTimer(InitialRebroadcastDelay)
61 + defer timer.Stop()
62
63 for {
64 select {
65 - case <-delayCh:
66 - delayCh = tick.C
65 + case <-timer.C:
66 + timer.Reset(rp.Interval)
67 err := rp.republishEntries(proc)
68 if err != nil {
69 log.Error("Republisher failed to republish: ", err)
70 + timer.Reset(FailureRetryInterval)
71 }
72 case <-proc.Closing():
73 return