提交 7652f86c 作者: Juan Batiz-Benet

fixed a parsing bug on Version.CheckPeriod

And refactored a few names/comments
上级 16b53456
...@@ -120,16 +120,18 @@ func localNode(confdir string, online bool) (*core.IpfsNode, error) { ...@@ -120,16 +120,18 @@ func localNode(confdir string, online bool) (*core.IpfsNode, error) {
return nil, err return nil, err
} }
if cfg.Version.EligibleForUpdateCheck() { if cfg.Version.ShouldCheckForUpdate() {
obsolete := updates.CheckForUpdates() obsolete := updates.CheckForUpdates()
if obsolete != nil { if obsolete != nil {
if cfg.Version.Check == config.CheckError { if cfg.Version.Check == config.CheckError {
return nil, obsolete 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 { } else {
// update most recent check timestamp in config // update most recent check timestamp in config
cfg.RecordCurrentUpdateCheck(filename) config.RecordUpdateCheck(cfg, filename)
} }
} }
......
...@@ -11,6 +11,8 @@ import ( ...@@ -11,6 +11,8 @@ import (
u "github.com/jbenet/go-ipfs/util" u "github.com/jbenet/go-ipfs/util"
) )
var log = u.Logger("config")
// Identity tracks the configuration of the local node's identity. // Identity tracks the configuration of the local node's identity.
type Identity struct { type Identity struct {
PeerID string PeerID string
......
package config package config
import "time" import (
"strconv"
"time"
)
// Version regulates checking if the most recent version is run // Version regulates checking if the most recent version is run
type Version struct { type Version struct {
Check string // "ignore" for do not check, "warn" and "error" for reacting when obsolete // Current is the ipfs version for which config was generated
Current string // ipfs version for which config was generated Current string
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 // 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 // supported Version.Check values
const ( const (
CheckError = "error" // value for Version.Check to raise error and exit if version is obsolete // CheckError 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 CheckError = "error"
CheckIgnore = "ignore" // value for Version.Check to not perform update check
// 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) checkPeriodDuration() time.Duration {
func (v *Version) EligibleForUpdateCheck() bool { d, err := strconv.Atoi(v.CheckPeriod)
if v.Check == CheckIgnore || v.UpdateCheckedTime.Add(v.UpdateCheckPeriod).After(time.Now()) { 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 false
} }
return true return true
} }
// RecordCurrentUpdateCheck is called to record that update check was performed and showed that the running version is the most recent one // RecordUpdateCheck is called to record that an update check was performed,
func (cfg *Config) RecordCurrentUpdateCheck(filename string) { // showing that the running version is the most recent one.
cfg.Version.UpdateCheckedTime = time.Now() func RecordUpdateCheck(cfg *Config, filename string) {
if cfg.Version.UpdateCheckPeriod == time.Duration(0) { cfg.Version.CheckDate = time.Now()
// UpdateCheckPeriod was not initialized for some reason (e.g. config file used is broken)
cfg.Version.UpdateCheckPeriod = defaultUpdateCheckPeriod 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) WriteConfigFile(filename, cfg)
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论