From f87f27b352fb210434cb0828425ddb1235d085fb Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 4 Apr 2023 10:21:34 +0800 Subject: [PATCH 1/3] :art: Add retry to improve network check --- kernel/model/sync.go | 2 +- kernel/util/net.go | 27 ++++++++++----------------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 3da736214..94afe9ba5 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -576,7 +576,7 @@ func isProviderOnline() (ret bool) { checkURL = Conf.Sync.WebDAV.Endpoint default: logging.LogWarnf("unknown provider: %d", Conf.Sync.Provider) - util.IsOnline("") + return false } if ret = util.IsOnline(checkURL); !ret { diff --git a/kernel/util/net.go b/kernel/util/net.go index 7da8f1e38..b1c550dfe 100644 --- a/kernel/util/net.go +++ b/kernel/util/net.go @@ -33,19 +33,6 @@ import ( func IsOnline(checkURL string) bool { if "" == checkURL { - if isOnline("https://www.baidu.com") { - return true - } - - if isOnline("https://icanhazip.com") { - return true - } - - if isOnline("https://api.ipify.org") { - return true - } - - logging.LogWarnf("network is offline") return false } @@ -57,10 +44,16 @@ func IsOnline(checkURL string) bool { return false } -func isOnline(checkURL string) bool { - c := req.C().SetTimeout(1 * time.Second) - _, err := c.R().Head(checkURL) - return nil == err +func isOnline(checkURL string) (ret bool) { + for i := 0; i < 3; i++ { + c := req.C().SetTimeout(3 * time.Second) + _, err := c.R().Head(checkURL) + ret = nil == err + if ret { + break + } + } + return } func GetRemoteAddr(session *melody.Session) string { From 388e9cdf030bf3dac69de0862caeeb739037f6fd Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 4 Apr 2023 10:22:58 +0800 Subject: [PATCH 2/3] :art: Add retry to improve network check --- kernel/util/net.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/util/net.go b/kernel/util/net.go index b1c550dfe..b7a964a16 100644 --- a/kernel/util/net.go +++ b/kernel/util/net.go @@ -32,6 +32,12 @@ import ( ) func IsOnline(checkURL string) bool { + _, err := url.Parse(checkURL) + if nil != err { + logging.LogWarnf("invalid check URL [%s]", checkURL) + return false + } + if "" == checkURL { return false } From 334ad6b42e5b6176fa5840f1c4f5d665ad4dbfc8 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 4 Apr 2023 10:37:18 +0800 Subject: [PATCH 3/3] :recycle: Remove unused param --- kernel/api/sync.go | 2 +- kernel/model/conf.go | 2 +- kernel/model/sync.go | 17 ++++++----------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/kernel/api/sync.go b/kernel/api/sync.go index 88f70b104..5facf7998 100644 --- a/kernel/api/sync.go +++ b/kernel/api/sync.go @@ -58,7 +58,7 @@ func performSync(c *gin.Context) { } if 3 != model.Conf.Sync.Mode { - model.SyncData(false, false, true) + model.SyncData(true) return } diff --git a/kernel/model/conf.go b/kernel/model/conf.go index 38dbc8bcd..7de936068 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -450,7 +450,7 @@ func Close(force bool, execInstallPkg int) (exitCode int) { if !force { if Conf.Sync.Enabled && 3 != Conf.Sync.Mode && ((IsSubscriber() && conf.ProviderSiYuan == Conf.Sync.Provider) || conf.ProviderSiYuan != Conf.Sync.Provider) { - syncData(false, true, false) + syncData(true, false) if 0 != ExitSyncSucc { exitCode = 1 return diff --git a/kernel/model/sync.go b/kernel/model/sync.go index 94afe9ba5..fe7a9f677 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -126,7 +126,7 @@ func SyncDataJob() { return } - SyncData(false, false, false) + SyncData(false) } func BootSyncData() { @@ -170,19 +170,19 @@ func BootSyncData() { return } -func SyncData(boot, exit, byHand bool) { - syncData(boot, exit, byHand) +func SyncData(byHand bool) { + syncData(false, byHand) } -func syncData(boot, exit, byHand bool) { +func syncData(exit, byHand bool) { defer logging.Recover() - if !checkSync(boot, exit, byHand) { + if !checkSync(false, exit, byHand) { return } util.BroadcastByType("main", "syncing", 0, Conf.Language(81), nil) - if !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 + if !exit && !isProviderOnline() { // 这个操作比较耗时,所以要先推送 syncing 事件后再判断网络,这样才能给用户更即时的反馈 util.BroadcastByType("main", "syncing", 2, Conf.Language(28), nil) return } @@ -190,11 +190,6 @@ func syncData(boot, exit, byHand bool) { syncLock.Lock() defer syncLock.Unlock() - if boot { - util.IncBootProgress(3, "Syncing data from the cloud...") - BootSyncSucc = 0 - logging.LogInfof("sync before boot") - } if exit { ExitSyncSucc = 0 logging.LogInfof("sync before exit")