mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-05-04 05:29:12 +08:00
🎨 Improve workspace startup stability https://github.com/siyuan-note/siyuan/issues/11483
This commit is contained in:
parent
47f884f2bb
commit
dfc8d39a68
@ -451,6 +451,7 @@ func InitBlockTree(force bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadErr := atomic.Bool{}
|
||||||
size := atomic.Int64{}
|
size := atomic.Int64{}
|
||||||
waitGroup := &sync.WaitGroup{}
|
waitGroup := &sync.WaitGroup{}
|
||||||
p, _ := ants.NewPoolWithFunc(4, func(arg interface{}) {
|
p, _ := ants.NewPoolWithFunc(4, func(arg interface{}) {
|
||||||
@ -462,14 +463,15 @@ func InitBlockTree(force bool) {
|
|||||||
f, err := os.OpenFile(p, os.O_RDONLY, 0644)
|
f, err := os.OpenFile(p, os.O_RDONLY, 0644)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
logging.LogErrorf("open block tree failed: %s", err)
|
logging.LogErrorf("open block tree failed: %s", err)
|
||||||
os.Exit(logging.ExitCodeFileSysErr)
|
loadErr.Store(true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
info, err := f.Stat()
|
info, err := f.Stat()
|
||||||
if nil != err {
|
if nil != err {
|
||||||
logging.LogErrorf("stat block tree failed: %s", err)
|
logging.LogErrorf("stat block tree failed: %s", err)
|
||||||
os.Exit(logging.ExitCodeFileSysErr)
|
loadErr.Store(true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
size.Add(info.Size())
|
size.Add(info.Size())
|
||||||
@ -477,16 +479,7 @@ func InitBlockTree(force bool) {
|
|||||||
sliceData := map[string]*BlockTree{}
|
sliceData := map[string]*BlockTree{}
|
||||||
if err = msgpack.NewDecoder(f).Decode(&sliceData); nil != err {
|
if err = msgpack.NewDecoder(f).Decode(&sliceData); nil != err {
|
||||||
logging.LogErrorf("unmarshal block tree failed: %s", err)
|
logging.LogErrorf("unmarshal block tree failed: %s", err)
|
||||||
if err = os.RemoveAll(util.BlockTreePath); nil != err {
|
loadErr.Store(true)
|
||||||
logging.LogErrorf("removed corrupted block tree failed: %s", err)
|
|
||||||
}
|
|
||||||
os.Exit(logging.ExitCodeFileSysErr)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = f.Close(); nil != err {
|
|
||||||
logging.LogErrorf("close block tree failed: %s", err)
|
|
||||||
os.Exit(logging.ExitCodeFileSysErr)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -505,6 +498,17 @@ func InitBlockTree(force bool) {
|
|||||||
waitGroup.Wait()
|
waitGroup.Wait()
|
||||||
p.Release()
|
p.Release()
|
||||||
|
|
||||||
|
if loadErr.Load() {
|
||||||
|
logging.LogInfof("cause block tree load error, remove block tree file")
|
||||||
|
if removeErr := os.RemoveAll(util.BlockTreePath); nil != removeErr {
|
||||||
|
logging.LogErrorf("remove block tree file failed: %s", removeErr)
|
||||||
|
os.Exit(logging.ExitCodeFileSysErr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
blockTrees = &sync.Map{}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
elapsed := time.Since(start).Seconds()
|
elapsed := time.Since(start).Seconds()
|
||||||
logging.LogInfof("read block tree [%s] to [%s], elapsed [%.2fs]", humanize.BytesCustomCeil(uint64(size.Load()), 2), util.BlockTreePath, elapsed)
|
logging.LogInfof("read block tree [%s] to [%s], elapsed [%.2fs]", humanize.BytesCustomCeil(uint64(size.Load()), 2), util.BlockTreePath, elapsed)
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user