You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2021/06/18 19:38:31 UTC
[airavata-django-portal] 14/20: AIRAVATA-3453 Apply GRP policy when
it loads/changes
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch airavata-3453
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 93a52a456e4acada1b04f1e5af1c7fa69724b935
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu May 13 16:30:56 2021 -0400
AIRAVATA-3453 Apply GRP policy when it loads/changes
---
.../GroupResourceProfileSelector.vue | 5 +
.../js/web-components/ResourceSelectionEditor.vue | 107 +++++++++++++++------
2 files changed, 83 insertions(+), 29 deletions(-)
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/GroupResourceProfileSelector.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/GroupResourceProfileSelector.vue
index 78be81f..9fd33c0 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/GroupResourceProfileSelector.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/GroupResourceProfileSelector.vue
@@ -104,6 +104,11 @@ export default {
);
},
},
+ watch: {
+ value() {
+ this.groupResourceProfileId = this.value;
+ },
+ },
};
</script>
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/ResourceSelectionEditor.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/ResourceSelectionEditor.vue
index f45c133..5aea35a 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/ResourceSelectionEditor.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/web-components/ResourceSelectionEditor.vue
@@ -34,6 +34,7 @@ import {
getAppDeploymentQueues,
getApplicationDeployments,
getDefaultComputeResourceId,
+ getDefaultGroupResourceProfileId,
getGroupResourceProfile,
} from "./store";
export default {
@@ -53,7 +54,6 @@ export default {
applicationDeployments: [],
appDeploymentQueues: [],
groupResourceProfile: null,
- defaultComputeResourceId: null,
};
},
computed: {
@@ -178,17 +178,22 @@ export default {
async updateGroupResourceProfileId(event) {
const [groupResourceProfileId] = event.detail;
this.userConfigurationData.groupResourceProfileId = groupResourceProfileId;
- this.emitValueChanged();
await this.loadGroupResourceProfile();
await this.loadApplicationDeployments();
- // allowed queues may have changed
- // TODO: reapply batchQueueResourcePolicy if batchQueueResourcePolicy
+ await this.applyGroupResourceProfile();
+ this.emitValueChanged();
},
- updateComputeResourceHostId(event) {
+ async updateComputeResourceHostId(event) {
const [computeResourceHostId] = event.detail;
- this.userConfigurationData.computationalResourceScheduling.resourceHostId = computeResourceHostId;
- this.emitValueChanged();
- this.loadAppDeploymentQueues();
+ if (
+ this.userConfigurationData.computationalResourceScheduling
+ .resourceHostId !== computeResourceHostId
+ ) {
+ this.userConfigurationData.computationalResourceScheduling.resourceHostId = computeResourceHostId;
+ await this.loadAppDeploymentQueues();
+ this.setDefaultQueue();
+ this.emitValueChanged();
+ }
},
updateComputationalResourceScheduling(event) {
const [computationalResourceScheduling] = event.detail;
@@ -205,25 +210,45 @@ export default {
this.applicationModuleId,
this.groupResourceProfileId
);
+ },
+ async initializeGroupResourceProfileId() {
+ this.userConfigurationData.groupResourceProfileId = await getDefaultGroupResourceProfileId();
+ },
+ async applyGroupResourceProfile() {
// Make sure that resource host id is in the list of app deployments
- this.initializeResourceHostId();
+ const computeResourceChanged = await this.initializeResourceHostId();
+ if (computeResourceChanged) {
+ await this.loadAppDeploymentQueues();
+ this.setDefaultQueue();
+ } else if (!this.queue) {
+ // allowed queues may have changed. If selected queue isn't in the list
+ // of allowed queues, reset to the default
+ this.setDefaultQueue();
+ } else {
+ // reapply batchQueueResourcePolicy maximums since they may have changed
+ this.applyBatchQueueResourcePolicy();
+ }
},
- initializeResourceHostId() {
+ async initializeResourceHostId() {
// if there isn't a selected compute resource or there is but it isn't in
// the list of app deployments, set a default one
+ // Returns true if the resourceHostId changed
if (
!this.resourceHostId ||
!this.computeResources.find((crid) => crid === this.resourceHostId)
) {
- this.userConfigurationData.computationalResourceScheduling.resourceHostId = this.getDefaultResourceHostId();
- this.emitValueChanged();
+ this.userConfigurationData.computationalResourceScheduling.resourceHostId = await this.getDefaultResourceHostId();
+ return true;
}
+ return false;
},
async loadAppDeploymentQueues() {
const applicationDeployment = this.applicationDeployment;
this.appDeploymentQueues = await getAppDeploymentQueues(
applicationDeployment.appDeploymentId
);
+ },
+ setDefaultQueue() {
// set to the default queue or the first one
const defaultQueue = this.getDefaultQueue();
if (defaultQueue) {
@@ -248,9 +273,7 @@ export default {
crs.totalCPUCount = this.getDefaultCPUCount(queue);
crs.nodeCount = this.getDefaultNodeCount(queue);
crs.wallTimeLimit = this.getDefaultWalltime(queue);
- if (this.maxMemory === 0) {
- crs.totalPhysicalMemory = 0;
- }
+ crs.totalPhysicalMemory = 0;
} else {
const crs = this.userConfigurationData.computationalResourceScheduling;
crs.queueName = null;
@@ -259,7 +282,6 @@ export default {
crs.wallTimeLimit = 0;
crs.totalPhysicalMemory = 0;
}
- this.emitValueChanged();
},
getDefaultQueue() {
const defaultQueue = this.queues.find((q) => q.isDefaultQueue);
@@ -301,32 +323,58 @@ export default {
}
return queue.defaultWalltime;
},
+ applyBatchQueueResourcePolicy() {
+ if (this.batchQueueResourcePolicy) {
+ const crs = this.userConfigurationData.computationalResourceScheduling;
+ crs.totalCPUCount = Math.min(
+ crs.totalCPUCount,
+ this.batchQueueResourcePolicy.maxAllowedCores
+ );
+ crs.nodeCount = Math.min(
+ crs.nodeCount,
+ this.batchQueueResourcePolicy.maxAllowedNodes
+ );
+ crs.wallTimeLimit = Math.min(
+ crs.wallTimeLimit,
+ this.batchQueueResourcePolicy.maxAllowedWalltime
+ );
+ }
+ },
cloneValue() {
return this.value ? this.value.clone() : null;
},
async loadData() {
if (this.groupResourceProfileId) {
- this.loadGroupResourceProfile();
- this.loadApplicationDeployments();
+ // TODO: handle user no longer has access to GRP
+ await this.loadGroupResourceProfile();
+ await this.loadApplicationDeployments();
+ await this.loadAppDeploymentQueues();
+ await this.applyGroupResourceProfile();
+ // If existing values are no longer selectable, the userConfigurationData
+ // may have changed
+ this.emitValueChanged();
+ } else {
+ await this.initializeGroupResourceProfileId();
+ if (this.groupResourceProfileId) {
+ await this.loadGroupResourceProfile();
+ await this.loadApplicationDeployments();
+ await this.applyGroupResourceProfile();
+ this.emitValueChanged();
+ }
}
- this.loadDefaultComputeResourceId();
- },
- async loadDefaultComputeResourceId() {
- this.defaultComputeResourceId = await getDefaultComputeResourceId();
},
async loadGroupResourceProfile() {
this.groupResourceProfile = await getGroupResourceProfile(
this.groupResourceProfileId
);
},
- getDefaultResourceHostId() {
+ async getDefaultResourceHostId() {
+ const defaultComputeResourceId = await getDefaultComputeResourceId();
if (
- this.defaultComputeResourceId &&
- this.computeResources.find(
- (crid) => crid === this.defaultComputeResourceId
- )
+ defaultComputeResourceId &&
+ this.computeResources.find((crid) => crid === defaultComputeResourceId)
) {
- return this.defaultComputeResourceId;
+ return defaultComputeResourceId;
} else if (this.computeResources.length > 0) {
// Just pick the first one
return this.computeResources[0];
@@ -350,7 +398,8 @@ export default {
},
computeResources: "bindWebComponentProps",
resourceHostId: "bindWebComponentProps",
- queueName: "bindWebComponentProps",
+ "userConfigurationData.computationalResourceScheduling":
+ "bindWebComponentProps",
queues: "bindWebComponentProps",
},
};