[#798] neofs-node/config: Add persistent_state section

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
support/v0.27
Alex Vanin 2021-09-06 16:03:43 +03:00 committed by Alex Vanin
parent 005f54e61e
commit cdb3b71070
5 changed files with 43 additions and 2 deletions

View File

@ -11,10 +11,20 @@ import (
utilConfig "github.com/nspcc-dev/neofs-node/pkg/util/config" utilConfig "github.com/nspcc-dev/neofs-node/pkg/util/config"
) )
// PersistentStateConfig is a wrapper over "persistent_state" config section
// which provides access to persistent state storage configuration of node.
type PersistentStateConfig struct {
cfg *config.Config
}
const ( const (
subsection = "node" subsection = "node"
persistentStateSubsection = "persistent_state"
attributePrefix = "attribute" attributePrefix = "attribute"
// PersistentStatePathDefault is a default path for persistent state file.
PersistentStatePathDefault = ".neofs-storage-state"
) )
// Key returns value of "key" config parameter // Key returns value of "key" config parameter
@ -115,3 +125,23 @@ func Attributes(c *config.Config) (attrs []string) {
func Relay(c *config.Config) bool { func Relay(c *config.Config) bool {
return config.BoolSafe(c.Sub(subsection), "relay") return config.BoolSafe(c.Sub(subsection), "relay")
} }
// PersistentState returns structure that provides access to "persistent_state"
// subsection of "node" section.
func PersistentState(c *config.Config) PersistentStateConfig {
return PersistentStateConfig{
c.Sub(subsection).Sub(persistentStateSubsection),
}
}
// Path returns value of "path" config parameter.
//
// Returns PersistentStatePathDefault if value is not a non-empty string.
func (p PersistentStateConfig) Path() string {
v := config.String(p.cfg, "path")
if v != "" {
return v
}
return PersistentStatePathDefault
}

View File

@ -30,9 +30,11 @@ func TestNodeSection(t *testing.T) {
attribute := Attributes(empty) attribute := Attributes(empty)
relay := Relay(empty) relay := Relay(empty)
persistatePath := PersistentState(empty).Path()
require.Empty(t, attribute) require.Empty(t, attribute)
require.Equal(t, false, relay) require.Equal(t, false, relay)
require.Equal(t, PersistentStatePathDefault, persistatePath)
}) })
const path = "../../../../config/example/node" const path = "../../../../config/example/node"
@ -43,6 +45,7 @@ func TestNodeSection(t *testing.T) {
attributes := Attributes(c) attributes := Attributes(c)
relay := Relay(c) relay := Relay(c)
wKey := Wallet(c) wKey := Wallet(c)
persistatePath := PersistentState(c).Path()
expectedAddr := []struct { expectedAddr := []struct {
str string str string
@ -94,6 +97,8 @@ func TestNodeSection(t *testing.T) {
require.Equal(t, require.Equal(t,
config.StringSafe(c.Sub("node").Sub("wallet"), "address"), config.StringSafe(c.Sub("node").Sub("wallet"), "address"),
address.Uint160ToString(wKey.GetScriptHash())) address.Uint160ToString(wKey.GetScriptHash()))
require.Equal(t, "/state", persistatePath)
} }
configtest.ForEachFileType(path, fileConfigTest) configtest.ForEachFileType(path, fileConfigTest)

View File

@ -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_0=Price:11
NEOFS_NODE_ATTRIBUTE_1=UN-LOCODE:RU MSK NEOFS_NODE_ATTRIBUTE_1=UN-LOCODE:RU MSK
NEOFS_NODE_RELAY=true NEOFS_NODE_RELAY=true
NEOFS_NODE_PERSISTENT_STATE_PATH=/state
# gRPC section # gRPC section
NEOFS_GRPC_NUM=2 NEOFS_GRPC_NUM=2

View File

@ -25,7 +25,10 @@
], ],
"attribute_0": "Price:11", "attribute_0": "Price:11",
"attribute_1": "UN-LOCODE:RU MSK", "attribute_1": "UN-LOCODE:RU MSK",
"relay": true "relay": true,
"persistent_state": {
"path": "/state"
}
}, },
"grpc": { "grpc": {
"num": 2, "num": 2,

View File

@ -23,6 +23,8 @@ node:
attribute_0: "Price:11" attribute_0: "Price:11"
attribute_1: UN-LOCODE:RU MSK attribute_1: UN-LOCODE:RU MSK
relay: true relay: true
persistent_state:
path: /state
grpc: grpc:
num: 2 num: 2