This commit is contained in:
Liang Ding 2022-07-17 12:22:32 +08:00
parent c8ea858976
commit 505b973c2d
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
70 changed files with 671 additions and 942 deletions

View file

@ -29,6 +29,7 @@ import (
"github.com/88250/lute/ast"
"github.com/88250/lute/parse"
"github.com/dustin/go-humanize"
"github.com/siyuan-note/logging"
"github.com/siyuan-note/siyuan/kernel/util"
"github.com/vmihailenco/msgpack/v5"
)
@ -226,28 +227,28 @@ func InitBlockTree() {
var err error
if err = blocktreeFileLock.Lock(); nil != err {
util.LogErrorf("read block tree failed: %s", err)
logging.LogErrorf("read block tree failed: %s", err)
os.Exit(util.ExitCodeBlockTreeErr)
return
}
fh := blocktreeFileLock.Fh()
if _, err = fh.Seek(0, io.SeekStart); nil != err {
util.LogErrorf("read block tree failed: %s", err)
logging.LogErrorf("read block tree failed: %s", err)
os.Exit(util.ExitCodeBlockTreeErr)
return
}
data, err := io.ReadAll(fh)
if nil != err {
util.LogErrorf("read block tree failed: %s", err)
logging.LogErrorf("read block tree failed: %s", err)
os.Exit(util.ExitCodeBlockTreeErr)
return
}
blockTreesLock.Lock()
if err = msgpack.Unmarshal(data, &blockTrees); nil != err {
util.LogErrorf("unmarshal block tree failed: %s", err)
logging.LogErrorf("unmarshal block tree failed: %s", err)
if err = os.RemoveAll(util.BlockTreePath); nil != err {
util.LogErrorf("removed corrupted block tree failed: %s", err)
logging.LogErrorf("removed corrupted block tree failed: %s", err)
}
os.Exit(util.ExitCodeBlockTreeErr)
return
@ -255,7 +256,7 @@ func InitBlockTree() {
blockTreesLock.Unlock()
debug.FreeOSMemory()
if elapsed := time.Since(start).Seconds(); 2 < elapsed {
util.LogWarnf("read block tree [%s] to [%s], elapsed [%.2fs]", humanize.Bytes(uint64(len(data))), util.BlockTreePath, elapsed)
logging.LogWarnf("read block tree [%s] to [%s], elapsed [%.2fs]", humanize.Bytes(uint64(len(data))), util.BlockTreePath, elapsed)
}
return
}
@ -268,7 +269,7 @@ func SaveBlockTree() {
}
if err := blocktreeFileLock.Lock(); nil != err {
util.LogErrorf("read block tree failed: %s", err)
logging.LogErrorf("read block tree failed: %s", err)
os.Exit(util.ExitCodeBlockTreeErr)
return
}
@ -276,7 +277,7 @@ func SaveBlockTree() {
blockTreesLock.Lock()
data, err := msgpack.Marshal(blockTrees)
if nil != err {
util.LogErrorf("marshal block tree failed: %s", err)
logging.LogErrorf("marshal block tree failed: %s", err)
os.Exit(util.ExitCodeBlockTreeErr)
return
}
@ -284,19 +285,19 @@ func SaveBlockTree() {
fh := blocktreeFileLock.Fh()
if err = gulu.File.WriteFileSaferByHandle(fh, data); nil != err {
util.LogErrorf("write block tree failed: %s", err)
logging.LogErrorf("write block tree failed: %s", err)
os.Exit(util.ExitCodeBlockTreeErr)
return
}
debug.FreeOSMemory()
if elapsed := time.Since(start).Seconds(); 2 < elapsed {
util.LogWarnf("save block tree [size=%s] to [%s], elapsed [%.2fs]", humanize.Bytes(uint64(len(data))), util.BlockTreePath, elapsed)
logging.LogWarnf("save block tree [size=%s] to [%s], elapsed [%.2fs]", humanize.Bytes(uint64(len(data))), util.BlockTreePath, elapsed)
}
}
func CloseBlockTree() {
SaveBlockTree()
if err := blocktreeFileLock.Unlock(); nil != err {
util.LogErrorf("close block tree failed: %s", err)
logging.LogErrorf("close block tree failed: %s", err)
}
}