Skip to content

Commit

Permalink
Do Not Retrieve From DB For Block Roots (#7028)
Browse files Browse the repository at this point in the history
* don't use db
  • Loading branch information
nisdas committed Aug 17, 2020
1 parent a2f7815 commit f193dc2
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 9 deletions.
16 changes: 10 additions & 6 deletions beacon-chain/sync/rpc_beacon_blocks_by_range.go
Expand Up @@ -117,12 +117,16 @@ func (s *Service) writeBlockRangeToStream(ctx context.Context, startSlot, endSlo
traceutil.AnnotateError(span, err)
return err
}
roots, err := s.db.BlockRoots(ctx, filter)
if err != nil {
log.WithError(err).Debug("Failed to retrieve block roots")
s.writeErrorResponseToStream(responseCodeServerError, genericError, stream)
traceutil.AnnotateError(span, err)
return err
roots := make([][32]byte, 0, len(blks))
for _, b := range blks {
root, err := stateutil.BlockRoot(b.Block)
if err != nil {
log.WithError(err).Debug("Failed to retrieve block root")
s.writeErrorResponseToStream(responseCodeServerError, genericError, stream)
traceutil.AnnotateError(span, err)
return err
}
roots = append(roots, root)
}
// handle genesis case
if startSlot == 0 {
Expand Down
17 changes: 14 additions & 3 deletions beacon-chain/sync/rpc_beacon_blocks_by_range_test.go
Expand Up @@ -89,9 +89,15 @@ func TestRPCBeaconBlocksByRange_RPCHandlerReturnsSortedBlocks(t *testing.T) {
}

endSlot := req.StartSlot + (req.Step * (req.Count - 1))
expectedRoots := make([][32]byte, req.Count)
// Populate the database with blocks that would match the request.
for i := endSlot; i >= req.StartSlot; i -= req.Step {
require.NoError(t, d.SaveBlock(context.Background(), &ethpb.SignedBeaconBlock{Block: &ethpb.BeaconBlock{Slot: i}}))
for i, j := endSlot, req.Count-1; i >= req.StartSlot; i -= req.Step {
blk := &ethpb.SignedBeaconBlock{Block: &ethpb.BeaconBlock{Slot: i}}
rt, err := stateutil.BlockRoot(blk.Block)
require.NoError(t, err)
expectedRoots[j] = rt
require.NoError(t, d.SaveBlock(context.Background(), blk))
j--
}

// Start service with 160 as allowed blocks capacity (and almost zero capacity recovery).
Expand All @@ -106,14 +112,19 @@ func TestRPCBeaconBlocksByRange_RPCHandlerReturnsSortedBlocks(t *testing.T) {
p2.BHost.SetStreamHandler(pcl, func(stream network.Stream) {
defer wg.Done()
prevSlot := uint64(0)
for i := req.StartSlot; i < req.StartSlot+req.Count*req.Step; i += req.Step {
require.Equal(t, uint64(len(expectedRoots)), req.Count, "Number of roots not expected")
for i, j := req.StartSlot, 0; i < req.StartSlot+req.Count*req.Step; i += req.Step {
expectSuccess(t, r, stream)
res := &ethpb.SignedBeaconBlock{}
assert.NoError(t, r.p2p.Encoding().DecodeWithMaxLength(stream, res))
if res.Block.Slot < prevSlot {
t.Errorf("Received block is unsorted with slot %d lower than previous slot %d", res.Block.Slot, prevSlot)
}
rt, err := stateutil.BlockRoot(res.Block)
require.NoError(t, err)
assert.Equal(t, expectedRoots[j], rt, "roots not equal")
prevSlot = res.Block.Slot
j++
}
})

Expand Down

0 comments on commit f193dc2

Please sign in to comment.