diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2018-02-12 14:26:44 +0100 |
|---|---|---|
| committer | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2018-02-12 14:29:39 +0100 |
| commit | e97d9bf3f2cccf19a21631e26d55d60c9f4d7c7a (patch) | |
| tree | 518a0924578d12394f6117a416ac7787f729be63 /opendc-model-odc/core | |
| parent | 67c8bc6cdd421262c4f59ce03506463a830af6e6 (diff) | |
refactor(#18): Align formatting with official Kotlin Style Guide
This change aligns the code formatting of the project with the official
Kotlin Style Guide. They can be found at
http://kotlinlang.org/docs/reference/coding-conventions.html.
Diffstat (limited to 'opendc-model-odc/core')
18 files changed, 448 insertions, 448 deletions
diff --git a/opendc-model-odc/core/build.gradle b/opendc-model-odc/core/build.gradle index ffd37db6..e423da50 100644 --- a/opendc-model-odc/core/build.gradle +++ b/opendc-model-odc/core/build.gradle @@ -24,19 +24,19 @@ /* Build configuration */ buildscript { - ext.kotlin_version = '1.2.21' - ext.dokka_version = '0.9.15' + ext.kotlin_version = '1.2.21' + ext.dokka_version = '0.9.15' - repositories { - mavenCentral() - jcenter() - } + repositories { + mavenCentral() + jcenter() + } - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version" - classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.3' - } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.dokka:dokka-gradle-plugin:$dokka_version" + classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.3' + } } apply plugin: 'java' @@ -45,26 +45,26 @@ apply plugin: 'org.jetbrains.dokka' apply plugin: 'org.junit.platform.gradle.plugin' compileKotlin { - kotlinOptions { - jvmTarget = "1.8" - } + kotlinOptions { + jvmTarget = "1.8" + } } compileTestKotlin { - kotlinOptions { - jvmTarget = "1.8" - } + kotlinOptions { + jvmTarget = "1.8" + } } kotlin { - experimental { - coroutines 'enable' - } + experimental { + coroutines 'enable' + } } dokka { - outputFormat = 'html' - outputDirectory = "$buildDir/javadoc" + outputFormat = 'html' + outputDirectory = "$buildDir/javadoc" } /* Project configuration */ @@ -72,18 +72,18 @@ group 'com.atlarge.opendc' version '1.1' repositories { - jcenter() + jcenter() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compile project(':opendc-core') - compile project(':opendc-stdlib') - compile "io.github.microutils:kotlin-logging:1.4.6" + compile project(':opendc-core') + compile project(':opendc-stdlib') + compile "io.github.microutils:kotlin-logging:1.4.6" - testCompile "org.junit.jupiter:junit-jupiter-api:5.0.0-RC3" - testRuntime "org.junit.jupiter:junit-jupiter-engine:5.0.0-RC3" - testCompile "org.junit.platform:junit-platform-launcher:1.0.0-RC3" - testCompile "org.slf4j:slf4j-simple:1.7.25" + testCompile "org.junit.jupiter:junit-jupiter-api:5.0.0-RC3" + testRuntime "org.junit.jupiter:junit-jupiter-engine:5.0.0-RC3" + testCompile "org.junit.platform:junit-platform-launcher:1.0.0-RC3" + testCompile "org.slf4j:slf4j-simple:1.7.25" } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/OdcModel.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/OdcModel.kt index 01ffbd2c..298a14cf 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/OdcModel.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/OdcModel.kt @@ -7,4 +7,4 @@ import com.atlarge.opendc.model.topology.MutableTopology * * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ -interface OdcModel: MutableTopology +interface OdcModel : MutableTopology diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/FifoScheduler.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/FifoScheduler.kt index d2cbcdfe..e743586c 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/FifoScheduler.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/FifoScheduler.kt @@ -24,9 +24,9 @@ package com.atlarge.opendc.model.odc.platform.scheduler -import com.atlarge.opendc.simulator.Context import com.atlarge.opendc.model.odc.platform.workload.Task import com.atlarge.opendc.model.odc.topology.machine.Machine +import com.atlarge.opendc.simulator.Context import java.util.* /** @@ -35,84 +35,84 @@ import java.util.* * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ class FifoScheduler : Scheduler { - /** - * The name of this scheduler. - */ - override val name: String = "FIFO" + /** + * The name of this scheduler. + */ + override val name: String = "FIFO" - /** - * The set of machines the scheduler knows of. - */ - val machines: MutableSet<Machine> = HashSet() + /** + * The set of machines the scheduler knows of. + */ + private val machines: MutableSet<Machine> = HashSet() - /** - * The queue of [Task]s that need to be scheduled. - */ - val queue: Queue<Task> = ArrayDeque() + /** + * The queue of [Task]s that need to be scheduled. + */ + private val queue: Queue<Task> = ArrayDeque() - /** - * (Re)schedule the tasks submitted to the scheduler over the specified set of machines. - */ - override suspend fun <S, M> Context<S, M>.schedule() { - if (queue.isEmpty()) { - return - } + /** + * (Re)schedule the tasks submitted to the scheduler over the specified set of machines. + */ + override suspend fun <S, M> Context<S, M>.schedule() { + if (queue.isEmpty()) { + return + } - // The tasks that need to be rescheduled - val rescheduled = ArrayDeque<Task>() - val iterator = queue.iterator() + // The tasks that need to be rescheduled + val rescheduled = ArrayDeque<Task>() + val iterator = queue.iterator() - machines - .filter { it.state.status != Machine.Status.HALT } - .forEach { machine -> - while (iterator.hasNext()) { - val task = iterator.next() + machines + .filter { it.state.status != Machine.Status.HALT } + .forEach { machine -> + while (iterator.hasNext()) { + val task = iterator.next() - // TODO What to do with tasks that are not ready yet to be processed - if (!task.ready) { - iterator.remove() - rescheduled.add(task) - continue - } else if (task.finished) { - iterator.remove() - continue - } + // TODO What to do with tasks that are not ready yet to be processed + if (!task.ready) { + iterator.remove() + rescheduled.add(task) + continue + } else if (task.finished) { + iterator.remove() + continue + } - machine.send(task) - break - } - } + machine.send(task) + break + } + } - // Reschedule all tasks that are not ready yet - while (!rescheduled.isEmpty()) { - queue.add(rescheduled.poll()) - } - } + // Reschedule all tasks that are not ready yet + while (!rescheduled.isEmpty()) { + queue.add(rescheduled.poll()) + } + } - /** - * Submit a [Task] to this scheduler. - * - * @param task The task to submit to the scheduler. - */ - override fun submit(task: Task) { - queue.add(task) - } + /** + * Submit a [Task] to this scheduler. + * + * @param task The task to submit to the scheduler. + */ + override fun submit(task: Task) { + queue.add(task) + } - /** - * Register a [Machine] to this scheduler. - * - * @param machine The machine to register. - */ - override fun register(machine: Machine) { - machines.add(machine) - } + /** + * Register a [Machine] to this scheduler. + * + * @param machine The machine to register. + */ + override fun register(machine: Machine) { + machines.add(machine) + } - /** - * Deregister a [Machine] from this scheduler. - * - * @param machine The machine to deregister. - */ - override fun deregister(machine: Machine) { - machines.remove(machine) - } + /** + * Deregister a [Machine] from this scheduler. + * + * @param machine The machine to deregister. + */ + override fun deregister(machine: Machine) { + machines.remove(machine) + } } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/Scheduler.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/Scheduler.kt index ee965af9..79486ee6 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/Scheduler.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/Scheduler.kt @@ -24,10 +24,10 @@ package com.atlarge.opendc.model.odc.platform.scheduler -import com.atlarge.opendc.simulator.Context -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.odc.platform.workload.Task import com.atlarge.opendc.model.odc.topology.machine.Machine +import com.atlarge.opendc.simulator.Context +import com.atlarge.opendc.simulator.Entity /** * A task scheduler that is coupled to an [Entity] in the topology of the cloud network. @@ -35,37 +35,37 @@ import com.atlarge.opendc.model.odc.topology.machine.Machine * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface Scheduler { - /** - * The name of this scheduler. - */ - val name: String + /** + * The name of this scheduler. + */ + val name: String - /** - * (Re)schedule the tasks submitted to the scheduler over the specified set of machines. - * - * This method should be invoked at some interval to allow the scheduler to reschedule existing tasks and schedule - * new tasks. - */ - suspend fun <S, M> Context<S, M>.schedule() + /** + * (Re)schedule the tasks submitted to the scheduler over the specified set of machines. + * + * This method should be invoked at some interval to allow the scheduler to reschedule existing tasks and schedule + * new tasks. + */ + suspend fun <S, M> Context<S, M>.schedule() - /** - * Submit a [Task] to this scheduler. - * - * @param task The task to submit to the scheduler. - */ - fun submit(task: Task) + /** + * Submit a [Task] to this scheduler. + * + * @param task The task to submit to the scheduler. + */ + fun submit(task: Task) - /** - * Register a [Machine] to this scheduler. - * - * @param machine The machine to register. - */ - fun register(machine: Machine) + /** + * Register a [Machine] to this scheduler. + * + * @param machine The machine to register. + */ + fun register(machine: Machine) - /** - * Deregister a [Machine] from this scheduler. - * - * @param machine The machine to deregister. - */ - fun deregister(machine: Machine) + /** + * Deregister a [Machine] from this scheduler. + * + * @param machine The machine to deregister. + */ + fun deregister(machine: Machine) } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/SrtfScheduler.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/SrtfScheduler.kt index 0e497b56..d3f067df 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/SrtfScheduler.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/scheduler/SrtfScheduler.kt @@ -24,9 +24,9 @@ package com.atlarge.opendc.model.odc.platform.scheduler -import com.atlarge.opendc.simulator.Context import com.atlarge.opendc.model.odc.platform.workload.Task import com.atlarge.opendc.model.odc.topology.machine.Machine +import com.atlarge.opendc.simulator.Context import java.util.* /** @@ -35,76 +35,76 @@ import java.util.* * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ class SrtfScheduler : Scheduler { - /** - * The name of this scheduler. - */ - override val name: String = "SRTF" + /** + * The name of this scheduler. + */ + override val name: String = "SRTF" - /** - * The set of machines the scheduler knows of. - */ - val machines: MutableSet<Machine> = HashSet() + /** + * The set of machines the scheduler knows of. + */ + private val machines: MutableSet<Machine> = HashSet() - /** - * The set of [Task]s that need to be scheduled. - */ - val tasks: MutableSet<Task> = HashSet() + /** + * The set of [Task]s that need to be scheduled. + */ + private val tasks: MutableSet<Task> = HashSet() - /** - * (Re)schedule the tasks submitted to the scheduler over the specified set of machines. - */ - override suspend fun <S, M> Context<S, M>.schedule() { - if (tasks.isEmpty()) { - return - } + /** + * (Re)schedule the tasks submitted to the scheduler over the specified set of machines. + */ + override suspend fun <S, M> Context<S, M>.schedule() { + if (tasks.isEmpty()) { + return + } - val iterator = tasks.sortedBy { it.remaining }.iterator() + val iterator = tasks.sortedBy { it.remaining }.iterator() - machines - .filter { it.state.status != Machine.Status.HALT } - .forEach { machine -> - while (iterator.hasNext()) { - val task = iterator.next() + machines + .filter { it.state.status != Machine.Status.HALT } + .forEach { machine -> + while (iterator.hasNext()) { + val task = iterator.next() - // TODO What to do with tasks that are not ready yet to be processed - if (!task.ready) { - tasks.add(task) - continue - } else if (task.finished) { - tasks.remove(task) - continue - } + // TODO What to do with tasks that are not ready yet to be processed + if (!task.ready) { + tasks.add(task) + continue + } else if (task.finished) { + tasks.remove(task) + continue + } - machine.send(task) - break - } - } - } + machine.send(task) + break + } + } + } - /** - * Submit a [Task] to this scheduler. - * - * @param task The task to submit to the scheduler. - */ - override fun submit(task: Task) { - tasks.add(task) - } + /** + * Submit a [Task] to this scheduler. + * + * @param task The task to submit to the scheduler. + */ + override fun submit(task: Task) { + tasks.add(task) + } - /** - * Register a [Machine] to this scheduler. - * - * @param machine The machine to register. - */ - override fun register(machine: Machine) { - machines.add(machine) - } + /** + * Register a [Machine] to this scheduler. + * + * @param machine The machine to register. + */ + override fun register(machine: Machine) { + machines.add(machine) + } - /** - * Deregister a [Machine] from this scheduler. - * - * @param machine The machine to deregister. - */ - override fun deregister(machine: Machine) { - machines.remove(machine) - } + /** + * Deregister a [Machine] from this scheduler. + * + * @param machine The machine to deregister. + */ + override fun deregister(machine: Machine) { + machines.remove(machine) + } } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Job.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Job.kt index c42bb667..3e6c6821 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Job.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Job.kt @@ -30,24 +30,24 @@ package com.atlarge.opendc.model.odc.platform.workload * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface Job { - /** - * A unique identifier of the job. - */ - val id: Int + /** + * A unique identifier of the job. + */ + val id: Int - /** - * The owner of this job. - */ - val owner: User + /** + * The owner of this job. + */ + val owner: User - /** - * The tasks this job consists of. - */ - val tasks: Set<Task> + /** + * The tasks this job consists of. + */ + val tasks: Set<Task> - /** - * A flag to indicate the job has finished. - */ - val finished: Boolean - get() = !tasks.any { !it.finished } + /** + * A flag to indicate the job has finished. + */ + val finished: Boolean + get() = !tasks.any { !it.finished } } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Task.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Task.kt index f7b9d60f..d68cceba 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Task.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Task.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.platform.workload -import com.atlarge.opendc.simulator.Instant import com.atlarge.opendc.model.odc.topology.machine.Machine +import com.atlarge.opendc.simulator.Instant /** * A task that runs as part of a [Job] on a [Machine]. @@ -33,60 +33,60 @@ import com.atlarge.opendc.model.odc.topology.machine.Machine * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface Task { - /** - * The unique identifier of the task. - */ - val id: Int + /** + * The unique identifier of the task. + */ + val id: Int - /** - * The amount of flops for this task. - */ - val flops: Long + /** + * The amount of flops for this task. + */ + val flops: Long - /** - * The dependencies of the task. - */ - val dependencies: Set<Task> + /** + * The dependencies of the task. + */ + val dependencies: Set<Task> - /** - * A flag to indicate the task is parallelizable. - */ - val parallelizable: Boolean + /** + * A flag to indicate the task is parallelizable. + */ + val parallelizable: Boolean - /** - * The remaining flops for this task. - */ - val remaining: Long + /** + * The remaining flops for this task. + */ + val remaining: Long - /** - * The state of the task. - */ - val state: TaskState + /** + * The state of the task. + */ + val state: TaskState - /** - * A flag to indicate whether the task is ready to be started. - */ - val ready: Boolean - get() = !dependencies.any { !it.finished } + /** + * A flag to indicate whether the task is ready to be started. + */ + val ready: Boolean + get() = !dependencies.any { !it.finished } - /** - * A flag to indicate whether the task has finished. - */ - val finished: Boolean - get() = state is TaskState.Finished + /** + * A flag to indicate whether the task has finished. + */ + val finished: Boolean + get() = state is TaskState.Finished - /** - * This method is invoked when a task has arrived at a datacenter. - * - * @param time The moment in time the task has arrived at the datacenter. - */ - fun arrive(time: Instant) + /** + * This method is invoked when a task has arrived at a datacenter. + * + * @param time The moment in time the task has arrived at the datacenter. + */ + fun arrive(time: Instant) - /** - * Consume the given amount of flops of this task. - * - * @param time The current moment in time of the consumption. - * @param flops The total amount of flops to consume. - */ - fun consume(time: Instant, flops: Long) + /** + * Consume the given amount of flops of this task. + * + * @param time The current moment in time of the consumption. + * @param flops The total amount of flops to consume. + */ + fun consume(time: Instant, flops: Long) } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/TaskState.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/TaskState.kt index 2fb3acd9..78963ca3 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/TaskState.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/TaskState.kt @@ -33,40 +33,40 @@ import com.atlarge.opendc.simulator.Instant * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ sealed class TaskState { - /** - * A state to indicate the task has not yet arrived at the [Datacenter]. - */ - object Underway : TaskState() + /** + * A state to indicate the task has not yet arrived at the [Datacenter]. + */ + object Underway : TaskState() - /** - * A state to indicate the task has arrived at the [Datacenter]. - * - * @property at The moment in time the task has arrived. - */ - data class Queued(val at: Instant) : TaskState() + /** + * A state to indicate the task has arrived at the [Datacenter]. + * + * @property at The moment in time the task has arrived. + */ + data class Queued(val at: Instant) : TaskState() - /** - * A state to indicate the task has started running on a machine. - * - * @property previous The previous state of the task. - * @property at The moment in time the task started. - */ - data class Running(val previous: Queued, val at: Instant) : TaskState() + /** + * A state to indicate the task has started running on a machine. + * + * @property previous The previous state of the task. + * @property at The moment in time the task started. + */ + data class Running(val previous: Queued, val at: Instant) : TaskState() - /** - * A state to indicate the task has finished. - * - * @property previous The previous state of the task. - * @property at The moment in time the task finished. - */ - data class Finished(val previous: Running, val at: Instant) : TaskState() + /** + * A state to indicate the task has finished. + * + * @property previous The previous state of the task. + * @property at The moment in time the task finished. + */ + data class Finished(val previous: Running, val at: Instant) : TaskState() - /** - * A state to indicate the task has failed. - * - * @property previous The previous state of the task. - * @property at The moment in time the task failed. - * @property reason The reason of the failure. - */ - data class Failed(val previous: Running, val at: Instant, val reason: String) : TaskState() + /** + * A state to indicate the task has failed. + * + * @property previous The previous state of the task. + * @property at The moment in time the task failed. + * @property reason The reason of the failure. + */ + data class Failed(val previous: Running, val at: Instant, val reason: String) : TaskState() } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Trace.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Trace.kt index b2d65277..25bcad83 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Trace.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/Trace.kt @@ -30,8 +30,8 @@ package com.atlarge.opendc.model.odc.platform.workload * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface Trace { - /** - * The [Job]s in the trace. - */ - val jobs: Set<Job> + /** + * The [Job]s in the trace. + */ + val jobs: Set<Job> } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/User.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/User.kt index 6099db3e..da696d88 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/User.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/platform/workload/User.kt @@ -33,13 +33,13 @@ package com.atlarge.opendc.model.odc.platform.workload * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface User { - /** - * The unique identifier of the user. - */ - val id: Int + /** + * The unique identifier of the user. + */ + val id: Int - /** - * The name of this user. - */ - val name: String + /** + * The name of this user. + */ + val name: String } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Datacenter.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Datacenter.kt index 2b682410..b9b804d3 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Datacenter.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Datacenter.kt @@ -24,16 +24,16 @@ package com.atlarge.opendc.model.odc.topology.container -import mu.KotlinLogging -import com.atlarge.opendc.simulator.Context -import com.atlarge.opendc.simulator.Duration -import com.atlarge.opendc.simulator.Entity -import com.atlarge.opendc.simulator.Process import com.atlarge.opendc.model.odc.platform.scheduler.Scheduler import com.atlarge.opendc.model.odc.platform.workload.Task import com.atlarge.opendc.model.odc.topology.machine.Machine import com.atlarge.opendc.model.topology.Topology import com.atlarge.opendc.model.topology.destinations +import com.atlarge.opendc.simulator.Context +import com.atlarge.opendc.simulator.Duration +import com.atlarge.opendc.simulator.Entity +import com.atlarge.opendc.simulator.Process +import mu.KotlinLogging import java.util.* /** @@ -44,59 +44,59 @@ import java.util.* * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface Datacenter : Process<Unit, Topology> { - /** - * The task scheduler the datacenter uses. - */ - val scheduler: Scheduler + /** + * The task scheduler the datacenter uses. + */ + val scheduler: Scheduler - /** - * The interval at which task will be (re)scheduled. - */ - val interval: Duration + /** + * The interval at which task will be (re)scheduled. + */ + val interval: Duration - /** - * This method is invoked to start the simulation an [Entity] associated with this [Context]. - * - * This method is assumed to be running during a simulation, but should hand back control to the simulator at - * some point by suspending the process. This allows other processes to do work in the current tick of the - * simulation. - * Suspending the process can be achieved by calling suspending method in the context: - * - [Context.hold] - Wait for `n` amount of ticks before resuming execution. - * - [Context.receive] - Wait for a message to be received in the mailbox of the [Entity] before resuming - * execution. - * - * If this method exits early, before the simulation has finished, the entity is assumed to be shutdown and its - * simulation will not run any further. - */ - suspend override fun Context<Unit, Topology>.run() = model.run { - val logger = KotlinLogging.logger {} + /** + * This method is invoked to start the simulation an [Entity] associated with this [Context]. + * + * This method is assumed to be running during a simulation, but should hand back control to the simulator at + * some point by suspending the process. This allows other processes to do work in the current tick of the + * simulation. + * Suspending the process can be achieved by calling suspending method in the context: + * - [Context.hold] - Wait for `n` amount of ticks before resuming execution. + * - [Context.receive] - Wait for a message to be received in the mailbox of the [Entity] before resuming + * execution. + * + * If this method exits early, before the simulation has finished, the entity is assumed to be shutdown and its + * simulation will not run any further. + */ + override suspend fun Context<Unit, Topology>.run() = model.run { + val logger = KotlinLogging.logger {} - // The queue of messages to be processed after a cycle - val queue: Queue<Any> = ArrayDeque() - // Find all machines in the datacenter - val machines = outgoingEdges.destinations<Room>("room").asSequence() - .flatMap { it.outgoingEdges.destinations<Rack>("rack").asSequence() } - .flatMap { it.outgoingEdges.destinations<Machine>("machine").asSequence() }.toList() + // The queue of messages to be processed after a cycle + val queue: Queue<Any> = ArrayDeque() + // Find all machines in the datacenter + val machines = outgoingEdges.destinations<Room>("room").asSequence() + .flatMap { it.outgoingEdges.destinations<Rack>("rack").asSequence() } + .flatMap { it.outgoingEdges.destinations<Machine>("machine").asSequence() }.toList() - logger.info { "Initialising datacenter with ${machines.size} machines" } + logger.info { "Initialising datacenter with ${machines.size} machines" } - // Register all machines to the scheduler - machines.forEach(scheduler::register) + // Register all machines to the scheduler + machines.forEach(scheduler::register) - while (true) { - // Context all messages in the queue - while (queue.isNotEmpty()) { - val msg = queue.poll() - if (msg is Task) { - msg.arrive(time) - scheduler.submit(msg) - } - } - // (Re)schedule the tasks - scheduler.run { schedule() } + while (true) { + // Context all messages in the queue + while (queue.isNotEmpty()) { + val msg = queue.poll() + if (msg is Task) { + msg.arrive(time) + scheduler.submit(msg) + } + } + // (Re)schedule the tasks + scheduler.run { schedule() } - // Sleep a time quantum - hold(interval, queue) - } - } + // Sleep a time quantum + hold(interval, queue) + } + } } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Rack.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Rack.kt index 0ec43f9a..42fdc9cf 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Rack.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Rack.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.topology.container -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.topology.Topology +import com.atlarge.opendc.simulator.Entity /** * A type of physical steel and electronic framework that is designed to house servers, networking devices, cables and diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Room.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Room.kt index 50cfc3e6..5e07b0ce 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Room.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/container/Room.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.topology.container -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.topology.Topology +import com.atlarge.opendc.simulator.Entity /** * A physical room in a datacenter with relationships to the entities within the room. diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/Machine.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/Machine.kt index 4f4ce645..642723f5 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/Machine.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/Machine.kt @@ -24,12 +24,12 @@ package com.atlarge.opendc.model.odc.topology.machine -import com.atlarge.opendc.simulator.Context -import com.atlarge.opendc.simulator.Process import com.atlarge.opendc.model.odc.platform.workload.Task import com.atlarge.opendc.model.topology.Topology import com.atlarge.opendc.model.topology.destinations +import com.atlarge.opendc.simulator.Context import com.atlarge.opendc.simulator.Duration +import com.atlarge.opendc.simulator.Process import mu.KotlinLogging /** @@ -39,85 +39,85 @@ import mu.KotlinLogging * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ open class Machine : Process<Machine.State, Topology> { - /** - * The logger instance to use for the simulator. - */ - private val logger = KotlinLogging.logger {} + /** + * The logger instance to use for the simulator. + */ + private val logger = KotlinLogging.logger {} - /** - * The status of a machine. - */ - enum class Status { - HALT, IDLE, RUNNING - } + /** + * The status of a machine. + */ + enum class Status { + HALT, IDLE, RUNNING + } - /** - * The shape of the state of a [Machine] entity. - * - * @property status The status of the machine. - * @property task The task assign to the machine. - * @property memory The memory usage of the machine (defaults to 50mb for the kernel) - * @property load The load on the machine (defaults to 0.0) - * @property temperature The temperature of the machine (defaults to 23 degrees Celcius) - */ - data class State(val status: Status, - val task: Task? = null, - val memory: Int = 50, - val load: Double = 0.0, - val temperature: Double = 23.0) + /** + * The shape of the state of a [Machine] entity. + * + * @property status The status of the machine. + * @property task The task assign to the machine. + * @property memory The memory usage of the machine (defaults to 50mb for the kernel) + * @property load The load on the machine (defaults to 0.0) + * @property temperature The temperature of the machine (defaults to 23 degrees Celcius) + */ + data class State(val status: Status, + val task: Task? = null, + val memory: Int = 50, + val load: Double = 0.0, + val temperature: Double = 23.0) - /** - * The initial state of a [Machine] entity. - */ - override val initialState = State(Status.HALT) + /** + * The initial state of a [Machine] entity. + */ + override val initialState = State(Status.HALT) - /** - * Run the simulation kernel for this entity. - */ - override suspend fun Context<State, Topology>.run() = model.run { - state = State(Status.IDLE) + /** + * Run the simulation kernel for this entity. + */ + override suspend fun Context<State, Topology>.run() = model.run { + state = State(Status.IDLE) - val interval: Duration = 10 - val cpus = outgoingEdges.destinations<Cpu>("cpu") - val speed = cpus.fold(0, { acc, cpu -> acc + cpu.clockRate * cpu.cores }) + val interval: Duration = 10 + val cpus = outgoingEdges.destinations<Cpu>("cpu") + val speed = cpus.fold(0, { acc, cpu -> acc + cpu.clockRate * cpu.cores }) - // Halt the machine if it has not processing units (see bug #4) - if (cpus.isEmpty()) { - state = State(Status.HALT) - return - } + // Halt the machine if it has not processing units (see bug #4) + if (cpus.isEmpty()) { + state = State(Status.HALT) + return + } - var task: Task = receiveTask() - state = State(Status.RUNNING, task, load = 1.0, memory = state.memory + 50, temperature = 30.0) + var task: Task = receiveTask() + state = State(Status.RUNNING, task, load = 1.0, memory = state.memory + 50, temperature = 30.0) - while (true) { - if (task.finished) { - logger.info { "$id: Task ${task.id} finished. Machine idle at $time" } - state = State(Status.IDLE) - task = receiveTask() - } else { - task.consume(time, speed * delta) - } + while (true) { + if (task.finished) { + logger.info { "$id: Task ${task.id} finished. Machine idle at $time" } + state = State(Status.IDLE) + task = receiveTask() + } else { + task.consume(time, speed * delta) + } - // Check if we have received a new order in the meantime. - val msg = receive(interval) - if (msg is Task) { - task = msg - state = State(Status.RUNNING, task, load = 1.0, memory = state.memory + 50, temperature = 30.0) - } - } - } + // Check if we have received a new order in the meantime. + val msg = receive(interval) + if (msg is Task) { + task = msg + state = State(Status.RUNNING, task, load = 1.0, memory = state.memory + 50, temperature = 30.0) + } + } + } - /** - * Wait for a [Task] to be received by the [Context] and discard all other messages received in the meantime. - * - * @return The task that has been received. - */ - private suspend fun Context<State, Topology>.receiveTask(): Task { - while (true) { - val msg = receive() - if (msg is Task) - return msg - } - } + /** + * Wait for a [Task] to be received by the [Context] and discard all other messages received in the meantime. + * + * @return The task that has been received. + */ + private suspend fun Context<State, Topology>.receiveTask(): Task { + while (true) { + val msg = receive() + if (msg is Task) + return msg + } + } } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/ProcessingUnit.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/ProcessingUnit.kt index 0b8989de..e5d30173 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/ProcessingUnit.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/machine/ProcessingUnit.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.topology.machine -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.topology.Topology +import com.atlarge.opendc.simulator.Entity /** * An interface representing a generic processing unit which is placed into a [Machine]. @@ -33,18 +33,18 @@ import com.atlarge.opendc.model.topology.Topology * @author Fabian Mastenbroek (f.s.mastenbroek@student.tudelft.nl) */ interface ProcessingUnit : Entity<Unit, Topology> { - /** - * The speed of this [ProcessingUnit] per core in MHz. - */ - val clockRate: Int + /** + * The speed of this [ProcessingUnit] per core in MHz. + */ + val clockRate: Int - /** - * The amount of cores within this [ProcessingUnit]. - */ - val cores: Int + /** + * The amount of cores within this [ProcessingUnit]. + */ + val cores: Int - /** - * The energy consumption of this [ProcessingUnit] in Watt. - */ - val energyConsumption: Double + /** + * The energy consumption of this [ProcessingUnit] in Watt. + */ + val energyConsumption: Double } diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/network/NetworkUnit.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/network/NetworkUnit.kt index a41a8326..5ffc19bf 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/network/NetworkUnit.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/network/NetworkUnit.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.topology.network -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.topology.Topology +import com.atlarge.opendc.simulator.Entity /** * A generic interface for a network unit in a cloud network. diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/power/PowerUnit.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/power/PowerUnit.kt index 8650b5dc..3e9248c4 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/power/PowerUnit.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/power/PowerUnit.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.topology.power -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.topology.Topology +import com.atlarge.opendc.simulator.Entity /** * An [Entity] which provides power for other entities a cloud network to run. diff --git a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/storage/StorageUnit.kt b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/storage/StorageUnit.kt index b5bb4dfb..eb622f2c 100644 --- a/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/storage/StorageUnit.kt +++ b/opendc-model-odc/core/src/main/kotlin/com/atlarge/opendc/model/odc/topology/storage/StorageUnit.kt @@ -24,8 +24,8 @@ package com.atlarge.opendc.model.odc.topology.storage -import com.atlarge.opendc.simulator.Entity import com.atlarge.opendc.model.topology.Topology +import com.atlarge.opendc.simulator.Entity /** * A generic interface for a storage unit in a cloud network. |
