44 "fmt"
55 "math/big"
66 "sort"
7- "sync"
87 "time"
98
109 "github.com/rs/zerolog/log"
@@ -57,7 +56,7 @@ func (c *Committer) Start() {
5756 log .Error ().Err (err ).Msg ("Error getting block data to commit" )
5857 continue
5958 }
60- if len (blockDataToCommit ) == 0 {
59+ if len (* blockDataToCommit ) == 0 {
6160 log .Debug ().Msg ("No block data to commit" )
6261 continue
6362 }
@@ -95,7 +94,7 @@ func (c *Committer) getBlockNumbersToCommit() ([]*big.Int, error) {
9594 return blockNumbers , nil
9695}
9796
98- func (c * Committer ) getSequentialBlockDataToCommit () ([]common.BlockData , error ) {
97+ func (c * Committer ) getSequentialBlockDataToCommit () (* []common.BlockData , error ) {
9998 blocksToCommit , err := c .getBlockNumbersToCommit ()
10099 if err != nil {
101100 return nil , fmt .Errorf ("error determining blocks to commit: %v" , err )
@@ -104,129 +103,65 @@ func (c *Committer) getSequentialBlockDataToCommit() ([]common.BlockData, error)
104103 return nil , nil
105104 }
106105
107- blocksData , err := c .storage .StagingStorage .GetBlockData (storage.QueryFilter {BlockNumbers : blocksToCommit , ChainId : c .rpc .ChainID })
106+ blocksData , err := c .storage .StagingStorage .GetStagingData (storage.QueryFilter {BlockNumbers : blocksToCommit , ChainId : c .rpc .ChainID })
108107 if err != nil {
109108 return nil , fmt .Errorf ("error fetching blocks to commit: %v" , err )
110109 }
111- if len (blocksData ) == 0 {
110+ if len (* blocksData ) == 0 {
112111 log .Warn ().Msgf ("Committer didn't find the following range in staging: %v - %v" , blocksToCommit [0 ].Int64 (), blocksToCommit [len (blocksToCommit )- 1 ].Int64 ())
113112 return nil , nil
114113 }
115114
116115 // Sort blocks by block number
117- sort .Slice (blocksData , func (i , j int ) bool {
118- return blocksData [i ].Block .Number .Cmp (blocksData [j ].Block .Number ) < 0
116+ sort .Slice (* blocksData , func (i , j int ) bool {
117+ return ( * blocksData ) [i ].Block .Number .Cmp (( * blocksData ) [j ].Block .Number ) < 0
119118 })
120119
121- if blocksData [0 ].Block .Number .Cmp (blocksToCommit [0 ]) != 0 {
122- return nil , c .handleGap (blocksToCommit [0 ], blocksData [0 ].Block )
120+ if ( * blocksData ) [0 ].Block .Number .Cmp (blocksToCommit [0 ]) != 0 {
121+ return nil , c .handleGap (blocksToCommit [0 ], ( * blocksData ) [0 ].Block )
123122 }
124123
125124 var sequentialBlockData []common.BlockData
126- sequentialBlockData = append (sequentialBlockData , blocksData [0 ])
127- expectedBlockNumber := new (big.Int ).Add (blocksData [0 ].Block .Number , big .NewInt (1 ))
125+ sequentialBlockData = append (sequentialBlockData , ( * blocksData ) [0 ])
126+ expectedBlockNumber := new (big.Int ).Add (( * blocksData ) [0 ].Block .Number , big .NewInt (1 ))
128127
129- for i := 1 ; i < len (blocksData ); i ++ {
130- if blocksData [i ].Block .Number .Cmp (expectedBlockNumber ) != 0 {
128+ for i := 1 ; i < len (* blocksData ); i ++ {
129+ if ( * blocksData ) [i ].Block .Number .Cmp (expectedBlockNumber ) != 0 {
131130 // Note: Gap detected, stop here
132- log .Warn ().Msgf ("Gap detected at block %s, committing until %s" , expectedBlockNumber .String (), blocksData [i - 1 ].Block .Number .String ())
131+ log .Warn ().Msgf ("Gap detected at block %s, committing until %s" , expectedBlockNumber .String (), ( * blocksData ) [i - 1 ].Block .Number .String ())
133132 // increment the a gap counter in prometheus
134133 metrics .GapCounter .Inc ()
135134 // record the first missed block number in prometheus
136- metrics .MissedBlockNumbers .Set (float64 (blocksData [0 ].Block .Number .Int64 ()))
135+ metrics .MissedBlockNumbers .Set (float64 (( * blocksData ) [0 ].Block .Number .Int64 ()))
137136 break
138137 }
139- sequentialBlockData = append (sequentialBlockData , blocksData [i ])
138+ sequentialBlockData = append (sequentialBlockData , ( * blocksData ) [i ])
140139 expectedBlockNumber .Add (expectedBlockNumber , big .NewInt (1 ))
141140 }
142141
143- return sequentialBlockData , nil
142+ return & sequentialBlockData , nil
144143}
145144
146- func (c * Committer ) commit (blockData []common.BlockData ) error {
147- blockNumbers := make ([]* big.Int , len (blockData ))
148- for i , block := range blockData {
145+ func (c * Committer ) commit (blockData * []common.BlockData ) error {
146+ blockNumbers := make ([]* big.Int , len (* blockData ))
147+ for i , block := range * blockData {
149148 blockNumbers [i ] = block .Block .Number
150149 }
151150 log .Debug ().Msgf ("Committing %d blocks" , len (blockNumbers ))
152151
153152 // TODO if next parts (saving or deleting) fail, we'll have to do a rollback
154- if err := c .saveDataToMainStorage (blockData ); err != nil {
153+ if err := c .storage . MainStorage . InsertBlockData (blockData ); err != nil {
155154 log .Error ().Err (err ).Msgf ("Failed to commit blocks: %v" , blockNumbers )
156155 return fmt .Errorf ("error saving data to main storage: %v" , err )
157156 }
158157
159- if err := c .storage .StagingStorage .DeleteBlockData (blockData ); err != nil {
158+ if err := c .storage .StagingStorage .DeleteStagingData (blockData ); err != nil {
160159 return fmt .Errorf ("error deleting data from staging storage: %v" , err )
161160 }
162161
163162 // Update metrics for successful commits
164- metrics .SuccessfulCommits .Add (float64 (len (blockData )))
165- metrics .LastCommittedBlock .Set (float64 (blockData [len (blockData )- 1 ].Block .Number .Int64 ()))
166-
167- return nil
168- }
169-
170- func (c * Committer ) saveDataToMainStorage (blockData []common.BlockData ) error {
171- var commitWg sync.WaitGroup
172- commitWg .Add (4 )
173-
174- var commitErr error
175- var commitErrMutex sync.Mutex
176-
177- blocks := make ([]common.Block , 0 , len (blockData ))
178- logs := make ([]common.Log , 0 )
179- transactions := make ([]common.Transaction , 0 )
180- traces := make ([]common.Trace , 0 )
181-
182- for _ , block := range blockData {
183- blocks = append (blocks , block .Block )
184- logs = append (logs , block .Logs ... )
185- transactions = append (transactions , block .Transactions ... )
186- traces = append (traces , block .Traces ... )
187- }
188-
189- go func () {
190- defer commitWg .Done ()
191- if err := c .storage .MainStorage .InsertBlocks (blocks ); err != nil {
192- commitErrMutex .Lock ()
193- commitErr = fmt .Errorf ("error inserting blocks: %v" , err )
194- commitErrMutex .Unlock ()
195- }
196- }()
197-
198- go func () {
199- defer commitWg .Done ()
200- if err := c .storage .MainStorage .InsertLogs (logs ); err != nil {
201- commitErrMutex .Lock ()
202- commitErr = fmt .Errorf ("error inserting logs: %v" , err )
203- commitErrMutex .Unlock ()
204- }
205- }()
206-
207- go func () {
208- defer commitWg .Done ()
209- if err := c .storage .MainStorage .InsertTransactions (transactions ); err != nil {
210- commitErrMutex .Lock ()
211- commitErr = fmt .Errorf ("error inserting transactions: %v" , err )
212- commitErrMutex .Unlock ()
213- }
214- }()
215-
216- go func () {
217- defer commitWg .Done ()
218- if err := c .storage .MainStorage .InsertTraces (traces ); err != nil {
219- commitErrMutex .Lock ()
220- commitErr = fmt .Errorf ("error inserting traces: %v" , err )
221- commitErrMutex .Unlock ()
222- }
223- }()
224-
225- commitWg .Wait ()
226-
227- if commitErr != nil {
228- return commitErr
229- }
163+ metrics .SuccessfulCommits .Add (float64 (len (* blockData )))
164+ metrics .LastCommittedBlock .Set (float64 ((* blockData )[len (* blockData )- 1 ].Block .Number .Int64 ()))
230165
231166 return nil
232167}
0 commit comments