[#1063] cli: Validate container creation for EC policy
Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
This commit is contained in:
parent
4738508ce2
commit
531542ce60
2 changed files with 30 additions and 8 deletions
|
@ -58,14 +58,28 @@ It will be stored in sidechain when inner ring will accepts it.`,
|
||||||
"use --force option to skip this check: %w", err)
|
"use --force option to skip this check: %w", err)
|
||||||
|
|
||||||
for i, nodes := range nodesByRep {
|
for i, nodes := range nodesByRep {
|
||||||
if placementPolicy.ReplicaDescriptor(i).NumberOfObjects() > uint32(len(nodes)) {
|
if repNum := placementPolicy.ReplicaDescriptor(i).NumberOfObjects(); repNum > 0 {
|
||||||
|
if repNum > uint32(len(nodes)) {
|
||||||
commonCmd.ExitOnErr(cmd, "", fmt.Errorf(
|
commonCmd.ExitOnErr(cmd, "", fmt.Errorf(
|
||||||
"the number of nodes '%d' in selector is not enough for the number of replicas '%d', "+
|
"the number of nodes '%d' in selector is not enough for the number of replicas '%d', "+
|
||||||
"use --force option to skip this check",
|
"use --force option to skip this check",
|
||||||
len(nodes),
|
len(nodes),
|
||||||
placementPolicy.ReplicaDescriptor(i).NumberOfObjects(),
|
repNum,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
} else if ecParts := placementPolicy.ReplicaDescriptor(i).TotalECPartCount(); ecParts > 0 {
|
||||||
|
if ecParts > uint32(len(nodes)) {
|
||||||
|
commonCmd.ExitOnErr(cmd, "", fmt.Errorf(
|
||||||
|
"the number of nodes '%d' in selector is not enough for EC placement '%d.%d', "+
|
||||||
|
"use --force option to skip this check",
|
||||||
|
len(nodes),
|
||||||
|
placementPolicy.ReplicaDescriptor(i).GetECDataCount(),
|
||||||
|
placementPolicy.ReplicaDescriptor(i).GetECParityCount(),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
commonCmd.ExitOnErr(cmd, "%w", errors.New("no replication policy is set"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package container
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
|
"errors"
|
||||||
|
|
||||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
||||||
|
@ -46,7 +47,14 @@ var containerNodesCmd = &cobra.Command{
|
||||||
commonCmd.ExitOnErr(cmd, "could not build container nodes for given container: %w", err)
|
commonCmd.ExitOnErr(cmd, "could not build container nodes for given container: %w", err)
|
||||||
|
|
||||||
for i := range cnrNodes {
|
for i := range cnrNodes {
|
||||||
cmd.Printf("Descriptor #%d, REP %d:\n", i+1, policy.ReplicaDescriptor(i).NumberOfObjects())
|
if repNum := policy.ReplicaDescriptor(i).NumberOfObjects(); repNum > 0 {
|
||||||
|
cmd.Printf("Descriptor #%d, REP %d:\n", i+1, repNum)
|
||||||
|
} else if ecParts := policy.ReplicaDescriptor(i).TotalECPartCount(); ecParts > 0 {
|
||||||
|
cmd.Printf("Descriptor #%d, EC %d.%d:\n", i+1, policy.ReplicaDescriptor(i).GetECDataCount(),
|
||||||
|
policy.ReplicaDescriptor(i).GetECParityCount())
|
||||||
|
} else {
|
||||||
|
commonCmd.ExitOnErr(cmd, "%w", errors.New("no replication policy is set"))
|
||||||
|
}
|
||||||
for j := range cnrNodes[i] {
|
for j := range cnrNodes[i] {
|
||||||
commonCmd.PrettyPrintNodeInfo(cmd, cnrNodes[i][j], j, "\t", short)
|
commonCmd.PrettyPrintNodeInfo(cmd, cnrNodes[i][j], j, "\t", short)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue