summaryrefslogtreecommitdiff
path: root/opendc-compute/opendc-compute-service
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2024-08-27 13:48:46 +0200
committerGitHub <noreply@github.com>2024-08-27 13:48:46 +0200
commit3363df4c72a064e590ca98f8e01832cfa4e15a3f (patch)
tree9a938700fe08ce344ff5d0d475d0b64d7233d1fc /opendc-compute/opendc-compute-service
parentc21708013f2746807f5bdb3fc47c2b47ed15b7c8 (diff)
Renamed input files and internally server is changed to task (#246)
* Updated SimTrace to use a single ArrayDeque instead of three separate lists for deadline, cpuUsage, and coreCount * Renamed input files to tasks.parquet and fragments.parquet. Renamed server to task. OpenDC nows exports tasks.parquet instead of server.parquet
Diffstat (limited to 'opendc-compute/opendc-compute-service')
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ComputeService.java178
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceTask.java (renamed from opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/ServiceServer.java)58
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/Host.java52
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/HostListener.java8
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/telemetry/HostSystemStats.java2
-rw-r--r--opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/telemetry/SchedulerStats.java12
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ComputeScheduler.kt10
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/FilterScheduler.kt10
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ReplayScheduler.kt10
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/ComputeFilter.kt4
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/DifferentHostFilter.kt6
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/HostFilter.kt6
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/InstanceCountFilter.kt4
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/RamFilter.kt8
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/SameHostFilter.kt6
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuCapacityFilter.kt10
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuFilter.kt8
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/CoreRamWeigher.kt4
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/HostWeigher.kt12
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/InstanceCountWeigher.kt4
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/RamWeigher.kt4
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuCapacityWeigher.kt8
-rw-r--r--opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuWeigher.kt4
-rw-r--r--opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt72
-rw-r--r--opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ServiceTaskTest.kt (renamed from opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ServiceServerTest.kt)242
-rw-r--r--opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/FilterSchedulerTest.kt176
26 files changed, 529 insertions, 389 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 a7e9f509..a64f6a4e 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
@@ -44,8 +44,8 @@ import org.opendc.common.util.Pacer;
import org.opendc.compute.api.ComputeClient;
import org.opendc.compute.api.Flavor;
import org.opendc.compute.api.Image;
-import org.opendc.compute.api.Server;
-import org.opendc.compute.api.ServerState;
+import org.opendc.compute.api.Task;
+import org.opendc.compute.api.TaskState;
import org.opendc.compute.service.driver.Host;
import org.opendc.compute.service.driver.HostListener;
import org.opendc.compute.service.driver.HostModel;
@@ -68,7 +68,7 @@ public final class ComputeService implements AutoCloseable {
private final InstantSource clock;
/**
- * The {@link ComputeScheduler} responsible for placing the servers onto hosts.
+ * The {@link ComputeScheduler} responsible for placing the tasks onto hosts.
*/
private final ComputeScheduler scheduler;
@@ -98,14 +98,14 @@ public final class ComputeService implements AutoCloseable {
private final Set<HostView> availableHosts = new HashSet<>();
/**
- * The servers that should be launched by the service.
+ * The tasks that should be launched by the service.
*/
- private final Deque<SchedulingRequest> queue = new ArrayDeque<>();
+ private final Deque<SchedulingRequest> taskQueue = new ArrayDeque<>();
/**
- * The active servers in the system.
+ * The active tasks in the system.
*/
- private final Map<Server, Host> activeServers = new HashMap<>();
+ private final Map<Task, Host> activeTasks = new HashMap<>();
/**
* The registered flavors for this compute service.
@@ -122,14 +122,14 @@ public final class ComputeService implements AutoCloseable {
private final List<ServiceImage> images = new ArrayList<>();
/**
- * The registered servers for this compute service.
+ * The registered tasks for this compute service.
*/
- private final Map<UUID, ServiceServer> serverById = new HashMap<>();
+ private final Map<UUID, ServiceTask> taskById = new HashMap<>();
- private final List<ServiceServer> servers = new ArrayList<>();
+ private final List<ServiceTask> tasks = new ArrayList<>();
/**
- * A [HostListener] used to track the active servers.
+ * A [HostListener] used to track the active tasks.
*/
private final HostListener hostListener = new HostListener() {
@Override
@@ -151,28 +151,26 @@ public final class ComputeService implements AutoCloseable {
}
@Override
- public void onStateChanged(@NotNull Host host, @NotNull Server server, @NotNull ServerState newState) {
- final ServiceServer serviceServer = (ServiceServer) server;
+ public void onStateChanged(@NotNull Host host, @NotNull Task task, @NotNull TaskState newState) {
+ final ServiceTask serviceTask = (ServiceTask) task;
- if (serviceServer.getHost() != host) {
- // This can happen when a server is rescheduled and started on another machine, while being deleted from
+ if (serviceTask.getHost() != host) {
+ // This can happen when a task is rescheduled and started on another machine, while being deleted from
// the old machine.
return;
}
- serviceServer.setState(newState);
+ serviceTask.setState(newState);
- if (newState == ServerState.TERMINATED
- || newState == ServerState.DELETED
- || newState == ServerState.ERROR) {
- LOGGER.info("Server {} {} {} finished", server.getUid(), server.getName(), server.getFlavor());
+ if (newState == TaskState.TERMINATED || newState == TaskState.DELETED || newState == TaskState.ERROR) {
+ LOGGER.info("task {} {} {} finished", task.getUid(), task.getName(), task.getFlavor());
- if (activeServers.remove(server) != null) {
- serversActive--;
+ if (activeTasks.remove(task) != null) {
+ tasksActive--;
}
HostView hv = hostToView.get(host);
- final ServiceFlavor flavor = serviceServer.getFlavor();
+ final ServiceFlavor flavor = serviceTask.getFlavor();
if (hv != null) {
hv.provisionedCores -= flavor.getCoreCount();
hv.instanceCount--;
@@ -192,8 +190,8 @@ public final class ComputeService implements AutoCloseable {
private long attemptsSuccess = 0L;
private long attemptsFailure = 0L;
private long attemptsError = 0L;
- private int serversPending = 0;
- private int serversActive = 0;
+ private int tasksPending = 0;
+ private int tasksActive = 0;
/**
* Construct a {@link ComputeService} instance.
@@ -222,10 +220,10 @@ public final class ComputeService implements AutoCloseable {
}
/**
- * Return the {@link Server}s hosted by this service.
+ * Return the {@link Task}s hosted by this service.
*/
- public List<Server> getServers() {
- return Collections.unmodifiableList(servers);
+ public List<Task> getTasks() {
+ return Collections.unmodifiableList(tasks);
}
/**
@@ -265,15 +263,14 @@ public final class ComputeService implements AutoCloseable {
}
/**
- * Lookup the {@link Host} that currently hosts the specified {@link Server}.
+ * Lookup the {@link Host} that currently hosts the specified {@link Task}.
*/
- public Host lookupHost(Server server) {
- if (server instanceof ServiceServer) {
- return ((ServiceServer) server).getHost();
+ public Host lookupHost(Task task) {
+ if (task instanceof ServiceTask) {
+ return ((ServiceTask) task).getHost();
}
- ServiceServer internal =
- Objects.requireNonNull(serverById.get(server.getUid()), "Invalid server passed to lookupHost");
+ ServiceTask internal = Objects.requireNonNull(taskById.get(task.getUid()), "Invalid task passed to lookupHost");
return internal.getHost();
}
@@ -294,9 +291,9 @@ public final class ComputeService implements AutoCloseable {
attemptsSuccess,
attemptsFailure,
attemptsError,
- servers.size(),
- serversPending,
- serversActive);
+ tasks.size(),
+ tasksPending,
+ tasksActive);
}
@Override
@@ -310,17 +307,17 @@ public final class ComputeService implements AutoCloseable {
}
/**
- * Enqueue the specified [server] to be scheduled onto a host.
+ * Enqueue the specified [task] to be scheduled onto a host.
*/
- SchedulingRequest schedule(ServiceServer server) {
- LOGGER.debug("Enqueueing server {} to be assigned to host", server.getUid());
+ SchedulingRequest schedule(ServiceTask task) {
+ LOGGER.debug("Enqueueing task {} to be assigned to host", task.getUid());
long now = clock.millis();
- SchedulingRequest request = new SchedulingRequest(server, now);
+ SchedulingRequest request = new SchedulingRequest(task, now);
- server.launchedAt = Instant.ofEpochMilli(now);
- queue.add(request);
- serversPending++;
+ task.launchedAt = Instant.ofEpochMilli(now);
+ taskQueue.add(request);
+ tasksPending++;
requestSchedulingCycle();
return request;
}
@@ -335,9 +332,9 @@ public final class ComputeService implements AutoCloseable {
images.remove(image);
}
- void delete(ServiceServer server) {
- serverById.remove(server.getUid());
- servers.remove(server);
+ void delete(ServiceTask task) {
+ taskById.remove(task.getUid());
+ tasks.remove(task);
}
/**
@@ -345,7 +342,7 @@ public final class ComputeService implements AutoCloseable {
*/
private void requestSchedulingCycle() {
// Bail out in case the queue is empty.
- if (queue.isEmpty()) {
+ if (taskQueue.isEmpty()) {
return;
}
@@ -358,35 +355,34 @@ public final class ComputeService implements AutoCloseable {
private void doSchedule() {
// reorder tasks
- while (!queue.isEmpty()) {
- SchedulingRequest request = queue.peek();
+ while (!taskQueue.isEmpty()) {
+ SchedulingRequest request = taskQueue.peek();
if (request.isCancelled) {
- queue.poll();
- serversPending--;
+ taskQueue.poll();
+ tasksPending--;
continue;
}
- final ServiceServer server = request.server;
+ final ServiceTask task = request.task;
// Check if all dependencies are met
// otherwise continue
- final ServiceFlavor flavor = server.getFlavor();
- final HostView hv = scheduler.select(request.server);
+ final ServiceFlavor flavor = task.getFlavor();
+ final HostView hv = scheduler.select(request.task);
- if (hv == null || !hv.getHost().canFit(server)) {
- LOGGER.trace(
- "Server {} selected for scheduling but no capacity available for it at the moment", server);
+ if (hv == null || !hv.getHost().canFit(task)) {
+ LOGGER.trace("Task {} selected for scheduling but no capacity available for it at the moment", task);
if (flavor.getMemorySize() > maxMemory || flavor.getCoreCount() > maxCores) {
// Remove the incoming image
- queue.poll();
- serversPending--;
+ taskQueue.poll();
+ tasksPending--;
attemptsFailure++;
- LOGGER.warn("Failed to spawn {}: does not fit", server);
+ LOGGER.warn("Failed to spawn {}: does not fit", task);
- server.setState(ServerState.TERMINATED);
+ task.setState(TaskState.TERMINATED);
continue;
} else {
break;
@@ -396,25 +392,25 @@ public final class ComputeService implements AutoCloseable {
Host host = hv.getHost();
// Remove request from queue
- queue.poll();
- serversPending--;
+ taskQueue.poll();
+ tasksPending--;
- LOGGER.info("Assigned server {} to host {}", server, host);
+ LOGGER.info("Assigned task {} to host {}", task, host);
try {
- server.host = host;
+ task.host = host;
- host.spawn(server);
- host.start(server);
+ host.spawn(task);
+ host.start(task);
- serversActive++;
+ tasksActive++;
attemptsSuccess++;
hv.instanceCount++;
hv.provisionedCores += flavor.getCoreCount();
hv.availableMemory -= flavor.getMemorySize();
- activeServers.put(server, host);
+ activeTasks.put(task, host);
} catch (Exception cause) {
LOGGER.error("Failed to deploy VM", cause);
attemptsError++;
@@ -537,7 +533,7 @@ public final class ComputeService implements AutoCloseable {
@NotNull
@Override
- public Server newServer(
+ public Task newTask(
@NotNull String name,
@NotNull Image image,
@NotNull Flavor flavor,
@@ -554,31 +550,31 @@ public final class ComputeService implements AutoCloseable {
final ServiceImage internalImage =
Objects.requireNonNull(service.imageById.get(image.getUid()), "Unknown image");
- ServiceServer server = new ServiceServer(service, uid, name, internalFlavor, internalImage, labels, meta);
+ ServiceTask task = new ServiceTask(service, uid, name, internalFlavor, internalImage, labels, meta);
- service.serverById.put(uid, server);
- service.servers.add(server);
+ service.taskById.put(uid, task);
+ service.tasks.add(task);
if (start) {
- server.start();
+ task.start();
}
- return server;
+ return task;
}
@Nullable
@Override
- public Server findServer(@NotNull UUID id) {
+ public Task findTask(@NotNull UUID id) {
checkOpen();
- return service.serverById.get(id);
+ return service.taskById.get(id);
}
@NotNull
@Override
- public List<Server> queryServers() {
+ public List<Task> queryTasks() {
checkOpen();
- return new ArrayList<>(service.servers);
+ return new ArrayList<>(service.tasks);
}
@Override
@@ -593,30 +589,30 @@ public final class ComputeService implements AutoCloseable {
@Nullable
@Override
- public void rescheduleServer(@NotNull Server server, @NotNull SimWorkload workload) {
- ServiceServer internalServer = (ServiceServer) findServer(server.getUid());
- Host from = service.lookupHost(internalServer);
+ public void rescheduleTask(@NotNull Task task, @NotNull SimWorkload workload) {
+ ServiceTask internalTask = (ServiceTask) findTask(task.getUid());
+ Host from = service.lookupHost(internalTask);
- from.delete(internalServer);
+ from.delete(internalTask);
- internalServer.host = null;
+ internalTask.host = null;
- internalServer.setWorkload(workload);
- internalServer.start();
+ internalTask.setWorkload(workload);
+ internalTask.start();
}
}
/**
- * A request to schedule a {@link ServiceServer} onto one of the {@link Host}s.
+ * A request to schedule a {@link ServiceTask} onto one of the {@link Host}s.
*/
static class SchedulingRequest {
- final ServiceServer server;
+ final ServiceTask task;
final long submitTime;
boolean isCancelled;
- SchedulingRequest(ServiceServer server, long submitTime) {
- this.server = server;
+ SchedulingRequest(ServiceTask task, long submitTime) {
+ this.task = task;
this.submitTime = submitTime;
}
}
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/ServiceTask.java
index e363faf2..e981921a 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/ServiceTask.java
@@ -32,18 +32,18 @@ import java.util.Objects;
import java.util.UUID;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.opendc.compute.api.Server;
-import org.opendc.compute.api.ServerState;
-import org.opendc.compute.api.ServerWatcher;
+import org.opendc.compute.api.Task;
+import org.opendc.compute.api.TaskState;
+import org.opendc.compute.api.TaskWatcher;
import org.opendc.compute.service.driver.Host;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Implementation of {@link Server} provided by {@link ComputeService}.
+ * Implementation of {@link Task} provided by {@link ComputeService}.
*/
-public final class ServiceServer implements Server {
- private static final Logger LOGGER = LoggerFactory.getLogger(ServiceServer.class);
+public final class ServiceTask implements Task {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ServiceTask.class);
private final ComputeService service;
private final UUID uid;
@@ -54,13 +54,13 @@ public final class ServiceServer implements Server {
private final Map<String, String> labels;
private Map<String, ?> meta;
- private final List<ServerWatcher> watchers = new ArrayList<>();
- private ServerState state = ServerState.TERMINATED;
+ private final List<TaskWatcher> watchers = new ArrayList<>();
+ private TaskState state = TaskState.TERMINATED;
Instant launchedAt = null;
Host host = null;
private ComputeService.SchedulingRequest request = null;
- ServiceServer(
+ ServiceTask(
ComputeService service,
UUID uid,
String name,
@@ -122,7 +122,7 @@ public final class ServiceServer implements Server {
@NotNull
@Override
- public ServerState getState() {
+ public TaskState getState() {
return state;
}
@@ -133,7 +133,7 @@ public final class ServiceServer implements Server {
}
/**
- * Return the {@link Host} on which the server is running or <code>null</code> if it is not running on a host.
+ * Return the {@link Host} on which the task is running or <code>null</code> if it is not running on a host.
*/
public Host getHost() {
return host;
@@ -143,16 +143,16 @@ public final class ServiceServer implements Server {
public void start() {
switch (state) {
case PROVISIONING:
- LOGGER.debug("User tried to start server but request is already pending: doing nothing");
+ LOGGER.debug("User tried to start task but request is already pending: doing nothing");
case RUNNING:
- LOGGER.debug("User tried to start server but server is already running");
+ LOGGER.debug("User tried to start task but task is already running");
break;
case DELETED:
- LOGGER.warn("User tried to start deleted server");
- throw new IllegalStateException("Server is deleted");
+ LOGGER.warn("User tried to start deleted task");
+ throw new IllegalStateException("Task is deleted");
default:
- LOGGER.info("User requested to start server {}", uid);
- setState(ServerState.PROVISIONING);
+ LOGGER.info("User requested to start task {}", uid);
+ setState(TaskState.PROVISIONING);
assert request == null : "Scheduling request already active";
request = service.schedule(this);
break;
@@ -164,13 +164,13 @@ public final class ServiceServer implements Server {
switch (state) {
case PROVISIONING:
cancelProvisioningRequest();
- setState(ServerState.TERMINATED);
+ setState(TaskState.TERMINATED);
break;
case RUNNING:
case ERROR:
final Host host = this.host;
if (host == null) {
- throw new IllegalStateException("Server not running");
+ throw new IllegalStateException("Task not running");
}
host.stop(this);
break;
@@ -178,12 +178,12 @@ public final class ServiceServer implements Server {
}
@Override
- public void watch(@NotNull ServerWatcher watcher) {
+ public void watch(@NotNull TaskWatcher watcher) {
watchers.add(watcher);
}
@Override
- public void unwatch(@NotNull ServerWatcher watcher) {
+ public void unwatch(@NotNull TaskWatcher watcher) {
watchers.remove(watcher);
}
@@ -199,17 +199,17 @@ public final class ServiceServer implements Server {
case TERMINATED:
cancelProvisioningRequest();
service.delete(this);
- setState(ServerState.DELETED);
+ setState(TaskState.DELETED);
break;
case RUNNING:
case ERROR:
final Host host = this.host;
if (host == null) {
- throw new IllegalStateException("Server not running");
+ throw new IllegalStateException("Task not running");
}
host.delete(this);
service.delete(this);
- setState(ServerState.DELETED);
+ setState(TaskState.DELETED);
break;
}
}
@@ -218,8 +218,8 @@ public final class ServiceServer implements Server {
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
- ServiceServer server = (ServiceServer) o;
- return service.equals(server.service) && uid.equals(server.uid);
+ ServiceTask task = (ServiceTask) o;
+ return service.equals(task.service) && uid.equals(task.uid);
}
@Override
@@ -229,12 +229,12 @@ public final class ServiceServer implements Server {
@Override
public String toString() {
- return "Server[uid=" + uid + ",name=" + name + ",state=" + state + "]";
+ return "Task[uid=" + uid + ",name=" + name + ",state=" + state + "]";
}
- void setState(ServerState state) {
+ void setState(TaskState state) {
if (this.state != state) {
- for (ServerWatcher watcher : watchers) {
+ for (TaskWatcher watcher : watchers) {
watcher.onStateChanged(this, state);
}
}
diff --git a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/Host.java b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/Host.java
index 760d7f1a..546f774b 100644
--- a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/Host.java
+++ b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/Host.java
@@ -25,14 +25,14 @@ package org.opendc.compute.service.driver;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
-import org.opendc.compute.api.Server;
+import org.opendc.compute.api.Task;
import org.opendc.compute.service.driver.telemetry.GuestCpuStats;
import org.opendc.compute.service.driver.telemetry.GuestSystemStats;
import org.opendc.compute.service.driver.telemetry.HostCpuStats;
import org.opendc.compute.service.driver.telemetry.HostSystemStats;
/**
- * Base interface for representing compute resources that host virtualized {@link Server} instances.
+ * Base interface for representing compute resources that host virtualized {@link Task} instances.
*/
public interface Host {
/**
@@ -61,43 +61,43 @@ public interface Host {
Map<String, ?> getMeta();
/**
- * Return the {@link Server} instances known to the host.
+ * Return the {@link Task} instances known to the host.
*/
- Set<Server> getInstances();
+ Set<Task> getInstances();
/**
- * Determine whether the specified <code>server</code> can still fit on this host.
+ * Determine whether the specified <code>task</code> can still fit on this host.
*/
- boolean canFit(Server server);
+ boolean canFit(Task task);
/**
- * Register the specified <code>server</code> on the host.
+ * Register the specified <code>task</code> on the host.
*/
- void spawn(Server server);
+ void spawn(Task task);
/**
- * Determine whether the specified <code>server</code> exists on the host.
+ * Determine whether the specified <code>task</code> exists on the host.
*/
- boolean contains(Server server);
+ boolean contains(Task task);
/**
- * Start the server if it is currently not running on this host.
+ * Start the task if it is currently not running on this host.
*
- * @throws IllegalArgumentException if the server is not present on the host.
+ * @throws IllegalArgumentException if the task is not present on the host.
*/
- void start(Server server);
+ void start(Task task);
/**
- * Stop the server if it is currently running on this host.
+ * Stop the task if it is currently running on this host.
*
- * @throws IllegalArgumentException if the server is not present on the host.
+ * @throws IllegalArgumentException if the task is not present on the host.
*/
- void stop(Server server);
+ void stop(Task task);
/**
- * Delete the specified <code>server</code> on this host and cleanup all resources associated with it.
+ * Delete the specified <code>task</code> on this host and cleanup all resources associated with it.
*/
- void delete(Server server);
+ void delete(Task task);
/**
* Add a [HostListener] to this host.
@@ -115,12 +115,12 @@ public interface Host {
HostSystemStats getSystemStats();
/**
- * Query the system statistics of a {@link Server} that is located on this host.
+ * Query the system statistics of a {@link Task} that is located on this host.
*
- * @param server The {@link Server} to obtain the system statistics of.
- * @throws IllegalArgumentException if the server is not present on the host.
+ * @param task The {@link Task} to obtain the system statistics of.
+ * @throws IllegalArgumentException if the task is not present on the host.
*/
- GuestSystemStats getSystemStats(Server server);
+ GuestSystemStats getSystemStats(Task task);
/**
* Query the CPU statistics of the host.
@@ -128,10 +128,10 @@ public interface Host {
HostCpuStats getCpuStats();
/**
- * Query the CPU statistics of a {@link Server} that is located on this host.
+ * Query the CPU statistics of a {@link Task} that is located on this host.
*
- * @param server The {@link Server} to obtain the CPU statistics of.
- * @throws IllegalArgumentException if the server is not present on the host.
+ * @param task The {@link Task} to obtain the CPU statistics of.
+ * @throws IllegalArgumentException if the task is not present on the host.
*/
- GuestCpuStats getCpuStats(Server server);
+ GuestCpuStats getCpuStats(Task task);
}
diff --git a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/HostListener.java b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/HostListener.java
index feefca40..079c6cff 100644
--- a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/HostListener.java
+++ b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/HostListener.java
@@ -22,17 +22,17 @@
package org.opendc.compute.service.driver;
-import org.opendc.compute.api.Server;
-import org.opendc.compute.api.ServerState;
+import org.opendc.compute.api.Task;
+import org.opendc.compute.api.TaskState;
/**
* Listener interface for events originating from a {@link Host}.
*/
public interface HostListener {
/**
- * This method is invoked when the state of <code>server</code> on <code>host</code> changes.
+ * This method is invoked when the state of <code>task</code> on <code>host</code> changes.
*/
- default void onStateChanged(Host host, Server server, ServerState newState) {}
+ default void onStateChanged(Host host, Task task, TaskState newState) {}
/**
* This method is invoked when the state of a {@link Host} has changed.
diff --git a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/telemetry/HostSystemStats.java b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/telemetry/HostSystemStats.java
index d9dba274..c0713f3c 100644
--- a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/telemetry/HostSystemStats.java
+++ b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/driver/telemetry/HostSystemStats.java
@@ -30,7 +30,7 @@ import java.time.Instant;
*
* @param uptime The cumulative uptime of the host since last boot (in ms).
* @param downtime The cumulative downtime of the host since last boot (in ms).
- * @param bootTime The time at which the server started.
+ * @param bootTime The time at which the task started.
* @param powerDraw Instantaneous power draw of the system (in W).
* @param energyUsage The cumulative energy usage of the system (in J).
* @param guestsTerminated The number of guests that are in a terminated state.
diff --git a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/telemetry/SchedulerStats.java b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/telemetry/SchedulerStats.java
index 2157169b..fc044d8c 100644
--- a/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/telemetry/SchedulerStats.java
+++ b/opendc-compute/opendc-compute-service/src/main/java/org/opendc/compute/service/telemetry/SchedulerStats.java
@@ -30,9 +30,9 @@ package org.opendc.compute.service.telemetry;
* @param attemptsSuccess Scheduling attempts that resulted into an allocation onto a host.
* @param attemptsFailure The number of failed scheduling attempt due to insufficient capacity at the moment.
* @param attemptsError The number of scheduling attempts that failed due to system error.
- * @param serversTotal The number of servers registered with the service.
- * @param serversPending The number of servers that are pending to be scheduled.
- * @param serversActive The number of servers that are currently managed by the service and running.
+ * @param tasksTotal The number of tasks registered with the service.
+ * @param tasksPending The number of tasks that are pending to be scheduled.
+ * @param tasksActive The number of tasks that are currently managed by the service and running.
*/
public record SchedulerStats(
int hostsAvailable,
@@ -40,6 +40,6 @@ public record SchedulerStats(
long attemptsSuccess,
long attemptsFailure,
long attemptsError,
- int serversTotal,
- int serversPending,
- int serversActive) {}
+ int tasksTotal,
+ int tasksPending,
+ int tasksActive) {}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ComputeScheduler.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ComputeScheduler.kt
index 0ccaf991..42de9ebc 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ComputeScheduler.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ComputeScheduler.kt
@@ -22,12 +22,12 @@
package org.opendc.compute.service.scheduler
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.ComputeService
import org.opendc.compute.service.HostView
/**
- * A generic scheduler interface used by the [ComputeService] to select hosts to place [Server]s on.
+ * A generic scheduler interface used by the [ComputeService] to select hosts to place [Task]s on.
*/
public interface ComputeScheduler {
/**
@@ -41,10 +41,10 @@ public interface ComputeScheduler {
public fun removeHost(host: HostView)
/**
- * Select a host for the specified [server].
+ * Select a host for the specified [task].
*
- * @param server The server to select a host for.
+ * @param task The server to select a host for.
* @return The host to schedule the server on or `null` if no server is available.
*/
- public fun select(server: Server): HostView?
+ public fun select(task: Task): HostView?
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/FilterScheduler.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/FilterScheduler.kt
index 41118386..772a470d 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/FilterScheduler.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/FilterScheduler.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import org.opendc.compute.service.scheduler.filters.HostFilter
import org.opendc.compute.service.scheduler.weights.HostWeigher
@@ -32,7 +32,7 @@ import kotlin.math.min
/**
* A [ComputeScheduler] implementation that uses filtering and weighing passes to select
- * the host to schedule a [Server] on.
+ * the host to schedule a [Task] on.
*
* This implementation is based on the filter scheduler from OpenStack Nova.
* See: https://docs.openstack.org/nova/latest/user/filter-scheduler.html
@@ -65,13 +65,13 @@ public class FilterScheduler(
hosts.remove(host)
}
- override fun select(server: Server): HostView? {
+ override fun select(task: Task): HostView? {
val hosts = hosts
- val filteredHosts = hosts.filter { host -> filters.all { filter -> filter.test(host, server) } }
+ val filteredHosts = hosts.filter { host -> filters.all { filter -> filter.test(host, task) } }
val subset =
if (weighers.isNotEmpty()) {
- val results = weighers.map { it.getWeights(filteredHosts, server) }
+ val results = weighers.map { it.getWeights(filteredHosts, task) }
val weights = DoubleArray(filteredHosts.size)
for (result in results) {
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ReplayScheduler.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ReplayScheduler.kt
index a6703c89..d1690ddf 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ReplayScheduler.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/ReplayScheduler.kt
@@ -23,7 +23,7 @@
package org.opendc.compute.service.scheduler
import mu.KotlinLogging
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -48,14 +48,14 @@ public class ReplayScheduler(private val vmPlacements: Map<String, String>) : Co
hosts.remove(host)
}
- override fun select(server: Server): HostView? {
+ override fun select(task: Task): HostView? {
val clusterName =
- vmPlacements[server.name]
- ?: throw IllegalStateException("Could not find placement data in VM placement file for VM ${server.name}")
+ vmPlacements[task.name]
+ ?: throw IllegalStateException("Could not find placement data in VM placement file for VM ${task.name}")
val machinesInCluster = hosts.filter { it.host.name.contains(clusterName) }
if (machinesInCluster.isEmpty()) {
- logger.info { "Could not find any machines belonging to cluster $clusterName for image ${server.name}, assigning randomly." }
+ logger.info { "Could not find any machines belonging to cluster $clusterName for image ${task.name}, assigning randomly." }
return hosts.maxByOrNull { it.availableMemory }
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/ComputeFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/ComputeFilter.kt
index dd707f60..2ad626f3 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/ComputeFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/ComputeFilter.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import org.opendc.compute.service.driver.HostState
@@ -32,7 +32,7 @@ import org.opendc.compute.service.driver.HostState
public class ComputeFilter : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
val result = host.host.state == HostState.UP
return result
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/DifferentHostFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/DifferentHostFilter.kt
index df67a19f..ffafeaa9 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/DifferentHostFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/DifferentHostFilter.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import java.util.UUID
@@ -32,10 +32,10 @@ import java.util.UUID
public class DifferentHostFilter : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
@Suppress("UNCHECKED_CAST")
- val affinityUUIDs = server.meta["scheduler_hint:different_host"] as? Set<UUID> ?: return true
+ val affinityUUIDs = task.meta["scheduler_hint:different_host"] as? Set<UUID> ?: return true
return host.host.instances.none { it.uid in affinityUUIDs }
}
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/HostFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/HostFilter.kt
index 902c760e..f506127a 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/HostFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/HostFilter.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import org.opendc.compute.service.scheduler.FilterScheduler
@@ -32,10 +32,10 @@ import org.opendc.compute.service.scheduler.FilterScheduler
public fun interface HostFilter {
/**
* Test whether the specified [host] should be included in the selection
- * for scheduling the specified [server].
+ * for scheduling the specified [task].
*/
public fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/InstanceCountFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/InstanceCountFilter.kt
index d9348802..7d5eb400 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/InstanceCountFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/InstanceCountFilter.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -33,7 +33,7 @@ import org.opendc.compute.service.HostView
public class InstanceCountFilter(private val limit: Int) : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
return host.instanceCount < limit
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/RamFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/RamFilter.kt
index d8c3d540..0a28ccc6 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/RamFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/RamFilter.kt
@@ -22,20 +22,20 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
- * A [HostFilter] that filters hosts based on the memory requirements of a [Server] and the RAM available on the host.
+ * A [HostFilter] that filters hosts based on the memory requirements of a [Task] and the RAM available on the host.
*
* @param allocationRatio Virtual RAM to physical RAM allocation ratio.
*/
public class RamFilter(private val allocationRatio: Double) : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
- val requestedMemory = server.flavor.memorySize
+ val requestedMemory = task.flavor.memorySize
val availableMemory = host.availableMemory
val memoryCapacity = host.host.model.memoryCapacity
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/SameHostFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/SameHostFilter.kt
index 4c31c66a..d8634285 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/SameHostFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/SameHostFilter.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import java.util.UUID
@@ -32,10 +32,10 @@ import java.util.UUID
public class SameHostFilter : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
@Suppress("UNCHECKED_CAST")
- val affinityUUIDs = server.meta["scheduler_hint:same_host"] as? Set<UUID> ?: return true
+ val affinityUUIDs = task.meta["scheduler_hint:same_host"] as? Set<UUID> ?: return true
return host.host.instances.any { it.uid in affinityUUIDs }
}
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuCapacityFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuCapacityFilter.kt
index 01ece80e..f87658cd 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuCapacityFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuCapacityFilter.kt
@@ -22,22 +22,22 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
- * A [HostFilter] that filters hosts based on the vCPU speed requirements of a [Server] and the available
+ * A [HostFilter] that filters hosts based on the vCPU speed requirements of a [Task] and the available
* capacity on the host.
*/
public class VCpuCapacityFilter : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
- val requiredCapacity = server.flavor.meta["cpu-capacity"] as? Double
+ val requiredCapacity = task.flavor.meta["cpu-capacity"] as? Double
val hostModel = host.host.model
val availableCapacity = hostModel.cpuCapacity / hostModel.cpuCount
- return requiredCapacity == null || availableCapacity >= (requiredCapacity / server.flavor.coreCount)
+ return requiredCapacity == null || availableCapacity >= (requiredCapacity / task.flavor.coreCount)
}
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuFilter.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuFilter.kt
index cefb3f7a..442e58f6 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuFilter.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/filters/VCpuFilter.kt
@@ -22,20 +22,20 @@
package org.opendc.compute.service.scheduler.filters
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
- * A [HostFilter] that filters hosts based on the vCPU requirements of a [Server] and the available vCPUs on the host.
+ * A [HostFilter] that filters hosts based on the vCPU requirements of a [Task] and the available vCPUs on the host.
*
* @param allocationRatio Virtual CPU to physical CPU allocation ratio.
*/
public class VCpuFilter(private val allocationRatio: Double) : HostFilter {
override fun test(
host: HostView,
- server: Server,
+ task: Task,
): Boolean {
- val requested = server.flavor.coreCount
+ val requested = task.flavor.coreCount
val totalCores = host.host.model.coreCount
val limit = totalCores * allocationRatio
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/CoreRamWeigher.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/CoreRamWeigher.kt
index d6aafbc7..d84f5e68 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/CoreRamWeigher.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/CoreRamWeigher.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.weights
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -35,7 +35,7 @@ import org.opendc.compute.service.HostView
public class CoreRamWeigher(override val multiplier: Double = 1.0) : HostWeigher {
override fun getWeight(
host: HostView,
- server: Server,
+ task: Task,
): Double {
return host.availableMemory.toDouble() / host.host.model.cpuCount
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/HostWeigher.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/HostWeigher.kt
index 825cfff9..3f2c4123 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/HostWeigher.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/HostWeigher.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.weights
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import org.opendc.compute.service.scheduler.FilterScheduler
@@ -36,26 +36,26 @@ public interface HostWeigher {
public val multiplier: Double
/**
- * Obtain the weight of the specified [host] when scheduling the specified [server].
+ * Obtain the weight of the specified [host] when scheduling the specified [task].
*/
public fun getWeight(
host: HostView,
- server: Server,
+ task: Task,
): Double
/**
- * Obtain the weights for [hosts] when scheduling the specified [server].
+ * Obtain the weights for [hosts] when scheduling the specified [task].
*/
public fun getWeights(
hosts: List<HostView>,
- server: Server,
+ task: Task,
): Result {
val weights = DoubleArray(hosts.size)
var min = Double.MAX_VALUE
var max = Double.MIN_VALUE
for ((i, host) in hosts.withIndex()) {
- val weight = getWeight(host, server)
+ val weight = getWeight(host, task)
weights[i] = weight
min = kotlin.math.min(min, weight)
max = kotlin.math.max(max, weight)
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/InstanceCountWeigher.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/InstanceCountWeigher.kt
index 9e0a9517..0789f109 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/InstanceCountWeigher.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/InstanceCountWeigher.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.weights
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -31,7 +31,7 @@ import org.opendc.compute.service.HostView
public class InstanceCountWeigher(override val multiplier: Double = 1.0) : HostWeigher {
override fun getWeight(
host: HostView,
- server: Server,
+ task: Task,
): Double {
return host.instanceCount.toDouble()
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/RamWeigher.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/RamWeigher.kt
index fca2e893..fb03d064 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/RamWeigher.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/RamWeigher.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.weights
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -34,7 +34,7 @@ import org.opendc.compute.service.HostView
public class RamWeigher(override val multiplier: Double = 1.0) : HostWeigher {
override fun getWeight(
host: HostView,
- server: Server,
+ task: Task,
): Double {
return host.availableMemory.toDouble()
}
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuCapacityWeigher.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuCapacityWeigher.kt
index 242660c3..6d1482ff 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuCapacityWeigher.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuCapacityWeigher.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.weights
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -31,11 +31,11 @@ import org.opendc.compute.service.HostView
public class VCpuCapacityWeigher(override val multiplier: Double = 1.0) : HostWeigher {
override fun getWeight(
host: HostView,
- server: Server,
+ task: Task,
): Double {
val model = host.host.model
- val requiredCapacity = server.flavor.meta["cpu-capacity"] as? Double ?: 0.0
- return model.cpuCapacity / model.cpuCount - requiredCapacity / server.flavor.coreCount
+ val requiredCapacity = task.flavor.meta["cpu-capacity"] as? Double ?: 0.0
+ return model.cpuCapacity / model.cpuCount - requiredCapacity / task.flavor.coreCount
}
override fun toString(): String = "VCpuWeigher"
diff --git a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuWeigher.kt b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuWeigher.kt
index be93458f..dfc30b54 100644
--- a/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuWeigher.kt
+++ b/opendc-compute/opendc-compute-service/src/main/kotlin/org/opendc/compute/service/scheduler/weights/VCpuWeigher.kt
@@ -22,7 +22,7 @@
package org.opendc.compute.service.scheduler.weights
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
/**
@@ -37,7 +37,7 @@ public class VCpuWeigher(private val allocationRatio: Double, override val multi
override fun getWeight(
host: HostView,
- server: Server,
+ task: Task,
): Double {
return host.host.model.cpuCount * allocationRatio - host.provisionedCores
}
diff --git a/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt b/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt
index 32d01660..e48244f0 100644
--- a/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt
+++ b/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ComputeServiceTest.kt
@@ -36,9 +36,9 @@ import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.opendc.compute.api.Flavor
import org.opendc.compute.api.Image
-import org.opendc.compute.api.Server
-import org.opendc.compute.api.ServerState
-import org.opendc.compute.api.ServerWatcher
+import org.opendc.compute.api.Task
+import org.opendc.compute.api.TaskState
+import org.opendc.compute.api.TaskWatcher
import org.opendc.compute.service.driver.Host
import org.opendc.compute.service.driver.HostListener
import org.opendc.compute.service.driver.HostModel
@@ -78,21 +78,21 @@ internal class ComputeServiceTest {
assertEquals(emptyList<Flavor>(), client.queryFlavors())
assertEquals(emptyList<Image>(), client.queryImages())
- assertEquals(emptyList<Server>(), client.queryServers())
+ assertEquals(emptyList<Task>(), client.queryTasks())
client.close()
assertThrows<IllegalStateException> { client.queryFlavors() }
assertThrows<IllegalStateException> { client.queryImages() }
- assertThrows<IllegalStateException> { client.queryServers() }
+ assertThrows<IllegalStateException> { client.queryTasks() }
assertThrows<IllegalStateException> { client.findFlavor(UUID.randomUUID()) }
assertThrows<IllegalStateException> { client.findImage(UUID.randomUUID()) }
- assertThrows<IllegalStateException> { client.findServer(UUID.randomUUID()) }
+ assertThrows<IllegalStateException> { client.findTask(UUID.randomUUID()) }
assertThrows<IllegalStateException> { client.newFlavor("test", 1, 2) }
assertThrows<IllegalStateException> { client.newImage("test") }
- assertThrows<IllegalStateException> { client.newServer("test", mockk(), mockk()) }
+ assertThrows<IllegalStateException> { client.newTask("test", mockk(), mockk()) }
}
@Test
@@ -106,12 +106,12 @@ internal class ComputeServiceTest {
val image = client.newImage("test")
assertEquals(listOf(image), client.queryImages())
assertEquals(image, client.findImage(image.uid))
- val server = client.newServer("test", image, flavor, start = false)
- assertEquals(listOf(server), client.queryServers())
- assertEquals(server, client.findServer(server.uid))
+ val server = client.newTask("test", image, flavor, start = false)
+ assertEquals(listOf(server), client.queryTasks())
+ assertEquals(server, client.findTask(server.uid))
server.delete()
- assertNull(client.findServer(server.uid))
+ assertNull(client.findTask(server.uid))
image.delete()
assertNull(client.findImage(image.uid))
@@ -174,12 +174,12 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 0)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
}
@Test
@@ -188,12 +188,12 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 0, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
}
@Test
@@ -202,12 +202,12 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
}
@Test
@@ -216,13 +216,13 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
server.stop()
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
}
@Test
@@ -239,12 +239,12 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
delay(10L * 60 * 1000)
server.reload()
- assertEquals(ServerState.PROVISIONING, server.state)
+ assertEquals(TaskState.PROVISIONING, server.state)
verify { host.canFit(server) }
}
@@ -266,7 +266,7 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
delay(5L * 60 * 1000)
@@ -276,7 +276,7 @@ internal class ComputeServiceTest {
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.PROVISIONING, server.state)
+ assertEquals(TaskState.PROVISIONING, server.state)
verify { host.canFit(server) }
}
@@ -298,7 +298,7 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
delay(5L * 60 * 1000)
@@ -308,7 +308,7 @@ internal class ComputeServiceTest {
server.start()
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.PROVISIONING, server.state)
+ assertEquals(TaskState.PROVISIONING, server.state)
verify(exactly = 0) { host.canFit(server) }
}
@@ -330,10 +330,10 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
- val slot = slot<Server>()
+ val server = client.newTask("test", image, flavor, start = false)
+ val slot = slot<Task>()
- val watcher = mockk<ServerWatcher>(relaxUnitFun = true)
+ val watcher = mockk<TaskWatcher>(relaxUnitFun = true)
server.watch(watcher)
// Start server
@@ -341,20 +341,20 @@ internal class ComputeServiceTest {
delay(5L * 60 * 1000)
coVerify { host.spawn(capture(slot)) }
- listeners.forEach { it.onStateChanged(host, slot.captured, ServerState.RUNNING) }
+ listeners.forEach { it.onStateChanged(host, slot.captured, TaskState.RUNNING) }
server.reload()
- assertEquals(ServerState.RUNNING, server.state)
+ assertEquals(TaskState.RUNNING, server.state)
- verify { watcher.onStateChanged(server, ServerState.RUNNING) }
+ verify { watcher.onStateChanged(server, TaskState.RUNNING) }
// Stop server
- listeners.forEach { it.onStateChanged(host, slot.captured, ServerState.TERMINATED) }
+ listeners.forEach { it.onStateChanged(host, slot.captured, TaskState.TERMINATED) }
server.reload()
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
- verify { watcher.onStateChanged(server, ServerState.TERMINATED) }
+ verify { watcher.onStateChanged(server, TaskState.TERMINATED) }
}
@Test
@@ -375,12 +375,12 @@ internal class ComputeServiceTest {
val client = service.newClient()
val flavor = client.newFlavor("test", 1, 1024)
val image = client.newImage("test")
- val server = client.newServer("test", image, flavor, start = false)
+ val server = client.newTask("test", image, flavor, start = false)
server.start()
delay(5L * 60 * 1000)
server.reload()
- assertEquals(ServerState.PROVISIONING, server.state)
+ assertEquals(TaskState.PROVISIONING, server.state)
}
}
diff --git a/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ServiceServerTest.kt b/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ServiceTaskTest.kt
index b420ee3b..e77665fe 100644
--- a/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ServiceServerTest.kt
+++ b/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/ServiceTaskTest.kt
@@ -31,16 +31,16 @@ import org.junit.jupiter.api.Assertions.assertNotEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
-import org.opendc.compute.api.Server
-import org.opendc.compute.api.ServerState
+import org.opendc.compute.api.Task
+import org.opendc.compute.api.TaskState
import org.opendc.compute.service.driver.Host
import org.opendc.simulator.kotlin.runSimulation
import java.util.UUID
/**
- * Test suite for the [ServiceServer] implementation.
+ * Test suite for the [ServiceTask] implementation.
*/
-class ServiceServerTest {
+class ServiceTaskTest {
@Test
fun testEquality() {
val service = mockk<ComputeService>()
@@ -48,8 +48,26 @@ class ServiceServerTest {
val flavor = mockFlavor()
val image = mockImage()
- val a = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
- val b = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
+ val a =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+ val b =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
assertEquals(a, b)
}
@@ -60,9 +78,18 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val a = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- val b = mockk<Server>(relaxUnitFun = true)
+ val a =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ val b = mockk<Task>(relaxUnitFun = true)
every { b.uid } returns UUID.randomUUID()
assertNotEquals(a, b)
@@ -74,7 +101,16 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val a = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
+ val a =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
assertNotEquals(a, Unit)
}
@@ -86,14 +122,23 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- every { service.schedule(any()) } answers { ComputeService.SchedulingRequest(it.invocation.args[0] as ServiceServer, 0) }
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ every { service.schedule(any()) } answers { ComputeService.SchedulingRequest(it.invocation.args[0] as ServiceTask, 0) }
server.start()
verify(exactly = 1) { service.schedule(server) }
- assertEquals(ServerState.PROVISIONING, server.state)
+ assertEquals(TaskState.PROVISIONING, server.state)
}
@Test
@@ -103,9 +148,18 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.DELETED)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.DELETED)
assertThrows<IllegalStateException> { server.start() }
}
@@ -117,13 +171,22 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.PROVISIONING)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.PROVISIONING)
server.start()
- assertEquals(ServerState.PROVISIONING, server.state)
+ assertEquals(TaskState.PROVISIONING, server.state)
}
@Test
@@ -133,13 +196,22 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.RUNNING)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.RUNNING)
server.start()
- assertEquals(ServerState.RUNNING, server.state)
+ assertEquals(TaskState.RUNNING, server.state)
}
@Test
@@ -149,7 +221,16 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
val request = ComputeService.SchedulingRequest(server, 0)
every { service.schedule(any()) } returns request
@@ -158,7 +239,7 @@ class ServiceServerTest {
server.stop()
assertTrue(request.isCancelled)
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
}
@Test
@@ -168,12 +249,21 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.TERMINATED)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.TERMINATED)
server.stop()
- assertEquals(ServerState.TERMINATED, server.state)
+ assertEquals(TaskState.TERMINATED, server.state)
}
@Test
@@ -183,12 +273,21 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.DELETED)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.DELETED)
server.stop()
- assertEquals(ServerState.DELETED, server.state)
+ assertEquals(TaskState.DELETED, server.state)
}
@Test
@@ -198,10 +297,19 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
val host = mockk<Host>(relaxUnitFun = true)
- server.setState(ServerState.RUNNING)
+ server.setState(TaskState.RUNNING)
server.host = host
server.stop()
yield()
@@ -216,7 +324,16 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
val request = ComputeService.SchedulingRequest(server, 0)
every { service.schedule(any()) } returns request
@@ -225,7 +342,7 @@ class ServiceServerTest {
server.delete()
assertTrue(request.isCancelled)
- assertEquals(ServerState.DELETED, server.state)
+ assertEquals(TaskState.DELETED, server.state)
verify { service.delete(server) }
}
@@ -236,12 +353,21 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.TERMINATED)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.TERMINATED)
server.delete()
- assertEquals(ServerState.DELETED, server.state)
+ assertEquals(TaskState.DELETED, server.state)
verify { service.delete(server) }
}
@@ -253,12 +379,21 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
-
- server.setState(ServerState.DELETED)
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
+
+ server.setState(TaskState.DELETED)
server.delete()
- assertEquals(ServerState.DELETED, server.state)
+ assertEquals(TaskState.DELETED, server.state)
}
@Test
@@ -268,10 +403,19 @@ class ServiceServerTest {
val uid = UUID.randomUUID()
val flavor = mockFlavor()
val image = mockImage()
- val server = ServiceServer(service, uid, "test", flavor, image, mutableMapOf(), mutableMapOf<String, Any>())
+ val server =
+ ServiceTask(
+ service,
+ uid,
+ "test",
+ flavor,
+ image,
+ mutableMapOf(),
+ mutableMapOf<String, Any>(),
+ )
val host = mockk<Host>(relaxUnitFun = true)
- server.setState(ServerState.RUNNING)
+ server.setState(TaskState.RUNNING)
server.host = host
server.delete()
yield()
diff --git a/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/FilterSchedulerTest.kt b/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/FilterSchedulerTest.kt
index 3bcecf9b..2478bf82 100644
--- a/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/FilterSchedulerTest.kt
+++ b/opendc-compute/opendc-compute-service/src/test/kotlin/org/opendc/compute/service/scheduler/FilterSchedulerTest.kt
@@ -29,7 +29,7 @@ import org.junit.jupiter.api.Assertions.assertNull
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
import org.junit.jupiter.api.assertThrows
-import org.opendc.compute.api.Server
+import org.opendc.compute.api.Task
import org.opendc.compute.service.HostView
import org.opendc.compute.service.driver.HostModel
import org.opendc.compute.service.driver.HostState
@@ -78,11 +78,11 @@ internal class FilterSchedulerTest {
weighers = emptyList(),
)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertNull(scheduler.select(server))
+ assertNull(scheduler.select(task))
}
@Test
@@ -102,14 +102,14 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
// Make sure we get the first host both times
assertAll(
- { assertEquals(hostA, scheduler.select(server)) },
- { assertEquals(hostA, scheduler.select(server)) },
+ { assertEquals(hostA, scheduler.select(task)) },
+ { assertEquals(hostA, scheduler.select(task)) },
)
}
@@ -132,14 +132,14 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
// Make sure we get the first host both times
assertAll(
- { assertEquals(hostB, scheduler.select(server)) },
- { assertEquals(hostA, scheduler.select(server)) },
+ { assertEquals(hostB, scheduler.select(task)) },
+ { assertEquals(hostA, scheduler.select(task)) },
)
}
@@ -156,11 +156,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertNull(scheduler.select(server))
+ assertNull(scheduler.select(task))
}
@Test
@@ -176,11 +176,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(host, scheduler.select(server))
+ assertEquals(host, scheduler.select(task))
}
@Test
@@ -204,11 +204,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
@Test
@@ -226,11 +226,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 2300
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 2300
- assertNull(scheduler.select(server))
+ assertNull(scheduler.select(task))
}
@Test
@@ -254,11 +254,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
@Test
@@ -276,11 +276,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(host)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 8
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 8
+ every { task.flavor.memorySize } returns 1024
- assertNull(scheduler.select(server))
+ assertNull(scheduler.select(task))
}
// TODO: fix when schedulers are reworked
@@ -305,12 +305,12 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
- every { server.flavor.meta } returns mapOf("cpu-capacity" to 2 * 3200.0)
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
+ every { task.flavor.meta } returns mapOf("cpu-capacity" to 2 * 3200.0)
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
@Test
@@ -334,11 +334,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
@Test
@@ -349,10 +349,10 @@ internal class FilterSchedulerTest {
weighers = emptyList(),
)
- val serverA = mockk<Server>()
- every { serverA.uid } returns UUID.randomUUID()
- every { serverA.flavor.coreCount } returns 2
- every { serverA.flavor.memorySize } returns 1024
+ val taskA = mockk<Task>()
+ every { taskA.uid } returns UUID.randomUUID()
+ every { taskA.flavor.coreCount } returns 2
+ every { taskA.flavor.memorySize } returns 1024
val hostA = mockk<HostView>()
every { hostA.host.state } returns HostState.UP
@@ -363,22 +363,22 @@ internal class FilterSchedulerTest {
val hostB = mockk<HostView>()
every { hostB.host.state } returns HostState.UP
every { hostB.host.model } returns HostModel(4 * 2600.0, 1, 4, 2048)
- every { hostB.host.instances } returns setOf(serverA)
+ every { hostB.host.instances } returns setOf(taskA)
every { hostB.provisionedCores } returns 0
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val serverB = mockk<Server>()
- every { serverB.flavor.coreCount } returns 2
- every { serverB.flavor.memorySize } returns 1024
- every { serverB.meta } returns emptyMap()
+ val taskB = mockk<Task>()
+ every { taskB.flavor.coreCount } returns 2
+ every { taskB.flavor.memorySize } returns 1024
+ every { taskB.meta } returns emptyMap()
- assertEquals(hostA, scheduler.select(serverB))
+ assertEquals(hostA, scheduler.select(taskB))
- every { serverB.meta } returns mapOf("scheduler_hint:same_host" to setOf(serverA.uid))
+ every { taskB.meta } returns mapOf("scheduler_hint:same_host" to setOf(taskA.uid))
- assertEquals(hostB, scheduler.select(serverB))
+ assertEquals(hostB, scheduler.select(taskB))
}
@Test
@@ -389,15 +389,15 @@ internal class FilterSchedulerTest {
weighers = emptyList(),
)
- val serverA = mockk<Server>()
- every { serverA.uid } returns UUID.randomUUID()
- every { serverA.flavor.coreCount } returns 2
- every { serverA.flavor.memorySize } returns 1024
+ val taskA = mockk<Task>()
+ every { taskA.uid } returns UUID.randomUUID()
+ every { taskA.flavor.coreCount } returns 2
+ every { taskA.flavor.memorySize } returns 1024
val hostA = mockk<HostView>()
every { hostA.host.state } returns HostState.UP
every { hostA.host.model } returns HostModel(4 * 2600.0, 1, 4, 2048)
- every { hostA.host.instances } returns setOf(serverA)
+ every { hostA.host.instances } returns setOf(taskA)
every { hostA.provisionedCores } returns 3
val hostB = mockk<HostView>()
@@ -409,16 +409,16 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val serverB = mockk<Server>()
- every { serverB.flavor.coreCount } returns 2
- every { serverB.flavor.memorySize } returns 1024
- every { serverB.meta } returns emptyMap()
+ val taskB = mockk<Task>()
+ every { taskB.flavor.coreCount } returns 2
+ every { taskB.flavor.memorySize } returns 1024
+ every { taskB.meta } returns emptyMap()
- assertEquals(hostA, scheduler.select(serverB))
+ assertEquals(hostA, scheduler.select(taskB))
- every { serverB.meta } returns mapOf("scheduler_hint:different_host" to setOf(serverA.uid))
+ every { taskB.meta } returns mapOf("scheduler_hint:different_host" to setOf(taskA.uid))
- assertEquals(hostB, scheduler.select(serverB))
+ assertEquals(hostB, scheduler.select(taskB))
}
@Test
@@ -442,11 +442,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostA, scheduler.select(server))
+ assertEquals(hostA, scheduler.select(task))
}
// TODO: fix test when updating schedulers
@@ -471,11 +471,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
@Test
@@ -499,11 +499,11 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
@Test
@@ -527,10 +527,10 @@ internal class FilterSchedulerTest {
scheduler.addHost(hostA)
scheduler.addHost(hostB)
- val server = mockk<Server>()
- every { server.flavor.coreCount } returns 2
- every { server.flavor.memorySize } returns 1024
+ val task = mockk<Task>()
+ every { task.flavor.coreCount } returns 2
+ every { task.flavor.memorySize } returns 1024
- assertEquals(hostB, scheduler.select(server))
+ assertEquals(hostB, scheduler.select(task))
}
}