diff --git a/core/core.go b/core/core.go index 4489d2203..4e2c5f89a 100644 --- a/core/core.go +++ b/core/core.go @@ -7,7 +7,6 @@ import ( context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" b58 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-base58" - ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore" ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" bserv "github.com/jbenet/go-ipfs/blockservice" @@ -48,7 +47,7 @@ type IpfsNode struct { Peerstore peer.Peerstore // the local datastore - Datastore ds.ThreadSafeDatastoreCloser + Datastore u.ThreadSafeDatastoreCloser // the network message stream Network inet.Network diff --git a/core/datastore.go b/core/datastore.go index c53a0e43c..0611939ae 100644 --- a/core/datastore.go +++ b/core/datastore.go @@ -14,7 +14,7 @@ import ( u "github.com/jbenet/go-ipfs/util" ) -func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) { +func makeDatastore(cfg config.Datastore) (u.ThreadSafeDatastoreCloser, error) { if len(cfg.Type) == 0 { return nil, fmt.Errorf("config datastore.type required") } @@ -24,7 +24,7 @@ func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) { return makeLevelDBDatastore(cfg) case "memory": - return syncds.MutexWrap(ds.NewMapDatastore()), nil + return u.CloserWrap(syncds.MutexWrap(ds.NewMapDatastore())), nil case "fs": log.Warning("using fs.Datastore at .datastore for testing.") @@ -33,13 +33,13 @@ func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) { return nil, err } ktd := ktds.Wrap(d, u.B58KeyConverter) - return syncds.MutexWrap(ktd), nil + return u.CloserWrap(syncds.MutexWrap(ktd)), nil } return nil, fmt.Errorf("Unknown datastore type: %s", cfg.Type) } -func makeLevelDBDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) { +func makeLevelDBDatastore(cfg config.Datastore) (u.ThreadSafeDatastoreCloser, error) { if len(cfg.Path) == 0 { return nil, fmt.Errorf("config datastore.path required for leveldb") } diff --git a/core/mock.go b/core/mock.go index f35e591f2..92ffcb57d 100644 --- a/core/mock.go +++ b/core/mock.go @@ -10,6 +10,7 @@ import ( path "github.com/jbenet/go-ipfs/path" peer "github.com/jbenet/go-ipfs/peer" mdht "github.com/jbenet/go-ipfs/routing/mock" + "github.com/jbenet/go-ipfs/util" ) // NewMockNode constructs an IpfsNode for use in tests. @@ -35,7 +36,7 @@ func NewMockNode() (*IpfsNode, error) { // Temp Datastore dstore := ds.NewMapDatastore() - nd.Datastore = syncds.MutexWrap(dstore) + nd.Datastore = util.CloserWrap(syncds.MutexWrap(dstore)) // Routing dht := mdht.NewMockRouter(nd.Identity, nd.Datastore) diff --git a/util/datastore_closer.go b/util/datastore_closer.go new file mode 100644 index 000000000..7330ddb2d --- /dev/null +++ b/util/datastore_closer.go @@ -0,0 +1,24 @@ +package util + +import ( + "io" + + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore" +) + +type ThreadSafeDatastoreCloser interface { + datastore.ThreadSafeDatastore + io.Closer +} + +func CloserWrap(ds datastore.ThreadSafeDatastore) ThreadSafeDatastoreCloser { + return &datastoreCloserWrapper{ds} +} + +type datastoreCloserWrapper struct { + datastore.ThreadSafeDatastore +} + +func (w *datastoreCloserWrapper) Close() error { + return nil // no-op +}