提交 e011d950 作者: Matt Bell 提交者: Juan Batiz-Benet

cmd/ipfs: Obtain lock when starting daemon

上级 d87aad1e
package main package main
import ( import (
"fmt"
"net/http" "net/http"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/camlistore/lock"
cmds "github.com/jbenet/go-ipfs/commands" cmds "github.com/jbenet/go-ipfs/commands"
cmdsHttp "github.com/jbenet/go-ipfs/commands/http" cmdsHttp "github.com/jbenet/go-ipfs/commands/http"
"github.com/jbenet/go-ipfs/config"
) )
// DaemonLockFile is the filename of the daemon lock, relative to config dir
const DaemonLockFile = "daemon.lock"
var Daemon = &cmds.Command{ var Daemon = &cmds.Command{
Options: []cmds.Option{}, Options: []cmds.Option{},
Help: "TODO", Help: "TODO",
...@@ -15,13 +22,33 @@ var Daemon = &cmds.Command{ ...@@ -15,13 +22,33 @@ var Daemon = &cmds.Command{
} }
func daemonFunc(req cmds.Request, res cmds.Response) { func daemonFunc(req cmds.Request, res cmds.Response) {
configPath, err := getConfigPath(req)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
lockPath, err := config.Path(configPath, DaemonLockFile)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
lk, err := lock.Lock(lockPath)
if err != nil {
res.SetError(fmt.Errorf("Couldn't obtain lock. Is another daemon already running?"), cmds.ErrNormal)
return
}
defer lk.Close()
handler := cmdsHttp.Handler{} handler := cmdsHttp.Handler{}
http.Handle(cmdsHttp.ApiPath+"/", handler) http.Handle(cmdsHttp.ApiPath+"/", handler)
// TODO: load listen address/port from config/options // TODO: load listen address/port from config/options
err := http.ListenAndServe(":8080", nil) err = http.ListenAndServe(":8080", nil)
if err != nil { if err != nil {
res.SetError(err, cmds.ErrNormal) res.SetError(err, cmds.ErrNormal)
return return
} }
// TODO: log to indicate that we are now listening // TODO: log to indicate that we are now listening
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论