Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 2800e6d

Browse files
author
Rob Mulholand
committed
Enable contractWatcher without prior headerSync
- Previous setup would fail if there were no headers in the db. This makes sense because we need headers that haven't been checked for logs to exist so that we can fetch logs for those headers. But it also prevents us from kicking off the headerSync and contractWatcher processes concurrently. These changes enable kicking off both processes at the same time with the idea that we will have unchecked headers upon transformer execution.
1 parent f6ab938 commit 2800e6d

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

integration_test/contract_watcher_header_sync_transformer_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,10 @@ var _ = Describe("contractWatcher headerSync transformer", func() {
7878
Expect(c.Address).To(Equal(tusdAddr))
7979
})
8080

81-
It("Fails to initialize if first and block cannot be fetched from vDB headers table", func() {
81+
It("initializes when no headers available in db", func() {
8282
t := transformer.NewTransformer(test_helpers.TusdConfig, blockChain, db)
8383
err = t.Init()
84-
Expect(err).To(HaveOccurred())
85-
Expect(err.Error()).To(ContainSubstring("no rows in result set"))
84+
Expect(err).ToNot(HaveOccurred())
8685
})
8786

8887
It("Does nothing if nothing if no addresses are configured", func() {

pkg/contract_watcher/header/transformer/transformer.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package transformer
1818

1919
import (
20+
"database/sql"
2021
"errors"
2122
"fmt"
2223
"strings"
@@ -124,7 +125,11 @@ func (tr *Transformer) Init() error {
124125
// Get first block and most recent block number in the header repo
125126
firstBlock, retrieveErr := tr.Retriever.RetrieveFirstBlock()
126127
if retrieveErr != nil {
127-
return fmt.Errorf("error retrieving first block: %s", retrieveErr.Error())
128+
if retrieveErr == sql.ErrNoRows {
129+
firstBlock = 0
130+
} else {
131+
return fmt.Errorf("error retrieving first block: %s", retrieveErr.Error())
132+
}
128133
}
129134

130135
// Set to specified range if it falls within the bounds

pkg/contract_watcher/header/transformer/transformer_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package transformer_test
1818

1919
import (
20+
"database/sql"
2021
. "github.com/onsi/ginkgo"
2122
. "github.com/onsi/gomega"
2223

@@ -101,7 +102,17 @@ var _ = Describe("Transformer", func() {
101102
Expect(c.Address).To(Equal(fakeAddress))
102103
})
103104

104-
It("Fails to initialize if first block cannot be fetched from vDB headers table", func() {
105+
It("uses first block from config if vDB headers table has no rows", func() {
106+
blockRetriever := &fakes.MockHeaderSyncBlockRetriever{}
107+
blockRetriever.FirstBlockErr = sql.ErrNoRows
108+
t := getFakeTransformer(blockRetriever, &fakes.MockParser{}, &fakes.MockPoller{})
109+
110+
err := t.Init()
111+
112+
Expect(err).ToNot(HaveOccurred())
113+
})
114+
115+
It("returns error if fetching first block fails for other reason", func() {
105116
blockRetriever := &fakes.MockHeaderSyncBlockRetriever{}
106117
blockRetriever.FirstBlockErr = fakes.FakeError
107118
t := getFakeTransformer(blockRetriever, &fakes.MockParser{}, &fakes.MockPoller{})

0 commit comments

Comments
 (0)