forked from cerc-io/ipld-eth-server
Separate DB access into several repos (#28)
* Separate files for InMemory * Start using separate repos for collaborating objects * Before Updating schema * Separate various repos
This commit is contained in:
@@ -7,19 +7,19 @@ import (
|
||||
"github.com/vulcanize/vulcanizedb/pkg/repositories"
|
||||
)
|
||||
|
||||
func PopulateMissingBlocks(blockchain core.Blockchain, repository repositories.Repository, startingBlockNumber int64) int {
|
||||
func PopulateMissingBlocks(blockchain core.Blockchain, blockRepository repositories.BlockRepository, startingBlockNumber int64) int {
|
||||
lastBlock := blockchain.LastBlock().Int64()
|
||||
blockRange := repository.MissingBlockNumbers(startingBlockNumber, lastBlock-1)
|
||||
blockRange := blockRepository.MissingBlockNumbers(startingBlockNumber, lastBlock-1)
|
||||
log.SetPrefix("")
|
||||
log.Printf("Backfilling %d blocks\n\n", len(blockRange))
|
||||
RetrieveAndUpdateBlocks(blockchain, repository, blockRange)
|
||||
RetrieveAndUpdateBlocks(blockchain, blockRepository, blockRange)
|
||||
return len(blockRange)
|
||||
}
|
||||
|
||||
func RetrieveAndUpdateBlocks(blockchain core.Blockchain, repository repositories.Repository, blockNumbers []int64) int {
|
||||
func RetrieveAndUpdateBlocks(blockchain core.Blockchain, blockRepository repositories.BlockRepository, blockNumbers []int64) int {
|
||||
for _, blockNumber := range blockNumbers {
|
||||
block := blockchain.GetBlockByNumber(blockNumber)
|
||||
repository.CreateOrUpdateBlock(block)
|
||||
blockRepository.CreateOrUpdateBlock(block)
|
||||
}
|
||||
return len(blockNumbers)
|
||||
}
|
||||
|
||||
@@ -10,6 +10,13 @@ import (
|
||||
)
|
||||
|
||||
var _ = Describe("Populating blocks", func() {
|
||||
var inMemory *inmemory.InMemory
|
||||
var blockRepository *inmemory.BlockRepository
|
||||
|
||||
BeforeEach(func() {
|
||||
inMemory = inmemory.NewInMemory()
|
||||
blockRepository = &inmemory.BlockRepository{InMemory: inMemory}
|
||||
})
|
||||
|
||||
It("fills in the only missing block (Number 1)", func() {
|
||||
blocks := []core.Block{
|
||||
@@ -17,11 +24,11 @@ var _ = Describe("Populating blocks", func() {
|
||||
{Number: 2},
|
||||
}
|
||||
blockchain := fakes.NewBlockchainWithBlocks(blocks)
|
||||
repository := inmemory.NewInMemory()
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 2})
|
||||
|
||||
blocksAdded := history.PopulateMissingBlocks(blockchain, repository, 1)
|
||||
_, err := repository.GetBlock(1)
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 2})
|
||||
|
||||
blocksAdded := history.PopulateMissingBlocks(blockchain, blockRepository, 1)
|
||||
_, err := blockRepository.GetBlock(1)
|
||||
|
||||
Expect(blocksAdded).To(Equal(1))
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
@@ -40,29 +47,28 @@ var _ = Describe("Populating blocks", func() {
|
||||
{Number: 12},
|
||||
{Number: 13},
|
||||
})
|
||||
repository := inmemory.NewInMemory()
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 1})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 2})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 3})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 6})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 7})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 9})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 11})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 12})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 1})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 2})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 3})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 6})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 7})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 9})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 11})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 12})
|
||||
|
||||
blocksAdded := history.PopulateMissingBlocks(blockchain, repository, 5)
|
||||
blocksAdded := history.PopulateMissingBlocks(blockchain, blockRepository, 5)
|
||||
|
||||
Expect(blocksAdded).To(Equal(3))
|
||||
Expect(repository.BlockCount()).To(Equal(11))
|
||||
_, err := repository.GetBlock(4)
|
||||
Expect(blockRepository.BlockCount()).To(Equal(11))
|
||||
_, err := blockRepository.GetBlock(4)
|
||||
Expect(err).To(HaveOccurred())
|
||||
_, err = repository.GetBlock(5)
|
||||
_, err = blockRepository.GetBlock(5)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = repository.GetBlock(8)
|
||||
_, err = blockRepository.GetBlock(8)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = repository.GetBlock(10)
|
||||
_, err = blockRepository.GetBlock(10)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
_, err = repository.GetBlock(13)
|
||||
_, err = blockRepository.GetBlock(13)
|
||||
Expect(err).To(HaveOccurred())
|
||||
})
|
||||
|
||||
@@ -72,11 +78,10 @@ var _ = Describe("Populating blocks", func() {
|
||||
{Number: 5},
|
||||
{Number: 6},
|
||||
})
|
||||
repository := inmemory.NewInMemory()
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 3})
|
||||
repository.CreateOrUpdateBlock(core.Block{Number: 6})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 3})
|
||||
blockRepository.CreateOrUpdateBlock(core.Block{Number: 6})
|
||||
|
||||
numberOfBlocksCreated := history.PopulateMissingBlocks(blockchain, repository, 3)
|
||||
numberOfBlocksCreated := history.PopulateMissingBlocks(blockchain, blockRepository, 3)
|
||||
|
||||
Expect(numberOfBlocksCreated).To(Equal(2))
|
||||
})
|
||||
@@ -89,11 +94,10 @@ var _ = Describe("Populating blocks", func() {
|
||||
{Number: 4},
|
||||
{Number: 5},
|
||||
})
|
||||
repository := inmemory.NewInMemory()
|
||||
|
||||
history.RetrieveAndUpdateBlocks(blockchain, repository, history.MakeRange(2, 5))
|
||||
Expect(repository.BlockCount()).To(Equal(3))
|
||||
Expect(repository.CreateOrUpdateBlockCallCount).To(Equal(3))
|
||||
history.RetrieveAndUpdateBlocks(blockchain, blockRepository, history.MakeRange(2, 5))
|
||||
Expect(blockRepository.BlockCount()).To(Equal(3))
|
||||
Expect(blockRepository.CreateOrUpdateBlockCallCount).To(Equal(3))
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
@@ -17,15 +17,15 @@ var ParsedWindowTemplate = *template.Must(template.New("window").Parse(WindowTem
|
||||
|
||||
type BlockValidator struct {
|
||||
blockchain core.Blockchain
|
||||
repository repositories.Repository
|
||||
blockRepository repositories.BlockRepository
|
||||
windowSize int
|
||||
parsedLoggingTemplate template.Template
|
||||
}
|
||||
|
||||
func NewBlockValidator(blockchain core.Blockchain, repository repositories.Repository, windowSize int) *BlockValidator {
|
||||
func NewBlockValidator(blockchain core.Blockchain, blockRepository repositories.BlockRepository, windowSize int) *BlockValidator {
|
||||
return &BlockValidator{
|
||||
blockchain,
|
||||
repository,
|
||||
blockRepository,
|
||||
windowSize,
|
||||
ParsedWindowTemplate,
|
||||
}
|
||||
@@ -34,9 +34,9 @@ func NewBlockValidator(blockchain core.Blockchain, repository repositories.Repos
|
||||
func (bv BlockValidator) ValidateBlocks() ValidationWindow {
|
||||
window := MakeValidationWindow(bv.blockchain, bv.windowSize)
|
||||
blockNumbers := MakeRange(window.LowerBound, window.UpperBound)
|
||||
RetrieveAndUpdateBlocks(bv.blockchain, bv.repository, blockNumbers)
|
||||
RetrieveAndUpdateBlocks(bv.blockchain, bv.blockRepository, blockNumbers)
|
||||
lastBlock := bv.blockchain.LastBlock().Int64()
|
||||
bv.repository.SetBlocksStatus(lastBlock)
|
||||
bv.blockRepository.SetBlocksStatus(lastBlock)
|
||||
return window
|
||||
}
|
||||
|
||||
|
||||
@@ -47,23 +47,26 @@ var _ = Describe("Blocks validator", func() {
|
||||
{Number: 6},
|
||||
{Number: 7},
|
||||
})
|
||||
repository := inmemory.NewInMemory()
|
||||
inMemoryDB := inmemory.NewInMemory()
|
||||
blocksRepository := &inmemory.BlockRepository{InMemory: inMemoryDB}
|
||||
|
||||
validator := history.NewBlockValidator(blockchain, repository, 2)
|
||||
validator := history.NewBlockValidator(blockchain, blocksRepository, 2)
|
||||
window := validator.ValidateBlocks()
|
||||
Expect(window).To(Equal(history.ValidationWindow{LowerBound: 5, UpperBound: 7}))
|
||||
Expect(repository.BlockCount()).To(Equal(2))
|
||||
Expect(repository.CreateOrUpdateBlockCallCount).To(Equal(2))
|
||||
Expect(blocksRepository.BlockCount()).To(Equal(2))
|
||||
Expect(blocksRepository.CreateOrUpdateBlockCallCount).To(Equal(2))
|
||||
})
|
||||
|
||||
It("logs window message", func() {
|
||||
inMemoryDB := inmemory.NewInMemory()
|
||||
blockRepository := &inmemory.BlockRepository{InMemory: inMemoryDB}
|
||||
|
||||
expectedMessage := &bytes.Buffer{}
|
||||
window := history.ValidationWindow{LowerBound: 5, UpperBound: 7}
|
||||
history.ParsedWindowTemplate.Execute(expectedMessage, history.ValidationWindow{LowerBound: 5, UpperBound: 7})
|
||||
|
||||
blockchain := fakes.NewBlockchainWithBlocks([]core.Block{})
|
||||
repository := inmemory.NewInMemory()
|
||||
validator := history.NewBlockValidator(blockchain, repository, 2)
|
||||
validator := history.NewBlockValidator(blockchain, blockRepository, 2)
|
||||
actualMessage := &bytes.Buffer{}
|
||||
validator.Log(actualMessage, window)
|
||||
Expect(actualMessage).To(Equal(expectedMessage))
|
||||
|
||||
Reference in New Issue
Block a user