diff options
| author | Dante Niewenhuis <d.niewenhuis@hotmail.com> | 2024-05-07 12:33:39 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-07 12:33:39 +0200 |
| commit | ad20465a5df47b49561bb0afbdda5cd65c5da4b8 (patch) | |
| tree | 268f0fde5924b71ca2750dbbbba4cbe24c361f12 /opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute | |
| parent | 7c0691eb6c348d2e49da3ef354b652cf26604905 (diff) | |
Revamped failure models (#228)
Diffstat (limited to 'opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute')
2 files changed, 33 insertions, 2 deletions
diff --git a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ComputeService.java b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ComputeService.java index 167b13c7..a7e9f509 100644 --- a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ComputeService.java +++ b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ComputeService.java @@ -52,6 +52,7 @@ import org.opendc.compute.service.driver.HostModel; import org.opendc.compute.service.driver.HostState; import org.opendc.compute.service.scheduler.ComputeScheduler; import org.opendc.compute.service.telemetry.SchedulerStats; +import org.opendc.simulator.compute.workload.SimWorkload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -161,7 +162,9 @@ public final class ComputeService implements AutoCloseable { serviceServer.setState(newState); - if (newState == ServerState.TERMINATED || newState == ServerState.DELETED) { + if (newState == ServerState.TERMINATED + || newState == ServerState.DELETED + || newState == ServerState.ERROR) { LOGGER.info("Server {} {} {} finished", server.getUid(), server.getName(), server.getFlavor()); if (activeServers.remove(server) != null) { @@ -353,6 +356,8 @@ public final class ComputeService implements AutoCloseable { * Run a single scheduling iteration. */ private void doSchedule() { + // reorder tasks + while (!queue.isEmpty()) { SchedulingRequest request = queue.peek(); @@ -363,6 +368,9 @@ public final class ComputeService implements AutoCloseable { } final ServiceServer server = request.server; + // Check if all dependencies are met + // otherwise continue + final ServiceFlavor flavor = server.getFlavor(); final HostView hv = scheduler.select(request.server); @@ -582,6 +590,20 @@ public final class ComputeService implements AutoCloseable { public String toString() { return "ComputeService.Client"; } + + @Nullable + @Override + public void rescheduleServer(@NotNull Server server, @NotNull SimWorkload workload) { + ServiceServer internalServer = (ServiceServer) findServer(server.getUid()); + Host from = service.lookupHost(internalServer); + + from.delete(internalServer); + + internalServer.host = null; + + internalServer.setWorkload(workload); + internalServer.start(); + } } /** diff --git a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceServer.java b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceServer.java index 265feac0..e363faf2 100644 --- a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceServer.java +++ b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceServer.java @@ -25,6 +25,7 @@ package org.opendc.compute.service; import java.time.Instant; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -46,11 +47,12 @@ public final class ServiceServer implements Server { private final ComputeService service; private final UUID uid; + private final String name; private final ServiceFlavor flavor; private final ServiceImage image; private final Map<String, String> labels; - private final Map<String, ?> meta; + private Map<String, ?> meta; private final List<ServerWatcher> watchers = new ArrayList<>(); private ServerState state = ServerState.TERMINATED; @@ -111,6 +113,13 @@ public final class ServiceServer implements Server { return Collections.unmodifiableMap(meta); } + public void setWorkload(Object _workload) { + Map<String, Object> new_meta = new HashMap<String, Object>(); + new_meta.put("workload", _workload); + + meta = new_meta; + } + @NotNull @Override public ServerState getState() { |
