From de45277883e96d03e2a9bb2ce6ace1ad63d71696 Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow Date: Sat, 17 Jan 2015 02:41:24 -0800 Subject: [PATCH] doc(core, main) --- cmd/ipfs/main.go | 2 +- core/core.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cmd/ipfs/main.go b/cmd/ipfs/main.go index 6b722c7ef..96f680bcb 100644 --- a/cmd/ipfs/main.go +++ b/cmd/ipfs/main.go @@ -182,7 +182,7 @@ func (i *cmdInvocation) constructNodeFunc(ctx context.Context) func() (*core.Ipf } r := fsrepo.At(i.req.Context().ConfigRoot) - if err := r.Open(); err != nil { + if err := r.Open(); err != nil { // repo is owned by the node return nil, err } diff --git a/core/core.go b/core/core.go index 09ce82af1..2478f493b 100644 --- a/core/core.go +++ b/core/core.go @@ -150,6 +150,18 @@ func Online(r repo.Repo) ConfigOption { // DEPRECATED: use Online, Offline functions func Standard(r repo.Repo, online bool) ConfigOption { return func(ctx context.Context) (n *IpfsNode, err error) { + // FIXME perform node construction in the main constructor so it isn't + // necessary to perform this teardown in this scope. + success := false + defer func() { + if !success && n != nil { + n.teardown() + } + }() + + // TODO move as much of node initialization as possible into + // NewIPFSNode. The larger these config options are, the harder it is + // to test all node construction code paths. if r == nil { return nil, debugerror.Errorf("repo required") @@ -177,15 +189,15 @@ func Standard(r repo.Repo, online bool) ConfigOption { return nil, debugerror.Wrap(err) } - // setup online services if online { if err := n.StartOnlineServices(ctx); err != nil { - return nil, err // debugerror.Wraps. + return nil, err } } else { n.Exchange = offline.Exchange(n.Blockstore) } + success = true return n, nil } }