forked from TrueCloudLab/frostfs-api-go
[#339] netmap: Support protocol changes related to NetworkInfo
Recompile NeoFS API protobuf files. Implement `NetworkParameter` and `NetworkConfig` types. Expand `NetworkInfo` type with MillisecondsPerBlock and `NetworkConfig`. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
520a065dd2
commit
010b1b0118
11 changed files with 682 additions and 7 deletions
|
@ -19,7 +19,9 @@ func NewNetworkInfoFromV2(iV2 *netmap.NetworkInfo) *NetworkInfo {
|
||||||
//
|
//
|
||||||
// Defaults:
|
// Defaults:
|
||||||
// - curEpoch: 0;
|
// - curEpoch: 0;
|
||||||
// - magicNum: 0.
|
// - magicNum: 0;
|
||||||
|
// - msPerBlock: 0;
|
||||||
|
// - network config: nil.
|
||||||
func NewNetworkInfo() *NetworkInfo {
|
func NewNetworkInfo() *NetworkInfo {
|
||||||
return NewNetworkInfoFromV2(new(netmap.NetworkInfo))
|
return NewNetworkInfoFromV2(new(netmap.NetworkInfo))
|
||||||
}
|
}
|
||||||
|
@ -55,6 +57,32 @@ func (i *NetworkInfo) SetMagicNumber(epoch uint64) {
|
||||||
SetMagicNumber(epoch)
|
SetMagicNumber(epoch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MsPerBlock returns MillisecondsPerBlock network parameter.
|
||||||
|
func (i *NetworkInfo) MsPerBlock() int64 {
|
||||||
|
return (*netmap.NetworkInfo)(i).
|
||||||
|
GetMsPerBlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMsPerBlock sets MillisecondsPerBlock network parameter.
|
||||||
|
func (i *NetworkInfo) SetMsPerBlock(v int64) {
|
||||||
|
(*netmap.NetworkInfo)(i).
|
||||||
|
SetMsPerBlock(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkConfig returns NeoFS network configuration.
|
||||||
|
func (i *NetworkInfo) NetworkConfig() *NetworkConfig {
|
||||||
|
return NewNetworkConfigFromV2(
|
||||||
|
(*netmap.NetworkInfo)(i).
|
||||||
|
GetNetworkConfig(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNetworkConfig sets NeoFS network configuration.
|
||||||
|
func (i *NetworkInfo) SetNetworkConfig(v *NetworkConfig) {
|
||||||
|
(*netmap.NetworkInfo)(i).
|
||||||
|
SetNetworkConfig(v.ToV2())
|
||||||
|
}
|
||||||
|
|
||||||
// Marshal marshals NetworkInfo into a protobuf binary form.
|
// Marshal marshals NetworkInfo into a protobuf binary form.
|
||||||
//
|
//
|
||||||
// Buffer is allocated when the argument is empty.
|
// Buffer is allocated when the argument is empty.
|
||||||
|
@ -86,3 +114,112 @@ func (i *NetworkInfo) UnmarshalJSON(data []byte) error {
|
||||||
return (*netmap.NetworkInfo)(i).
|
return (*netmap.NetworkInfo)(i).
|
||||||
UnmarshalJSON(data)
|
UnmarshalJSON(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetworkParameter represents v2-compatible NeoFS network parameter.
|
||||||
|
type NetworkParameter netmap.NetworkParameter
|
||||||
|
|
||||||
|
// NewNetworkParameterFromV2 wraps v2 NetworkParameter message to NetworkParameter.
|
||||||
|
//
|
||||||
|
// Nil netmap.NetworkParameter converts to nil.
|
||||||
|
func NewNetworkParameterFromV2(pv2 *netmap.NetworkParameter) *NetworkParameter {
|
||||||
|
return (*NetworkParameter)(pv2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewNetworkParameter creates and initializes blank NetworkParameter.
|
||||||
|
//
|
||||||
|
// Defaults:
|
||||||
|
// - key: nil;
|
||||||
|
// - value: nil.
|
||||||
|
func NewNetworkParameter() *NetworkParameter {
|
||||||
|
return NewNetworkParameterFromV2(new(netmap.NetworkParameter))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToV2 converts NetworkParameter to v2 NetworkParameter.
|
||||||
|
//
|
||||||
|
// Nil NetworkParameter converts to nil.
|
||||||
|
func (x *NetworkParameter) ToV2() *netmap.NetworkParameter {
|
||||||
|
return (*netmap.NetworkParameter)(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key returns key to network parameter.
|
||||||
|
func (x *NetworkParameter) Key() []byte {
|
||||||
|
return (*netmap.NetworkParameter)(x).
|
||||||
|
GetKey()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKey sets key to the network parameter.
|
||||||
|
func (x *NetworkParameter) SetKey(key []byte) {
|
||||||
|
(*netmap.NetworkParameter)(x).
|
||||||
|
SetKey(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns value of the network parameter.
|
||||||
|
func (x *NetworkParameter) Value() []byte {
|
||||||
|
return (*netmap.NetworkParameter)(x).
|
||||||
|
GetValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets value of the network parameter.
|
||||||
|
func (x *NetworkParameter) SetValue(val []byte) {
|
||||||
|
(*netmap.NetworkParameter)(x).
|
||||||
|
SetValue(val)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkConfig represents v2-compatible NeoFS network configuration.
|
||||||
|
type NetworkConfig netmap.NetworkConfig
|
||||||
|
|
||||||
|
// NewNetworkConfigFromV2 wraps v2 NetworkConfig message to NetworkConfig.
|
||||||
|
//
|
||||||
|
// Nil netmap.NetworkConfig converts to nil.
|
||||||
|
func NewNetworkConfigFromV2(cv2 *netmap.NetworkConfig) *NetworkConfig {
|
||||||
|
return (*NetworkConfig)(cv2)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewNetworkConfig creates and initializes blank NetworkConfig.
|
||||||
|
//
|
||||||
|
// Defaults:
|
||||||
|
// - parameters num: 0.
|
||||||
|
func NewNetworkConfig() *NetworkConfig {
|
||||||
|
return NewNetworkConfigFromV2(new(netmap.NetworkConfig))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToV2 converts NetworkConfig to v2 NetworkConfig.
|
||||||
|
//
|
||||||
|
// Nil NetworkConfig converts to nil.
|
||||||
|
func (x *NetworkConfig) ToV2() *netmap.NetworkConfig {
|
||||||
|
return (*netmap.NetworkConfig)(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NumberOfParameters returns number of network parameters.
|
||||||
|
func (x *NetworkConfig) NumberOfParameters() int {
|
||||||
|
return (*netmap.NetworkConfig)(x).NumberOfParameters()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IterateAddresses iterates over network parameters.
|
||||||
|
// Breaks iteration on f's true return.
|
||||||
|
//
|
||||||
|
// Handler should not be nil.
|
||||||
|
func (x *NetworkConfig) IterateParameters(f func(*NetworkParameter) bool) {
|
||||||
|
(*netmap.NetworkConfig)(x).
|
||||||
|
IterateParameters(func(p *netmap.NetworkParameter) bool {
|
||||||
|
return f(NewNetworkParameterFromV2(p))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns value of the network parameter.
|
||||||
|
func (x *NetworkConfig) SetParameters(ps ...*NetworkParameter) {
|
||||||
|
var psV2 []*netmap.NetworkParameter
|
||||||
|
|
||||||
|
if ps != nil {
|
||||||
|
ln := len(ps)
|
||||||
|
|
||||||
|
psV2 = make([]*netmap.NetworkParameter, 0, ln)
|
||||||
|
|
||||||
|
for i := 0; i < ln; i++ {
|
||||||
|
psV2 = append(psV2, ps[i].ToV2())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(*netmap.NetworkConfig)(x).
|
||||||
|
SetParameters(psV2...)
|
||||||
|
}
|
||||||
|
|
|
@ -1,11 +1,124 @@
|
||||||
package netmap
|
package netmap_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
. "github.com/nspcc-dev/neofs-api-go/pkg/netmap"
|
||||||
|
netmaptest "github.com/nspcc-dev/neofs-api-go/pkg/netmap/test"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestNetworkParameter_Key(t *testing.T) {
|
||||||
|
i := NewNetworkParameter()
|
||||||
|
|
||||||
|
k := []byte("key")
|
||||||
|
|
||||||
|
i.SetKey(k)
|
||||||
|
|
||||||
|
require.Equal(t, k, i.Key())
|
||||||
|
require.Equal(t, k, i.ToV2().GetKey())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNetworkParameter_Value(t *testing.T) {
|
||||||
|
i := NewNetworkParameter()
|
||||||
|
|
||||||
|
v := []byte("value")
|
||||||
|
|
||||||
|
i.SetValue(v)
|
||||||
|
|
||||||
|
require.Equal(t, v, i.Value())
|
||||||
|
require.Equal(t, v, i.ToV2().GetValue())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewNetworkParameterFromV2(t *testing.T) {
|
||||||
|
t.Run("nil", func(t *testing.T) {
|
||||||
|
require.Nil(t, NewNetworkParameterFromV2(nil))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNetworkParameter_ToV2(t *testing.T) {
|
||||||
|
t.Run("nil", func(t *testing.T) {
|
||||||
|
var x *NetworkParameter
|
||||||
|
|
||||||
|
require.Nil(t, x.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewNetworkParameter(t *testing.T) {
|
||||||
|
x := NewNetworkParameter()
|
||||||
|
|
||||||
|
// check initial values
|
||||||
|
require.Nil(t, x.Key())
|
||||||
|
require.Nil(t, x.Value())
|
||||||
|
|
||||||
|
// convert to v2 message
|
||||||
|
xV2 := x.ToV2()
|
||||||
|
|
||||||
|
require.Nil(t, xV2.GetKey())
|
||||||
|
require.Nil(t, xV2.GetValue())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNetworkConfig_SetParameters(t *testing.T) {
|
||||||
|
x := NewNetworkConfig()
|
||||||
|
|
||||||
|
require.Zero(t, x.NumberOfParameters())
|
||||||
|
|
||||||
|
called := 0
|
||||||
|
|
||||||
|
x.IterateParameters(func(p *NetworkParameter) bool {
|
||||||
|
called++
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Zero(t, called)
|
||||||
|
|
||||||
|
pps := []*NetworkParameter{
|
||||||
|
netmaptest.NetworkParameter(),
|
||||||
|
netmaptest.NetworkParameter(),
|
||||||
|
}
|
||||||
|
|
||||||
|
x.SetParameters(pps...)
|
||||||
|
|
||||||
|
require.EqualValues(t, len(pps), x.NumberOfParameters())
|
||||||
|
|
||||||
|
var dst []*NetworkParameter
|
||||||
|
|
||||||
|
x.IterateParameters(func(p *NetworkParameter) bool {
|
||||||
|
dst = append(dst, p)
|
||||||
|
called++
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
|
||||||
|
require.Equal(t, pps, dst)
|
||||||
|
require.Equal(t, len(pps), called)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewNetworkConfigFromV2(t *testing.T) {
|
||||||
|
t.Run("nil", func(t *testing.T) {
|
||||||
|
require.Nil(t, NewNetworkConfigFromV2(nil))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNetworkConfig_ToV2(t *testing.T) {
|
||||||
|
t.Run("nil", func(t *testing.T) {
|
||||||
|
|
||||||
|
var x *NetworkConfig
|
||||||
|
require.Nil(t, x.ToV2())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewNetworkConfig(t *testing.T) {
|
||||||
|
x := NewNetworkConfig()
|
||||||
|
|
||||||
|
// check initial values
|
||||||
|
require.Zero(t, x.NumberOfParameters())
|
||||||
|
|
||||||
|
// convert to v2 message
|
||||||
|
xV2 := x.ToV2()
|
||||||
|
|
||||||
|
require.Zero(t, xV2.NumberOfParameters())
|
||||||
|
}
|
||||||
|
|
||||||
func TestNetworkInfo_CurrentEpoch(t *testing.T) {
|
func TestNetworkInfo_CurrentEpoch(t *testing.T) {
|
||||||
i := NewNetworkInfo()
|
i := NewNetworkInfo()
|
||||||
e := uint64(13)
|
e := uint64(13)
|
||||||
|
@ -26,10 +139,29 @@ func TestNetworkInfo_MagicNumber(t *testing.T) {
|
||||||
require.Equal(t, m, i.ToV2().GetMagicNumber())
|
require.Equal(t, m, i.ToV2().GetMagicNumber())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNetworkInfoEncoding(t *testing.T) {
|
func TestNetworkInfo_MsPerBlock(t *testing.T) {
|
||||||
i := NewNetworkInfo()
|
i := NewNetworkInfo()
|
||||||
i.SetCurrentEpoch(13)
|
|
||||||
i.SetMagicNumber(666)
|
const ms = 987
|
||||||
|
|
||||||
|
i.SetMsPerBlock(ms)
|
||||||
|
|
||||||
|
require.EqualValues(t, ms, i.MsPerBlock())
|
||||||
|
require.EqualValues(t, ms, i.ToV2().GetMsPerBlock())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNetworkInfo_Config(t *testing.T) {
|
||||||
|
i := NewNetworkInfo()
|
||||||
|
|
||||||
|
c := netmaptest.NetworkConfig()
|
||||||
|
|
||||||
|
i.SetNetworkConfig(c)
|
||||||
|
|
||||||
|
require.Equal(t, c, i.NetworkConfig())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNetworkInfoEncoding(t *testing.T) {
|
||||||
|
i := netmaptest.NetworkInfo()
|
||||||
|
|
||||||
t.Run("binary", func(t *testing.T) {
|
t.Run("binary", func(t *testing.T) {
|
||||||
data, err := i.Marshal()
|
data, err := i.Marshal()
|
||||||
|
@ -72,10 +204,12 @@ func TestNewNetworkInfo(t *testing.T) {
|
||||||
// check initial values
|
// check initial values
|
||||||
require.Zero(t, ni.CurrentEpoch())
|
require.Zero(t, ni.CurrentEpoch())
|
||||||
require.Zero(t, ni.MagicNumber())
|
require.Zero(t, ni.MagicNumber())
|
||||||
|
require.Zero(t, ni.MsPerBlock())
|
||||||
|
|
||||||
// convert to v2 message
|
// convert to v2 message
|
||||||
niV2 := ni.ToV2()
|
niV2 := ni.ToV2()
|
||||||
|
|
||||||
require.Zero(t, niV2.GetCurrentEpoch())
|
require.Zero(t, niV2.GetCurrentEpoch())
|
||||||
require.Zero(t, niV2.GetMagicNumber())
|
require.Zero(t, niV2.GetMagicNumber())
|
||||||
|
require.Zero(t, niV2.GetMsPerBlock())
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,12 +59,36 @@ func PlacementPolicy() *netmap.PlacementPolicy {
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetworkParameter returns random netmap.NetworkParameter.
|
||||||
|
func NetworkParameter() *netmap.NetworkParameter {
|
||||||
|
x := netmap.NewNetworkParameter()
|
||||||
|
|
||||||
|
x.SetKey([]byte("key"))
|
||||||
|
x.SetValue([]byte("value"))
|
||||||
|
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkConfig returns random netmap.NetworkConfig.
|
||||||
|
func NetworkConfig() *netmap.NetworkConfig {
|
||||||
|
x := netmap.NewNetworkConfig()
|
||||||
|
|
||||||
|
x.SetParameters(
|
||||||
|
NetworkParameter(),
|
||||||
|
NetworkParameter(),
|
||||||
|
)
|
||||||
|
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
// NetworkInfo returns random netmap.NetworkInfo.
|
// NetworkInfo returns random netmap.NetworkInfo.
|
||||||
func NetworkInfo() *netmap.NetworkInfo {
|
func NetworkInfo() *netmap.NetworkInfo {
|
||||||
x := netmap.NewNetworkInfo()
|
x := netmap.NewNetworkInfo()
|
||||||
|
|
||||||
x.SetCurrentEpoch(21)
|
x.SetCurrentEpoch(21)
|
||||||
x.SetMagicNumber(32)
|
x.SetMagicNumber(32)
|
||||||
|
x.SetMsPerBlock(43)
|
||||||
|
x.SetNetworkConfig(NetworkConfig())
|
||||||
|
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
// Version represents v2-compatible version.
|
// Version represents v2-compatible version.
|
||||||
type Version refs.Version
|
type Version refs.Version
|
||||||
|
|
||||||
const sdkMjr, sdkMnr = 2, 9
|
const sdkMjr, sdkMnr = 2, 10
|
||||||
|
|
||||||
// NewVersionFromV2 wraps v2 Version message to Version.
|
// NewVersionFromV2 wraps v2 Version message to Version.
|
||||||
//
|
//
|
||||||
|
|
|
@ -514,6 +514,89 @@ func (l *LocalNodeInfoResponse) FromGRPCMessage(m grpc.Message) error {
|
||||||
return l.ResponseHeaders.FromMessage(v)
|
return l.ResponseHeaders.FromMessage(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *NetworkParameter) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *netmap.NetworkConfig_Parameter
|
||||||
|
|
||||||
|
if x != nil {
|
||||||
|
m = new(netmap.NetworkConfig_Parameter)
|
||||||
|
|
||||||
|
m.SetKey(x.k)
|
||||||
|
m.SetValue(x.v)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *NetworkParameter) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*netmap.NetworkConfig_Parameter)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
x.k = v.GetKey()
|
||||||
|
x.v = v.GetValue()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *NetworkConfig) ToGRPCMessage() grpc.Message {
|
||||||
|
var m *netmap.NetworkConfig
|
||||||
|
|
||||||
|
if x != nil {
|
||||||
|
m = new(netmap.NetworkConfig)
|
||||||
|
|
||||||
|
var ps []*netmap.NetworkConfig_Parameter
|
||||||
|
|
||||||
|
if ln := len(x.ps); ln > 0 {
|
||||||
|
ps = make([]*netmap.NetworkConfig_Parameter, 0, ln)
|
||||||
|
|
||||||
|
for i := 0; i < ln; i++ {
|
||||||
|
ps = append(ps, x.ps[i].ToGRPCMessage().(*netmap.NetworkConfig_Parameter))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m.SetParameters(ps)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *NetworkConfig) FromGRPCMessage(m grpc.Message) error {
|
||||||
|
v, ok := m.(*netmap.NetworkConfig)
|
||||||
|
if !ok {
|
||||||
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
ps []*NetworkParameter
|
||||||
|
psV2 = v.GetParameters()
|
||||||
|
)
|
||||||
|
|
||||||
|
if psV2 != nil {
|
||||||
|
ln := len(psV2)
|
||||||
|
|
||||||
|
ps = make([]*NetworkParameter, 0, ln)
|
||||||
|
|
||||||
|
for i := 0; i < ln; i++ {
|
||||||
|
var p *NetworkParameter
|
||||||
|
|
||||||
|
if psV2[i] != nil {
|
||||||
|
p = new(NetworkParameter)
|
||||||
|
|
||||||
|
if err := p.FromGRPCMessage(psV2[i]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ps = append(ps, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
x.ps = ps
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (i *NetworkInfo) ToGRPCMessage() grpc.Message {
|
func (i *NetworkInfo) ToGRPCMessage() grpc.Message {
|
||||||
var m *netmap.NetworkInfo
|
var m *netmap.NetworkInfo
|
||||||
|
|
||||||
|
@ -522,6 +605,8 @@ func (i *NetworkInfo) ToGRPCMessage() grpc.Message {
|
||||||
|
|
||||||
m.SetMagicNumber(i.magicNum)
|
m.SetMagicNumber(i.magicNum)
|
||||||
m.SetCurrentEpoch(i.curEpoch)
|
m.SetCurrentEpoch(i.curEpoch)
|
||||||
|
m.SetMsPerBlock(i.msPerBlock)
|
||||||
|
m.SetNetworkConfig(i.netCfg.ToGRPCMessage().(*netmap.NetworkConfig))
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
@ -533,8 +618,25 @@ func (i *NetworkInfo) FromGRPCMessage(m grpc.Message) error {
|
||||||
return message.NewUnexpectedMessageType(m, v)
|
return message.NewUnexpectedMessageType(m, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
netCfg := v.GetNetworkConfig()
|
||||||
|
if netCfg == nil {
|
||||||
|
i.netCfg = nil
|
||||||
|
} else {
|
||||||
|
if i.netCfg == nil {
|
||||||
|
i.netCfg = new(NetworkConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = i.netCfg.FromGRPCMessage(netCfg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
i.magicNum = v.GetMagicNumber()
|
i.magicNum = v.GetMagicNumber()
|
||||||
i.curEpoch = v.GetCurrentEpoch()
|
i.curEpoch = v.GetCurrentEpoch()
|
||||||
|
i.msPerBlock = v.GetMsPerBlock()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,6 +182,20 @@ func (x *NetworkInfo) SetMagicNumber(v uint64) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetMsPerBlock sets MillisecondsPerBlock network parameter.
|
||||||
|
func (x *NetworkInfo) SetMsPerBlock(v int64) {
|
||||||
|
if x != nil {
|
||||||
|
x.MsPerBlock = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNetworkConfig sets NeoFS network configuration.
|
||||||
|
func (x *NetworkInfo) SetNetworkConfig(v *NetworkConfig) {
|
||||||
|
if x != nil {
|
||||||
|
x.NetworkConfig = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FromString parses Clause from a string representation,
|
// FromString parses Clause from a string representation,
|
||||||
// It is a reverse action to String().
|
// It is a reverse action to String().
|
||||||
//
|
//
|
||||||
|
@ -220,3 +234,24 @@ func (x *NodeInfo_State) FromString(s string) bool {
|
||||||
|
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetKey sets parameter key.
|
||||||
|
func (x *NetworkConfig_Parameter) SetKey(v []byte) {
|
||||||
|
if x != nil {
|
||||||
|
x.Key = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets parameter value.
|
||||||
|
func (x *NetworkConfig_Parameter) SetValue(v []byte) {
|
||||||
|
if x != nil {
|
||||||
|
x.Value = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetParameters sets NeoFS network parameters.
|
||||||
|
func (x *NetworkConfig) SetParameters(v []*NetworkConfig_Parameter) {
|
||||||
|
if x != nil {
|
||||||
|
x.Parameters = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
BIN
v2/netmap/grpc/types.pb.go
generated
BIN
v2/netmap/grpc/types.pb.go
generated
Binary file not shown.
|
@ -468,10 +468,101 @@ func (l *LocalNodeInfoResponseBody) Unmarshal(data []byte) error {
|
||||||
return message.Unmarshal(l, data, new(netmap.LocalNodeInfoResponse_Body))
|
return message.Unmarshal(l, data, new(netmap.LocalNodeInfoResponse_Body))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ = iota
|
||||||
|
netPrmKeyFNum
|
||||||
|
netPrmValFNum
|
||||||
|
)
|
||||||
|
|
||||||
|
func (x *NetworkParameter) StableMarshal(buf []byte) ([]byte, error) {
|
||||||
|
if x == nil {
|
||||||
|
return []byte{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, x.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
offset, n int
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
n, err = protoutil.BytesMarshal(netPrmKeyFNum, buf[offset:], x.k)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += n
|
||||||
|
|
||||||
|
_, err = protoutil.BytesMarshal(netPrmValFNum, buf[offset:], x.v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *NetworkParameter) StableSize() (size int) {
|
||||||
|
if x == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
size += protoutil.BytesSize(netPrmKeyFNum, x.k)
|
||||||
|
size += protoutil.BytesSize(netPrmValFNum, x.v)
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ = iota
|
||||||
|
netCfgPrmsFNum
|
||||||
|
)
|
||||||
|
|
||||||
|
func (x *NetworkConfig) StableMarshal(buf []byte) ([]byte, error) {
|
||||||
|
if x == nil {
|
||||||
|
return []byte{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if buf == nil {
|
||||||
|
buf = make([]byte, x.StableSize())
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
offset, n int
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
for i := range x.ps {
|
||||||
|
n, err = protoutil.NestedStructureMarshal(netCfgPrmsFNum, buf[offset:], x.ps[i])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += n
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *NetworkConfig) StableSize() (size int) {
|
||||||
|
if x == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range x.ps {
|
||||||
|
size += protoutil.NestedStructureSize(netCfgPrmsFNum, x.ps[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
return size
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
_ = iota
|
_ = iota
|
||||||
netInfoCurEpochFNum
|
netInfoCurEpochFNum
|
||||||
netInfoMagicNumFNum
|
netInfoMagicNumFNum
|
||||||
|
netInfoMSPerBlockFNum
|
||||||
|
netInfoCfgFNum
|
||||||
)
|
)
|
||||||
|
|
||||||
func (i *NetworkInfo) StableMarshal(buf []byte) ([]byte, error) {
|
func (i *NetworkInfo) StableMarshal(buf []byte) ([]byte, error) {
|
||||||
|
@ -495,7 +586,21 @@ func (i *NetworkInfo) StableMarshal(buf []byte) ([]byte, error) {
|
||||||
|
|
||||||
offset += n
|
offset += n
|
||||||
|
|
||||||
_, err = protoutil.UInt64Marshal(netInfoMagicNumFNum, buf[offset:], i.magicNum)
|
n, err = protoutil.UInt64Marshal(netInfoMagicNumFNum, buf[offset:], i.magicNum)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += n
|
||||||
|
|
||||||
|
n, err = protoutil.Int64Marshal(netInfoMSPerBlockFNum, buf[offset:], i.msPerBlock)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += n
|
||||||
|
|
||||||
|
_, err = protoutil.NestedStructureMarshal(netInfoCfgFNum, buf[offset:], i.netCfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -510,6 +615,8 @@ func (i *NetworkInfo) StableSize() (size int) {
|
||||||
|
|
||||||
size += protoutil.UInt64Size(netInfoCurEpochFNum, i.curEpoch)
|
size += protoutil.UInt64Size(netInfoCurEpochFNum, i.curEpoch)
|
||||||
size += protoutil.UInt64Size(netInfoMagicNumFNum, i.magicNum)
|
size += protoutil.UInt64Size(netInfoMagicNumFNum, i.magicNum)
|
||||||
|
size += protoutil.Int64Size(netInfoMSPerBlockFNum, i.msPerBlock)
|
||||||
|
size += protoutil.NestedStructureSize(netInfoCfgFNum, i.netCfg)
|
||||||
|
|
||||||
return size
|
return size
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ func TestMessageConvert(t *testing.T) {
|
||||||
func(empty bool) message.Message { return netmaptest.GenerateNodeInfo(empty) },
|
func(empty bool) message.Message { return netmaptest.GenerateNodeInfo(empty) },
|
||||||
func(empty bool) message.Message { return netmaptest.GenerateLocalNodeInfoRequest(empty) },
|
func(empty bool) message.Message { return netmaptest.GenerateLocalNodeInfoRequest(empty) },
|
||||||
func(empty bool) message.Message { return netmaptest.GenerateLocalNodeInfoResponseBody(empty) },
|
func(empty bool) message.Message { return netmaptest.GenerateLocalNodeInfoResponseBody(empty) },
|
||||||
|
func(empty bool) message.Message { return netmaptest.GenerateNetworkParameter(empty) },
|
||||||
|
func(empty bool) message.Message { return netmaptest.GenerateNetworkConfig(empty) },
|
||||||
func(empty bool) message.Message { return netmaptest.GenerateNetworkInfo(empty) },
|
func(empty bool) message.Message { return netmaptest.GenerateNetworkInfo(empty) },
|
||||||
func(empty bool) message.Message { return netmaptest.GenerateNetworkInfoRequest(empty) },
|
func(empty bool) message.Message { return netmaptest.GenerateNetworkInfoRequest(empty) },
|
||||||
func(empty bool) message.Message { return netmaptest.GenerateNetworkInfoResponseBody(empty) },
|
func(empty bool) message.Message { return netmaptest.GenerateNetworkInfoResponseBody(empty) },
|
||||||
|
|
|
@ -188,12 +188,38 @@ func GenerateLocalNodeInfoResponse(empty bool) *netmap.LocalNodeInfoResponse {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GenerateNetworkParameter(empty bool) *netmap.NetworkParameter {
|
||||||
|
m := new(netmap.NetworkParameter)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetKey([]byte("key"))
|
||||||
|
m.SetValue([]byte("value"))
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func GenerateNetworkConfig(empty bool) *netmap.NetworkConfig {
|
||||||
|
m := new(netmap.NetworkConfig)
|
||||||
|
|
||||||
|
if !empty {
|
||||||
|
m.SetParameters(
|
||||||
|
GenerateNetworkParameter(empty),
|
||||||
|
GenerateNetworkParameter(empty),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
func GenerateNetworkInfo(empty bool) *netmap.NetworkInfo {
|
func GenerateNetworkInfo(empty bool) *netmap.NetworkInfo {
|
||||||
m := new(netmap.NetworkInfo)
|
m := new(netmap.NetworkInfo)
|
||||||
|
|
||||||
if !empty {
|
if !empty {
|
||||||
m.SetMagicNumber(228)
|
m.SetMagicNumber(228)
|
||||||
m.SetCurrentEpoch(666)
|
m.SetCurrentEpoch(666)
|
||||||
|
m.SetMsPerBlock(5678)
|
||||||
|
m.SetNetworkConfig(GenerateNetworkConfig(empty))
|
||||||
}
|
}
|
||||||
|
|
||||||
return m
|
return m
|
||||||
|
|
|
@ -517,10 +517,86 @@ func (l *LocalNodeInfoResponse) SetBody(body *LocalNodeInfoResponseBody) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NetworkParameter represents NeoFS network parameter.
|
||||||
|
type NetworkParameter struct {
|
||||||
|
k, v []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKey returns parameter key.
|
||||||
|
func (x *NetworkParameter) GetKey() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.k
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKey sets parameter key.
|
||||||
|
func (x *NetworkParameter) SetKey(k []byte) {
|
||||||
|
if x != nil {
|
||||||
|
x.k = k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetValue returns parameter value.
|
||||||
|
func (x *NetworkParameter) GetValue() []byte {
|
||||||
|
if x != nil {
|
||||||
|
return x.v
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetValue sets parameter value.
|
||||||
|
func (x *NetworkParameter) SetValue(v []byte) {
|
||||||
|
if x != nil {
|
||||||
|
x.v = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NetworkConfig represents NeoFS network configuration.
|
||||||
|
type NetworkConfig struct {
|
||||||
|
ps []*NetworkParameter
|
||||||
|
}
|
||||||
|
|
||||||
|
// NumberOfParameters returns number of network parameters.
|
||||||
|
func (x *NetworkConfig) NumberOfParameters() int {
|
||||||
|
if x != nil {
|
||||||
|
return len(x.ps)
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// IterateParameters iterates over network parameters.
|
||||||
|
// Breaks iteration on f's true return.
|
||||||
|
//
|
||||||
|
// Handler must not be nil.
|
||||||
|
func (x *NetworkConfig) IterateParameters(f func(*NetworkParameter) bool) {
|
||||||
|
if x != nil {
|
||||||
|
for i := range x.ps {
|
||||||
|
if f(x.ps[i]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetParameters sets list of network parameters.
|
||||||
|
func (x *NetworkConfig) SetParameters(v ...*NetworkParameter) {
|
||||||
|
if x != nil {
|
||||||
|
x.ps = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NetworkInfo groups information about
|
// NetworkInfo groups information about
|
||||||
// NeoFS network.
|
// NeoFS network.
|
||||||
type NetworkInfo struct {
|
type NetworkInfo struct {
|
||||||
curEpoch, magicNum uint64
|
curEpoch, magicNum uint64
|
||||||
|
|
||||||
|
msPerBlock int64
|
||||||
|
|
||||||
|
netCfg *NetworkConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCurrentEpoch returns number of the current epoch.
|
// GetCurrentEpoch returns number of the current epoch.
|
||||||
|
@ -555,6 +631,38 @@ func (i *NetworkInfo) SetMagicNumber(magic uint64) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMsPerBlock returns MillisecondsPerBlock network parameter.
|
||||||
|
func (i *NetworkInfo) GetMsPerBlock() int64 {
|
||||||
|
if i != nil {
|
||||||
|
return i.msPerBlock
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMsPerBlock sets MillisecondsPerBlock network parameter.
|
||||||
|
func (i *NetworkInfo) SetMsPerBlock(v int64) {
|
||||||
|
if i != nil {
|
||||||
|
i.msPerBlock = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNetworkConfig returns NeoFS network configuration.
|
||||||
|
func (i *NetworkInfo) GetNetworkConfig() *NetworkConfig {
|
||||||
|
if i != nil {
|
||||||
|
return i.netCfg
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNetworkConfig sets NeoFS network configuration.
|
||||||
|
func (i *NetworkInfo) SetNetworkConfig(v *NetworkConfig) {
|
||||||
|
if i != nil {
|
||||||
|
i.netCfg = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NetworkInfoRequestBody is a structure of NetworkInfo request body.
|
// NetworkInfoRequestBody is a structure of NetworkInfo request body.
|
||||||
type NetworkInfoRequestBody struct{}
|
type NetworkInfoRequestBody struct{}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue