Skip to content

Commit e60a170

Browse files
committed
check index in parallel
1 parent e78d685 commit e60a170

File tree

1 file changed

+29
-42
lines changed

1 file changed

+29
-42
lines changed

action/protocol/staking/protocol.go

Lines changed: 29 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ func (p *Protocol) Start(ctx context.Context, sr protocol.StateReader) (protocol
265265
}
266266
}
267267
c.contractsStake = &contractStakeView{}
268-
checker := blockdao.GetChecker(ctx)
269268
checkIndex := func(indexer ContractStakingIndexer) error {
269+
checker := blockdao.GetChecker(ctx)
270270
if checker == nil {
271271
return nil
272272
}
@@ -295,59 +295,46 @@ func (p *Protocol) Start(ctx context.Context, sr protocol.StateReader) (protocol
295295
}
296296
return checker.CheckIndexer(ctx, indexer, height, func(h uint64) {
297297
if h%5000 == 0 || h == height {
298-
log.L().Info("Checking contract staking indexer", zap.Uint64("height", h))
298+
log.L().Info("Checking contract staking indexer", zap.Uint64("height", h), zap.String("contract", indexer.ContractAddress().String()))
299299
}
300300
})
301301
}
302-
if p.skipContractStakingView(height) {
303-
if p.contractStakingIndexer != nil {
304-
if err = checkIndex(p.contractStakingIndexer); err != nil {
305-
return nil, errors.Wrap(err, "failed to check contract staking indexer")
306-
}
307-
}
308-
if p.contractStakingIndexerV2 != nil {
309-
if err = checkIndex(p.contractStakingIndexerV2); err != nil {
310-
return nil, errors.Wrap(err, "failed to check contract staking indexer V2")
311-
}
312-
}
313-
if p.contractStakingIndexerV3 != nil {
314-
if err = checkIndex(p.contractStakingIndexerV3); err != nil {
315-
return nil, errors.Wrap(err, "failed to check contract staking indexer V3")
316-
}
317-
}
318-
return c, nil
302+
// List of all indexers to process
303+
indexers := []struct {
304+
indexer ContractStakingIndexer
305+
setter func(ContractStakeView)
306+
}{
307+
{p.contractStakingIndexer, func(v ContractStakeView) { c.contractsStake.v1 = v }},
308+
{p.contractStakingIndexerV2, func(v ContractStakeView) { c.contractsStake.v2 = v }},
309+
{p.contractStakingIndexerV3, func(v ContractStakeView) { c.contractsStake.v3 = v }},
319310
}
320-
311+
// Process all indexers in parallel
321312
wg := sync.WaitGroup{}
322-
errChan := make(chan error, 3)
323-
buildView := func(indexer ContractStakingIndexer, callback func(ContractStakeView)) {
324-
if indexer == nil {
325-
return
313+
errChan := make(chan error, len(indexers))
314+
skipView := p.skipContractStakingView(height)
315+
for _, idx := range indexers {
316+
if idx.indexer == nil {
317+
continue
326318
}
327319
wg.Add(1)
328-
go func() {
320+
go func(indexer ContractStakingIndexer, setter func(ContractStakeView)) {
329321
defer wg.Done()
322+
// First, checking the indexer
330323
if err := checkIndex(indexer); err != nil {
331-
errChan <- errors.Wrap(err, "failed to check contract staking indexer")
324+
errChan <- errors.Wrapf(err, "failed to check contract staking indexer %s", indexer.ContractAddress())
332325
return
333326
}
334-
view, err := NewContractStakeViewBuilder(indexer, p.blockStore).Build(ctx, sr, height)
335-
if err != nil {
336-
errChan <- errors.Wrapf(err, "failed to create stake view for contract %s", indexer.ContractAddress())
337-
return
327+
// If not skipping view creation, build the view
328+
if !skipView {
329+
view, err := NewContractStakeViewBuilder(indexer, p.blockStore).Build(ctx, sr, height)
330+
if err != nil {
331+
errChan <- errors.Wrapf(err, "failed to create stake view for contract %s", indexer.ContractAddress())
332+
return
333+
}
334+
setter(view)
338335
}
339-
callback(view)
340-
}()
341-
}
342-
buildView(p.contractStakingIndexer, func(view ContractStakeView) {
343-
c.contractsStake.v1 = view
344-
})
345-
buildView(p.contractStakingIndexerV2, func(view ContractStakeView) {
346-
c.contractsStake.v2 = view
347-
})
348-
buildView(p.contractStakingIndexerV3, func(view ContractStakeView) {
349-
c.contractsStake.v3 = view
350-
})
336+
}(idx.indexer, idx.setter)
337+
}
351338
wg.Wait()
352339
close(errChan)
353340
for err := range errChan {

0 commit comments

Comments
 (0)