From 9cda3121abaec67d24d424f0a4ff26a90c9d07f6 Mon Sep 17 00:00:00 2001 From: Pavel Karpy Date: Mon, 21 Mar 2022 15:22:07 +0300 Subject: [PATCH] [#1255] node/config: Add persistent storage Signed-off-by: Pavel Karpy --- cmd/neofs-node/config/node/config.go | 28 ++++++++++++++++++++--- cmd/neofs-node/config/node/config_test.go | 4 ++++ config/example/node.env | 1 + config/example/node.json | 3 +++ config/example/node.yaml | 6 +++-- 5 files changed, 37 insertions(+), 5 deletions(-) diff --git a/cmd/neofs-node/config/node/config.go b/cmd/neofs-node/config/node/config.go index 374087431..75a69ef02 100644 --- a/cmd/neofs-node/config/node/config.go +++ b/cmd/neofs-node/config/node/config.go @@ -12,6 +12,12 @@ import ( utilConfig "github.com/nspcc-dev/neofs-node/pkg/util/config" ) +// PersistentSessionsConfig is a wrapper over "persistent_sessions" config section +// which provides access to persistent session tokens storage configuration of node. +type PersistentSessionsConfig struct { + cfg *config.Config +} + // PersistentStateConfig is a wrapper over "persistent_state" config section // which provides access to persistent state storage configuration of node. type PersistentStateConfig struct { @@ -25,9 +31,10 @@ type NotificationConfig struct { } const ( - subsection = "node" - persistentStateSubsection = "persistent_state" - notificationSubsection = "notification" + subsection = "node" + persistentSessionsSubsection = "persistent_sessions" + persistentStateSubsection = "persistent_state" + notificationSubsection = "notification" attributePrefix = "attribute" @@ -137,6 +144,21 @@ func Relay(c *config.Config) bool { return config.BoolSafe(c.Sub(subsection), "relay") } +// PersistentSessions returns structure that provides access to "persistent_sessions" +// subsection of "node" section. +func PersistentSessions(c *config.Config) PersistentSessionsConfig { + return PersistentSessionsConfig{ + c.Sub(subsection).Sub(persistentSessionsSubsection), + } +} + +// Path returns value of "path" config parameter. +// +// Returns PersistentStatePathDefault if value is not a non-empty string. +func (p PersistentSessionsConfig) Path() string { + return config.String(p.cfg, "path") +} + // PersistentState returns structure that provides access to "persistent_state" // subsection of "node" section. func PersistentState(c *config.Config) PersistentStateConfig { diff --git a/cmd/neofs-node/config/node/config_test.go b/cmd/neofs-node/config/node/config_test.go index 805ab790b..e83592aa0 100644 --- a/cmd/neofs-node/config/node/config_test.go +++ b/cmd/neofs-node/config/node/config_test.go @@ -31,6 +31,7 @@ func TestNodeSection(t *testing.T) { attribute := Attributes(empty) relay := Relay(empty) + persisessionsPath := PersistentSessions(empty).Path() persistatePath := PersistentState(empty).Path() notificationDefaultEnabled := Notification(empty).Enabled() notificationDefaultEndpoint := Notification(empty).Endpoint() @@ -42,6 +43,7 @@ func TestNodeSection(t *testing.T) { require.Empty(t, attribute) require.Equal(t, false, relay) + require.Equal(t, "", persisessionsPath) require.Equal(t, PersistentStatePathDefault, persistatePath) require.Equal(t, false, notificationDefaultEnabled) require.Equal(t, "", notificationDefaultEndpoint) @@ -74,6 +76,7 @@ func TestNodeSection(t *testing.T) { attributes := Attributes(c) relay := Relay(c) wKey := Wallet(c) + persisessionsPath := PersistentSessions(c).Path() persistatePath := PersistentState(c).Path() notificationEnabled := Notification(c).Enabled() notificationEndpoint := Notification(c).Endpoint() @@ -134,6 +137,7 @@ func TestNodeSection(t *testing.T) { config.StringSafe(c.Sub("node").Sub("wallet"), "address"), address.Uint160ToString(wKey.GetScriptHash())) + require.Equal(t, "/sessions", persisessionsPath) require.Equal(t, "/state", persistatePath) require.Equal(t, true, notificationEnabled) require.Equal(t, "tls://localhost:4222", notificationEndpoint) diff --git a/config/example/node.env b/config/example/node.env index 06ef1fbad..f6b80ec62 100644 --- a/config/example/node.env +++ b/config/example/node.env @@ -15,6 +15,7 @@ NEOFS_NODE_ADDRESSES="s01.neofs.devenv:8080 /dns4/s02.neofs.devenv/tcp/8081 grpc NEOFS_NODE_ATTRIBUTE_0=Price:11 NEOFS_NODE_ATTRIBUTE_1="UN-LOCODE:RU MSK" NEOFS_NODE_RELAY=true +NEOFS_NODE_PERSISTENT_SESSIONS_PATH=/sessions NEOFS_NODE_PERSISTENT_STATE_PATH=/state NEOFS_NODE_SUBNET_EXIT_ZERO=true NEOFS_NODE_SUBNET_ENTRIES=123 456 789 diff --git a/config/example/node.json b/config/example/node.json index 18b4e003c..2ff17e937 100644 --- a/config/example/node.json +++ b/config/example/node.json @@ -26,6 +26,9 @@ "attribute_0": "Price:11", "attribute_1": "UN-LOCODE:RU MSK", "relay": true, + "persistent_sessions": { + "path": "/sessions" + }, "persistent_state": { "path": "/state" }, diff --git a/config/example/node.yaml b/config/example/node.yaml index 1327bb897..a0f2a74b0 100644 --- a/config/example/node.yaml +++ b/config/example/node.yaml @@ -23,8 +23,10 @@ node: attribute_0: "Price:11" attribute_1: UN-LOCODE:RU MSK relay: true # start Storage node in relay mode without bootstrapping into the Network map - persistent_state: # path to persistent state file of Storage node - path: /state + persistent_sessions: + path: /sessions # path to persistent session tokens file of Storage node + persistent_state: + path: /state # path to persistent state file of Storage node subnet: exit_zero: true # toggle entrance to zero subnet (overrides corresponding attribute and occurrence in `entries`) entries: # list of IDs of subnets to enter in a text format of NeoFS API protocol (overrides corresponding attributes)