@cryptotaxi247 / kubo / commits / 612be5964

use string datastore keys.

Juan Batiz-Benet committed Oct 3, 2014 at 15:34 UTC 612be596438bde0a653e7965686a396b2050cadc
8 files changed +39 -26
blockservice/blockservice.go
+3 -5
@@ -7,7 +7,7 @@ import (
7 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
8 ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
9 mh "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
10 - "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/op/go-logging"
10 + logging "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/op/go-logging"
11
12 blocks "github.com/jbenet/go-ipfs/blocks"
13 exchange "github.com/jbenet/go-ipfs/exchange"
@@ -37,11 +37,10 @@ func NewBlockService(d ds.Datastore, rem exchange.Interface) (*BlockService, err
37 // AddBlock adds a particular block to the service, Putting it into the datastore.
38 func (s *BlockService) AddBlock(b *blocks.Block) (u.Key, error) {
39 k := b.Key()
40 - dsk := ds.NewKey(string(k))
40 log.Debug("storing [%s] in datastore", k.Pretty())
41 // TODO(brian): define a block datastore with a Put method which accepts a
42 // block parameter
44 - err := s.Datastore.Put(dsk, b.Data)
43 + err := s.Datastore.Put(k.DsKey(), b.Data)
44 if err != nil {
45 return k, err
46 }
@@ -56,8 +55,7 @@ func (s *BlockService) AddBlock(b *blocks.Block) (u.Key, error) {
55 // Getting it from the datastore using the key (hash).
56 func (s *BlockService) GetBlock(k u.Key) (*blocks.Block, error) {
57 log.Debug("BlockService GetBlock: '%s'", k.Pretty())
59 - dsk := ds.NewKey(string(k))
60 - datai, err := s.Datastore.Get(dsk)
58 + datai, err := s.Datastore.Get(k.DsKey())
59 if err == nil {
60 log.Debug("Blockservice: Got data in datastore.")
61 bdata, ok := datai.([]byte)
blockstore/blockstore.go
+2 -6
@@ -27,7 +27,7 @@ type blockstore struct {
27 }
28
29 func (bs *blockstore) Get(k u.Key) (*blocks.Block, error) {
30 - maybeData, err := bs.datastore.Get(toDatastoreKey(k))
30 + maybeData, err := bs.datastore.Get(k.DsKey())
31 if err != nil {
32 return nil, err
33 }
@@ -39,9 +39,5 @@ func (bs *blockstore) Get(k u.Key) (*blocks.Block, error) {
39 }
40
41 func (bs *blockstore) Put(block blocks.Block) error {
42 - return bs.datastore.Put(toDatastoreKey(block.Key()), block.Data)
43 -}
44 -
45 -func toDatastoreKey(k u.Key) ds.Key {
46 - return ds.NewKey(string(k))
42 + return bs.datastore.Put(block.Key().DsKey(), block.Data)
43 }
blockstore/blockstore_test.go
+1 -1
@@ -44,7 +44,7 @@ func TestValueTypeMismatch(t *testing.T) {
44 block := testutil.NewBlockOrFail(t, "some data")
45
46 datastore := ds.NewMapDatastore()
47 - datastore.Put(toDatastoreKey(block.Key()), "data that isn't a block!")
47 + datastore.Put(block.Key().DsKey(), "data that isn't a block!")
48
49 blockstore := NewBlockstore(datastore)
50
peer/peerstore.go
+4 -4
@@ -37,7 +37,7 @@ func (p *peerstore) Get(i ID) (*Peer, error) {
37 p.RLock()
38 defer p.RUnlock()
39
40 - k := ds.NewKey(string(i))
40 + k := u.Key(i).DsKey()
41 val, err := p.peers.Get(k)
42 if err != nil {
43 return nil, err
@@ -54,7 +54,7 @@ func (p *peerstore) Put(peer *Peer) error {
54 p.Lock()
55 defer p.Unlock()
56
57 - k := ds.NewKey(string(peer.ID))
57 + k := u.Key(peer.ID).DsKey()
58 return p.peers.Put(k, peer)
59 }
60
@@ -62,7 +62,7 @@ func (p *peerstore) Delete(i ID) error {
62 p.Lock()
63 defer p.Unlock()
64
65 - k := ds.NewKey(string(i))
65 + k := u.Key(i).DsKey()
66 return p.peers.Delete(k)
67 }
68
@@ -84,7 +84,7 @@ func (p *peerstore) All() (*Map, error) {
84
85 pval, ok := val.(*Peer)
86 if ok {
87 - (*ps)[u.Key(k.String())] = pval
87 + (*ps)[u.Key(pval.ID)] = pval
88 }
89 }
90 return ps, nil
routing/dht/dht.go
+11 -5
@@ -13,11 +13,11 @@ import (
13 peer "github.com/jbenet/go-ipfs/peer"
14 kb "github.com/jbenet/go-ipfs/routing/kbucket"
15 u "github.com/jbenet/go-ipfs/util"
16 - "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/op/go-logging"
16
17 context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
18 ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
19 ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
20 + logging "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/op/go-logging"
21
22 "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/goprotobuf/proto"
23 )
@@ -328,7 +328,7 @@ func (dht *IpfsDHT) getFromPeerList(ctx context.Context, key u.Key,
328 func (dht *IpfsDHT) getLocal(key u.Key) ([]byte, error) {
329 dht.dslock.Lock()
330 defer dht.dslock.Unlock()
331 - v, err := dht.datastore.Get(ds.NewKey(string(key)))
331 + v, err := dht.datastore.Get(key.DsKey())
332 if err != nil {
333 return nil, err
334 }
@@ -341,7 +341,7 @@ func (dht *IpfsDHT) getLocal(key u.Key) ([]byte, error) {
341 }
342
343 func (dht *IpfsDHT) putLocal(key u.Key, value []byte) error {
344 - return dht.datastore.Put(ds.NewKey(string(key)), value)
344 + return dht.datastore.Put(key.DsKey(), value)
345 }
346
347 // Update signals to all routingTables to Update their last-seen status
@@ -494,13 +494,19 @@ func (dht *IpfsDHT) ensureConnectedToPeer(pbp *Message_Peer) (*peer.Peer, error)
494 return p, err
495 }
496
497 +//TODO: this should be smarter about which keys it selects.
498 func (dht *IpfsDHT) loadProvidableKeys() error {
499 kl, err := dht.datastore.KeyList()
500 if err != nil {
501 return err
502 }
502 - for _, k := range kl {
503 - dht.providers.AddProvider(u.Key(k.Bytes()), dht.self)
503 + for _, dsk := range kl {
504 + k := u.KeyFromDsKey(dsk)
505 + if len(k) == 0 {
506 + log.Error("loadProvidableKeys error: %v", dsk)
507 + }
508 +
509 + dht.providers.AddProvider(k, dht.self)
510 }
511 return nil
512 }
routing/dht/handlers.go
+4 -3
@@ -51,7 +51,7 @@ func (dht *IpfsDHT) handleGetValue(p *peer.Peer, pmes *Message) (*Message, error
51
52 // let's first check if we have the value locally.
53 u.DOut("[%s] handleGetValue looking into ds\n", dht.self.ID.Pretty())
54 - dskey := ds.NewKey(pmes.GetKey())
54 + dskey := u.Key(pmes.GetKey()).DsKey()
55 iVal, err := dht.datastore.Get(dskey)
56 u.DOut("[%s] handleGetValue looking into ds GOT %v\n", dht.self.ID.Pretty(), iVal)
57
@@ -96,7 +96,7 @@ func (dht *IpfsDHT) handleGetValue(p *peer.Peer, pmes *Message) (*Message, error
96 func (dht *IpfsDHT) handlePutValue(p *peer.Peer, pmes *Message) (*Message, error) {
97 dht.dslock.Lock()
98 defer dht.dslock.Unlock()
99 - dskey := ds.NewKey(pmes.GetKey())
99 + dskey := u.Key(pmes.GetKey()).DsKey()
100 err := dht.datastore.Put(dskey, pmes.GetValue())
101 u.DOut("[%s] handlePutValue %v %v\n", dht.self.ID.Pretty(), dskey, pmes.GetValue())
102 return pmes, err
@@ -137,7 +137,8 @@ func (dht *IpfsDHT) handleGetProviders(p *peer.Peer, pmes *Message) (*Message, e
137 resp := newMessage(pmes.GetType(), pmes.GetKey(), pmes.GetClusterLevel())
138
139 // check if we have this value, to add ourselves as provider.
140 - has, err := dht.datastore.Has(ds.NewKey(pmes.GetKey()))
140 + dsk := u.Key(pmes.GetKey()).DsKey()
141 + has, err := dht.datastore.Has(dsk)
142 if err != nil && err != ds.ErrNotFound {
143 u.PErr("unexpected datastore error: %v\n", err)
144 has = false
routing/mock/routing.go
+2 -2
@@ -33,11 +33,11 @@ func (mr *MockRouter) SetRoutingServer(rs RoutingServer) {
33 }
34
35 func (mr *MockRouter) PutValue(ctx context.Context, key u.Key, val []byte) error {
36 - return mr.datastore.Put(ds.NewKey(string(key)), val)
36 + return mr.datastore.Put(key.DsKey(), val)
37 }
38
39 func (mr *MockRouter) GetValue(ctx context.Context, key u.Key) ([]byte, error) {
40 - v, err := mr.datastore.Get(ds.NewKey(string(key)))
40 + v, err := mr.datastore.Get(key.DsKey())
41 if err != nil {
42 return nil, err
43 }
util/util.go
+12
@@ -41,6 +41,18 @@ func (k Key) Pretty() string {
41 return b58.Encode([]byte(k))
42 }
43
44 +// DsKey returns a Datastore key
45 +func (k Key) DsKey() ds.Key {
46 + return ds.NewKey(k.Pretty())
47 +}
48 +
49 +// KeyFromDsKey returns a Datastore key
50 +func KeyFromDsKey(dsk ds.Key) Key {
51 + l := dsk.List()
52 + enc := l[len(l)-1]
53 + return Key(b58.Decode(enc))
54 +}
55 +
56 // Hash is the global IPFS hash function. uses multihash SHA2_256, 256 bits
57 func Hash(data []byte) (mh.Multihash, error) {
58 return mh.Sum(data, mh.SHA2_256, -1)