@cryptotaxi247 / kubo / commits / bacf3ecc6

feat(util) add datastore Closer Wrapper

@jbenet License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>

Brian Tiger Chow committed Nov 17, 2014 at 01:00 UTC bacf3ecc6aefa3ee1d8bb88e29eed3407a759790
4 files changed +31 -7
core/core.go
+1 -2
@@ -7,7 +7,6 @@ import (
7
8 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
9 b58 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-base58"
10 - ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
10 ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
11
12 bserv "github.com/jbenet/go-ipfs/blockservice"
@@ -48,7 +47,7 @@ type IpfsNode struct {
47 Peerstore peer.Peerstore
48
49 // the local datastore
51 - Datastore ds.ThreadSafeDatastoreCloser
50 + Datastore u.ThreadSafeDatastoreCloser
51
52 // the network message stream
53 Network inet.Network
core/datastore.go
+4 -4
@@ -14,7 +14,7 @@ import (
14 u "github.com/jbenet/go-ipfs/util"
15 )
16
17 -func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) {
17 +func makeDatastore(cfg config.Datastore) (u.ThreadSafeDatastoreCloser, error) {
18 if len(cfg.Type) == 0 {
19 return nil, fmt.Errorf("config datastore.type required")
20 }
@@ -24,7 +24,7 @@ func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) {
24 return makeLevelDBDatastore(cfg)
25
26 case "memory":
27 - return syncds.MutexWrap(ds.NewMapDatastore()), nil
27 + return u.CloserWrap(syncds.MutexWrap(ds.NewMapDatastore())), nil
28
29 case "fs":
30 log.Warning("using fs.Datastore at .datastore for testing.")
@@ -33,13 +33,13 @@ func makeDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) {
33 return nil, err
34 }
35 ktd := ktds.Wrap(d, u.B58KeyConverter)
36 - return syncds.MutexWrap(ktd), nil
36 + return u.CloserWrap(syncds.MutexWrap(ktd)), nil
37 }
38
39 return nil, fmt.Errorf("Unknown datastore type: %s", cfg.Type)
40 }
41
42 -func makeLevelDBDatastore(cfg config.Datastore) (ds.ThreadSafeDatastoreCloser, error) {
42 +func makeLevelDBDatastore(cfg config.Datastore) (u.ThreadSafeDatastoreCloser, error) {
43 if len(cfg.Path) == 0 {
44 return nil, fmt.Errorf("config datastore.path required for leveldb")
45 }
core/mock.go
+2 -1
@@ -10,6 +10,7 @@ import (
10 path "github.com/jbenet/go-ipfs/path"
11 peer "github.com/jbenet/go-ipfs/peer"
12 mdht "github.com/jbenet/go-ipfs/routing/mock"
13 + "github.com/jbenet/go-ipfs/util"
14 )
15
16 // NewMockNode constructs an IpfsNode for use in tests.
@@ -35,7 +36,7 @@ func NewMockNode() (*IpfsNode, error) {
36
37 // Temp Datastore
38 dstore := ds.NewMapDatastore()
38 - nd.Datastore = syncds.MutexWrap(dstore)
39 + nd.Datastore = util.CloserWrap(syncds.MutexWrap(dstore))
40
41 // Routing
42 dht := mdht.NewMockRouter(nd.Identity, nd.Datastore)
util/datastore_closer.go new
+24
@@ -0,0 +1,24 @@
1 +package util
2 +
3 +import (
4 + "io"
5 +
6 + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
7 +)
8 +
9 +type ThreadSafeDatastoreCloser interface {
10 + datastore.ThreadSafeDatastore
11 + io.Closer
12 +}
13 +
14 +func CloserWrap(ds datastore.ThreadSafeDatastore) ThreadSafeDatastoreCloser {
15 + return &datastoreCloserWrapper{ds}
16 +}
17 +
18 +type datastoreCloserWrapper struct {
19 + datastore.ThreadSafeDatastore
20 +}
21 +
22 +func (w *datastoreCloserWrapper) Close() error {
23 + return nil // no-op
24 +}