@cryptotaxi247 / kubo / commits / 582e5dee3

blockservice: don't store blocks we already have

License: MIT Signed-off-by: Jeromy <why@ipfs.io>

Jeromy committed Aug 19, 2016 at 18:33 UTC 582e5dee3a97f994e7d204ed23960f5752f86553
2 files changed +26 -3
blockservice/blockservice.go
+25 -3
@@ -43,7 +43,15 @@ func New(bs blockstore.Blockstore, rem exchange.Interface) *BlockService {
43 // TODO pass a context into this if the remote.HasBlock is going to remain here.
44 func (s *BlockService) AddBlock(b blocks.Block) (key.Key, error) {
45 k := b.Key()
46 - err := s.Blockstore.Put(b)
46 + has, err := s.Blockstore.Has(k)
47 + if err != nil {
48 + return k, err
49 + }
50 + if has {
51 + return k, nil
52 + }
53 +
54 + err = s.Blockstore.Put(b)
55 if err != nil {
56 return k, err
57 }
@@ -54,13 +62,27 @@ func (s *BlockService) AddBlock(b blocks.Block) (key.Key, error) {
62 }
63
64 func (s *BlockService) AddBlocks(bs []blocks.Block) ([]key.Key, error) {
57 - err := s.Blockstore.PutMany(bs)
65 + var toput []blocks.Block
66 + for _, b := range bs {
67 + has, err := s.Blockstore.Has(b.Key())
68 + if err != nil {
69 + return nil, err
70 + }
71 +
72 + if has {
73 + continue
74 + }
75 +
76 + toput = append(toput, b)
77 + }
78 +
79 + err := s.Blockstore.PutMany(toput)
80 if err != nil {
81 return nil, err
82 }
83
84 var ks []key.Key
63 - for _, b := range bs {
85 + for _, b := range toput {
86 if err := s.Exchange.HasBlock(b); err != nil {
87 return nil, errors.New("blockservice is closed")
88 }
exchange/bitswap/workers.go
+1
@@ -133,6 +133,7 @@ func (bs *Bitswap) provideCollector(ctx context.Context) {
133 log.Debug("newBlocks channel closed")
134 return
135 }
136 +
137 if keysOut == nil {
138 nextKey = blk.Key()
139 keysOut = bs.provideKeys