forked from TrueCloudLab/frostfs-node
[#1518] Upgrade NeoFS SDK Go with changed subnet
package
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
f602d05b0a
commit
2e4a1cb6df
12 changed files with 30 additions and 88 deletions
|
@ -140,18 +140,13 @@ var cmdSubnetCreate = &cobra.Command{
|
|||
for {
|
||||
num = rand.Uint32()
|
||||
|
||||
id.SetNumber(num)
|
||||
id.SetNumeric(num)
|
||||
|
||||
if !subnetid.IsZero(id) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
binID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet ID: %w", err)
|
||||
}
|
||||
|
||||
// declare creator ID and encode it
|
||||
var creator user.ID
|
||||
user.IDFromKey(&creator, key.PrivateKey.PublicKey)
|
||||
|
@ -162,12 +157,7 @@ var cmdSubnetCreate = &cobra.Command{
|
|||
info.SetID(id)
|
||||
info.SetOwner(creator)
|
||||
|
||||
binInfo, err := info.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet info: %w", err)
|
||||
}
|
||||
|
||||
err = invokeMethod(key, true, "put", binID, key.PublicKey().Bytes(), binInfo)
|
||||
err = invokeMethod(key, true, "put", id.Marshal(), key.PublicKey().Bytes(), info.Marshal())
|
||||
if err != nil {
|
||||
return fmt.Errorf("morph invocation: %w", err)
|
||||
}
|
||||
|
@ -210,7 +200,7 @@ var cmdSubnetRemove = &cobra.Command{
|
|||
// read ID and encode it
|
||||
var id subnetid.ID
|
||||
|
||||
err = id.UnmarshalText([]byte(viper.GetString(flagSubnetRemoveID)))
|
||||
err = id.DecodeString(viper.GetString(flagSubnetRemoveID))
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode ID text: %w", err)
|
||||
}
|
||||
|
@ -219,12 +209,7 @@ var cmdSubnetRemove = &cobra.Command{
|
|||
return errZeroSubnet
|
||||
}
|
||||
|
||||
binID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet ID: %w", err)
|
||||
}
|
||||
|
||||
err = invokeMethod(key, false, "delete", binID)
|
||||
err = invokeMethod(key, false, "delete", id.Marshal())
|
||||
if err != nil {
|
||||
return fmt.Errorf("morph invocation: %w", err)
|
||||
}
|
||||
|
@ -254,7 +239,7 @@ var cmdSubnetGet = &cobra.Command{
|
|||
// read ID and encode it
|
||||
var id subnetid.ID
|
||||
|
||||
err := id.UnmarshalText([]byte(viper.GetString(flagSubnetGetID)))
|
||||
err := id.DecodeString(viper.GetString(flagSubnetGetID))
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode ID text: %w", err)
|
||||
}
|
||||
|
@ -263,11 +248,6 @@ var cmdSubnetGet = &cobra.Command{
|
|||
return errZeroSubnet
|
||||
}
|
||||
|
||||
binID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet ID: %w", err)
|
||||
}
|
||||
|
||||
// use random key to fetch the data
|
||||
// we could use raw neo-go client to perform testInvoke
|
||||
// without keys, as it is done in other commands
|
||||
|
@ -276,7 +256,7 @@ var cmdSubnetGet = &cobra.Command{
|
|||
return fmt.Errorf("init subnet client: %w", err)
|
||||
}
|
||||
|
||||
res, err := testInvokeMethod(*key, "get", binID)
|
||||
res, err := testInvokeMethod(*key, "get", id.Marshal())
|
||||
if err != nil {
|
||||
return fmt.Errorf("morph invocation: %w", err)
|
||||
}
|
||||
|
@ -297,11 +277,7 @@ var cmdSubnetGet = &cobra.Command{
|
|||
}
|
||||
|
||||
// print information
|
||||
var ownerID user.ID
|
||||
|
||||
info.ReadOwner(&ownerID)
|
||||
|
||||
cmd.Printf("Owner: %s\n", &ownerID)
|
||||
cmd.Printf("Owner: %s\n", info.Owner())
|
||||
|
||||
return nil
|
||||
},
|
||||
|
@ -350,7 +326,7 @@ func manageSubnetAdmins(cmd *cobra.Command, rm bool) error {
|
|||
// read ID and encode it
|
||||
var id subnetid.ID
|
||||
|
||||
err = id.UnmarshalText([]byte(viper.GetString(flagSubnetAdminSubnet)))
|
||||
err = id.DecodeString(viper.GetString(flagSubnetAdminSubnet))
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode ID text: %w", err)
|
||||
}
|
||||
|
@ -359,11 +335,6 @@ func manageSubnetAdmins(cmd *cobra.Command, rm bool) error {
|
|||
return errZeroSubnet
|
||||
}
|
||||
|
||||
binID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet ID: %w", err)
|
||||
}
|
||||
|
||||
// read admin key and decode it
|
||||
binAdminKey, err := hex.DecodeString(viper.GetString(flagSubnetAdminID))
|
||||
if err != nil {
|
||||
|
@ -377,7 +348,7 @@ func manageSubnetAdmins(cmd *cobra.Command, rm bool) error {
|
|||
|
||||
// prepare call parameters
|
||||
prm := make([]interface{}, 0, 3)
|
||||
prm = append(prm, binID)
|
||||
prm = append(prm, id.Marshal())
|
||||
|
||||
var method string
|
||||
|
||||
|
@ -497,7 +468,7 @@ func manageSubnetClients(cmd *cobra.Command, rm bool) error {
|
|||
// read ID and encode it
|
||||
var id subnetid.ID
|
||||
|
||||
err = id.UnmarshalText([]byte(viper.GetString(flagSubnetClientSubnet)))
|
||||
err = id.DecodeString(viper.GetString(flagSubnetClientSubnet))
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode ID text: %w", err)
|
||||
}
|
||||
|
@ -506,11 +477,6 @@ func manageSubnetClients(cmd *cobra.Command, rm bool) error {
|
|||
return errZeroSubnet
|
||||
}
|
||||
|
||||
binID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet ID: %w", err)
|
||||
}
|
||||
|
||||
// read client ID and encode it
|
||||
var clientID user.ID
|
||||
|
||||
|
@ -539,7 +505,7 @@ func manageSubnetClients(cmd *cobra.Command, rm bool) error {
|
|||
method = "addUser"
|
||||
}
|
||||
|
||||
err = invokeMethod(key, false, method, binID, binGroupID, clientID.WalletBytes())
|
||||
err = invokeMethod(key, false, method, id.Marshal(), binGroupID, clientID.WalletBytes())
|
||||
if err != nil {
|
||||
return fmt.Errorf("morph invocation: %w", err)
|
||||
}
|
||||
|
@ -596,7 +562,7 @@ func manageSubnetNodes(cmd *cobra.Command, rm bool) error {
|
|||
// read ID and encode it
|
||||
var id subnetid.ID
|
||||
|
||||
err = id.UnmarshalText([]byte(viper.GetString(flagSubnetNodeSubnet)))
|
||||
err = id.DecodeString(viper.GetString(flagSubnetNodeSubnet))
|
||||
if err != nil {
|
||||
return fmt.Errorf("decode ID text: %w", err)
|
||||
}
|
||||
|
@ -605,11 +571,6 @@ func manageSubnetNodes(cmd *cobra.Command, rm bool) error {
|
|||
return errZeroSubnet
|
||||
}
|
||||
|
||||
binID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("marshal subnet ID: %w", err)
|
||||
}
|
||||
|
||||
// read node ID and encode it
|
||||
binNodeID, err := hex.DecodeString(viper.GetString(flagSubnetNode))
|
||||
if err != nil {
|
||||
|
@ -628,7 +589,7 @@ func manageSubnetNodes(cmd *cobra.Command, rm bool) error {
|
|||
method = "addNode"
|
||||
}
|
||||
|
||||
err = invokeMethod(key, false, method, binID, binNodeID)
|
||||
err = invokeMethod(key, false, method, id.Marshal(), binNodeID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("morph invocation: %w", err)
|
||||
}
|
||||
|
|
|
@ -141,10 +141,12 @@ It will be stored in sidechain when inner ring will accepts it.`,
|
|||
placementPolicy, err := parseContainerPolicy(containerPolicy)
|
||||
common.ExitOnErr(cmd, "", err)
|
||||
|
||||
subnetID, err := parseSubnetID(containerSubnet)
|
||||
var subnetID subnetid.ID
|
||||
|
||||
err = subnetID.DecodeString(containerSubnet)
|
||||
common.ExitOnErr(cmd, "could not parse subnetID: %w", err)
|
||||
|
||||
placementPolicy.SetSubnetID(subnetID)
|
||||
placementPolicy.SetSubnetID(&subnetID)
|
||||
|
||||
attributes, err := parseAttributes(containerAttributes)
|
||||
common.ExitOnErr(cmd, "", err)
|
||||
|
@ -596,16 +598,6 @@ func prettyPrintContainerList(cmd *cobra.Command, list []cid.ID) {
|
|||
}
|
||||
}
|
||||
|
||||
func parseSubnetID(val string) (sub *subnetid.ID, err error) {
|
||||
sub = &subnetid.ID{}
|
||||
|
||||
if val != "" {
|
||||
err = sub.UnmarshalText([]byte(val))
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func parseContainerPolicy(policyString string) (*netmap.PlacementPolicy, error) {
|
||||
_, err := os.Stat(policyString) // check if `policyString` is a path to file with placement policy
|
||||
if err == nil {
|
||||
|
|
|
@ -186,7 +186,7 @@ func readSubnetCfg(c *cfg) {
|
|||
)
|
||||
|
||||
subnetCfg.IterateSubnets(func(idTxt string) {
|
||||
err = id.UnmarshalText([]byte(idTxt))
|
||||
err = id.DecodeString(idTxt)
|
||||
fatalOnErrDetails("parse subnet entry", err)
|
||||
|
||||
c.cfgNodeInfo.localInfo.EnterSubnet(id)
|
||||
|
|
2
go.mod
2
go.mod
|
@ -19,7 +19,7 @@ require (
|
|||
github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20220601120906-3bec6657f5c5 // indirect
|
||||
github.com/nspcc-dev/neofs-api-go/v2 v2.12.2
|
||||
github.com/nspcc-dev/neofs-contract v0.15.1
|
||||
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.4.0.20220609064532-517d7a1e4a0f
|
||||
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.4.0.20220615085207-eb3b99081235
|
||||
github.com/nspcc-dev/tzhash v1.5.2
|
||||
github.com/panjf2000/ants/v2 v2.4.0
|
||||
github.com/paulmach/orb v0.2.2
|
||||
|
|
BIN
go.sum
BIN
go.sum
Binary file not shown.
|
@ -247,12 +247,7 @@ func checkSubnet(subCli *morphsubnet.Client, cnr *containerSDK.Container) error
|
|||
return nil
|
||||
}
|
||||
|
||||
rawSubID, err := subID.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not marshal container subnetwork: %w", err)
|
||||
}
|
||||
|
||||
prm.SetID(rawSubID)
|
||||
prm.SetID(subID.Marshal())
|
||||
prm.SetClient(owner.WalletBytes())
|
||||
|
||||
res, err := subCli.UserAllowed(prm)
|
||||
|
|
|
@ -20,12 +20,7 @@ func (v *Validator) VerifyAndUpdate(n *netmap.NodeInfo) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
rawSubnetID, err := id.Marshal()
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not marshal subnetwork ID: %w", err)
|
||||
}
|
||||
|
||||
prm.SetID(rawSubnetID)
|
||||
prm.SetID(id.Marshal())
|
||||
prm.SetNode(n.PublicKey())
|
||||
|
||||
res, err := v.subnetClient.NodeAllowed(prm)
|
||||
|
|
|
@ -166,7 +166,7 @@ func (np *Processor) processRemoveSubnetNode(ev subnetEvent.RemoveNode) {
|
|||
}
|
||||
|
||||
rawSubnet := ev.SubnetworkID()
|
||||
subnetToRemoveFrom := &subnetid.ID{}
|
||||
var subnetToRemoveFrom subnetid.ID
|
||||
|
||||
err = subnetToRemoveFrom.Unmarshal(rawSubnet)
|
||||
if err != nil {
|
||||
|
@ -176,7 +176,7 @@ func (np *Processor) processRemoveSubnetNode(ev subnetEvent.RemoveNode) {
|
|||
return
|
||||
}
|
||||
|
||||
if subnetid.IsZero(*subnetToRemoveFrom) {
|
||||
if subnetid.IsZero(subnetToRemoveFrom) {
|
||||
np.log.Warn("got zero subnet in remove node notification")
|
||||
return
|
||||
}
|
||||
|
|
|
@ -69,12 +69,12 @@ func (x PutValidator) Assert(event Put) error {
|
|||
}
|
||||
|
||||
// check if the explicit ID equals to the one from info
|
||||
if !subnet.IDEquals(info, id) {
|
||||
if !subnet.AssertReference(info, id) {
|
||||
return errDiffID
|
||||
}
|
||||
|
||||
// check if the explicit creator equals to the one from info
|
||||
if !subnet.IsOwner(info, creator) {
|
||||
if !subnet.AssertOwnership(info, creator) {
|
||||
return errDiffOwner
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ func TestPutValidator_Assert(t *testing.T) {
|
|||
require.ErrorAs(t, err, new(zeroSubnetOp))
|
||||
|
||||
const idNum = 13
|
||||
e.id.SetNumber(idNum)
|
||||
e.id.SetNumeric(idNum)
|
||||
|
||||
// read creator error
|
||||
e.creatorErr = errors.New("creator err")
|
||||
|
@ -89,7 +89,7 @@ func TestPutValidator_Assert(t *testing.T) {
|
|||
// diff explicit ID and the one in info
|
||||
var id2 subnetid.ID
|
||||
|
||||
id2.SetNumber(idNum + 1)
|
||||
id2.SetNumeric(idNum + 1)
|
||||
|
||||
e.info.SetID(id2)
|
||||
|
||||
|
|
|
@ -314,7 +314,7 @@ func (s *Server) processCandidate(txHash neogoutil.Uint256, removedID subnetid.I
|
|||
)
|
||||
|
||||
err := c.NodeInfo.IterateSubnets(func(id subnetid.ID) error {
|
||||
if removedID.Equals(&id) {
|
||||
if removedID.Equals(id) {
|
||||
removeSubnet = true
|
||||
return netmap.ErrRemoveSubnet
|
||||
}
|
||||
|
|
|
@ -25,10 +25,9 @@ func TestParseRemoveNode(t *testing.T) {
|
|||
})
|
||||
|
||||
subnetID := subnetid.ID{}
|
||||
subnetID.SetNumber(123)
|
||||
subnetID.SetNumeric(123)
|
||||
|
||||
rawSubnetID, err := subnetID.Marshal()
|
||||
require.NoError(t, err)
|
||||
rawSubnetID := subnetID.Marshal()
|
||||
|
||||
priv, err := keys.NewPrivateKey()
|
||||
require.NoError(t, err)
|
||||
|
|
Loading…
Reference in a new issue