diff --git a/web-app/src/common/utils.ts b/web-app/src/common/utils.ts index 331b9b7bb91..cb810526a44 100644 --- a/web-app/src/common/utils.ts +++ b/web-app/src/common/utils.ts @@ -524,6 +524,8 @@ export const niceDaysInt = (seconds: number, timeVariant: string = "s") => { }`; }; +export const EC0 = "EC:0"; + export const MinIOEnvVarsSettings: any = { MINIO_ACCESS_KEY: { secret: true }, MINIO_ACCESS_KEY_OLD: { secret: true }, diff --git a/web-app/src/screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx b/web-app/src/screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx index 80d49411713..69d22174311 100644 --- a/web-app/src/screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx +++ b/web-app/src/screens/Console/Tenants/AddTenant/Steps/SizePreview.tsx @@ -18,7 +18,7 @@ import React, { Fragment } from "react"; import { Box, SimpleHeader, Table, TableBody, TableCell, TableRow } from "mds"; import { useSelector } from "react-redux"; import { AppState } from "../../../../../store"; -import { niceBytes } from "../../../../../common/utils"; +import { niceBytes, EC0 } from "../../../../../common/utils"; const SizePreview = () => { const nodes = useSelector( @@ -139,7 +139,9 @@ const SizePreview = () => { Usable Capacity - {niceBytes(usableInformation.maxCapacity)} + {ecParity === EC0 + ? niceBytes(ecParityCalc.rawCapacity) + : niceBytes(usableInformation.maxCapacity)} @@ -150,12 +152,16 @@ const SizePreview = () => { style={{ borderBottom: 0 }} sx={{ textAlign: "right" }} > - {distribution - ? Math.floor( - usableInformation.maxFailureTolerations / - distribution.disks, - ) - : "-"} + {ecParity === EC0 + ? 0 + : distribution && + distribution.disks > 0 && + usableInformation.maxFailureTolerations + ? Math.floor( + usableInformation.maxFailureTolerations / + distribution.disks, + ) + : "-"} diff --git a/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSize.tsx b/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSize.tsx index dc189d89a0a..fe177de6f99 100644 --- a/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSize.tsx +++ b/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSize.tsx @@ -24,6 +24,7 @@ import { getBytes, k8sScalarUnitsExcluding, niceBytes, + EC0, } from "../../../../../../common/utils"; import { clearValidationError } from "../../../utils"; import { ecListTransform } from "../../../ListTenants/utils"; @@ -91,6 +92,38 @@ const TenantSize = ({ formToRender }: ITenantSizeProps) => { state.createTenant.fields.nameTenant.selectedStorageType, ); + const maxCPUsUse = useSelector( + (state: AppState) => state.createTenant.fields.tenantSize.maxCPUsUse, + ); + const maxMemorySize = useSelector( + (state: AppState) => state.createTenant.fields.tenantSize.maxMemorySize, + ); + const resourcesCPURequest = useSelector( + (state: AppState) => + state.createTenant.fields.tenantSize.resourcesCPURequest, + ); + const resourcesMemoryRequest = useSelector( + (state: AppState) => + state.createTenant.fields.tenantSize.resourcesMemoryRequest, + ); + + const resourcesCPURequestError = useSelector( + (state: AppState) => + state.createTenant.fields.tenantSize.resourcesCPURequestError, + ); + const resourcesCPULimitError = useSelector( + (state: AppState) => + state.createTenant.fields.tenantSize.resourcesCPULimitError, + ); + const resourcesMemoryRequestError = useSelector( + (state: AppState) => + state.createTenant.fields.tenantSize.resourcesMemoryRequestError, + ); + const resourcesMemoryLimitError = useSelector( + (state: AppState) => + state.createTenant.fields.tenantSize.resourcesMemoryLimitError, + ); + const [validationErrors, setValidationErrors] = useState({}); const [errorFlag, setErrorFlag] = useState(false); const [nodeError, setNodeError] = useState(""); @@ -238,7 +271,11 @@ const TenantSize = ({ formToRender }: ITenantSizeProps) => { !("drivesps" in commonValidation) && distribution.error === "" && ecParityCalc.error === 0 && - ecParity !== "", + ecParity !== "" && + resourcesMemoryRequestError === "" && + resourcesCPURequestError === "" && + resourcesMemoryLimitError === "" && + resourcesCPULimitError === "", }), ); @@ -258,9 +295,24 @@ const TenantSize = ({ formToRender }: ITenantSizeProps) => { nodeError, drivesPerServer, ecParity, + resourcesMemoryRequest, + resourcesCPURequest, + maxCPUsUse, + maxMemorySize, + resourcesMemoryRequestError, + resourcesCPURequestError, + resourcesMemoryLimitError, + resourcesCPULimitError, ]); useEffect(() => { + // Trivial case + if (nodes.trim() === "1") { + updateField("ecParity", EC0); + updateField("ecparityChoices", ecListTransform([EC0])); + updateField("cleanECChoices", [EC0]); + return; + } if (distribution.error === "") { // Get EC Value if (nodes.trim() !== "" && distribution.disks !== 0) { @@ -365,13 +417,13 @@ const TenantSize = ({ formToRender }: ITenantSizeProps) => { updateField("ecParity", value); }} label="Erasure Code Parity" - disabled={selectedStorageClass === ""} + disabled={selectedStorageClass === "" || ecParity === ""} value={ecParity} options={ecParityChoices} /> - Please select the desired parity. This setting will change the max - usable capacity in the cluster + Please select the desired parity. This setting will change the maximum + usable capacity in the cluster. diff --git a/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSizeResources.tsx b/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSizeResources.tsx index 1dc1e38b00f..faa07dd77c2 100644 --- a/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSizeResources.tsx +++ b/web-app/src/screens/Console/Tenants/AddTenant/Steps/TenantResources/TenantSizeResources.tsx @@ -183,8 +183,6 @@ const TenantSizeResources = () => { updateField("maxMemorySize", 0); updateField("resourcesCPURequest", ""); updateField("resourcesMemoryRequest", ""); - - console.error(err); }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [nodes, updateField]);