diff --git a/dfget/config/constants.go b/dfget/config/constants.go index c062a66cc..7d0a1910b 100644 --- a/dfget/config/constants.go +++ b/dfget/config/constants.go @@ -116,9 +116,9 @@ const ( LocalHTTPPathRate = "/rate/" LocalHTTPPing = "/server/ping" - DataExpireTime = 3 * time.Minute - ServerAliveTime = 5 * time.Minute - DefaultDownlodTimeout = 5 * time.Minute + DataExpireTime = 3 * time.Minute + ServerAliveTime = 5 * time.Minute + DefaultDownloadTimeout = 5 * time.Minute DefaultSupernodePort = 8002 ) diff --git a/dfget/core/core.go b/dfget/core/core.go index aaf82d5e3..94a35310d 100644 --- a/dfget/core/core.go +++ b/dfget/core/core.go @@ -168,10 +168,7 @@ func registerToSuperNode(cfg *config.Config, register regist.SupernodeRegister) func downloadFile(cfg *config.Config, supernodeAPI api.SupernodeAPI, register regist.SupernodeRegister, result *regist.RegisterResult) error { - timeout := netutils.CalculateTimeout(cfg.RV.FileLength, cfg.MinRate, config.DefaultMinRate, 10*time.Second) - if timeout == 0 && cfg.Timeout > 0 { - timeout = cfg.Timeout - } + timeout := calculateTimeout(cfg) success := true err := doDownload(cfg, supernodeAPI, register, result, timeout) @@ -328,3 +325,19 @@ func reportMetrics(cfg *config.Config, supernodeAPI api.SupernodeAPI, downloadTi } } } + +func calculateTimeout(cfg *config.Config) time.Duration { + if cfg == nil { + return config.DefaultDownloadTimeout + } + // the timeout specified by user should be used firstly + if cfg.Timeout > 0 { + return cfg.Timeout + } + timeout := netutils.CalculateTimeout(cfg.RV.FileLength, cfg.MinRate, + config.DefaultMinRate, 10*time.Second) + if timeout > 0 { + return timeout + } + return config.DefaultDownloadTimeout +} diff --git a/dfget/core/downloader/downloader.go b/dfget/core/downloader/downloader.go index 29503c817..85fbbe673 100644 --- a/dfget/core/downloader/downloader.go +++ b/dfget/core/downloader/downloader.go @@ -42,8 +42,9 @@ type Downloader interface { // the given timeout duration. func DoDownloadTimeout(downloader Downloader, timeout time.Duration) error { if timeout <= 0 { - logrus.Warnf("invalid download timeout(%.3fs)", timeout.Seconds()) - timeout = config.DefaultDownlodTimeout + logrus.Warnf("invalid download timeout(%.3fs), use default:(%.3fs)", + timeout.Seconds(), config.DefaultDownloadTimeout.Seconds()) + timeout = config.DefaultDownloadTimeout } ctx, cancel := context.WithCancel(context.Background())