Skip to content

Commit

Permalink
Add runtime mode flag that accepts v1-only (default), v2-only, v1-and-v2
Browse files Browse the repository at this point in the history
Remove enableV2 flag
Remove disableV1 flag
Lint
  • Loading branch information
pschork committed Feb 3, 2025
1 parent 1544c54 commit b6894e5
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 34 deletions.
39 changes: 23 additions & 16 deletions node/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@ type Config struct {
LoggerConfig common.LoggerConfig
EncoderConfig kzg.KzgConfig

EnableV2 bool
DisableV1 bool
EnableV1 bool
EnableV2 bool

OnchainStateRefreshInterval time.Duration
ChunkDownloadTimeout time.Duration
GRPCMsgSizeLimitV2 int
Expand Down Expand Up @@ -186,14 +187,14 @@ func NewConfig(ctx *cli.Context) (*Config, error) {
blsSignerAPIKey := ctx.GlobalString(flags.BLSSignerAPIKeyFlag.Name)

if blsRemoteSignerEnabled && (blsRemoteSignerUrl == "" || blsPublicKeyHex == "") {
return nil, fmt.Errorf("BLS remote signer URL and Public Key Hex is required if BLS remote signer is enabled")
return nil, errors.New("BLS remote signer URL and Public Key Hex is required if BLS remote signer is enabled")
}
if !blsRemoteSignerEnabled && (blsKeyFilePath == "" || blsKeyPassword == "") {
return nil, fmt.Errorf("BLS key file and password is required if BLS remote signer is disabled")
return nil, errors.New("BLS key file and password is required if BLS remote signer is disabled")
}

if blsRemoteSignerEnabled && blsSignerAPIKey == "" {
return nil, fmt.Errorf("BLS signer API key is required if BLS remote signer is enabled")
return nil, errors.New("BLS signer API key is required if BLS remote signer is enabled")
}

if blsRemoteSignerEnabled {
Expand Down Expand Up @@ -233,8 +234,19 @@ func NewConfig(ctx *cli.Context) (*Config, error) {
return nil, err
}

runtimeMode := ctx.GlobalString(flags.RuntimeModeFlag.Name)
switch runtimeMode {
case flags.ModeV1Only, flags.ModeV2Only, flags.ModeV1AndV2:
// Valid mode
default:
return nil, fmt.Errorf("invalid runtime mode %q: must be one of %s, %s, or %s", runtimeMode, flags.ModeV1Only, flags.ModeV2Only, flags.ModeV1AndV2)
}

// Convert mode to v1/v2 enabled flags
v1Enabled := runtimeMode == flags.ModeV1Only || runtimeMode == flags.ModeV1AndV2
v2Enabled := runtimeMode == flags.ModeV2Only || runtimeMode == flags.ModeV1AndV2

// v1 ports must be defined and valid even if v1 is disabled
v1Disabled := ctx.GlobalBool(flags.DisableV1Flag.Name)
dispersalPort := ctx.GlobalString(flags.DispersalPortFlag.Name)
err = core.ValidatePort(dispersalPort)
if err != nil {
Expand All @@ -246,26 +258,21 @@ func NewConfig(ctx *cli.Context) (*Config, error) {
return nil, fmt.Errorf("invalid v1 retrieval port: %s", retrievalPort)
}

v2Enabled := ctx.GlobalBool(flags.EnableV2Flag.Name)
v2DispersalPort := ctx.GlobalString(flags.V2DispersalPortFlag.Name)
v2RetrievalPort := ctx.GlobalString(flags.V2RetrievalPortFlag.Name)
if v2Enabled {
if v2DispersalPort == "" {
return nil, fmt.Errorf("v2 dispersal port (NODE_V2_DISPERSAL_PORT) must be defined when v2 is enabled")
} else if core.ValidatePort(v2DispersalPort) != nil {
return nil, errors.New("v2 dispersal port (NODE_V2_DISPERSAL_PORT) must be defined when v2 is enabled")
} else if err := core.ValidatePort(v2DispersalPort); err != nil {
return nil, fmt.Errorf("invalid v2 dispersal port: %s", v2DispersalPort)
}
if v2RetrievalPort == "" {
return nil, fmt.Errorf("v2 retrieval port (NODE_V2_RETRIEVAL_PORT) must be defined when v2 is enabled")
} else if core.ValidatePort(v2RetrievalPort) != nil {
return nil, errors.New("v2 retrieval port (NODE_V2_RETRIEVAL_PORT) must be defined when v2 is enabled")
} else if err := core.ValidatePort(v2RetrievalPort); err != nil {
return nil, fmt.Errorf("invalid v2 retrieval port: %s", v2RetrievalPort)
}
}

if v1Disabled && !v2Enabled {
return nil, fmt.Errorf("invalid configuration: both v1 and v2 are disabled")
}

return &Config{
Hostname: ctx.GlobalString(flags.HostnameFlag.Name),
DispersalPort: dispersalPort,
Expand Down Expand Up @@ -306,7 +313,7 @@ func NewConfig(ctx *cli.Context) (*Config, error) {
DisableNodeInfoResources: ctx.GlobalBool(flags.DisableNodeInfoResourcesFlag.Name),
BlsSignerConfig: blsSignerConfig,
EnableV2: v2Enabled,
DisableV1: v1Disabled,
EnableV1: v1Enabled,
OnchainStateRefreshInterval: ctx.GlobalDuration(flags.OnchainStateRefreshIntervalFlag.Name),
ChunkDownloadTimeout: ctx.GlobalDuration(flags.ChunkDownloadTimeoutFlag.Name),
GRPCMsgSizeLimitV2: ctx.GlobalInt(flags.GRPCMsgSizeLimitV2Flag.Name),
Expand Down
29 changes: 15 additions & 14 deletions node/flags/flags.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package flags

import (
"fmt"
"time"

"github.com/docker/go-units"
Expand All @@ -14,6 +15,11 @@ import (
const (
FlagPrefix = "node"
EnvVarPrefix = "NODE"

// Node mode values
ModeV1Only = "v1-only"
ModeV2Only = "v2-only"
ModeV1AndV2 = "v1-and-v2"
)

var (
Expand Down Expand Up @@ -232,18 +238,6 @@ var (
Required: false,
EnvVar: common.PrefixEnvVar(EnvVarPrefix, "ENABLE_GNARK_BUNDLE_ENCODING"),
}
EnableV2Flag = cli.BoolFlag{
Name: "enable-v2",
Usage: "Enable V2 features (default=false)",
Required: false,
EnvVar: common.PrefixEnvVar(EnvVarPrefix, "ENABLE_V2"),
}
DisableV1Flag = cli.BoolFlag{
Name: "disable-v1",
Usage: "Disable V1 features (default=false, NOTE: your operator can be ejected if used incorrectly)",
Required: false,
EnvVar: common.PrefixEnvVar(EnvVarPrefix, "DISABLE_V1"),
}
OnchainStateRefreshIntervalFlag = cli.DurationFlag{
Name: common.PrefixFlag(FlagPrefix, "onchain-state-refresh-interval"),
Usage: "The interval at which to refresh the onchain state. This flag is only relevant in v2 (default: 1h)",
Expand Down Expand Up @@ -402,6 +396,14 @@ var (
Required: false,
EnvVar: common.PrefixEnvVar(EnvVarPrefix, "ENABLE_PPROF"),
}

RuntimeModeFlag = cli.StringFlag{
Name: common.PrefixFlag(FlagPrefix, "runtime-mode"),
Usage: fmt.Sprintf("Node runtime mode (%s (default), %s, or %s)", ModeV1Only, ModeV2Only, ModeV1AndV2),
Required: false,
Value: ModeV1Only,
EnvVar: common.PrefixEnvVar(EnvVarPrefix, "RUNTIME_MODE"),
}
)

var requiredFlags = []cli.Flag{
Expand Down Expand Up @@ -449,8 +451,6 @@ var optionalFlags = []cli.Flag{
BLSPublicKeyHexFlag,
BLSSignerCertFileFlag,
BLSSignerAPIKeyFlag,
EnableV2Flag,
DisableV1Flag,
V2DispersalPortFlag,
V2RetrievalPortFlag,
OnchainStateRefreshIntervalFlag,
Expand All @@ -463,6 +463,7 @@ var optionalFlags = []cli.Flag{
DisperserKeyTimeoutFlag,
DispersalAuthenticationTimeoutFlag,
RelayMaxGRPCMessageSizeFlag,
RuntimeModeFlag,
}

func init() {
Expand Down
6 changes: 3 additions & 3 deletions node/grpc/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import (
const localhost = "0.0.0.0"

func RunServers(serverV1 *Server, serverV2 *ServerV2, config *node.Config, logger logging.Logger) error {
if serverV1 == nil && !config.DisableV1 {
if config.EnableV1 && serverV1 == nil {
return errors.New("node v1 server is not configured")
}
if config.EnableV2 && serverV2 == nil {
Expand All @@ -26,7 +26,7 @@ func RunServers(serverV1 *Server, serverV2 *ServerV2, config *node.Config, logge

// V1 dispersal service
go func() {
if config.DisableV1 {
if !config.EnableV1 {
logger.Warn("v1 is disabled, skipping v1 dispersal server startup")
return
}
Expand Down Expand Up @@ -88,7 +88,7 @@ func RunServers(serverV1 *Server, serverV2 *ServerV2, config *node.Config, logge

// v1 Retrieval service
go func() {
if config.DisableV1 {
if !config.EnableV1 {
logger.Warn("v1 is disabled, skipping v1 retrieval server startup")
return
}
Expand Down
2 changes: 1 addition & 1 deletion node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ func (n *Node) Start(ctx context.Context) error {
n.Logger.Info("Enabled node api", "port", n.Config.NodeApiPort)
}

if !n.Config.DisableV1 {
if n.Config.EnableV1 {
go n.expireLoop()
go n.checkNodeReachability(v1CheckPath)
}
Expand Down

0 comments on commit b6894e5

Please sign in to comment.