This is an automated email from the ASF dual-hosted git repository.
isjarana pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git
The following commit(s) were added to refs/heads/develop by this push:
new 63cb65f95d Fix rescheduler
new ce29e9f0c8 Merge pull request #398 from isururanawaka/metaschedular
63cb65f95d is described below
commit 63cb65f95dcd309d12079752f5c2d73cec822148
Author: Isuru Ranawaka <[email protected]>
AuthorDate: Thu Mar 9 22:01:51 2023 -0500
Fix rescheduler
---
.../rescheduler/ExponentialBackOffReScheduler.java | 40 ++++++++++++++++++++--
.../api/service/handler/RegistryServerHandler.java | 2 ++
2 files changed, 40 insertions(+), 2 deletions(-)
diff --git
a/modules/airavata-metascheduler/process-scheduler/src/main/java/org/apache/airavata/metascheduler/process/scheduling/engine/rescheduler/ExponentialBackOffReScheduler.java
b/modules/airavata-metascheduler/process-scheduler/src/main/java/org/apache/airavata/metascheduler/process/scheduling/engine/rescheduler/ExponentialBackOffReScheduler.java
index 0143aed9fd..01fe73e35d 100644
---
a/modules/airavata-metascheduler/process-scheduler/src/main/java/org/apache/airavata/metascheduler/process/scheduling/engine/rescheduler/ExponentialBackOffReScheduler.java
+++
b/modules/airavata-metascheduler/process-scheduler/src/main/java/org/apache/airavata/metascheduler/process/scheduling/engine/rescheduler/ExponentialBackOffReScheduler.java
@@ -1,10 +1,13 @@
package
org.apache.airavata.metascheduler.process.scheduling.engine.rescheduler;
+import org.apache.airavata.common.exception.ApplicationSettingsException;
import org.apache.airavata.common.utils.ServerSettings;
import org.apache.airavata.common.utils.ThriftClientPool;
import
org.apache.airavata.metascheduler.core.engine.ComputeResourceSelectionPolicy;
import org.apache.airavata.metascheduler.core.engine.ReScheduler;
import org.apache.airavata.metascheduler.core.utils.Utils;
+import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.model.error.ExperimentNotFoundException;
import org.apache.airavata.model.experiment.ExperimentModel;
import org.apache.airavata.model.process.ProcessModel;
import
org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel;
@@ -12,6 +15,8 @@ import org.apache.airavata.model.status.ProcessState;
import org.apache.airavata.model.status.ProcessStatus;
import org.apache.airavata.registry.api.RegistryService;
import org.apache.airavata.registry.api.RegistryService.Client;
+import org.apache.airavata.registry.api.exception.RegistryServiceException;
+import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,8 +47,7 @@ public class ExponentialBackOffReScheduler implements
ReScheduler {
selectComputeResource(processModel.getProcessId());
if (computationalResourceSchedulingModel.isPresent()) {
-
processModel.setProcessResourceSchedule(computationalResourceSchedulingModel.get());
- client.updateProcess(processModel,
processModel.getProcessId());
+
updateResourceSchedulingModel(processModel,experimentModel,client);
Utils.updateProcessStatusAndPublishStatus(ProcessState.DEQUEUING,
processModel.getProcessId(),
processModel.getExperimentId(),
experimentModel.getGatewayId());
@@ -69,6 +73,7 @@ public class ExponentialBackOffReScheduler implements
ReScheduler {
double scanningInterval =
ServerSettings.getMetaschedulerScanningInterval();
if (currentTime >= (pastValue + value * scanningInterval *
1000)) {
+
updateResourceSchedulingModel(processModel,experimentModel,client);
Utils.saveAndPublishProcessStatus(ProcessState.DEQUEUING,
processModel.getProcessId(),
processModel.getExperimentId(),
experimentModel.getGatewayId());
@@ -104,4 +109,35 @@ public class ExponentialBackOffReScheduler implements
ReScheduler {
return fib(n - 1) + fib(n - 2);
}
+
+ private void updateResourceSchedulingModel(ProcessModel processModel,
ExperimentModel experimentModel,
+ RegistryService.Client
registryClient) throws
+ TException,
ExperimentNotFoundException,ApplicationSettingsException,
ClassNotFoundException, IllegalAccessException, InstantiationException,
RegistryServiceException {
+ String selectionPolicyClass =
ServerSettings.getComputeResourceSelectionPolicyClass();
+ ComputeResourceSelectionPolicy policy =
(ComputeResourceSelectionPolicy) Class.forName(selectionPolicyClass)
+ .newInstance();
+
+ Optional<ComputationalResourceSchedulingModel>
computationalResourceSchedulingModel = policy.
+ selectComputeResource(processModel.getProcessId());
+
+ if (computationalResourceSchedulingModel.isPresent()) {
+ ComputationalResourceSchedulingModel resourceSchedulingModel =
computationalResourceSchedulingModel.get();
+ List<InputDataObjectType> inputDataObjectTypeList =
experimentModel.getExperimentInputs();
+ inputDataObjectTypeList.forEach(obj -> {
+ if (obj.getName().equals("Wall_Time")) {
+ obj.setValue("-walltime=" +
resourceSchedulingModel.getWallTimeLimit());
+ }
+ if (obj.getName().equals("Parallel_Group_Count")) {
+ obj.setValue("-mgroupcount=" +
resourceSchedulingModel.getMGroupCount());
+ }
+ });
+
+ experimentModel.setExperimentInputs(inputDataObjectTypeList);
+ processModel.setProcessResourceSchedule(resourceSchedulingModel);
+
processModel.setComputeResourceId(resourceSchedulingModel.getResourceHostId());
+
+ registryClient.updateProcess(processModel,
processModel.getProcessId());
+ registryClient.updateExperiment(processModel.getExperimentId(),
experimentModel);
+ }
+ }
}
diff --git
a/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
b/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
index 8dadd0d831..2f4a682f88 100644
---
a/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
+++
b/modules/registry/registry-server/registry-api-service/src/main/java/org/apache/airavata/registry/api/service/handler/RegistryServerHandler.java
@@ -4860,6 +4860,8 @@ public class RegistryServerHandler implements
RegistryService.Iface {
return optionalQueueStatusModel.get();
} else {
QueueStatusModel queueStatusModel = new QueueStatusModel();
+ queueStatusModel.setHostName(hostName);
+ queueStatusModel.setQueueName(queueName);
queueStatusModel.setQueueUp(false);
return queueStatusModel;
}