1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-07-01 02:30:39 +08:00

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>
This commit is contained in:
Steven Allen
2017-11-29 15:27:49 -08:00
parent d8de88c4b6
commit 40b3a72498

View File

@ -28,6 +28,7 @@ var log = logging.Logger("ipns-repub")
var DefaultRebroadcastInterval = time.Hour * 4 var DefaultRebroadcastInterval = time.Hour * 4
var InitialRebroadcastDelay = time.Minute * 1 var InitialRebroadcastDelay = time.Minute * 1
var FailureRetryInterval = time.Minute * 5
const DefaultRecordLifetime = time.Hour * 24 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) { func (rp *Republisher) Run(proc goprocess.Process) {
tick := time.NewTicker(rp.Interval) timer := time.NewTimer(InitialRebroadcastDelay)
defer tick.Stop() defer timer.Stop()
delayCh := time.After(InitialRebroadcastDelay)
for { for {
select { select {
case <-delayCh: case <-timer.C:
delayCh = tick.C timer.Reset(rp.Interval)
err := rp.republishEntries(proc) err := rp.republishEntries(proc)
if err != nil { if err != nil {
log.Error("Republisher failed to republish: ", err) log.Error("Republisher failed to republish: ", err)
timer.Reset(FailureRetryInterval)
} }
case <-proc.Closing(): case <-proc.Closing():
return return