Skip to content

Commit

Permalink
Merge pull request #6176 from ipfs/fix/close-repo
Browse files Browse the repository at this point in the history
fix two bugs where the repo may not properly be closed
  • Loading branch information
Stebalien authored Apr 4, 2019
2 parents c8279e9 + 285a276 commit 1244056
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 2 deletions.
10 changes: 8 additions & 2 deletions cmd/ipfs/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
migrate "github.com/ipfs/go-ipfs/repo/fsrepo/migrations"

"github.com/hashicorp/go-multierror"
"github.com/ipfs/go-ipfs-cmdkit"
cmds "github.com/ipfs/go-ipfs-cmds"
mprome "github.com/ipfs/go-metrics-prometheus"
Expand Down Expand Up @@ -278,6 +279,10 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
break
}

// The node will also close the repo but there are many places we could
// fail before we get to that. It can't hurt to close it twice.
defer repo.Close()

cfg, err := cctx.GetConfig()
if err != nil {
return err
Expand Down Expand Up @@ -417,13 +422,14 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment

// collect long-running errors and block for shutdown
// TODO(cryptix): our fuse currently doesnt follow this pattern for graceful shutdown
var errs error
for err := range merge(apiErrc, gwErrc, gcErrc) {
if err != nil {
return err
errs = multierror.Append(errs, err)
}
}

return nil
return errs
}

// serveHTTPApi collects options, creates listener, prints status message and starts serving requests
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ require (
github.com/fatih/color v1.7.0 // indirect
github.com/fsnotify/fsnotify v1.4.7
github.com/gogo/protobuf v1.2.1
github.com/hashicorp/go-multierror v1.0.0
github.com/hashicorp/golang-lru v0.5.1
github.com/hsanjuan/go-libp2p-http v0.0.2
github.com/ipfs/dir-index-html v1.0.3
Expand Down
5 changes: 5 additions & 0 deletions test/sharness/t0060-daemon.sh
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ test_expect_success "daemon with pipe eventually becomes live" '
test_fsh cat stdin_daemon_out || test_fsh cat stdin_daemon_err || test_fsh cat stdin_poll_apiout || test_fsh cat stdin_poll_apierr
'

test_expect_success "'ipfs daemon' cleans up when it fails to start" '
test_must_fail ipfs daemon --routing=foobar &&
test ! -e "$IPFS_PATH/repo.lock"
'

ulimit -S -n 512
TEST_ULIMIT_PRESET=1
test_launch_ipfs_daemon
Expand Down

0 comments on commit 1244056

Please sign in to comment.