diff --git a/kernel/go.mod b/kernel/go.mod index b8b1cff60..67e993c84 100644 --- a/kernel/go.mod +++ b/kernel/go.mod @@ -40,7 +40,7 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/qiniu/go-sdk/v7 v7.13.0 github.com/radovskyb/watcher v1.0.7 - github.com/siyuan-note/dejavu v0.0.0-20220615164826-201b6516adf3 + github.com/siyuan-note/dejavu v0.0.0-20220616034124-40a031c36730 github.com/siyuan-note/encryption v0.0.0-20220612074546-f1dd94fe8676 github.com/siyuan-note/filelock v0.0.0-20220615164210-064676f342aa github.com/vmihailenco/msgpack/v5 v5.3.5 @@ -100,7 +100,7 @@ require ( golang.org/x/mod v0.5.1 // indirect golang.org/x/net v0.0.0-20220607020251-c690dde0001d // indirect golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect - golang.org/x/sys v0.0.0-20220614162138-6c1b26c55098 // indirect + golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c // indirect golang.org/x/tools v0.1.8 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/protobuf v1.28.0 // indirect diff --git a/kernel/go.sum b/kernel/go.sum index 05325641d..c1bd6e0f2 100644 --- a/kernel/go.sum +++ b/kernel/go.sum @@ -421,6 +421,8 @@ github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJV github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/siyuan-note/dejavu v0.0.0-20220615164826-201b6516adf3 h1:pWPKLb4bpv5Cj8jErsuVKAvXqmudz+0XVfVWZjVxGJc= github.com/siyuan-note/dejavu v0.0.0-20220615164826-201b6516adf3/go.mod h1:0XMLF+6gtwqr3ZJTk3nZmNbmQ4xNdaoP9RXKDR2ggkw= +github.com/siyuan-note/dejavu v0.0.0-20220616034124-40a031c36730 h1:leFyjVzzx8/6upv6ciFl3tVZtTkXGi+71NESaMeuC30= +github.com/siyuan-note/dejavu v0.0.0-20220616034124-40a031c36730/go.mod h1:0XMLF+6gtwqr3ZJTk3nZmNbmQ4xNdaoP9RXKDR2ggkw= github.com/siyuan-note/encryption v0.0.0-20220612074546-f1dd94fe8676 h1:QB9TjJQFhXhZ6dAtPpY02DlzHAQm1C+WqZq6OadG8mI= github.com/siyuan-note/encryption v0.0.0-20220612074546-f1dd94fe8676/go.mod h1:H8fyqqAbp9XreANjeSbc72zEdFfKTXYN34tc1TjZwtw= github.com/siyuan-note/filelock v0.0.0-20220615164210-064676f342aa h1:6bXZdsdA5EU1NUChdFV4EwH8nvYUis0H1TxwgadLM38= @@ -657,6 +659,8 @@ golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220614162138-6c1b26c55098 h1:PgOr27OhUx2IRqGJ2RxAWI4dJQ7bi9cSrB82uzFzfUA= golang.org/x/sys v0.0.0-20220614162138-6c1b26c55098/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c h1:aFV+BgZ4svzjfabn8ERpuB4JI4N6/rdy1iusx77G3oU= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20180302201248-b7ef84aaf62a/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/kernel/model/repository.go b/kernel/model/repository.go index a327287bb..9ec1db85b 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -201,3 +201,26 @@ func IndexRepo(memo string) (err error) { util.PushClearProgress() return } + +func indexRepoBeforeCloudSync() { + if 1 > len(Conf.Repo.Key) { + return + } + + repo, err := dejavu.NewRepo(util.DataDir, util.RepoDir, Conf.Repo.Key) + if nil != err { + util.LogErrorf("init repo failed: %s", err) + return + } + + start := time.Now() + _, err = repo.Index("[Auto] Cloud sync", nil, nil) + if nil != err { + util.LogErrorf("index repo before cloud sync failed: %s", err) + return + } + elapsed := time.Since(start).Milliseconds() + if 7000 < elapsed { + util.LogWarnf("index repo before cloud sync elapsed [%dms]", elapsed) + } +} diff --git a/kernel/model/sync.go b/kernel/model/sync.go index e253a7455..fee10461d 100644 --- a/kernel/model/sync.go +++ b/kernel/model/sync.go @@ -151,7 +151,11 @@ func SyncData(boot, exit, byHand bool) { return } - syncConf, err := getWorkspaceDataConf() + // 创建数据快照 https://github.com/siyuan-note/siyuan/issues/5161 + indexRepoBeforeCloudSync() + + // 获取工作空间数据配置(数据版本) + dataConf, err := getWorkspaceDataConf() if nil != err { msg := fmt.Sprintf(Conf.Language(80), formatErrorMsg(err)) Conf.Sync.Stat = msg @@ -181,8 +185,8 @@ func SyncData(boot, exit, byHand bool) { return } - //util.LogInfof("sync [cloud=%d, local=%d]", cloudSyncVer, syncConf.SyncVer) - if cloudSyncVer == syncConf.SyncVer { + //util.LogInfof("sync [cloud=%d, local=%d]", cloudSyncVer, dataConf.SyncVer) + if cloudSyncVer == dataConf.SyncVer { BootSyncSucc = 0 ExitSyncSucc = 0 syncSameCount++ @@ -217,7 +221,7 @@ func SyncData(boot, exit, byHand bool) { localSyncDirPath := Conf.Sync.GetSaveDir() syncSameCount = 0 - if cloudSyncVer < syncConf.SyncVer { + if cloudSyncVer < dataConf.SyncVer { // 上传 if -1 == cloudSyncVer { @@ -227,7 +231,7 @@ func SyncData(boot, exit, byHand bool) { } start := time.Now() - //util.LogInfof("sync [cloud=%d, local=%d] uploading...", cloudSyncVer, syncConf.SyncVer) + //util.LogInfof("sync [cloud=%d, local=%d] uploading...", cloudSyncVer, dataConf.SyncVer) syncSize, err := util.SizeOfDirectory(localSyncDirPath, false) if nil != err { util.PushErrMsg(fmt.Sprintf(Conf.Language(80), formatErrorMsg(err)), 7000) @@ -266,7 +270,7 @@ func SyncData(boot, exit, byHand bool) { util.PushClearProgress() elapsed := time.Now().Sub(start).Seconds() stat := fmt.Sprintf(Conf.Language(130), wroteFiles, humanize.Bytes(transferSize)) + fmt.Sprintf(Conf.Language(132), elapsed) - util.LogInfof("sync [cloud=%d, local=%d, wroteFiles=%d, transferSize=%s] uploaded in [%.2fs]", cloudSyncVer, syncConf.SyncVer, wroteFiles, humanize.Bytes(transferSize), elapsed) + util.LogInfof("sync [cloud=%d, local=%d, wroteFiles=%d, transferSize=%s] uploaded in [%.2fs]", cloudSyncVer, dataConf.SyncVer, wroteFiles, humanize.Bytes(transferSize), elapsed) Conf.Sync.Uploaded = now Conf.Sync.Stat = stat @@ -286,7 +290,7 @@ func SyncData(boot, exit, byHand bool) { } start := time.Now() - //util.LogInfof("sync [cloud=%d, local=%d] downloading...", cloudSyncVer, syncConf.SyncVer) + //util.LogInfof("sync [cloud=%d, local=%d] downloading...", cloudSyncVer, dataConf.SyncVer) // 使用路径映射文件进行解密验证 https://github.com/siyuan-note/siyuan/issues/3789 var tmpFetchedFiles int @@ -381,7 +385,7 @@ func SyncData(boot, exit, byHand bool) { elapsed := time.Now().Sub(start).Seconds() stat := fmt.Sprintf(Conf.Language(129), fetchedFilesCount, humanize.Bytes(transferSize)) + fmt.Sprintf(Conf.Language(131), elapsed) - util.LogInfof("sync [cloud=%d, local=%d, fetchedFiles=%d, transferSize=%s] downloaded in [%.2fs]", cloudSyncVer, syncConf.SyncVer, fetchedFilesCount, humanize.Bytes(transferSize), elapsed) + util.LogInfof("sync [cloud=%d, local=%d, fetchedFiles=%d, transferSize=%s] downloaded in [%.2fs]", cloudSyncVer, dataConf.SyncVer, fetchedFilesCount, humanize.Bytes(transferSize), elapsed) Conf.Sync.Downloaded = now Conf.Sync.Stat = stat