diff options
| author | Sacheendra Talluri <sacheendra.t@gmail.com> | 2025-03-27 16:14:39 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-27 16:14:39 +0100 |
| commit | b20dd5ebb48465470b9632dc92ecfb1794a8a4bf (patch) | |
| tree | 0aeab9ad4b366cfe9e8aa79f841563e7f91758ab /opendc-compute/opendc-compute-simulator/src/main/java | |
| parent | ea45406229c8349e44c88f4112fe25435b59e4e9 (diff) | |
Support carbon forecasting in timeshift (#327)
* Remove task from scheduler bookkeeping after failure
* Support carbon forecasting in timeshift
* Register scheduler and carbonmodel in context
* Preliminary working task stopping; carbon intensity bug
* Working carbon based stop. Two timeshift thresholds
* Add a pause state task and guest
* Move task stopper to allocation spec
* Start tracking num pauses
Diffstat (limited to 'opendc-compute/opendc-compute-simulator/src/main/java')
2 files changed, 24 insertions, 9 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java index b4b34881..fb9dc6e6 100644 --- a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java +++ b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ComputeService.java @@ -24,7 +24,6 @@ package org.opendc.compute.simulator.service; import java.time.Duration; import java.time.InstantSource; -import java.time.temporal.TemporalAmount; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; @@ -186,7 +185,10 @@ public final class ComputeService implements AutoCloseable, CarbonReceiver { task.setState(newState); - if (newState == TaskState.COMPLETED || newState == TaskState.TERMINATED || newState == TaskState.FAILED) { + if (newState == TaskState.COMPLETED + || newState == TaskState.PAUSED + || newState == TaskState.TERMINATED + || newState == TaskState.FAILED) { LOGGER.info("task {} {} {} finished", task.getUid(), task.getName(), task.getFlavor()); if (activeTasks.remove(task) != null) { @@ -204,7 +206,7 @@ public final class ComputeService implements AutoCloseable, CarbonReceiver { } task.setHost(null); - host.removeTask(task); + host.delete(task); if (newState == TaskState.COMPLETED) { tasksCompleted++; @@ -214,10 +216,11 @@ public final class ComputeService implements AutoCloseable, CarbonReceiver { } if (task.getState() == TaskState.COMPLETED || task.getState() == TaskState.TERMINATED) { - scheduler.removeTask(task, hv); setTaskToBeRemoved(task); } + scheduler.removeTask(task, hv); + // Try to reschedule if needed requestSchedulingCycle(); } @@ -672,7 +675,7 @@ public final class ComputeService implements AutoCloseable, CarbonReceiver { public ServiceTask newTask( @NotNull String name, @NotNull TaskNature nature, - @NotNull TemporalAmount duration, + @NotNull Duration duration, @NotNull Long deadline, @NotNull ServiceFlavor flavor, @NotNull Workload workload, diff --git a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java index cada796a..6d097efb 100644 --- a/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java +++ b/opendc-compute/opendc-compute-simulator/src/main/java/org/opendc/compute/simulator/service/ServiceTask.java @@ -22,8 +22,8 @@ package org.opendc.compute.simulator.service; +import java.time.Duration; import java.time.Instant; -import java.time.temporal.TemporalAmount; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -51,7 +51,7 @@ public class ServiceTask { private final String name; private final TaskNature nature; - private final TemporalAmount duration; + private final Duration duration; private final Long deadline; private ServiceFlavor flavor; public Workload workload; @@ -67,13 +67,14 @@ public class ServiceTask { private SchedulingRequest request = null; private int numFailures = 0; + private int numPauses = 0; ServiceTask( ComputeService service, UUID uid, String name, TaskNature nature, - TemporalAmount duration, + Duration duration, Long deadline, ServiceFlavor flavor, Workload workload, @@ -102,7 +103,7 @@ public class ServiceTask { } @NotNull - public TemporalAmount getDuration() { + public Duration getDuration() { return duration; } @@ -165,6 +166,10 @@ public class ServiceTask { return this.numFailures; } + public int getNumPauses() { + return this.numPauses; + } + public void start() { switch (state) { case PROVISIONING: @@ -182,6 +187,11 @@ public class ServiceTask { assert request == null : "Scheduling request already active"; request = service.schedule(this); break; + case PAUSED: + LOGGER.info("User requested to start task after pause {}", uid); + setState(TaskState.PROVISIONING); + request = service.schedule(this, true); + break; case FAILED: LOGGER.info("User requested to start task after failure {}", uid); setState(TaskState.PROVISIONING); @@ -237,6 +247,8 @@ public class ServiceTask { } if (newState == TaskState.FAILED) { this.numFailures++; + } else if (newState == TaskState.PAUSED) { + this.numPauses++; } if ((newState == TaskState.COMPLETED) || newState == TaskState.FAILED) { |
