@@ -24,6 +24,7 @@ type Poller struct {
2424 triggerIntervalMs int64
2525 storage storage.IStorage
2626 lastPolledBlock * big.Int
27+ pollFromBlock * big.Int
2728 pollUntilBlock * big.Int
2829 parallelPollers int
2930}
@@ -33,7 +34,7 @@ type BlockNumberWithError struct {
3334 Error error
3435}
3536
36- func NewPoller (rpc rpc.IRPCClient , storage storage.IStorage ) * Poller {
37+ func NewBoundlessPoller (rpc rpc.IRPCClient , storage storage.IStorage ) * Poller {
3738 blocksPerPoll := config .Cfg .Poller .BlocksPerPoll
3839 if blocksPerPoll == 0 {
3940 blocksPerPoll = DEFAULT_BLOCKS_PER_POLL
@@ -42,6 +43,17 @@ func NewPoller(rpc rpc.IRPCClient, storage storage.IStorage) *Poller {
4243 if triggerInterval == 0 {
4344 triggerInterval = DEFAULT_TRIGGER_INTERVAL
4445 }
46+ return & Poller {
47+ rpc : rpc ,
48+ triggerIntervalMs : int64 (triggerInterval ),
49+ blocksPerPoll : int64 (blocksPerPoll ),
50+ storage : storage ,
51+ parallelPollers : config .Cfg .Poller .ParallelPollers ,
52+ }
53+ }
54+
55+ func NewPoller (rpc rpc.IRPCClient , storage storage.IStorage ) * Poller {
56+ poller := NewBoundlessPoller (rpc , storage )
4557 untilBlock := big .NewInt (int64 (config .Cfg .Poller .UntilBlock ))
4658 pollFromBlock := big .NewInt (int64 (config .Cfg .Poller .FromBlock ))
4759 lastPolledBlock := new (big.Int ).Sub (pollFromBlock , big .NewInt (1 )) // needs to include the first block
@@ -56,15 +68,10 @@ func NewPoller(rpc rpc.IRPCClient, storage storage.IStorage) *Poller {
5668 log .Debug ().Msgf ("Last polled block found in staging: %s" , lastPolledBlock .String ())
5769 }
5870 }
59- return & Poller {
60- rpc : rpc ,
61- triggerIntervalMs : int64 (triggerInterval ),
62- blocksPerPoll : int64 (blocksPerPoll ),
63- storage : storage ,
64- lastPolledBlock : lastPolledBlock ,
65- pollUntilBlock : untilBlock ,
66- parallelPollers : config .Cfg .Poller .ParallelPollers ,
67- }
71+ poller .lastPolledBlock = lastPolledBlock
72+ poller .pollFromBlock = pollFromBlock
73+ poller .pollUntilBlock = untilBlock
74+ return poller
6875}
6976
7077func (p * Poller ) Start () {
@@ -78,30 +85,16 @@ func (p *Poller) Start() {
7885 go func () {
7986 for range tasks {
8087 blockRangeMutex .Lock ()
81- blockNumbers , err := p .getBlockRange ()
88+ blockNumbers , err := p .getNextBlockRange ()
8289 blockRangeMutex .Unlock ()
8390
8491 if err != nil {
8592 log .Error ().Err (err ).Msg ("Error getting block range" )
8693 continue
8794 }
88- if len (blockNumbers ) < 1 {
89- log .Debug ().Msg ("No blocks to poll, skipping" )
90- continue
91- }
92- endBlock := blockNumbers [len (blockNumbers )- 1 ]
93- if endBlock != nil {
94- p .lastPolledBlock = endBlock
95- }
96- log .Debug ().Msgf ("Polling %d blocks starting from %s to %s" , len (blockNumbers ), blockNumbers [0 ], endBlock )
9795
98- endBlockNumberFloat , _ := endBlock .Float64 ()
99- metrics .PollerLastTriggeredBlock .Set (endBlockNumberFloat )
100-
101- worker := worker .NewWorker (p .rpc )
102- results := worker .Run (blockNumbers )
103- p .handleWorkerResults (results )
104- if p .reachedPollLimit (endBlock ) {
96+ lastPolledBlock := p .Poll (blockNumbers )
97+ if p .reachedPollLimit (lastPolledBlock ) {
10598 log .Debug ().Msg ("Reached poll limit, exiting poller" )
10699 ticker .Stop ()
107100 return
@@ -118,11 +111,31 @@ func (p *Poller) Start() {
118111 select {}
119112}
120113
114+ func (p * Poller ) Poll (blockNumbers []* big.Int ) (lastPolledBlock * big.Int ) {
115+ if len (blockNumbers ) < 1 {
116+ log .Debug ().Msg ("No blocks to poll, skipping" )
117+ return
118+ }
119+ endBlock := blockNumbers [len (blockNumbers )- 1 ]
120+ if endBlock != nil {
121+ p .lastPolledBlock = endBlock
122+ }
123+ log .Debug ().Msgf ("Polling %d blocks starting from %s to %s" , len (blockNumbers ), blockNumbers [0 ], endBlock )
124+
125+ endBlockNumberFloat , _ := endBlock .Float64 ()
126+ metrics .PollerLastTriggeredBlock .Set (endBlockNumberFloat )
127+
128+ worker := worker .NewWorker (p .rpc )
129+ results := worker .Run (blockNumbers )
130+ p .handleWorkerResults (results )
131+ return endBlock
132+ }
133+
121134func (p * Poller ) reachedPollLimit (blockNumber * big.Int ) bool {
122135 return p .pollUntilBlock .Sign () > 0 && blockNumber .Cmp (p .pollUntilBlock ) >= 0
123136}
124137
125- func (p * Poller ) getBlockRange () ([]* big.Int , error ) {
138+ func (p * Poller ) getNextBlockRange () ([]* big.Int , error ) {
126139 latestBlock , err := p .rpc .GetLatestBlockNumber ()
127140 if err != nil {
128141 return nil , err
@@ -140,13 +153,7 @@ func (p *Poller) getBlockRange() ([]*big.Int, error) {
140153 return nil , nil
141154 }
142155
143- blockCount := new (big.Int ).Sub (endBlock , startBlock ).Int64 () + 1
144- blockNumbers := make ([]* big.Int , blockCount )
145- for i := int64 (0 ); i < blockCount ; i ++ {
146- blockNumbers [i ] = new (big.Int ).Add (startBlock , big .NewInt (i ))
147- }
148-
149- return blockNumbers , nil
156+ return p .createBlockNumbersForRange (startBlock , endBlock ), nil
150157}
151158
152159func (p * Poller ) getEndBlockForRange (startBlock * big.Int , latestBlock * big.Int ) * big.Int {
@@ -161,6 +168,15 @@ func (p *Poller) getEndBlockForRange(startBlock *big.Int, latestBlock *big.Int)
161168 return endBlock
162169}
163170
171+ func (p * Poller ) createBlockNumbersForRange (startBlock * big.Int , endBlock * big.Int ) []* big.Int {
172+ blockCount := new (big.Int ).Sub (endBlock , startBlock ).Int64 () + 1
173+ blockNumbers := make ([]* big.Int , blockCount )
174+ for i := int64 (0 ); i < blockCount ; i ++ {
175+ blockNumbers [i ] = new (big.Int ).Add (startBlock , big .NewInt (i ))
176+ }
177+ return blockNumbers
178+ }
179+
164180func (p * Poller ) handleWorkerResults (results []rpc.GetFullBlockResult ) {
165181 var successfulResults []rpc.GetFullBlockResult
166182 var failedResults []rpc.GetFullBlockResult
0 commit comments