// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance // with the License. A copy of the License is located at // // http://aws.amazon.com/apache2.0/ // // or in the "LICENSE.txt" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES // OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and // limitations under the License. import * as React from 'react' import {Trans, useTranslation} from 'react-i18next' import { Container, Header, Alert, Checkbox, SpaceBetween, } from '@cloudscape-design/components' import {setState, getState, useState, clearState} from '../../../store' import {Queue} from './queues.types' import {useFeatureFlag} from '../../../feature-flags/useFeatureFlag' import TitleDescriptionHelpPanel from '../../../components/help-panel/TitleDescriptionHelpPanel' import InfoLink from '../../../components/InfoLink' const slurmSettingsPath = [ 'app', 'wizard', 'config', 'Scheduling', 'SlurmSettings', ] const memoryBasedSchedulingEnabledPath = [ ...slurmSettingsPath, 'EnableMemoryBasedScheduling', ] const queuesPath = ['app', 'wizard', 'config', 'Scheduling', 'SlurmQueues'] const hasMultipleInstanceTypes = (queues: Queue[]): boolean => { return ( queues .map(queue => queue.ComputeResources) .map(computeResources => computeResources.map(computeResource => computeResource.Instances), ) .flat() .filter(instances => instances.length > 1).length > 0 ) } function SlurmMemorySettings() { const {t} = useTranslation() const memoryBasedSchedulingEnabled = useState( memoryBasedSchedulingEnabledPath, ) const queues = useState(queuesPath) const multipleInstancesTypesSelected = useFeatureFlag( 'queues_multiple_instance_types', ) ? hasMultipleInstanceTypes(queues) : false const clearSlurmSettingsState = React.useCallback(() => { clearState(memoryBasedSchedulingEnabledPath) if (Object.keys(getState(slurmSettingsPath)).length === 0) clearState(slurmSettingsPath) }, []) React.useEffect(() => { if (multipleInstancesTypesSelected) { clearSlurmSettingsState() } }, [clearSlurmSettingsState, multipleInstancesTypesSelected]) const toggleMemoryBasedSchedulingEnabled = () => { !memoryBasedSchedulingEnabled ? setState(memoryBasedSchedulingEnabledPath, true) : clearSlurmSettingsState() } return ( } />} > {t('wizard.queues.slurmMemorySettings.container.title')} } >
{t('wizard.queues.slurmMemorySettings.info.body')}
) } const SlurmMemorySettingsHelpPanel = () => { const {t} = useTranslation() const footerLinks = React.useMemo( () => [ { title: t( 'wizard.queues.slurmMemorySettings.container.memorySchedulingLink.title', ), href: t( 'wizard.queues.slurmMemorySettings.container.memorySchedulingLink.href', ), }, { title: t( 'wizard.queues.slurmMemorySettings.container.schedulingPropertiesLink.title', ), href: t( 'wizard.queues.slurmMemorySettings.container.schedulingPropertiesLink.href', ), }, ], [t], ) return ( } footerLinks={footerLinks} /> ) } export {SlurmMemorySettings, hasMultipleInstanceTypes}