refactor(server/v2): remove serverv2.AppI (#22446)
This commit is contained in:
parent
bf8c0da179
commit
3014713d44
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user