forked from TrueCloudLab/frostfs-node
[#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)
|
||||
|
||||
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(
|
||||
"the number of nodes '%d' in selector is not enough for the number of replicas '%d', "+
|
||||
"use --force option to skip this check",
|
||||
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 (
|
||||
"crypto/sha256"
|
||||
"errors"
|
||||
|
||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||
"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)
|
||||
|
||||
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] {
|
||||
commonCmd.PrettyPrintNodeInfo(cmd, cnrNodes[i][j], j, "\t", short)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue