diff --git a/blockservice.go b/blockservice.go index 33f6914..82fc16e 100644 --- a/blockservice.go +++ b/blockservice.go @@ -51,14 +51,14 @@ type BlockService interface { Exchange() exchange.Interface // AddBlock puts a given block to the underlying datastore - AddBlock(o blocks.Block) error + AddBlock(ctx context.Context, o blocks.Block) error // AddBlocks adds a slice of blocks at the same time using batching // capabilities of the underlying datastore whenever possible. - AddBlocks(bs []blocks.Block) error + AddBlocks(ctx context.Context, bs []blocks.Block) error // DeleteBlock deletes the given block from the blockservice. - DeleteBlock(o cid.Cid) error + DeleteBlock(ctx context.Context, o cid.Cid) error } type blockService struct { @@ -129,8 +129,7 @@ func NewSession(ctx context.Context, bs BlockService) *Session { } // AddBlock adds a particular block to the service, Putting it into the datastore. -// TODO pass a context into this if the remote.HasBlock is going to remain here. -func (s *blockService) AddBlock(o blocks.Block) error { +func (s *blockService) AddBlock(ctx context.Context, o blocks.Block) error { c := o.Cid() // hash security err := verifcid.ValidateCid(c) @@ -138,19 +137,19 @@ func (s *blockService) AddBlock(o blocks.Block) error { return err } if s.checkFirst { - if has, err := s.blockstore.Has(c); has || err != nil { + if has, err := s.blockstore.Has(ctx, c); has || err != nil { return err } } - if err := s.blockstore.Put(o); err != nil { + if err := s.blockstore.Put(ctx, o); err != nil { return err } - log.Event(context.TODO(), "BlockService.BlockAdded", c) + log.Event(ctx, "BlockService.BlockAdded", c) if s.exchange != nil { - if err := s.exchange.HasBlock(o); err != nil { + if err := s.exchange.HasBlock(ctx, o); err != nil { log.Errorf("HasBlock: %s", err.Error()) } } @@ -158,7 +157,7 @@ func (s *blockService) AddBlock(o blocks.Block) error { return nil } -func (s *blockService) AddBlocks(bs []blocks.Block) error { +func (s *blockService) AddBlocks(ctx context.Context, bs []blocks.Block) error { // hash security for _, b := range bs { err := verifcid.ValidateCid(b.Cid()) @@ -170,7 +169,7 @@ func (s *blockService) AddBlocks(bs []blocks.Block) error { if s.checkFirst { toput = make([]blocks.Block, 0, len(bs)) for _, b := range bs { - has, err := s.blockstore.Has(b.Cid()) + has, err := s.blockstore.Has(ctx, b.Cid()) if err != nil { return err } @@ -186,15 +185,15 @@ func (s *blockService) AddBlocks(bs []blocks.Block) error { return nil } - err := s.blockstore.PutMany(toput) + err := s.blockstore.PutMany(ctx, toput) if err != nil { return err } if s.exchange != nil { for _, o := range toput { - log.Event(context.TODO(), "BlockService.BlockAdded", o.Cid()) - if err := s.exchange.HasBlock(o); err != nil { + log.Event(ctx, "BlockService.BlockAdded", o.Cid()) + if err := s.exchange.HasBlock(ctx, o); err != nil { log.Errorf("HasBlock: %s", err.Error()) } } @@ -225,7 +224,7 @@ func getBlock(ctx context.Context, c cid.Cid, bs blockstore.Blockstore, fget fun return nil, err } - block, err := bs.Get(c) + block, err := bs.Get(ctx, c) if err == nil { return block, nil } @@ -296,7 +295,7 @@ func getBlocks(ctx context.Context, ks []cid.Cid, bs blockstore.Blockstore, fget var misses []cid.Cid for _, c := range ks { - hit, err := bs.Get(c) + hit, err := bs.Get(ctx, c) if err != nil { misses = append(misses, c) continue @@ -332,10 +331,10 @@ func getBlocks(ctx context.Context, ks []cid.Cid, bs blockstore.Blockstore, fget } // DeleteBlock deletes a block in the blockservice from the datastore -func (s *blockService) DeleteBlock(c cid.Cid) error { - err := s.blockstore.DeleteBlock(c) +func (s *blockService) DeleteBlock(ctx context.Context, c cid.Cid) error { + err := s.blockstore.DeleteBlock(ctx, c) if err == nil { - log.Event(context.TODO(), "BlockService.BlockDeleted", c) + log.Event(ctx, "BlockService.BlockDeleted", c) } return err } diff --git a/blockservice_test.go b/blockservice_test.go index dfd12fc..2412d11 100644 --- a/blockservice_test.go +++ b/blockservice_test.go @@ -14,6 +14,7 @@ import ( ) func TestWriteThroughWorks(t *testing.T) { + ctx := context.Background() bstore := &PutCountingBlockstore{ blockstore.NewBlockstore(dssync.MutexWrap(ds.NewMapDatastore())), 0, @@ -26,7 +27,7 @@ func TestWriteThroughWorks(t *testing.T) { block := bgen.Next() t.Logf("PutCounter: %d", bstore.PutCounter) - err := bserv.AddBlock(block) + err := bserv.AddBlock(ctx, block) if err != nil { t.Fatal(err) } @@ -34,7 +35,7 @@ func TestWriteThroughWorks(t *testing.T) { t.Fatalf("expected just one Put call, have: %d", bstore.PutCounter) } - err = bserv.AddBlock(block) + err = bserv.AddBlock(ctx, block) if err != nil { t.Fatal(err) } @@ -58,12 +59,12 @@ func TestLazySessionInitialization(t *testing.T) { bgen := butil.NewBlockGenerator() block := bgen.Next() - err := bstore.Put(block) + err := bstore.Put(ctx, block) if err != nil { t.Fatal(err) } block2 := bgen.Next() - err = session.HasBlock(block2) + err = session.HasBlock(ctx, block2) if err != nil { t.Fatal(err) } @@ -101,9 +102,9 @@ type PutCountingBlockstore struct { PutCounter int } -func (bs *PutCountingBlockstore) Put(block blocks.Block) error { +func (bs *PutCountingBlockstore) Put(ctx context.Context, block blocks.Block) error { bs.PutCounter++ - return bs.Blockstore.Put(block) + return bs.Blockstore.Put(ctx, block) } var _ exchange.SessionExchange = (*fakeSessionExchange)(nil) diff --git a/test/blocks_test.go b/test/blocks_test.go index ee808e6..6f3969f 100644 --- a/test/blocks_test.go +++ b/test/blocks_test.go @@ -23,6 +23,7 @@ func newObject(data []byte) blocks.Block { } func TestBlocks(t *testing.T) { + ctx := context.Background() bstore := blockstore.NewBlockstore(dssync.MutexWrap(ds.NewMapDatastore())) bs := New(bstore, offline.Exchange(bstore)) defer bs.Close() @@ -33,7 +34,7 @@ func TestBlocks(t *testing.T) { t.Error("Block key and data multihash key not equal") } - err := bs.AddBlock(o) + err := bs.AddBlock(ctx, o) if err != nil { t.Error("failed to add block to BlockService", err) return @@ -65,6 +66,7 @@ func makeObjects(n int) []blocks.Block { } func TestGetBlocksSequential(t *testing.T) { + ctx := context.Background() var servs = Mocks(4) for _, s := range servs { defer s.Close() @@ -74,7 +76,7 @@ func TestGetBlocksSequential(t *testing.T) { var cids []cid.Cid for _, o := range objs { cids = append(cids, o.Cid()) - err := servs[0].AddBlock(o) + err := servs[0].AddBlock(ctx, o) if err != nil { t.Fatal(err) } diff --git a/test/mock.go b/test/mock.go index a6eba69..5c460b8 100644 --- a/test/mock.go +++ b/test/mock.go @@ -12,7 +12,7 @@ import ( // Mocks returns |n| connected mock Blockservices func Mocks(n int) []BlockService { net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(0)) - sg := testinstance.NewTestInstanceGenerator(net) + sg := testinstance.NewTestInstanceGenerator(net, nil, nil) instances := sg.Instances(n)