Skip to content

Commit 37b7d75

Browse files
committed
[SEI-9449] Remove unused invariant checks (#2275)
* remove invariant checks * fix test * fix race condition in test * fix lint * add coverage
1 parent 307c077 commit 37b7d75

6 files changed

Lines changed: 540 additions & 23 deletions

File tree

app/app.go

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,8 @@ type App struct {
353353

354354
configurator module.Configurator
355355

356-
optimisticProcessingInfo *OptimisticProcessingInfo
356+
optimisticProcessingInfo OptimisticProcessingInfo
357+
optimisticProcessingInfoMutex sync.RWMutex
357358

358359
// batchVerifier *ante.SR25519BatchVerifier
359360
txDecoder sdk.TxDecoder
@@ -1071,10 +1072,10 @@ func (app *App) SetStoreUpgradeHandlers() {
10711072
func (app *App) Name() string { return app.BaseApp.Name() }
10721073

10731074
// GetBaseApp returns the base app of the application
1074-
func (app App) GetBaseApp() *baseapp.BaseApp { return app.BaseApp }
1075+
func (app *App) GetBaseApp() *baseapp.BaseApp { return app.BaseApp }
10751076

10761077
// GetStateStore returns the state store of the application
1077-
func (app App) GetStateStore() seidb.StateStore { return app.stateStore }
1078+
func (app *App) GetStateStore() seidb.StateStore { return app.stateStore }
10781079

10791080
// BeginBlocker application updates every begin block
10801081
func (app *App) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
@@ -1120,12 +1121,16 @@ func (app *App) PrepareProposalHandler(_ sdk.Context, req *abci.RequestPreparePr
11201121
}, nil
11211122
}
11221123

1123-
func (app *App) GetOptimisticProcessingInfo() *OptimisticProcessingInfo {
1124+
func (app *App) GetOptimisticProcessingInfo() OptimisticProcessingInfo {
1125+
app.optimisticProcessingInfoMutex.RLock()
1126+
defer app.optimisticProcessingInfoMutex.RUnlock()
11241127
return app.optimisticProcessingInfo
11251128
}
11261129

11271130
func (app *App) ClearOptimisticProcessingInfo() {
1128-
app.optimisticProcessingInfo = nil
1131+
app.optimisticProcessingInfoMutex.Lock()
1132+
defer app.optimisticProcessingInfoMutex.Unlock()
1133+
app.optimisticProcessingInfo = OptimisticProcessingInfo{}
11291134
}
11301135

11311136
func (app *App) ProcessProposalHandler(ctx sdk.Context, req *abci.RequestProcessProposal) (*abci.ResponseProcessProposal, error) {
@@ -1138,31 +1143,41 @@ func (app *App) ProcessProposalHandler(ctx sdk.Context, req *abci.RequestProcess
11381143
Status: abci.ResponseProcessProposal_REJECT,
11391144
}, nil
11401145
}
1141-
if app.optimisticProcessingInfo == nil {
1146+
if app.GetOptimisticProcessingInfo().Completion == nil {
11421147
completionSignal := make(chan struct{}, 1)
1143-
optimisticProcessingInfo := &OptimisticProcessingInfo{
1148+
optimisticProcessingInfo := OptimisticProcessingInfo{
11441149
Height: req.Height,
11451150
Hash: req.Hash,
11461151
Completion: completionSignal,
11471152
}
1153+
app.optimisticProcessingInfoMutex.Lock()
11481154
app.optimisticProcessingInfo = optimisticProcessingInfo
1155+
app.optimisticProcessingInfoMutex.Unlock()
11491156

11501157
plan, found := app.UpgradeKeeper.GetUpgradePlan(ctx)
11511158
if found && plan.ShouldExecute(ctx) {
11521159
app.Logger().Info(fmt.Sprintf("Potential upgrade planned for height=%d skipping optimistic processing", plan.Height))
1160+
app.optimisticProcessingInfoMutex.Lock()
11531161
app.optimisticProcessingInfo.Aborted = true
1154-
app.optimisticProcessingInfo.Completion <- struct{}{}
1162+
completion := app.optimisticProcessingInfo.Completion
1163+
app.optimisticProcessingInfoMutex.Unlock()
1164+
completion <- struct{}{}
11551165
} else {
11561166
go func() {
11571167
events, txResults, endBlockResp, _ := app.ProcessBlock(ctx, req.Txs, req, req.ProposedLastCommit, false)
1158-
optimisticProcessingInfo.Events = events
1159-
optimisticProcessingInfo.TxRes = txResults
1160-
optimisticProcessingInfo.EndBlockResp = endBlockResp
1161-
optimisticProcessingInfo.Completion <- struct{}{}
1168+
app.optimisticProcessingInfoMutex.Lock()
1169+
app.optimisticProcessingInfo.Events = events
1170+
app.optimisticProcessingInfo.TxRes = txResults
1171+
app.optimisticProcessingInfo.EndBlockResp = endBlockResp
1172+
completion := app.optimisticProcessingInfo.Completion
1173+
app.optimisticProcessingInfoMutex.Unlock()
1174+
completion <- struct{}{}
11621175
}()
11631176
}
1164-
} else if !bytes.Equal(app.optimisticProcessingInfo.Hash, req.Hash) {
1177+
} else if !bytes.Equal(app.GetOptimisticProcessingInfo().Hash, req.Hash) {
1178+
app.optimisticProcessingInfoMutex.Lock()
11651179
app.optimisticProcessingInfo.Aborted = true
1180+
app.optimisticProcessingInfoMutex.Unlock()
11661181
}
11671182
return &abci.ResponseProcessProposal{
11681183
Status: abci.ResponseProcessProposal_ACCEPT,
@@ -1176,9 +1191,25 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock)
11761191
duration := time.Since(startTime)
11771192
ctx.Logger().Info(fmt.Sprintf("FinalizeBlock took %dms", duration/time.Millisecond))
11781193
}()
1179-
if app.optimisticProcessingInfo != nil {
1180-
<-app.optimisticProcessingInfo.Completion
1181-
if !app.optimisticProcessingInfo.Aborted && bytes.Equal(app.optimisticProcessingInfo.Hash, req.Hash) {
1194+
1195+
// Get all optimistic processing info atomically
1196+
app.optimisticProcessingInfoMutex.RLock()
1197+
completion := app.optimisticProcessingInfo.Completion
1198+
app.optimisticProcessingInfoMutex.RUnlock()
1199+
1200+
if completion != nil {
1201+
<-completion
1202+
1203+
// Get the final state atomically after completion
1204+
app.optimisticProcessingInfoMutex.RLock()
1205+
aborted := app.optimisticProcessingInfo.Aborted
1206+
finalHash := app.optimisticProcessingInfo.Hash
1207+
events := app.optimisticProcessingInfo.Events
1208+
txRes := app.optimisticProcessingInfo.TxRes
1209+
endBlockResp := app.optimisticProcessingInfo.EndBlockResp
1210+
app.optimisticProcessingInfoMutex.RUnlock()
1211+
1212+
if !aborted && bytes.Equal(finalHash, req.Hash) {
11821213
metrics.IncrementOptimisticProcessingCounter(true)
11831214
app.SetProcessProposalStateToCommit()
11841215
if app.EvmKeeper.EthReplayConfig.Enabled || app.EvmKeeper.EthBlockTestConfig.Enabled {
@@ -1187,7 +1218,7 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock)
11871218
cms := app.WriteState()
11881219
app.LightInvarianceChecks(cms, app.lightInvarianceConfig)
11891220
appHash := app.GetWorkingHash()
1190-
resp := app.getFinalizeBlockResponse(appHash, app.optimisticProcessingInfo.Events, app.optimisticProcessingInfo.TxRes, app.optimisticProcessingInfo.EndBlockResp)
1221+
resp := app.getFinalizeBlockResponse(appHash, events, txRes, endBlockResp)
11911222
return &resp, nil
11921223
}
11931224
}

0 commit comments

Comments
 (0)