From 7652f86c6f33fb3d57f07f1f5acfed44ab8453a0 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet <juan@benet.ai> Date: Thu, 9 Oct 2014 20:31:24 -0700 Subject: [PATCH] fixed a parsing bug on Version.CheckPeriod And refactored a few names/comments --- cmd/ipfs/ipfs.go | 8 +++--- config/config.go | 2 ++ config/version.go | 69 ++++++++++++++++++++++++++++++++++------------- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/cmd/ipfs/ipfs.go b/cmd/ipfs/ipfs.go index 29ec17835..933ea5bd7 100644 --- a/cmd/ipfs/ipfs.go +++ b/cmd/ipfs/ipfs.go @@ -120,16 +120,18 @@ func localNode(confdir string, online bool) (*core.IpfsNode, error) { return nil, err } - if cfg.Version.EligibleForUpdateCheck() { + if cfg.Version.ShouldCheckForUpdate() { obsolete := updates.CheckForUpdates() if obsolete != nil { if cfg.Version.Check == config.CheckError { return nil, obsolete } - log.Warning(fmt.Sprintf("%v", obsolete)) // when "warn" version.check mode we just show warning message + + // when "warn" version.check mode we just show warning message + log.Warning(fmt.Sprintf("%v", obsolete)) } else { // update most recent check timestamp in config - cfg.RecordCurrentUpdateCheck(filename) + config.RecordUpdateCheck(cfg, filename) } } diff --git a/config/config.go b/config/config.go index 410fa0119..b04567bdd 100644 --- a/config/config.go +++ b/config/config.go @@ -11,6 +11,8 @@ import ( u "github.com/jbenet/go-ipfs/util" ) +var log = u.Logger("config") + // Identity tracks the configuration of the local node's identity. type Identity struct { PeerID string diff --git a/config/version.go b/config/version.go index 5cc469485..3c08cd372 100644 --- a/config/version.go +++ b/config/version.go @@ -1,38 +1,71 @@ package config -import "time" +import ( + "strconv" + "time" +) // Version regulates checking if the most recent version is run type Version struct { - Check string // "ignore" for do not check, "warn" and "error" for reacting when obsolete - Current string // ipfs version for which config was generated - UpdateCheckedTime time.Time // timestamp for the last time API endpoint was checked for updates - UpdateCheckPeriod time.Duration // time duration over which the update check will not be performed + // Current is the ipfs version for which config was generated + Current string + + // Check signals how to react on updates: + // - "ignore" for not checking + // - "warn" for issuing a warning and proceeding + // - "error" for exiting with an error + Check string + + // CheckDate is a timestamp for the last time API endpoint was checked for updates + CheckDate time.Time + + // CheckPeriod is the time duration over which the update check will not be performed + // (Note: cannot use time.Duration because marshalling with json breaks it) + CheckPeriod string } // supported Version.Check values const ( - CheckError = "error" // value for Version.Check to raise error and exit if version is obsolete - CheckWarn = "warn" // value for Version.Check to show warning message if version is obsolete - CheckIgnore = "ignore" // value for Version.Check to not perform update check + // CheckError value for Version.Check to raise error and exit if version is obsolete + CheckError = "error" + + // CheckWarn value for Version.Check to show warning message if version is obsolete + CheckWarn = "warn" + + // CheckIgnore value for Version.Check to not perform update check + CheckIgnore = "ignore" ) -var defaultUpdateCheckPeriod = time.Hour * 48 +// defaultCheckPeriod governs h +var defaultCheckPeriod = time.Hour * 48 -// EligibleForUpdateCheck returns if update check API endpoint is needed for this specific runtime -func (v *Version) EligibleForUpdateCheck() bool { - if v.Check == CheckIgnore || v.UpdateCheckedTime.Add(v.UpdateCheckPeriod).After(time.Now()) { +func (v *Version) checkPeriodDuration() time.Duration { + d, err := strconv.Atoi(v.CheckPeriod) + if err != nil { + log.Error("config.Version.CheckPeriod parse error. Using default.") + return defaultCheckPeriod + } + return time.Duration(d) +} + +// ShouldCheckForUpdate returns if update check API endpoint is needed for this specific runtime +func (v *Version) ShouldCheckForUpdate() bool { + + period := v.checkPeriodDuration() + if v.Check == CheckIgnore || v.CheckDate.Add(period).After(time.Now()) { return false } return true } -// RecordCurrentUpdateCheck is called to record that update check was performed and showed that the running version is the most recent one -func (cfg *Config) RecordCurrentUpdateCheck(filename string) { - cfg.Version.UpdateCheckedTime = time.Now() - if cfg.Version.UpdateCheckPeriod == time.Duration(0) { - // UpdateCheckPeriod was not initialized for some reason (e.g. config file used is broken) - cfg.Version.UpdateCheckPeriod = defaultUpdateCheckPeriod +// RecordUpdateCheck is called to record that an update check was performed, +// showing that the running version is the most recent one. +func RecordUpdateCheck(cfg *Config, filename string) { + cfg.Version.CheckDate = time.Now() + + if cfg.Version.CheckPeriod == "" { + // CheckPeriod was not initialized for some reason (e.g. config file broken) + cfg.Version.CheckPeriod = strconv.Itoa(int(defaultCheckPeriod)) } WriteConfigFile(filename, cfg) -- GitLab