Log checked headers for deal events

- mark header as checked if no matching logs
- mark header as checked if all matching logs persisted successfully
- batch convert and insert matching logs to enable transactional persist
- enable skipping previously checked block headers when restarting a sync
This commit is contained in:
Rob Mulholand
2018-09-25 14:11:35 -05:00
parent ddf47249fd
commit c3f1fcf796
11 changed files with 211 additions and 55 deletions
@@ -28,9 +28,9 @@ type MockDealConverter struct {
ConverterError error
}
func (c *MockDealConverter) ToModel(ethLog types.Log) (deal.DealModel, error) {
c.LogsToConvert = append(c.LogsToConvert, ethLog)
return test_data.DealModel, c.ConverterError
func (c *MockDealConverter) ToModels(ethLogs []types.Log) ([]deal.DealModel, error) {
c.LogsToConvert = append(c.LogsToConvert, ethLogs...)
return []deal.DealModel{test_data.DealModel}, c.ConverterError
}
func (c *MockDealConverter) SetConverterError(err error) {
@@ -15,23 +15,27 @@
package deal
import (
. "github.com/onsi/gomega"
"github.com/vulcanize/vulcanizedb/pkg/core"
"github.com/vulcanize/vulcanizedb/pkg/transformers/deal"
)
type MockDealRepository struct {
createError error
PassedEndingBlockNumber int64
PassedHeaderIDs []int64
PassedStartingBlockNumber int64
PassedDealModels []deal.DealModel
missingHeaders []core.Header
missingHeadersErr error
createError error
PassedEndingBlockNumber int64
PassedHeaderIDs []int64
PassedStartingBlockNumber int64
PassedDealModels []deal.DealModel
markHeaderCheckedErr error
markHeaderCheckedPassedHeaderID int64
missingHeaders []core.Header
missingHeadersErr error
}
func (repository *MockDealRepository) Create(headerId int64, deal deal.DealModel) error {
func (repository *MockDealRepository) Create(headerId int64, deals []deal.DealModel) error {
repository.PassedHeaderIDs = append(repository.PassedHeaderIDs, headerId)
repository.PassedDealModels = append(repository.PassedDealModels, deal)
repository.PassedDealModels = append(repository.PassedDealModels, deals...)
return repository.createError
}
@@ -39,6 +43,10 @@ func (repository *MockDealRepository) SetCreateError(err error) {
repository.createError = err
}
func (repository *MockDealRepository) SetMarkHeaderCheckedErr(err error) {
repository.markHeaderCheckedErr = err
}
func (repository *MockDealRepository) SetMissingHeadersErr(err error) {
repository.missingHeadersErr = err
}
@@ -47,8 +55,17 @@ func (repository *MockDealRepository) SetMissingHeaders(headers []core.Header) {
repository.missingHeaders = headers
}
func (repository *MockDealRepository) MarkHeaderChecked(headerID int64) error {
repository.markHeaderCheckedPassedHeaderID = headerID
return repository.markHeaderCheckedErr
}
func (repository *MockDealRepository) MissingHeaders(startingBlockNumber, endingBlockNumber int64) ([]core.Header, error) {
repository.PassedStartingBlockNumber = startingBlockNumber
repository.PassedEndingBlockNumber = endingBlockNumber
return repository.missingHeaders, repository.missingHeadersErr
}
func (repository *MockDealRepository) AssertMarkHeaderCheckedCalledWith(headerID int64) {
Expect(repository.markHeaderCheckedPassedHeaderID).To(Equal(headerID))
}