summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2024-05-07 12:33:39 +0200
committerGitHub <noreply@github.com>2024-05-07 12:33:39 +0200
commitad20465a5df47b49561bb0afbdda5cd65c5da4b8 (patch)
tree268f0fde5924b71ca2750dbbbba4cbe24c361f12 /opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute
parent7c0691eb6c348d2e49da3ef354b652cf26604905 (diff)
Revamped failure models (#228)
Diffstat (limited to 'opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute')
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ComputeService.java24
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceServer.java11
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() {