refactor(server/v2): remove serverv2.AppI (#22446)

This commit is contained in:
Julien Robert 2024-11-06 21:14:14 +04:00 committed by GitHub
parent bf8c0da179
commit 3014713d44
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 28 additions and 80 deletions

View File

@ -48,9 +48,7 @@ func New[T transaction.Tx](
logger log.Logger,
interfaceRegistry server.InterfaceRegistry,
queryHandlers map[string]appmodulev2.Handler,
queryable interface {
Query(ctx context.Context, version uint64, msg transaction.Msg) (transaction.Msg, error)
},
queryable func(ctx context.Context, version uint64, msg transaction.Msg) (transaction.Msg, error),
cfg server.ConfigMap,
cfgOptions ...CfgOption,
) (*Server[T], error) {
@ -74,7 +72,7 @@ func New[T transaction.Tx](
// Reflection allows external clients to see what services and methods the gRPC server exposes.
gogoreflection.Register(grpcSrv, slices.Collect(maps.Keys(queryHandlers)), logger.With("sub-module", "grpc-reflection"))
// Register V2
// Register V2 grpc handlers
RegisterServiceServer(grpcSrv, &v2Service{queryHandlers, queryable})
srv.grpcSrv = grpcSrv
@ -99,9 +97,9 @@ func (s *Server[T]) StartCmdFlags() *pflag.FlagSet {
return flags
}
func makeUnknownServiceHandler(handlers map[string]appmodulev2.Handler, querier interface {
Query(ctx context.Context, version uint64, msg transaction.Msg) (transaction.Msg, error)
},
func makeUnknownServiceHandler(
handlers map[string]appmodulev2.Handler,
queryable func(ctx context.Context, version uint64, msg transaction.Msg) (transaction.Msg, error),
) grpc.StreamHandler {
getRegistry := sync.OnceValues(gogoproto.MergedRegistry)
@ -149,7 +147,7 @@ func makeUnknownServiceHandler(handlers map[string]appmodulev2.Handler, querier
if err != nil {
return status.Errorf(codes.InvalidArgument, "invalid get height from context: %v", err)
}
resp, err := querier.Query(ctx, height, req)
resp, err := queryable(ctx, height, req)
if err != nil {
return err
}

View File

@ -15,9 +15,7 @@ import (
// v2Service implements the gRPC service interface for handling queries and listing handlers.
type v2Service struct {
queryHandlers map[string]appmodulev2.Handler
queryable interface {
Query(ctx context.Context, version uint64, msg transaction.Msg) (transaction.Msg, error)
}
queryable func(ctx context.Context, version uint64, msg transaction.Msg) (transaction.Msg, error)
}
// Query handles incoming query requests by unmarshaling the request, processing it,
@ -39,7 +37,7 @@ func (s v2Service) Query(ctx context.Context, request *QueryRequest) (*QueryResp
return nil, status.Errorf(codes.InvalidArgument, "failed to unmarshal request: %v", err)
}
queryResp, err := s.queryable.Query(ctx, 0, protoMsg)
queryResp, err := s.queryable(ctx, 0, protoMsg)
if err != nil {
return nil, status.Errorf(codes.Internal, "query failed: %v", err)
}

View File

@ -12,7 +12,6 @@ import (
appmodulev2 "cosmossdk.io/core/appmodule/v2"
"cosmossdk.io/core/transaction"
serverv2 "cosmossdk.io/server/v2"
)
type MockRequestMessage struct {
@ -42,8 +41,6 @@ func (m *MockResponseMessage) ValidateBasic() error {
type mockApp[T transaction.Tx] struct {
mock.Mock
serverv2.AppI[T]
}
func (m *mockApp[T]) QueryHandlers() map[string]appmodulev2.Handler {
@ -139,7 +136,7 @@ func TestQuery(t *testing.T) {
tt.setupMock(mockApp)
}
service := &v2Service{mockApp.QueryHandlers(), mockApp}
service := &v2Service{mockApp.QueryHandlers(), mockApp.Query}
resp, err := service.Query(context.Background(), tt.request)
if tt.expectError {
@ -195,7 +192,7 @@ func TestV2Service_ListQueryHandlers(t *testing.T) {
tt.setupMock(mockApp)
}
service := &v2Service{mockApp.QueryHandlers(), mockApp}
service := &v2Service{mockApp.QueryHandlers(), mockApp.Query}
resp, err := service.ListQueryHandlers(context.Background(), &ListQueryHandlersRequest{})
assert.NoError(t, err)

View File

@ -16,7 +16,6 @@ require (
cosmossdk.io/core v1.0.0-alpha.5
cosmossdk.io/core/testing v0.0.0-20240923163230-04da382a9f29
cosmossdk.io/log v1.4.1
cosmossdk.io/schema v0.3.1-0.20241010135032-192601639cac
cosmossdk.io/server/v2/appmanager v0.0.0-00010101000000-000000000000
cosmossdk.io/store/v2 v2.0.0-00010101000000-000000000000
github.com/cosmos/cosmos-proto v1.0.0-beta.5
@ -43,6 +42,7 @@ require (
require (
cosmossdk.io/errors/v2 v2.0.0-20240731132947-df72853b3ca5 // indirect
cosmossdk.io/schema v0.3.1-0.20241010135032-192601639cac // indirect
github.com/DataDog/datadog-go v4.8.3+incompatible // indirect
github.com/DataDog/zstd v1.5.5 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect

View File

@ -12,7 +12,6 @@ import (
"github.com/stretchr/testify/require"
appmodulev2 "cosmossdk.io/core/appmodule/v2"
coreserver "cosmossdk.io/core/server"
"cosmossdk.io/core/transaction"
"cosmossdk.io/log"
serverv2 "cosmossdk.io/server/v2"
@ -21,6 +20,14 @@ import (
storev2 "cosmossdk.io/store/v2"
)
type mockStore struct {
storev2.RootStore
}
func (*mockStore) Close() error {
return nil
}
type mockInterfaceRegistry struct{}
func (*mockInterfaceRegistry) Resolve(typeUrl string) (gogoproto.Message, error) {
@ -32,22 +39,6 @@ func (*mockInterfaceRegistry) ListImplementations(ifaceTypeURL string) []string
}
func (*mockInterfaceRegistry) ListAllInterfaces() []string { panic("not implemented") }
type mockApp[T transaction.Tx] struct {
serverv2.AppI[T]
}
func (*mockApp[T]) QueryHandlers() map[string]appmodulev2.Handler {
return map[string]appmodulev2.Handler{}
}
func (*mockApp[T]) InterfaceRegistry() coreserver.InterfaceRegistry {
return &mockInterfaceRegistry{}
}
func (*mockApp[T]) Store() storev2.RootStore {
return nil
}
func TestServer(t *testing.T) {
currentDir, err := os.Getwd()
require.NoError(t, err)
@ -62,12 +53,11 @@ func TestServer(t *testing.T) {
logger := log.NewLogger(os.Stdout)
ctx := serverv2.SetServerContext(context.Background(), v, logger)
app := &mockApp[transaction.Tx]{}
grpcServer, err := grpc.New[transaction.Tx](logger, app.InterfaceRegistry(), app.QueryHandlers(), app, cfg)
grpcServer, err := grpc.New[transaction.Tx](logger, &mockInterfaceRegistry{}, map[string]appmodulev2.Handler{}, nil, cfg)
require.NoError(t, err)
storeServer, err := store.New[transaction.Tx](app.Store(), cfg)
storeServer, err := store.New[transaction.Tx](&mockStore{}, cfg)
require.NoError(t, err)
mockServer := &mockServer{name: "mock-server-1", ch: make(chan string, 100)}

View File

@ -23,18 +23,18 @@ const ServerName = "store"
// Server manages store config and contains prune & snapshot commands
type Server[T transaction.Tx] struct {
config *root.Config
backend storev2.Backend
config *root.Config
store storev2.RootStore
}
func New[T transaction.Tx](store storev2.Backend, cfg server.ConfigMap) (*Server[T], error) {
func New[T transaction.Tx](store storev2.RootStore, cfg server.ConfigMap) (*Server[T], error) {
config, err := UnmarshalConfig(cfg)
if err != nil {
return nil, err
}
return &Server[T]{
backend: store,
config: config,
store: store,
config: config,
}, nil
}
@ -47,7 +47,7 @@ func (s *Server[T]) Start(context.Context) error {
}
func (s *Server[T]) Stop(context.Context) error {
return nil
return s.store.Close()
}
func (s *Server[T]) CLICommands() serverv2.CLIConfig {

View File

@ -1,26 +0,0 @@
package serverv2
import (
"github.com/spf13/viper"
appmodulev2 "cosmossdk.io/core/appmodule/v2"
"cosmossdk.io/core/server"
"cosmossdk.io/core/transaction"
"cosmossdk.io/log"
"cosmossdk.io/schema/decoding"
"cosmossdk.io/server/v2/appmanager"
"cosmossdk.io/store/v2"
)
type AppCreator[T transaction.Tx] func(log.Logger, *viper.Viper) AppI[T]
type AppI[T transaction.Tx] interface {
appmanager.AppManager[T]
Name() string
InterfaceRegistry() server.InterfaceRegistry
QueryHandlers() map[string]appmodulev2.Handler
Store() store.RootStore
SchemaDecoderResolver() decoding.DecoderResolver
Close() error
}

View File

@ -201,15 +201,6 @@ func (app *SimApp[T]) Store() store.RootStore {
return app.store
}
// Close overwrites the base Close method to close the stores.
func (app *SimApp[T]) Close() error {
if err := app.store.Close(); err != nil {
return err
}
return app.App.Close()
}
func ProvideRootStoreConfig(config runtime.GlobalConfig) (*root.Config, error) {
return serverstore.UnmarshalConfig(config)
}

View File

@ -83,7 +83,7 @@ func InitRootCmd[T transaction.Tx](
// build full app!
simApp := deps.SimApp
grpcServer, err := grpc.New[T](logger, simApp.InterfaceRegistry(), simApp.QueryHandlers(), simApp, deps.GlobalConfig)
grpcServer, err := grpc.New[T](logger, simApp.InterfaceRegistry(), simApp.QueryHandlers(), simApp.Query, deps.GlobalConfig)
if err != nil {
return nil, err
}