From a3734678a15b83fab163b20e2bf77969a1c760c7 Mon Sep 17 00:00:00 2001 From: Calin Martinconi Date: Tue, 14 Apr 2026 11:53:49 +0300 Subject: [PATCH] refactor: replace full-node flag with explicit node-mode config --- config/config.yaml | 2 +- config/light-node.yaml | 2 +- config/local.yaml | 7 ++++--- config/public-testnet.yaml | 2 +- config/staging.yaml | 2 +- config/testnet-bee-playground.yaml | 2 +- pkg/config/bee.go | 3 ++- pkg/orchestration/k8s/cluster.go | 8 ++++---- pkg/orchestration/k8s/helpers.go | 1 + pkg/orchestration/node.go | 20 +++++++++++++++++++- 10 files changed, 35 insertions(+), 14 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index ba5820aaa..e8d2b07ce 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -103,7 +103,7 @@ bee-configs: db-disable-seeks-compaction: false db-open-files-limit: 200 db-write-buffer-size: 33554432 - full-node: true + node-mode: full mainnet: false nat-addr: "" network-id: 12345 diff --git a/config/light-node.yaml b/config/light-node.yaml index 3722e9791..2b5e6786a 100644 --- a/config/light-node.yaml +++ b/config/light-node.yaml @@ -2,7 +2,7 @@ bee-configs: light-node: _inherit: default - full-node: false + node-mode: light # node groups for light nodes node-groups: diff --git a/config/local.yaml b/config/local.yaml index 13e992ba8..c5fe8b639 100644 --- a/config/local.yaml +++ b/config/local.yaml @@ -166,7 +166,7 @@ bee-configs: db-disable-seeks-compaction: false db-open-files-limit: 200 db-write-buffer-size: 33554432 - full-node: true + node-mode: full mainnet: false nat-addr: "" nat-wss-addr: "" @@ -206,9 +206,10 @@ bee-configs: p2p-wss-enable: true bee-local-ultralight-autotls: _inherit: "bee-local-dns" - full-node: false + node-mode: ultra-light p2p-wss-enable: true blockchain-rpc-endpoint: # ultralight nodes don't connect to the blockchain + swap-enable: false bootnode-local: _inherit: "bee-local" bootnode-mode: true @@ -222,7 +223,7 @@ bee-configs: bee-local-light: _inherit: "bee-local" bootnode: /dnsaddr/localhost - full-node: false + node-mode: light bee-local-gc: _inherit: "bee-local" cache-capacity: 10 diff --git a/config/public-testnet.yaml b/config/public-testnet.yaml index ebd787358..b5b4106dc 100644 --- a/config/public-testnet.yaml +++ b/config/public-testnet.yaml @@ -47,7 +47,7 @@ bee-configs: sepolia: _inherit: "" bootnodes: "/dnsaddr/testnet.ethswarm.org" - full-node: true + node-mode: full checks: pt-pingpong: diff --git a/config/staging.yaml b/config/staging.yaml index 9345579ae..447ec5ea6 100644 --- a/config/staging.yaml +++ b/config/staging.yaml @@ -35,7 +35,7 @@ bee-configs: api-addr: ":1633" blockchain-rpc-endpoint: http://rpc-sepolia-haproxy.default.svc.swarm1.local bootnodes: /dnsaddr/testnet.ethswarm.org - full-node: true + node-mode: full mainnet: false network-id: 10 p2p-addr: ":1634" diff --git a/config/testnet-bee-playground.yaml b/config/testnet-bee-playground.yaml index 4ef4f645a..e3ed3592b 100644 --- a/config/testnet-bee-playground.yaml +++ b/config/testnet-bee-playground.yaml @@ -54,7 +54,7 @@ bee-configs: db-disable-seeks-compaction: true db-open-files-limit: 200 db-write-buffer-size: 33554432 - full-node: true + node-mode: full mainnet: false nat-addr: "" network-id: 5 diff --git a/pkg/config/bee.go b/pkg/config/bee.go index 343664794..d57de6ac4 100644 --- a/pkg/config/bee.go +++ b/pkg/config/bee.go @@ -33,7 +33,8 @@ type BeeConfig struct { DbDisableSeeksCompaction *bool `yaml:"db-disable-seeks-compaction"` DbOpenFilesLimit *int `yaml:"db-open-files-limit"` DbWriteBufferSize *int `yaml:"db-write-buffer-size"` - FullNode *bool `yaml:"full-node"` + FullNode *bool `yaml:"full-node"` // Deprecated: use NodeMode + NodeMode *string `yaml:"node-mode"` Mainnet *bool `yaml:"mainnet"` NATAddr *string `yaml:"nat-addr"` NATWSSAddr *string `yaml:"nat-wss-addr"` diff --git a/pkg/orchestration/k8s/cluster.go b/pkg/orchestration/k8s/cluster.go index 1fbffc9ce..7f068e71c 100644 --- a/pkg/orchestration/k8s/cluster.go +++ b/pkg/orchestration/k8s/cluster.go @@ -226,7 +226,7 @@ func (c *Cluster) NodeNames() (names []string) { // LightNodeNames returns a list of light node names func (c *Cluster) LightNodeNames() (names []string) { for name, node := range c.Nodes() { - if !node.Config().FullNode { + if node.Config().IsLightNode() { names = append(names, name) } } @@ -237,7 +237,7 @@ func (c *Cluster) LightNodeNames() (names []string) { func (c *Cluster) FullNodeNames() (names []string) { for name, node := range c.Nodes() { cfg := node.Config() - if cfg.FullNode && !cfg.BootnodeMode { + if cfg.IsFullNode() && !cfg.BootnodeMode { names = append(names, name) } } @@ -249,7 +249,7 @@ func (c *Cluster) ShuffledFullNodeClients(ctx context.Context, r *rand.Rand) (or var res orchestration.ClientList for _, node := range c.Nodes() { cfg := node.Config() - if cfg.FullNode && !cfg.BootnodeMode { + if cfg.IsFullNode() && !cfg.BootnodeMode { res = append(res, node.Client()) } } @@ -464,7 +464,7 @@ func (c *Cluster) ClosestFullNodeClient(ctx context.Context, s *bee.Client) (*be } cfg := node.Config() // closet peer is not a full node. Check other peers in the same bin - if !cfg.FullNode || cfg.BootnodeMode { + if !cfg.IsFullNode() || cfg.BootnodeMode { skipList = append(skipList, addr) b-- continue diff --git a/pkg/orchestration/k8s/helpers.go b/pkg/orchestration/k8s/helpers.go index e763be697..8ffd4b9f9 100644 --- a/pkg/orchestration/k8s/helpers.go +++ b/pkg/orchestration/k8s/helpers.go @@ -33,6 +33,7 @@ db-disable-seeks-compaction: {{.DbDisableSeeksCompaction}} db-open-files-limit: {{.DbOpenFilesLimit}} db-write-buffer-size: {{.DbWriteBufferSize}} full-node: {{.FullNode}} +node-mode: {{.NodeMode}} mainnet: {{.Mainnet}} nat-addr: {{.NATAddr}} nat-wss-addr: {{.NATWSSAddr}} diff --git a/pkg/orchestration/node.go b/pkg/orchestration/node.go index 20bdce748..63bc841a6 100644 --- a/pkg/orchestration/node.go +++ b/pkg/orchestration/node.go @@ -92,7 +92,8 @@ type Config struct { DbDisableSeeksCompaction bool // disables DB compactions triggered by seeks DbOpenFilesLimit int // number of open files allowed by database DbWriteBufferSize int // size of the database write buffer in bytes - FullNode bool // cause the node to start in full mode + FullNode bool // cause the node to start in full mode (deprecated: use NodeMode) + NodeMode string // node operational mode: full, light, or ultra-light Mainnet bool // enable mainnet NATAddr string // NAT exposed address NATWSSAddr string // NAT exposed secure WebSocket address @@ -123,3 +124,20 @@ type Config struct { WelcomeMessage string // send a welcome message string during handshakes WithdrawAddress string // allowed addresses for wallet withdrawal } + +// IsFullNode reports whether the node is configured as a full node. +// It checks NodeMode first; falls back to the deprecated FullNode bool. +func (c Config) IsFullNode() bool { + if c.NodeMode != "" { + return c.NodeMode == "full" + } + return c.FullNode +} + +// IsLightNode reports whether the node is configured as a light node. +func (c Config) IsLightNode() bool { + if c.NodeMode != "" { + return c.NodeMode == "light" + } + return !c.FullNode +}