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
+}