Changing error for too few nodes (#899)

* changing error

* change variable name

Co-authored-by: Alex <33497058+bexsoft@users.noreply.github.com>
Co-authored-by: Adam Stafford <adamstafford@Adams-MacBook-Pro.local>
Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
This commit is contained in:
adfost
2021-08-02 11:33:15 -07:00
committed by GitHub
parent aa16e75b39
commit 9d6ee7f9b0
3 changed files with 43 additions and 6 deletions

View File

@@ -38,6 +38,9 @@ var (
errLicenseNotFound = errors.New("license not found")
errAvoidSelfAccountDelete = errors.New("logged in user cannot be deleted by itself")
errAccessDenied = errors.New("access denied")
errTooFewNodes = errors.New("at least 4 nodes are required in cluster")
errTooFewSchedulableNodes = errors.New("at least 4 schedulable nodes are required in cluster")
errFewerThanFourNodes = errors.New("at least 4 nodes are required in request")
)
// prepareError receives an error object and parse it against k8sErrors, returns the right error code paired with a generic error message
@@ -156,6 +159,18 @@ func prepareError(err ...error) *models.Error {
if errors.Is(err[0], errRemoteTierExists) {
errorMessage = err[0].Error()
}
if errors.Is(err[0], errTooFewNodes) {
errorCode = 507
errorMessage = errTooFewNodes.Error()
}
if errors.Is(err[0], errTooFewSchedulableNodes) {
errorCode = 507
errorMessage = errTooFewSchedulableNodes.Error()
}
if errors.Is(err[0], errFewerThanFourNodes) {
errorCode = 507
errorMessage = errFewerThanFourNodes.Error()
}
}
return &models.Error{Code: errorCode, Message: swag.String(errorMessage), DetailedMessage: swag.String(err[0].Error())}
}

View File

@@ -56,8 +56,8 @@ func registerNodesHandlers(api *operations.OperatorAPI) {
// getMaxAllocatableMemory get max allocatable memory given a desired number of nodes
func getMaxAllocatableMemory(ctx context.Context, clientset v1.CoreV1Interface, numNodes int32) (*models.MaxAllocatableMemResponse, error) {
if numNodes == 0 {
return nil, errors.New("error NumNodes must be greated than 0")
if numNodes < 4 {
return nil, errors.New("error NumNodes must be at least 4")
}
// get all nodes from cluster
@@ -65,6 +65,18 @@ func getMaxAllocatableMemory(ctx context.Context, clientset v1.CoreV1Interface,
if err != nil {
return nil, err
}
if len(nodes.Items) < int(numNodes) {
return nil, errTooFewNodes
}
activeNodes := 0
for i := 0; i < len(nodes.Items); i++ {
if !nodes.Items[i].Spec.Unschedulable {
activeNodes++
}
}
if activeNodes < int(numNodes) {
return nil, errTooFewSchedulableNodes
}
availableMemSizes := []int64{}
OUTER:

View File

@@ -100,6 +100,8 @@ const TenantSize = ({
selectedStorageClass,
}: ITenantSizeProps) => {
const [validationErrors, setValidationErrors] = useState<any>({});
const [errorFlag, setErrorFlag] = useState<boolean>(false);
const [nodeError, setNodeError] = useState<string>("");
const usableInformation = ecParityCalc.storageFactors.find(
(element) => element.erasureCode === ecParity
);
@@ -131,7 +133,6 @@ const TenantSize = ({
clusterSizeFactor
);
const memoSize = setMemoryResource(memSize, clusterSizeBytes, maxMemSize);
updateField("memorySize", memoSize);
}, [maxAllocableMemo, memoryNode, sizeFactor, updateField, volumeSize]);
@@ -146,8 +147,9 @@ const TenantSize = ({
const maxMemory = res.max_memory ? res.max_memory : 0;
updateField("maxAllocableMemo", maxMemory);
})
.catch((err: ErrorResponseHandler) => {
updateField("maxAllocableMemo", 0);
.catch((err: any) => {
setErrorFlag(true);
setNodeError(err.errorMessage);
console.error(err);
});
}
@@ -227,7 +229,6 @@ const TenantSize = ({
useEffect(() => {
const parsedSize = getBytes(volumeSize, sizeFactor, true);
const commonValidation = commonFormValidation([
{
fieldKey: "nodes",
@@ -236,6 +237,13 @@ const TenantSize = ({
customValidation: parseInt(nodes) < 4,
customValidationMessage: "Number of nodes cannot be less than 4",
},
{
fieldKey: "nodes",
required: true,
value: nodes,
customValidation: errorFlag,
customValidationMessage: nodeError,
},
{
fieldKey: "volume_size",
required: true,
@@ -288,6 +296,8 @@ const TenantSize = ({
limitSize,
selectedStorageClass,
isPageValid,
errorFlag,
nodeError
]);
/* End Validation of pages */