This commit is contained in:
Liang Ding 2022-12-07 20:45:11 +08:00
parent a1c81fda03
commit e9c9f685f8
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
5 changed files with 35 additions and 0 deletions

View file

@ -27,6 +27,7 @@ require (
github.com/gin-contrib/gzip v0.0.6 github.com/gin-contrib/gzip v0.0.6
github.com/gin-contrib/sessions v0.0.5 github.com/gin-contrib/sessions v0.0.5
github.com/gin-gonic/gin v1.8.1 github.com/gin-gonic/gin v1.8.1
github.com/gofrs/flock v0.8.1
github.com/imroc/req/v3 v3.26.4 github.com/imroc/req/v3 v3.26.4
github.com/jinzhu/copier v0.3.5 github.com/jinzhu/copier v0.3.5
github.com/json-iterator/go v1.1.12 github.com/json-iterator/go v1.1.12

View file

@ -125,6 +125,8 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=

View file

@ -434,6 +434,7 @@ func Close(force bool, execInstallPkg int) (exitCode int) {
treenode.SaveBlockTree() treenode.SaveBlockTree()
clearWorkspaceTemp() clearWorkspaceTemp()
clearPortJSON() clearPortJSON()
util.UnlockWorkspace()
go func() { go func() {
time.Sleep(500 * time.Millisecond) time.Sleep(500 * time.Millisecond)

View file

@ -36,6 +36,7 @@ const (
ExitCodeUnavailablePort = 21 // 端口不可用 ExitCodeUnavailablePort = 21 // 端口不可用
ExitCodeCreateConfDirErr = 22 // 创建配置目录失败 ExitCodeCreateConfDirErr = 22 // 创建配置目录失败
ExitCodeBlockTreeErr = 23 // 无法读写 blocktree.msgpack 文件 ExitCodeBlockTreeErr = 23 // 无法读写 blocktree.msgpack 文件
ExitCodeWorkspaceLocked = 24 // 工作区已被锁定
ExitCodeOk = 0 // 正常退出 ExitCodeOk = 0 // 正常退出
ExitCodeFatal = 1 // 致命错误 ExitCodeFatal = 1 // 致命错误
) )

View file

@ -32,6 +32,7 @@ import (
"github.com/88250/gulu" "github.com/88250/gulu"
figure "github.com/common-nighthawk/go-figure" figure "github.com/common-nighthawk/go-figure"
"github.com/gofrs/flock"
"github.com/siyuan-note/httpclient" "github.com/siyuan-note/httpclient"
"github.com/siyuan-note/logging" "github.com/siyuan-note/logging"
) )
@ -95,6 +96,10 @@ func Boot() {
SSL = *ssl SSL = *ssl
LogPath = filepath.Join(TempDir, "siyuan.log") LogPath = filepath.Join(TempDir, "siyuan.log")
logging.SetLogPath(LogPath) logging.SetLogPath(LogPath)
// 工作空间仅允许被一个内核进程伺服
tryLockWorkspace()
AppearancePath = filepath.Join(ConfDir, "appearance") AppearancePath = filepath.Join(ConfDir, "appearance")
if "dev" == Mode { if "dev" == Mode {
ThemesPath = filepath.Join(WorkingDir, "appearance", "themes") ThemesPath = filepath.Join(WorkingDir, "appearance", "themes")
@ -154,6 +159,7 @@ var (
WorkingDir, _ = os.Getwd() WorkingDir, _ = os.Getwd()
WorkspaceDir string // 工作空间目录路径 WorkspaceDir string // 工作空间目录路径
WorkspaceLock *flock.Flock // 工作空间锁
ConfDir string // 配置目录路径 ConfDir string // 配置目录路径
DataDir string // 数据目录路径 DataDir string // 数据目录路径
RepoDir string // 仓库目录路径 RepoDir string // 仓库目录路径
@ -437,3 +443,27 @@ func GetDataAssetsAbsPath() (ret string) {
} }
return return
} }
func tryLockWorkspace() {
WorkspaceLock = flock.New(filepath.Join(WorkspaceDir, ".lock"))
if err := WorkspaceLock.Lock(); nil != err {
logging.LogErrorf("lock workspace [%s] failed: %s", WorkspaceDir, err)
os.Exit(ExitCodeWorkspaceLocked)
}
}
func UnlockWorkspace() {
if nil == WorkspaceLock {
return
}
if err := WorkspaceLock.Unlock(); nil != err {
logging.LogErrorf("unlock workspace [%s] failed: %s", WorkspaceDir, err)
return
}
if err := os.Remove(filepath.Join(WorkspaceDir, ".lock")); nil != err {
logging.LogErrorf("remove workspace lock failed: %s", err)
return
}
}