refactor(core)!: clean-up core and simplify preblock (#19672)
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package module
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/cosmos/gogoproto/grpc"
|
||||
@@ -10,6 +9,7 @@ import (
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
|
||||
cosmosmsg "cosmossdk.io/api/cosmos/msg/v1"
|
||||
"cosmossdk.io/core/appmodule"
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
@@ -47,7 +47,7 @@ type Configurator interface {
|
||||
|
||||
// Register registers an in-place store migration for a module.
|
||||
// It permits to register modules migrations that have migrated to serverv2 but still be compatible with baseapp.
|
||||
Register(moduleName string, fromVersion uint64, handler func(context.Context) error) error
|
||||
Register(moduleName string, fromVersion uint64, handler appmodule.MigrationHandler) error
|
||||
}
|
||||
|
||||
type configurator struct {
|
||||
@@ -124,7 +124,7 @@ func (c *configurator) RegisterMigration(moduleName string, fromVersion uint64,
|
||||
|
||||
// Register implements the Configurator.Register method
|
||||
// It allows to register modules migrations that have migrated to server/v2 but still be compatible with baseapp.
|
||||
func (c *configurator) Register(moduleName string, fromVersion uint64, handler func(context.Context) error) error {
|
||||
func (c *configurator) Register(moduleName string, fromVersion uint64, handler appmodule.MigrationHandler) error {
|
||||
return c.RegisterMigration(moduleName, fromVersion, func(sdkCtx sdk.Context) error {
|
||||
return handler(sdkCtx)
|
||||
})
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// module_test inconsistenctly import appmodulev2 & appmodulev1 due to limitation in mockgen
|
||||
// eventually, when we change mocking library, we should be consistent in our appmodule imports
|
||||
package module_test
|
||||
|
||||
import (
|
||||
@@ -43,5 +45,5 @@ type CoreAppModule interface {
|
||||
|
||||
type CoreAppModuleWithPreBlock interface {
|
||||
CoreAppModule
|
||||
appmodule.HasPreBlocker
|
||||
appmodulev2.HasPreBlocker
|
||||
}
|
||||
|
||||
+4
-11
@@ -706,23 +706,16 @@ func (m Manager) RunMigrations(ctx context.Context, cfg Configurator, fromVM Ver
|
||||
// PreBlock performs begin block functionality for upgrade module.
|
||||
// It takes the current context as a parameter and returns a boolean value
|
||||
// indicating whether the migration was successfully executed or not.
|
||||
func (m *Manager) PreBlock(ctx sdk.Context) (*sdk.ResponsePreBlock, error) {
|
||||
func (m *Manager) PreBlock(ctx sdk.Context) error {
|
||||
ctx = ctx.WithEventManager(sdk.NewEventManager())
|
||||
paramsChanged := false
|
||||
for _, moduleName := range m.OrderPreBlockers {
|
||||
if module, ok := m.Modules[moduleName].(appmodule.HasPreBlocker); ok {
|
||||
rsp, err := module.PreBlock(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if rsp.IsConsensusParamsChanged() {
|
||||
paramsChanged = true
|
||||
if err := module.PreBlock(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return &sdk.ResponsePreBlock{
|
||||
ConsensusParamsChanged: paramsChanged,
|
||||
}, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// BeginBlock performs begin block functionality for all modules. It creates a
|
||||
|
||||
@@ -418,24 +418,13 @@ func TestCoreAPIManager_PreBlock(t *testing.T) {
|
||||
require.Equal(t, 2, len(mm.Modules))
|
||||
require.Equal(t, 1, len(mm.OrderPreBlockers))
|
||||
|
||||
mockAppModule1.EXPECT().PreBlock(gomock.Any()).Times(1).Return(&sdk.ResponsePreBlock{
|
||||
ConsensusParamsChanged: true,
|
||||
}, nil)
|
||||
res, err := mm.PreBlock(sdk.Context{})
|
||||
mockAppModule1.EXPECT().PreBlock(gomock.Any()).Times(1).Return(nil)
|
||||
err := mm.PreBlock(sdk.Context{})
|
||||
require.NoError(t, err)
|
||||
require.True(t, res.ConsensusParamsChanged)
|
||||
|
||||
// test false
|
||||
mockAppModule1.EXPECT().PreBlock(gomock.Any()).Times(1).Return(&sdk.ResponsePreBlock{
|
||||
ConsensusParamsChanged: false,
|
||||
}, nil)
|
||||
res, err = mm.PreBlock(sdk.Context{})
|
||||
require.NoError(t, err)
|
||||
require.False(t, res.ConsensusParamsChanged)
|
||||
|
||||
// test error
|
||||
mockAppModule1.EXPECT().PreBlock(gomock.Any()).Times(1).Return(nil, errors.New("some error"))
|
||||
_, err = mm.PreBlock(sdk.Context{})
|
||||
mockAppModule1.EXPECT().PreBlock(gomock.Any()).Times(1).Return(errors.New("some error"))
|
||||
err = mm.PreBlock(sdk.Context{})
|
||||
require.EqualError(t, err, "some error")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user