Add flag & toml config for gRPC server (#6933)
* Enable gRPC by default * Add grpc flags * Consistent comments in toml * Stop grpc in test network cleaup * Expose ports on Docker * Fix tests Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
parent
dfa0642fdc
commit
d2661a4692
|
@ -38,7 +38,7 @@ WORKDIR /root
|
||||||
# Copy over binaries from the build-env
|
# Copy over binaries from the build-env
|
||||||
COPY --from=build-env /go/bin/simd /usr/bin/simd
|
COPY --from=build-env /go/bin/simd /usr/bin/simd
|
||||||
|
|
||||||
EXPOSE 26656 26657 1317
|
EXPOSE 26656 26657 1317 9090
|
||||||
|
|
||||||
# Run simd by default, omit entrypoint to ease using container with simcli
|
# Run simd by default, omit entrypoint to ease using container with simcli
|
||||||
CMD ["simd"]
|
CMD ["simd"]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
version: '3'
|
version: "3"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
simdnode0:
|
simdnode0:
|
||||||
|
@ -7,6 +7,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "26656-26657:26656-26657"
|
- "26656-26657:26656-26657"
|
||||||
- "1317:1317"
|
- "1317:1317"
|
||||||
|
- "9090:9090"
|
||||||
environment:
|
environment:
|
||||||
- ID=0
|
- ID=0
|
||||||
- LOG=${LOG:-simd.log}
|
- LOG=${LOG:-simd.log}
|
||||||
|
@ -22,6 +23,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "26659-26660:26656-26657"
|
- "26659-26660:26656-26657"
|
||||||
- "1318:1317"
|
- "1318:1317"
|
||||||
|
- "9090:9090"
|
||||||
environment:
|
environment:
|
||||||
- ID=1
|
- ID=1
|
||||||
- LOG=${LOG:-simd.log}
|
- LOG=${LOG:-simd.log}
|
||||||
|
@ -40,6 +42,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "26661-26662:26656-26657"
|
- "26661-26662:26656-26657"
|
||||||
- "1319:1317"
|
- "1319:1317"
|
||||||
|
- "9090:9090"
|
||||||
volumes:
|
volumes:
|
||||||
- ./build:/simd:Z
|
- ./build:/simd:Z
|
||||||
networks:
|
networks:
|
||||||
|
@ -55,6 +58,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- "26663-26664:26656-26657"
|
- "26663-26664:26656-26657"
|
||||||
- "1320:1317"
|
- "1320:1317"
|
||||||
|
- "9090:9090"
|
||||||
volumes:
|
volumes:
|
||||||
- ./build:/simd:Z
|
- ./build:/simd:Z
|
||||||
networks:
|
networks:
|
||||||
|
@ -67,5 +71,4 @@ networks:
|
||||||
ipam:
|
ipam:
|
||||||
driver: default
|
driver: default
|
||||||
config:
|
config:
|
||||||
-
|
- subnet: 192.168.10.0/16
|
||||||
subnet: 192.168.10.0/16
|
|
||||||
|
|
|
@ -13,6 +13,9 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
defaultMinGasPrices = ""
|
defaultMinGasPrices = ""
|
||||||
|
|
||||||
|
// DefaultGRPCAddress is the default address the gRPC server binds to.
|
||||||
|
DefaultGRPCAddress = "0.0.0.0:9090"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BaseConfig defines the server's basic configuration
|
// BaseConfig defines the server's basic configuration
|
||||||
|
@ -145,8 +148,8 @@ func DefaultConfig() *Config {
|
||||||
RPCMaxBodyBytes: 1000000,
|
RPCMaxBodyBytes: 1000000,
|
||||||
},
|
},
|
||||||
GRPC: GRPCConfig{
|
GRPC: GRPCConfig{
|
||||||
Enable: false,
|
Enable: true,
|
||||||
Address: "0.0.0.0:9090",
|
Address: DefaultGRPCAddress,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ inter-block-cache = {{ .BaseConfig.InterBlockCache }}
|
||||||
|
|
||||||
[telemetry]
|
[telemetry]
|
||||||
|
|
||||||
# Prefixed with keys to separate services
|
# Prefixed with keys to separate services.
|
||||||
service-name = "{{ .Telemetry.ServiceName }}"
|
service-name = "{{ .Telemetry.ServiceName }}"
|
||||||
|
|
||||||
# Enabled enables the application telemetry functionality. When enabled,
|
# Enabled enables the application telemetry functionality. When enabled,
|
||||||
|
@ -61,13 +61,13 @@ service-name = "{{ .Telemetry.ServiceName }}"
|
||||||
# other sinks such as Prometheus.
|
# other sinks such as Prometheus.
|
||||||
enabled = {{ .Telemetry.Enabled }}
|
enabled = {{ .Telemetry.Enabled }}
|
||||||
|
|
||||||
# Enable prefixing gauge values with hostname
|
# Enable prefixing gauge values with hostname.
|
||||||
enable-hostname = {{ .Telemetry.EnableHostname }}
|
enable-hostname = {{ .Telemetry.EnableHostname }}
|
||||||
|
|
||||||
# Enable adding hostname to labels
|
# Enable adding hostname to labels.
|
||||||
enable-hostname-label = {{ .Telemetry.EnableHostnameLabel }}
|
enable-hostname-label = {{ .Telemetry.EnableHostnameLabel }}
|
||||||
|
|
||||||
# Enable adding service to labels
|
# Enable adding service to labels.
|
||||||
enable-service-label = {{ .Telemetry.EnableServiceLabel }}
|
enable-service-label = {{ .Telemetry.EnableServiceLabel }}
|
||||||
|
|
||||||
# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink.
|
# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink.
|
||||||
|
@ -94,23 +94,35 @@ enable = {{ .API.Enable }}
|
||||||
# Swagger defines if swagger documentation should automatically be registered.
|
# Swagger defines if swagger documentation should automatically be registered.
|
||||||
swagger = {{ .API.Swagger }}
|
swagger = {{ .API.Swagger }}
|
||||||
|
|
||||||
# Address defines the API server to listen on
|
# Address defines the API server to listen on.
|
||||||
address = "{{ .API.Address }}"
|
address = "{{ .API.Address }}"
|
||||||
|
|
||||||
# MaxOpenConnections defines the number of maximum open connections
|
# MaxOpenConnections defines the number of maximum open connections.
|
||||||
max-open-connections = {{ .API.MaxOpenConnections }}
|
max-open-connections = {{ .API.MaxOpenConnections }}
|
||||||
|
|
||||||
# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds)
|
# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds).
|
||||||
rpc-read-timeout = {{ .API.RPCReadTimeout }}
|
rpc-read-timeout = {{ .API.RPCReadTimeout }}
|
||||||
|
|
||||||
# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds)
|
# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds).
|
||||||
rpc-write-timeout = {{ .API.RPCWriteTimeout }}
|
rpc-write-timeout = {{ .API.RPCWriteTimeout }}
|
||||||
|
|
||||||
# RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes)
|
# RPCMaxBodyBytes defines the Tendermint maximum response body (in bytes).
|
||||||
rpc-max-body-bytes = {{ .API.RPCMaxBodyBytes }}
|
rpc-max-body-bytes = {{ .API.RPCMaxBodyBytes }}
|
||||||
|
|
||||||
# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk)
|
# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk).
|
||||||
enabled-unsafe-cors = {{ .API.EnableUnsafeCORS }}
|
enabled-unsafe-cors = {{ .API.EnableUnsafeCORS }}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
### gRPC Configuration ###
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
[grpc]
|
||||||
|
|
||||||
|
# Enable defines if the gRPC server should be enabled.
|
||||||
|
enable = {{ .GRPC.Enable }}
|
||||||
|
|
||||||
|
# Address defines the gRPC server address to bind to.
|
||||||
|
address = "{{ .GRPC.Address }}"
|
||||||
`
|
`
|
||||||
|
|
||||||
var configTemplate *template.Template
|
var configTemplate *template.Template
|
||||||
|
|
|
@ -68,7 +68,7 @@ func (s *IntegrationTestSuite) TestGRPC() {
|
||||||
*bankRes.GetBalance(),
|
*bankRes.GetBalance(),
|
||||||
)
|
)
|
||||||
blockHeight := header.Get(servergrpc.GRPCBlockHeightHeader)
|
blockHeight := header.Get(servergrpc.GRPCBlockHeightHeader)
|
||||||
s.Require().NotEqual("", blockHeight[0]) // Should contain the block height
|
s.Require().NotEmpty(blockHeight[0]) // Should contain the block height
|
||||||
|
|
||||||
// Request metadata should work
|
// Request metadata should work
|
||||||
bankRes, err = bankClient.Balance(
|
bankRes, err = bankClient.Balance(
|
||||||
|
|
|
@ -50,6 +50,12 @@ const (
|
||||||
FlagPruningInterval = "pruning-interval"
|
FlagPruningInterval = "pruning-interval"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// GRPC-related flags.
|
||||||
|
const (
|
||||||
|
flagGRPCEnable = "grpc.enable"
|
||||||
|
flagGRPCAddress = "grpc.address"
|
||||||
|
)
|
||||||
|
|
||||||
// StartCmd runs the service passed in, either stand-alone or in-process with
|
// StartCmd runs the service passed in, either stand-alone or in-process with
|
||||||
// Tendermint.
|
// Tendermint.
|
||||||
func StartCmd(appCreator types.AppCreator, defaultNodeHome string) *cobra.Command {
|
func StartCmd(appCreator types.AppCreator, defaultNodeHome string) *cobra.Command {
|
||||||
|
@ -123,6 +129,9 @@ which accepts a path for the resulting pprof file.
|
||||||
cmd.Flags().Uint64(FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')")
|
cmd.Flags().Uint64(FlagPruningInterval, 0, "Height interval at which pruned heights are removed from disk (ignored if pruning is not 'custom')")
|
||||||
cmd.Flags().Uint(FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks")
|
cmd.Flags().Uint(FlagInvCheckPeriod, 0, "Assert registered invariants every N blocks")
|
||||||
|
|
||||||
|
cmd.Flags().Bool(flagGRPCEnable, true, "Define if the gRPC server should be enabled")
|
||||||
|
cmd.Flags().String(flagGRPCAddress, config.DefaultGRPCAddress, "the gRPC server address to listen on")
|
||||||
|
|
||||||
// add support for all Tendermint-specific command line options
|
// add support for all Tendermint-specific command line options
|
||||||
tcmd.AddNodeFlags(cmd)
|
tcmd.AddNodeFlags(cmd)
|
||||||
return cmd
|
return cmd
|
||||||
|
|
|
@ -193,10 +193,11 @@ func New(t *testing.T, cfg Config) *Network {
|
||||||
tmCfg := ctx.Config
|
tmCfg := ctx.Config
|
||||||
tmCfg.Consensus.TimeoutCommit = cfg.TimeoutCommit
|
tmCfg.Consensus.TimeoutCommit = cfg.TimeoutCommit
|
||||||
|
|
||||||
// Only allow the first validator to expose an RPC and API server/client
|
// Only allow the first validator to expose an RPC, API and gRPC
|
||||||
// due to Tendermint in-process constraints.
|
// server/client due to Tendermint in-process constraints.
|
||||||
apiAddr := ""
|
apiAddr := ""
|
||||||
tmCfg.RPC.ListenAddress = ""
|
tmCfg.RPC.ListenAddress = ""
|
||||||
|
appCfg.GRPC.Enable = false
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
apiListenAddr, _, err := server.FreeTCPAddr()
|
apiListenAddr, _, err := server.FreeTCPAddr()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -439,6 +440,10 @@ func (n *Network) Cleanup() {
|
||||||
if v.api != nil {
|
if v.api != nil {
|
||||||
_ = v.api.Close()
|
_ = v.api.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v.grpc != nil {
|
||||||
|
v.grpc.Stop()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if n.Config.CleanupDir {
|
if n.Config.CleanupDir {
|
||||||
|
|
Loading…
Reference in New Issue