diff options
71 files changed, 543 insertions, 305 deletions
diff --git a/simulator/.gitignore b/simulator/.gitignore index 917f2e6a..992d060f 100644 --- a/simulator/.gitignore +++ b/simulator/.gitignore @@ -99,6 +99,3 @@ gradle-app.setting # Cache of project .gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties diff --git a/simulator/build.gradle.kts b/simulator/build.gradle.kts index b104654b..6b0a9bf1 100644 --- a/simulator/build.gradle.kts +++ b/simulator/build.gradle.kts @@ -21,7 +21,7 @@ */ plugins { - `dokka-convention` + `dokka-conventions` } allprojects { diff --git a/simulator/buildSrc/build.gradle.kts b/simulator/buildSrc/build.gradle.kts index e1f538fe..4cc1958a 100644 --- a/simulator/buildSrc/build.gradle.kts +++ b/simulator/buildSrc/build.gradle.kts @@ -1,7 +1,5 @@ /* - * MIT License - * - * Copyright (c) 2019 atlarge-research + * Copyright (c) 2019 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,21 +20,16 @@ * SOFTWARE. */ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + plugins { `kotlin-dsl` } -kotlinDslPluginOptions { - experimentalWarning.set(false) -} - - /* Project configuration */ repositories { jcenter() - maven { - url = uri("https://plugins.gradle.org/m2/") - } + gradlePluginPortal() } dependencies { @@ -44,3 +37,13 @@ dependencies { implementation("org.jlleitschuh.gradle:ktlint-gradle:10.0.0") implementation("org.jetbrains.dokka:dokka-gradle-plugin:0.10.1") } + +kotlinDslPluginOptions { + experimentalWarning.set(false) +} + +tasks.withType<KotlinCompile>().configureEach { + kotlinOptions { + allWarningsAsErrors = true + } +} diff --git a/simulator/buildSrc/settings.gradle.kts b/simulator/buildSrc/settings.gradle.kts index cc3f3add..5337ee96 100644 --- a/simulator/buildSrc/settings.gradle.kts +++ b/simulator/buildSrc/settings.gradle.kts @@ -1,7 +1,7 @@ /* * MIT License * - * Copyright (c) 2019 atlarge-research + * Copyright (c) 2019 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -21,3 +21,5 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ + +/* Intentionally left blank */ diff --git a/simulator/buildSrc/src/main/kotlin/ProjectExtensions.kt b/simulator/buildSrc/src/main/kotlin/ProjectExtensions.kt new file mode 100644 index 00000000..ddf643f6 --- /dev/null +++ b/simulator/buildSrc/src/main/kotlin/ProjectExtensions.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 AtLarge Research + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import org.gradle.api.Project +import org.gradle.kotlin.dsl.extra +import org.gradle.kotlin.dsl.provideDelegate + +/** + * Obtain the [Versions] object for the specified [Project] instance. + */ +val Project.versions: Versions + get() { + var versions: Versions? by rootProject.extra + return versions ?: Versions(rootProject).also { versions = it } + } diff --git a/simulator/buildSrc/src/main/kotlin/library.kt b/simulator/buildSrc/src/main/kotlin/Versions.kt index a66e5f46..fcf3c778 100644 --- a/simulator/buildSrc/src/main/kotlin/library.kt +++ b/simulator/buildSrc/src/main/kotlin/Versions.kt @@ -22,28 +22,42 @@ * SOFTWARE. */ +import org.gradle.api.JavaVersion +import org.gradle.api.Project +import org.gradle.kotlin.dsl.extra +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + /** - * This object contains the versions of the dependencies shared by the different + * This class contains the versions of the dependencies shared by the different * subprojects. */ -object Library { +public class Versions(private val project: Project) { /** - * The library for testing the projects. + * A delegate for obtaining configuration values from a [Project] instance. */ - val JUNIT_JUPITER = "5.7.1" + private fun version(name: String? = null): ReadOnlyProperty<Versions, String> = + ReadOnlyProperty { _, property -> get(name ?: property.name) } - /** - * The library for hosting the tests. - */ - val JUNIT_PLATFORM = "1.7.1" + val junitJupiter by version(name = "junit-jupiter") + val junitPlatform by version(name = "junit-platform") + + val slf4j by version() + val kotlinLogging by version(name = "kotlin-logging") + val log4j by version() + + val kotlinxCoroutines by version(name = "kotlinx-coroutines") - /** - * Logging facade. - */ - val SLF4J = "1.7.30" /** - * Kotlin coroutines support + * Obtain the version for the specified [dependency][name]. */ - val KOTLINX_COROUTINES = "1.4.2" + operator fun get(name: String) = project.extra.get("$name.version") as String + + companion object { + /** + * The JVM version to target. + */ + val jvmTarget = JavaVersion.VERSION_1_8 + } } diff --git a/simulator/buildSrc/src/main/kotlin/dokka-convention.gradle.kts b/simulator/buildSrc/src/main/kotlin/dokka-conventions.gradle.kts index 95183df2..95183df2 100644 --- a/simulator/buildSrc/src/main/kotlin/dokka-convention.gradle.kts +++ b/simulator/buildSrc/src/main/kotlin/dokka-conventions.gradle.kts diff --git a/simulator/buildSrc/src/main/kotlin/experiment-conventions.gradle.kts b/simulator/buildSrc/src/main/kotlin/experiment-conventions.gradle.kts new file mode 100644 index 00000000..4745ff1a --- /dev/null +++ b/simulator/buildSrc/src/main/kotlin/experiment-conventions.gradle.kts @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 AtLarge Research + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +plugins { + `java-library` +} + +dependencies { + implementation(project(":opendc-harness")) +} + +tasks.register<Test>("experiment") { + // Ensure JUnit Platform is used for resolving tests + useJUnitPlatform() + + description = "Runs OpenDC experiments" + group = "application" + + testClassesDirs = sourceSets["main"].output.classesDirs + classpath = sourceSets["main"].runtimeClasspath +} diff --git a/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts b/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts new file mode 100644 index 00000000..544e34bf --- /dev/null +++ b/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts @@ -0,0 +1,58 @@ +import org.gradle.kotlin.dsl.`java-library` +import org.gradle.kotlin.dsl.jacoco +import org.gradle.kotlin.dsl.kotlin + +/* + * Copyright (c) 2021 AtLarge Research + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + * Copyright (c) 2021 AtLarge Research + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +plugins { + `java-library` + jacoco +} + +tasks.jacocoTestReport { + reports { + html.isEnabled = true + } +} diff --git a/simulator/buildSrc/src/main/kotlin/kotlin-library-convention.gradle.kts b/simulator/buildSrc/src/main/kotlin/kotlin-library-conventions.gradle.kts index f9d8a966..8d6420be 100644 --- a/simulator/buildSrc/src/main/kotlin/kotlin-library-convention.gradle.kts +++ b/simulator/buildSrc/src/main/kotlin/kotlin-library-conventions.gradle.kts @@ -28,7 +28,6 @@ plugins { `java-library` kotlin("jvm") id("org.jlleitschuh.gradle.ktlint") - jacoco } /* Project configuration */ @@ -38,30 +37,14 @@ repositories { } java { - sourceCompatibility = JavaVersion.VERSION_1_8 + sourceCompatibility = Versions.jvmTarget } kotlin { explicitApi() } -jacoco { - toolVersion = "0.8.6" -} - tasks.withType<KotlinCompile>().configureEach { - kotlinOptions.jvmTarget = "1.8" + kotlinOptions.jvmTarget = Versions.jvmTarget.toString() kotlinOptions.freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn" } - -tasks.test { - useJUnitPlatform() - reports.html.isEnabled = true -} - - -tasks.jacocoTestReport { - reports { - html.isEnabled = true - } -} diff --git a/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts b/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts new file mode 100644 index 00000000..22ea7905 --- /dev/null +++ b/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts @@ -0,0 +1,38 @@ +import org.gradle.kotlin.dsl.`java-library` +import org.gradle.kotlin.dsl.kotlin +import org.gradle.platform.base.Library + +/* + * Copyright (c) 2021 AtLarge Research + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +plugins { + `java-library` +} + +tasks.test { + useJUnitPlatform() +} + +dependencies { + testImplementation("org.junit.jupiter:junit-jupiter-api:${versions.junitJupiter}") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${versions.junitJupiter}") +} diff --git a/simulator/gradle.properties b/simulator/gradle.properties new file mode 100644 index 00000000..fb007dde --- /dev/null +++ b/simulator/gradle.properties @@ -0,0 +1,47 @@ +# +# Copyright (c) 2021 AtLarge Research +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# Dependencies +kotlinx-coroutines.version = 1.4.2 + +# Dependencies (Logging) +kotlin-logging.version = 2.0.4 +slf4j.version = 1.7.30 +log4j.version = 2.14.0 + +# Dependencies (CLI) +clikt.version = 3.1.0 +progressbar.version = 0.9.0 + +# Dependencies (Format) +jackson-module-kotlin.version = 2.12.0 +parquet-avro.version = 1.11.1 +hadoop-client.version = 3.2.1 + +# Dependencies (Other) +sentry-log4j2.version = 4.2.0 +mongodb-driver-sync.version = 4.2.1 +classgraph.version = 4.8.102 + +# Dependencies (Testing) +junit-jupiter.version = 5.7.1 +junit-platform.version = 1.7.1 diff --git a/simulator/gradle/wrapper/gradle-wrapper.properties b/simulator/gradle/wrapper/gradle-wrapper.properties index 2a563242..442d9132 100644 --- a/simulator/gradle/wrapper/gradle-wrapper.properties +++ b/simulator/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/simulator/opendc-compute/opendc-compute-core/build.gradle.kts b/simulator/opendc-compute/opendc-compute-core/build.gradle.kts index ac2dc78d..a1b6ec0f 100644 --- a/simulator/opendc-compute/opendc-compute-core/build.gradle.kts +++ b/simulator/opendc-compute/opendc-compute-core/build.gradle.kts @@ -24,19 +24,14 @@ description = "Core implementation of the OpenDC Compute service" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-core")) api(project(":opendc-trace:opendc-trace-core")) implementation(project(":opendc-utils")) - implementation("io.github.microutils:kotlin-logging:1.7.9") - testImplementation(project(":opendc-simulator:opendc-simulator-core")) - testImplementation(project(":opendc-compute:opendc-compute-simulator")) - testRuntimeOnly("org.slf4j:slf4j-simple:${Library.SLF4J}") - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") + implementation("io.github.microutils:kotlin-logging") } diff --git a/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts b/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts index dc93e956..f52d0f97 100644 --- a/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts +++ b/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts @@ -24,19 +24,18 @@ description = "Simulator for OpenDC Compute" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` + `testing-conventions` } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-compute:opendc-compute-core")) api(project(":opendc-simulator:opendc-simulator-compute")) api(project(":opendc-simulator:opendc-simulator-failures")) implementation(project(":opendc-utils")) - implementation("io.github.microutils:kotlin-logging:1.7.9") + implementation("io.github.microutils:kotlin-logging") testImplementation(project(":opendc-simulator:opendc-simulator-core")) - testRuntimeOnly("org.slf4j:slf4j-simple:${Library.SLF4J}") - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") + testRuntimeOnly("org.slf4j:slf4j-simple:${versions.slf4j}") } diff --git a/simulator/opendc-core/build.gradle.kts b/simulator/opendc-core/build.gradle.kts index b1c2678b..7e1a4b97 100644 --- a/simulator/opendc-core/build.gradle.kts +++ b/simulator/opendc-core/build.gradle.kts @@ -24,13 +24,10 @@ description = "Base model for datacenter simulation" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` } dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Library.KOTLINX_COROUTINES}") - - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") + api(platform(project(":opendc-platform"))) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core") } diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/.gitignore b/simulator/opendc-experiments/opendc-experiments-capelin/.gitignore new file mode 100644 index 00000000..ba64707c --- /dev/null +++ b/simulator/opendc-experiments/opendc-experiments-capelin/.gitignore @@ -0,0 +1,2 @@ +input/ +output/ diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/build.gradle.kts b/simulator/opendc-experiments/opendc-experiments-capelin/build.gradle.kts index b94207ba..636f291c 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/build.gradle.kts +++ b/simulator/opendc-experiments/opendc-experiments-capelin/build.gradle.kts @@ -20,20 +20,17 @@ * SOFTWARE. */ -description = "Experiments for the SC20 paper" +description = "Experiments for the Capelin work" /* Build configuration */ plugins { - `kotlin-library-convention` - application -} - -application { - mainClass.set("org.opendc.harness.runner.console.ConsoleRunnerKt") - applicationDefaultJvmArgs = listOf("-Xms2500M") + `kotlin-library-conventions` + `experiment-conventions` + `testing-conventions` } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-core")) api(project(":opendc-harness")) implementation(project(":opendc-format")) @@ -42,17 +39,13 @@ dependencies { implementation(project(":opendc-simulator:opendc-simulator-failures")) implementation(project(":opendc-compute:opendc-compute-simulator")) - implementation("io.github.microutils:kotlin-logging:2.0.4") - implementation("me.tongfei:progressbar:0.9.0") - implementation("com.github.ajalt.clikt:clikt:3.1.0") + implementation("io.github.microutils:kotlin-logging") + implementation("me.tongfei:progressbar:${versions["progressbar"]}") + implementation("com.github.ajalt.clikt:clikt:${versions["clikt"]}") - implementation("org.apache.parquet:parquet-avro:1.11.0") - implementation("org.apache.hadoop:hadoop-client:3.2.1") { + implementation("org.apache.parquet:parquet-avro:${versions["parquet-avro"]}") + implementation("org.apache.hadoop:hadoop-client:${versions["hadoop-client"]}") { exclude(group = "org.slf4j", module = "slf4j-log4j12") exclude(group = "log4j") } - - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") } diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/CompositeWorkloadPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CompositeWorkloadPortfolio.kt index f4242456..faabe5cb 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/CompositeWorkloadPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/CompositeWorkloadPortfolio.kt @@ -20,12 +20,12 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.CompositeWorkload -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.CompositeWorkload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/ExperimentHelpers.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt index 1e01e892..8f3e686a 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/ExperimentHelpers.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin.experiment import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -44,8 +44,8 @@ import org.opendc.compute.simulator.SimBareMetalDriver import org.opendc.compute.simulator.SimVirtDriver import org.opendc.compute.simulator.SimVirtProvisioningService import org.opendc.compute.simulator.allocation.AllocationPolicy -import org.opendc.experiments.sc20.experiment.monitor.ExperimentMonitor -import org.opendc.experiments.sc20.trace.Sc20StreamingParquetTraceReader +import org.opendc.experiments.capelin.monitor.ExperimentMonitor +import org.opendc.experiments.capelin.trace.Sc20StreamingParquetTraceReader import org.opendc.format.environment.EnvironmentReader import org.opendc.format.trace.TraceReader import org.opendc.simulator.compute.SimFairShareHypervisorProvider diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/HorVerPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/HorVerPortfolio.kt index aa97b808..e1cf8517 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/HorVerPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/HorVerPortfolio.kt @@ -20,11 +20,11 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/MoreHpcPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/MoreHpcPortfolio.kt index bdb33f59..a995e467 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/MoreHpcPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/MoreHpcPortfolio.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,9 +20,12 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.* +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.SamplingStrategy +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/MoreVelocityPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/MoreVelocityPortfolio.kt index 733dabf6..49559e0e 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/MoreVelocityPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/MoreVelocityPortfolio.kt @@ -20,11 +20,11 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/OperationalPhenomenaPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/OperationalPhenomenaPortfolio.kt index 66b94faf..1aac4f9e 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/OperationalPhenomenaPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/OperationalPhenomenaPortfolio.kt @@ -20,11 +20,11 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/Portfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt index 4a82ad56..75b0d735 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/Portfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.cancel @@ -29,13 +29,17 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.test.TestCoroutineScope import mu.KotlinLogging import org.opendc.compute.simulator.allocation.* -import org.opendc.experiments.sc20.experiment.model.CompositeWorkload -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload -import org.opendc.experiments.sc20.experiment.monitor.ParquetExperimentMonitor -import org.opendc.experiments.sc20.trace.Sc20ParquetTraceReader -import org.opendc.experiments.sc20.trace.Sc20RawParquetTraceReader +import org.opendc.experiments.capelin.experiment.attachMonitor +import org.opendc.experiments.capelin.experiment.createFailureDomain +import org.opendc.experiments.capelin.experiment.createProvisioner +import org.opendc.experiments.capelin.experiment.processTrace +import org.opendc.experiments.capelin.model.CompositeWorkload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload +import org.opendc.experiments.capelin.monitor.ParquetExperimentMonitor +import org.opendc.experiments.capelin.trace.Sc20ParquetTraceReader +import org.opendc.experiments.capelin.trace.Sc20RawParquetTraceReader import org.opendc.format.environment.sc20.Sc20ClusterEnvironmentReader import org.opendc.format.trace.PerformanceInterferenceModelReader import org.opendc.harness.dsl.Experiment @@ -60,17 +64,17 @@ public abstract class Portfolio(name: String) : Experiment(name) { /** * The path to where the environments are located. */ - private val environmentPath by anyOf(File("environments/")) + private val environmentPath by anyOf(File("input/environments/")) /** * The path to where the traces are located. */ - private val tracePath by anyOf(File("traces/")) + private val tracePath by anyOf(File("input/traces/")) /** * The path to where the output results should be written. */ - private val outputPath by anyOf(File("results/")) + private val outputPath by anyOf(File("output/")) /** * The path to the original VM placements file. diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/ReplayPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ReplayPortfolio.kt index 8a42a3b4..b6d3b30c 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/ReplayPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ReplayPortfolio.kt @@ -20,11 +20,11 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/TestPortfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/TestPortfolio.kt index 2210fc97..90840db8 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/TestPortfolio.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/TestPortfolio.kt @@ -20,11 +20,11 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment +package org.opendc.experiments.capelin -import org.opendc.experiments.sc20.experiment.model.OperationalPhenomena -import org.opendc.experiments.sc20.experiment.model.Topology -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.OperationalPhenomena +import org.opendc.experiments.capelin.model.Topology +import org.opendc.experiments.capelin.model.Workload import org.opendc.harness.dsl.anyOf /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/model/OperationalPhenomena.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/model/OperationalPhenomena.kt index b22f4c9e..b53b3617 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/model/OperationalPhenomena.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/model/OperationalPhenomena.kt @@ -1,7 +1,5 @@ /* - * MIT License - * - * Copyright (c) 2020 atlarge-research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment.model +package org.opendc.experiments.capelin.model /** * Operation phenomena during experiments. diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/model/Topology.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/model/Topology.kt index 95062fda..fe16a294 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/model/Topology.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/model/Topology.kt @@ -1,7 +1,5 @@ /* - * MIT License - * - * Copyright (c) 2020 atlarge-research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment.model +package org.opendc.experiments.capelin.model /** * The topology topology on which we test the workload. diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/model/Workload.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/model/Workload.kt index ba95f544..c4ddd158 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/model/Workload.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/model/Workload.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment.model +package org.opendc.experiments.capelin.model public enum class SamplingStrategy { REGULAR, diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/monitor/ExperimentMonitor.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt index 18ba2c33..3c6637bf 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/monitor/ExperimentMonitor.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment.monitor +package org.opendc.experiments.capelin.monitor import org.opendc.compute.core.Server import org.opendc.compute.core.virt.driver.VirtDriver diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/monitor/ParquetExperimentMonitor.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt index 3eb9362c..a0d57656 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/experiment/monitor/ParquetExperimentMonitor.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -20,16 +20,16 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.experiment.monitor +package org.opendc.experiments.capelin.monitor import mu.KotlinLogging import org.opendc.compute.core.Server import org.opendc.compute.core.virt.driver.VirtDriver import org.opendc.compute.core.virt.service.VirtProvisioningEvent -import org.opendc.experiments.sc20.telemetry.HostEvent -import org.opendc.experiments.sc20.telemetry.ProvisionerEvent -import org.opendc.experiments.sc20.telemetry.parquet.ParquetHostEventWriter -import org.opendc.experiments.sc20.telemetry.parquet.ParquetProvisionerEventWriter +import org.opendc.experiments.capelin.telemetry.HostEvent +import org.opendc.experiments.capelin.telemetry.ProvisionerEvent +import org.opendc.experiments.capelin.telemetry.parquet.ParquetHostEventWriter +import org.opendc.experiments.capelin.telemetry.parquet.ParquetProvisionerEventWriter import java.io.File /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/Event.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/Event.kt index 38a4a227..c29e116e 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/Event.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/Event.kt @@ -22,7 +22,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry +package org.opendc.experiments.capelin.telemetry /** * An event that occurs within the system. diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/HostEvent.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt index 042d204e..e5e9d520 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/HostEvent.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry +package org.opendc.experiments.capelin.telemetry import org.opendc.compute.core.Server diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/ProvisionerEvent.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/ProvisionerEvent.kt index d063bc54..539c9bc9 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/ProvisionerEvent.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/ProvisionerEvent.kt @@ -22,7 +22,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry +package org.opendc.experiments.capelin.telemetry /** * A periodic report of the provisioner's metrics. diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/RunEvent.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/RunEvent.kt index 4f4706f0..6c8fc941 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/RunEvent.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/RunEvent.kt @@ -20,9 +20,9 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry +package org.opendc.experiments.capelin.telemetry -import org.opendc.experiments.sc20.experiment.Portfolio +import org.opendc.experiments.capelin.Portfolio /** * A periodic report of the host machine metrics. diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/VmEvent.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/VmEvent.kt index c18069c9..427c453a 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/VmEvent.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/VmEvent.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry +package org.opendc.experiments.capelin.telemetry import org.opendc.compute.core.Server diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetEventWriter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetEventWriter.kt index 79bc23db..38930ee5 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetEventWriter.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetEventWriter.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry.parquet +package org.opendc.experiments.capelin.telemetry.parquet import mu.KotlinLogging import org.apache.avro.Schema @@ -28,7 +28,7 @@ import org.apache.avro.generic.GenericData import org.apache.hadoop.fs.Path import org.apache.parquet.avro.AvroParquetWriter import org.apache.parquet.hadoop.metadata.CompressionCodecName -import org.opendc.experiments.sc20.telemetry.Event +import org.opendc.experiments.capelin.telemetry.Event import java.io.Closeable import java.io.File import java.util.concurrent.ArrayBlockingQueue diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetHostEventWriter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt index bd4eae37..4a3e7963 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetHostEventWriter.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt @@ -20,12 +20,12 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry.parquet +package org.opendc.experiments.capelin.telemetry.parquet import org.apache.avro.Schema import org.apache.avro.SchemaBuilder import org.apache.avro.generic.GenericData -import org.opendc.experiments.sc20.telemetry.HostEvent +import org.opendc.experiments.capelin.telemetry.HostEvent import java.io.File /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetProvisionerEventWriter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetProvisionerEventWriter.kt index 5d53a7bb..8feff8d9 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetProvisionerEventWriter.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetProvisionerEventWriter.kt @@ -20,12 +20,12 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry.parquet +package org.opendc.experiments.capelin.telemetry.parquet import org.apache.avro.Schema import org.apache.avro.SchemaBuilder import org.apache.avro.generic.GenericData -import org.opendc.experiments.sc20.telemetry.ProvisionerEvent +import org.opendc.experiments.capelin.telemetry.ProvisionerEvent import java.io.File /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetRunEventWriter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetRunEventWriter.kt index b50a698c..946410eb 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/telemetry/parquet/ParquetRunEventWriter.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetRunEventWriter.kt @@ -20,12 +20,12 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.telemetry.parquet +package org.opendc.experiments.capelin.telemetry.parquet import org.apache.avro.Schema import org.apache.avro.SchemaBuilder import org.apache.avro.generic.GenericData -import org.opendc.experiments.sc20.telemetry.RunEvent +import org.opendc.experiments.capelin.telemetry.RunEvent import java.io.File /** diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20ParquetTraceReader.kt index d735ea4b..6cfdae40 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20ParquetTraceReader.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20ParquetTraceReader.kt @@ -20,12 +20,12 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.trace +package org.opendc.experiments.capelin.trace import org.opendc.compute.core.workload.VmWorkload import org.opendc.compute.simulator.SimWorkloadImage -import org.opendc.experiments.sc20.experiment.model.CompositeWorkload -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.CompositeWorkload +import org.opendc.experiments.capelin.model.Workload import org.opendc.format.trace.TraceEntry import org.opendc.format.trace.TraceReader import org.opendc.simulator.compute.interference.IMAGE_PERF_INTERFERENCE_MODEL diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20RawParquetTraceReader.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20RawParquetTraceReader.kt index 4a318df4..d2560d62 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20RawParquetTraceReader.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20RawParquetTraceReader.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.trace +package org.opendc.experiments.capelin.trace import mu.KotlinLogging import org.apache.avro.generic.GenericData diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20StreamingParquetTraceReader.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20StreamingParquetTraceReader.kt index ba22ae15..12705c80 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20StreamingParquetTraceReader.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20StreamingParquetTraceReader.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.trace +package org.opendc.experiments.capelin.trace import mu.KotlinLogging import org.apache.avro.generic.GenericData diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20TraceConverter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20TraceConverter.kt index 9a9598e7..7713c06f 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/Sc20TraceConverter.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/Sc20TraceConverter.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.trace +package org.opendc.experiments.capelin.trace import com.github.ajalt.clikt.core.CliktCommand import com.github.ajalt.clikt.parameters.arguments.argument diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/WorkloadSampler.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/WorkloadSampler.kt index a8b83aef..4d9b9df1 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/kotlin/org/opendc/experiments/sc20/trace/WorkloadSampler.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/trace/WorkloadSampler.kt @@ -20,14 +20,14 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20.trace +package org.opendc.experiments.capelin.trace import mu.KotlinLogging import org.opendc.compute.core.workload.VmWorkload import org.opendc.compute.simulator.SimWorkloadImage -import org.opendc.experiments.sc20.experiment.model.CompositeWorkload -import org.opendc.experiments.sc20.experiment.model.SamplingStrategy -import org.opendc.experiments.sc20.experiment.model.Workload +import org.opendc.experiments.capelin.model.CompositeWorkload +import org.opendc.experiments.capelin.model.SamplingStrategy +import org.opendc.experiments.capelin.model.Workload import org.opendc.format.trace.TraceEntry import java.util.* import kotlin.random.Random diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/resources/log4j2.xml b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/resources/log4j2.xml index 8029092e..d1c01b8e 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/main/resources/log4j2.xml +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/resources/log4j2.xml @@ -33,10 +33,10 @@ <Logger name="org.opendc" level="debug" additivity="false"> <AppenderRef ref="Console"/> </Logger> - <Logger name="org.opendc.experiments.sc20" level="info" additivity="false"> + <Logger name="org.opendc.experiments.capelin" level="info" additivity="false"> <AppenderRef ref="Console"/> </Logger> - <Logger name="org.opendc.experiments.sc20.trace" level="debug" additivity="false"> + <Logger name="org.opendc.experiments.capelin.trace" level="debug" additivity="false"> <AppenderRef ref="Console"/> </Logger> <Logger name="org.apache.hadoop" level="warn" additivity="false"> diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/kotlin/org/opendc/experiments/sc20/Sc20IntegrationTest.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt index c5ad345d..6a0796f6 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/kotlin/org/opendc/experiments/sc20/Sc20IntegrationTest.kt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt @@ -20,7 +20,7 @@ * SOFTWARE. */ -package org.opendc.experiments.sc20 +package org.opendc.experiments.capelin import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.cancel @@ -36,14 +36,14 @@ import org.opendc.compute.core.Server import org.opendc.compute.core.workload.VmWorkload import org.opendc.compute.simulator.SimVirtProvisioningService import org.opendc.compute.simulator.allocation.AvailableCoreMemoryAllocationPolicy -import org.opendc.experiments.sc20.experiment.attachMonitor -import org.opendc.experiments.sc20.experiment.createFailureDomain -import org.opendc.experiments.sc20.experiment.createProvisioner -import org.opendc.experiments.sc20.experiment.model.Workload -import org.opendc.experiments.sc20.experiment.monitor.ExperimentMonitor -import org.opendc.experiments.sc20.experiment.processTrace -import org.opendc.experiments.sc20.trace.Sc20ParquetTraceReader -import org.opendc.experiments.sc20.trace.Sc20RawParquetTraceReader +import org.opendc.experiments.capelin.experiment.attachMonitor +import org.opendc.experiments.capelin.experiment.createFailureDomain +import org.opendc.experiments.capelin.experiment.createProvisioner +import org.opendc.experiments.capelin.experiment.processTrace +import org.opendc.experiments.capelin.model.Workload +import org.opendc.experiments.capelin.monitor.ExperimentMonitor +import org.opendc.experiments.capelin.trace.Sc20ParquetTraceReader +import org.opendc.experiments.capelin.trace.Sc20RawParquetTraceReader import org.opendc.format.environment.EnvironmentReader import org.opendc.format.environment.sc20.Sc20ClusterEnvironmentReader import org.opendc.format.trace.TraceReader @@ -56,7 +56,7 @@ import java.time.Clock * An integration test suite for the SC20 experiments. */ @OptIn(ExperimentalCoroutinesApi::class) -class Sc20IntegrationTest { +class CapelinIntegrationTest { /** * The [TestCoroutineScope] to use. */ diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/env/single.txt b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/env/single.txt index 53b3c2d7..53b3c2d7 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/env/single.txt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/env/single.txt diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/env/topology.txt b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/env/topology.txt index 6b347bff..6b347bff 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/env/topology.txt +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/env/topology.txt diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/trace/meta.parquet b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/meta.parquet Binary files differindex ce7a812c..ce7a812c 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/trace/meta.parquet +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/meta.parquet diff --git a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/trace/trace.parquet b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/trace.parquet Binary files differindex 1d7ce882..1d7ce882 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc20/src/test/resources/trace/trace.parquet +++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/resources/trace/trace.parquet diff --git a/simulator/opendc-experiments/opendc-experiments-sc18/.gitignore b/simulator/opendc-experiments/opendc-experiments-sc18/.gitignore new file mode 100644 index 00000000..ba64707c --- /dev/null +++ b/simulator/opendc-experiments/opendc-experiments-sc18/.gitignore @@ -0,0 +1,2 @@ +input/ +output/ diff --git a/simulator/opendc-experiments/opendc-experiments-sc18/build.gradle.kts b/simulator/opendc-experiments/opendc-experiments-sc18/build.gradle.kts index b6b35694..00aa0395 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc18/build.gradle.kts +++ b/simulator/opendc-experiments/opendc-experiments-sc18/build.gradle.kts @@ -20,31 +20,20 @@ * SOFTWARE. */ -description = "Experiments for the TPDS paper" +description = "Experiments for the SC18 article" /* Build configuration */ plugins { - `kotlin-library-convention` - application -} - -application { - mainClass.set("org.opendc.harness.runner.console.ConsoleRunnerKt") + `kotlin-library-conventions` + `experiment-conventions` } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-core")) api(project(":opendc-harness")) implementation(project(":opendc-format")) implementation(project(":opendc-workflows")) implementation(project(":opendc-simulator:opendc-simulator-core")) implementation(project(":opendc-compute:opendc-compute-simulator")) - implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8") { - exclude("org.jetbrains.kotlin", module = "kotlin-reflect") - } - implementation(kotlin("reflect")) - - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") } diff --git a/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt b/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt index 6d2c0ec7..fc979363 100644 --- a/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt +++ b/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 AtLarge Research + * Copyright (c) 2021 AtLarge Research * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -55,12 +55,12 @@ public class UnderspecificationExperiment : Experiment("underspecification") { /** * The workflow traces to test. */ - private val trace: String by anyOf("traces/chronos_exp_noscaler_ca.gwf") + private val trace: String by anyOf("input/traces/chronos_exp_noscaler_ca.gwf") /** * The datacenter environments to test. */ - private val environment: String by anyOf("environments/base.json") + private val environment: String by anyOf("input/environments/base.json") @OptIn(ExperimentalCoroutinesApi::class) override fun doRun(repeat: Int) { diff --git a/simulator/opendc-format/build.gradle.kts b/simulator/opendc-format/build.gradle.kts index 30aafc90..cd26c077 100644 --- a/simulator/opendc-format/build.gradle.kts +++ b/simulator/opendc-format/build.gradle.kts @@ -24,27 +24,22 @@ description = "Library for reading common data formats for topology simulation" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` + `testing-conventions` } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-core")) api(project(":opendc-compute:opendc-compute-core")) api(project(":opendc-workflows")) implementation(project(":opendc-simulator:opendc-simulator-compute")) implementation(project(":opendc-compute:opendc-compute-simulator")) - implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8") { - exclude("org.jetbrains.kotlin", module = "kotlin-reflect") - } - implementation(kotlin("reflect")) + api("com.fasterxml.jackson.module:jackson-module-kotlin:${versions["jackson-module-kotlin"]}") - implementation("org.apache.parquet:parquet-avro:1.11.0") - implementation("org.apache.hadoop:hadoop-client:3.2.1") { + implementation("org.apache.parquet:parquet-avro:${versions["parquet-avro"]}") + implementation("org.apache.hadoop:hadoop-client:${versions["hadoop-client"]}") { exclude(group = "org.slf4j", module = "slf4j-log4j12") exclude(group = "log4j") } - - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") } diff --git a/simulator/opendc-harness/build.gradle.kts b/simulator/opendc-harness/build.gradle.kts index 359d2384..f980853c 100644 --- a/simulator/opendc-harness/build.gradle.kts +++ b/simulator/opendc-harness/build.gradle.kts @@ -24,24 +24,21 @@ description = "Harness for defining repeatable experiments using OpenDC" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` + `testing-conventions` } dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Library.KOTLINX_COROUTINES}") - api("org.junit.platform:junit-platform-commons:${Library.JUNIT_PLATFORM}") + api(platform(project(":opendc-platform"))) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core") + api("org.junit.platform:junit-platform-commons:${versions.junitPlatform}") - implementation("io.github.classgraph:classgraph:4.8.98") - implementation("me.tongfei:progressbar:0.9.0") - implementation("io.github.microutils:kotlin-logging:2.0.4") - implementation("com.github.ajalt.clikt:clikt:3.1.0") + implementation("org.junit.platform:junit-platform-engine:${versions.junitPlatform}") + implementation("io.github.classgraph:classgraph:${versions["classgraph"]}") + implementation("io.github.microutils:kotlin-logging") - api("org.junit.platform:junit-platform-engine:${Library.JUNIT_PLATFORM}") - api("org.junit.platform:junit-platform-suite-api:${Library.JUNIT_PLATFORM}") - api("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") + implementation("com.github.ajalt.clikt:clikt:${versions["clikt"]}") + implementation("me.tongfei:progressbar:${versions["progressbar"]}") - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:2.14.0") - - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") + runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:${versions.log4j}") } diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt index 65a0604d..a36f1f9b 100644 --- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt +++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt @@ -51,38 +51,48 @@ public class ExperimentEngine( * * @param root The experiment to execute. */ - @OptIn(InternalCoroutinesApi::class) - public suspend fun execute(root: ExperimentDefinition): Unit = supervisorScope { + public suspend fun execute(root: ExperimentDefinition) { listener.experimentStarted(root) try { - strategy.generate(root) - .asFlow() - .map { scenario -> - listener.scenarioStarted(scenario) - scenario - } - .buffer(100) - .collect { scenario -> - val jobs = (0 until repeats).map { repeat -> - val worker = scheduler.allocate() + supervisorScope { + strategy.generate(root) + .asFlow() + .map { scenario -> + listener.scenarioStarted(scenario) + scenario + } + .buffer(100) + .collect { scenario -> launch { - val trial = Trial(scenario, repeat) + val jobs = (0 until repeats).map { repeat -> + val worker = scheduler.allocate() + launch { + val trial = Trial(scenario, repeat) + try { + listener.trialStarted(trial) + worker.dispatch(trial) + listener.trialFinished(trial, null) + } catch (e: Throwable) { + listener.trialFinished(trial, e) + throw e + } + } + } + try { - listener.trialStarted(trial) - worker.dispatch(trial) - listener.trialFinished(trial, null) + jobs.joinAll() + listener.scenarioFinished(scenario, null) + } catch (e: CancellationException) { + listener.scenarioFinished(scenario, null) + throw e } catch (e: Throwable) { - listener.trialFinished(trial, e) + listener.scenarioFinished(scenario, e) } } } + } - launch { - jobs.joinAll() - listener.scenarioFinished(scenario, null) - } - } listener.experimentFinished(root, null) } catch (e: Throwable) { listener.experimentFinished(root, e) diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt index 58791549..9e2b629d 100644 --- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt +++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/JUnitExperimentExecutionListener.kt @@ -24,11 +24,13 @@ package org.opendc.harness.runner.junit5 import org.junit.platform.engine.* import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor +import org.junit.platform.engine.support.descriptor.ClassSource import org.junit.platform.engine.support.descriptor.EngineDescriptor import org.opendc.harness.api.ExperimentDefinition import org.opendc.harness.api.Scenario import org.opendc.harness.api.Trial import org.opendc.harness.engine.ExperimentExecutionListener +import java.util.* /** * An [ExperimentExecutionListener] that notifies JUnit platform of the progress of the experiment trials. @@ -121,6 +123,14 @@ public class JUnitExperimentExecutionListener( override fun mayRegisterTests(): Boolean = true override fun toString(): String = "ExperimentDescriptor" + + override fun getSource(): Optional<TestSource> { + val cls = meta["class.name"] as? String + return if (cls != null) + Optional.of(ClassSource.from(cls)) + else + Optional.empty() + } } } diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt index 685cd41a..ab7367b8 100644 --- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt +++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/runner/junit5/OpenDCTestEngine.kt @@ -30,13 +30,13 @@ import org.junit.platform.engine.discovery.ClassNameFilter import org.junit.platform.engine.discovery.ClassSelector import org.junit.platform.engine.discovery.MethodSelector import org.junit.platform.engine.support.descriptor.EngineDescriptor -import org.junit.platform.launcher.LauncherDiscoveryRequest import org.opendc.harness.api.ExperimentDefinition import org.opendc.harness.engine.ExperimentEngineLauncher import org.opendc.harness.engine.discovery.DiscoveryFilter import org.opendc.harness.engine.discovery.DiscoveryProvider import org.opendc.harness.engine.discovery.DiscoveryRequest import org.opendc.harness.engine.discovery.DiscoverySelector +import java.util.* /** * A [TestEngine] implementation that is able to run experiments defined using the harness. @@ -47,15 +47,13 @@ public class OpenDCTestEngine : TestEngine { */ private val logger = KotlinLogging.logger {} - override fun getId(): String = "opendc" + override fun getId(): String = "opendc-harness" - override fun discover(request: EngineDiscoveryRequest, uniqueId: UniqueId): TestDescriptor { - // Test whether are excluded from the engines - val isEnabled = (request as? LauncherDiscoveryRequest)?.engineFilters?.all { it.toPredicate().test(this) } ?: true - if (!isEnabled) { - return ExperimentEngineDescriptor(uniqueId, emptyFlow()) - } + override fun getGroupId(): Optional<String> = Optional.of("org.opendc") + override fun getArtifactId(): Optional<String> = Optional.of("opendc-harness") + + override fun discover(request: EngineDiscoveryRequest, uniqueId: UniqueId): TestDescriptor { // IntelliJ will pass a [MethodSelector] to run just a single method inside a file. In that // case, no experiments should be discovered, since we support only experiments by class. if (request.getSelectorsByType(MethodSelector::class.java).isNotEmpty()) { diff --git a/simulator/opendc-platform/build.gradle.kts b/simulator/opendc-platform/build.gradle.kts new file mode 100644 index 00000000..0ae1c72a --- /dev/null +++ b/simulator/opendc-platform/build.gradle.kts @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 AtLarge Research + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +plugins { + `java-platform` +} + +description = "Java platform for the OpenDC project" + +dependencies { + constraints { + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${versions.kotlinxCoroutines}") + api("org.jetbrains.kotlinx:kotlinx-coroutines-test:${versions.kotlinxCoroutines}") + + api("io.github.microutils:kotlin-logging:${versions.kotlinLogging}") + runtime("org.slf4j:slf4j-simple:${versions.slf4j}") + } +} diff --git a/simulator/opendc-runner-web/build.gradle.kts b/simulator/opendc-runner-web/build.gradle.kts index 7ae3c641..d0b80cc7 100644 --- a/simulator/opendc-runner-web/build.gradle.kts +++ b/simulator/opendc-runner-web/build.gradle.kts @@ -24,7 +24,7 @@ description = "Experiment runner for OpenDC" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` application } @@ -33,21 +33,20 @@ application { } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-core")) implementation(project(":opendc-compute:opendc-compute-simulator")) implementation(project(":opendc-format")) - implementation(project(":opendc-experiments:opendc-experiments-sc20")) + implementation(project(":opendc-experiments:opendc-experiments-capelin")) implementation(project(":opendc-simulator:opendc-simulator-core")) implementation(project(":opendc-simulator:opendc-simulator-compute")) - implementation("com.github.ajalt:clikt:2.8.0") - implementation("io.github.microutils:kotlin-logging:1.7.10") - implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8") { - exclude("org.jetbrains.kotlin", module = "kotlin-reflect") - } - implementation("io.sentry:sentry-log4j2:3.1.1") - implementation("org.mongodb:mongodb-driver-sync:4.0.5") + implementation("io.github.microutils:kotlin-logging") + implementation("com.github.ajalt.clikt:clikt:${versions["clikt"]}") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:${versions["jackson-module-kotlin"]}") + implementation("io.sentry:sentry-log4j2:${versions["sentry-log4j2"]}") + implementation("org.mongodb:mongodb-driver-sync:${versions["mongodb-driver-sync"]}") - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:2.13.1") - runtimeOnly("org.apache.logging.log4j:log4j-1.2-api:2.13.1") + runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl:${versions.log4j}") + runtimeOnly("org.apache.logging.log4j:log4j-1.2-api:${versions.log4j}") } diff --git a/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/Main.kt b/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/Main.kt index 7796019a..533bf321 100644 --- a/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/Main.kt +++ b/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/Main.kt @@ -41,13 +41,13 @@ import mu.KotlinLogging import org.bson.Document import org.bson.types.ObjectId import org.opendc.compute.simulator.allocation.* -import org.opendc.experiments.sc20.experiment.attachMonitor -import org.opendc.experiments.sc20.experiment.createFailureDomain -import org.opendc.experiments.sc20.experiment.createProvisioner -import org.opendc.experiments.sc20.experiment.model.Workload -import org.opendc.experiments.sc20.experiment.processTrace -import org.opendc.experiments.sc20.trace.Sc20ParquetTraceReader -import org.opendc.experiments.sc20.trace.Sc20RawParquetTraceReader +import org.opendc.experiments.capelin.experiment.attachMonitor +import org.opendc.experiments.capelin.experiment.createFailureDomain +import org.opendc.experiments.capelin.experiment.createProvisioner +import org.opendc.experiments.capelin.experiment.processTrace +import org.opendc.experiments.capelin.model.Workload +import org.opendc.experiments.capelin.trace.Sc20ParquetTraceReader +import org.opendc.experiments.capelin.trace.Sc20RawParquetTraceReader import org.opendc.format.trace.sc20.Sc20PerformanceInterferenceReader import org.opendc.simulator.utils.DelayControllerClockAdapter import org.opendc.trace.core.EventTracer diff --git a/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/WebExperimentMonitor.kt b/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/WebExperimentMonitor.kt index 7ef25552..f16f9b90 100644 --- a/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/WebExperimentMonitor.kt +++ b/simulator/opendc-runner-web/src/main/kotlin/org/opendc/runner/web/WebExperimentMonitor.kt @@ -27,8 +27,8 @@ import org.opendc.compute.core.Server import org.opendc.compute.core.ServerState import org.opendc.compute.core.virt.driver.VirtDriver import org.opendc.compute.core.virt.service.VirtProvisioningEvent -import org.opendc.experiments.sc20.experiment.monitor.ExperimentMonitor -import org.opendc.experiments.sc20.telemetry.HostEvent +import org.opendc.experiments.capelin.monitor.ExperimentMonitor +import org.opendc.experiments.capelin.telemetry.HostEvent import kotlin.math.max /** diff --git a/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts b/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts index 844a7c6d..19af6fe8 100644 --- a/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts +++ b/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts @@ -23,14 +23,12 @@ description = "Library for simulation of cloud computing components" plugins { - `kotlin-library-convention` + `kotlin-library-conventions` + `testing-conventions` } dependencies { + api(platform(project(":opendc-platform"))) api(project(":opendc-simulator:opendc-simulator-core")) implementation(project(":opendc-utils")) - - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") } diff --git a/simulator/opendc-simulator/opendc-simulator-core/build.gradle.kts b/simulator/opendc-simulator/opendc-simulator-core/build.gradle.kts index a740dcf3..309afb19 100644 --- a/simulator/opendc-simulator/opendc-simulator-core/build.gradle.kts +++ b/simulator/opendc-simulator/opendc-simulator-core/build.gradle.kts @@ -24,9 +24,10 @@ description = "Simulation-specific code for use in OpenDC" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` } dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-test:${Library.KOTLINX_COROUTINES}") + api(platform(project(":opendc-platform"))) + api("org.jetbrains.kotlinx:kotlinx-coroutines-test") } diff --git a/simulator/opendc-simulator/opendc-simulator-failures/build.gradle.kts b/simulator/opendc-simulator/opendc-simulator-failures/build.gradle.kts index 1c30506f..0f6b2de2 100644 --- a/simulator/opendc-simulator/opendc-simulator-failures/build.gradle.kts +++ b/simulator/opendc-simulator/opendc-simulator-failures/build.gradle.kts @@ -23,9 +23,10 @@ description = "Failure models for OpenDC" plugins { - `kotlin-library-convention` + `kotlin-library-conventions` } dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Library.KOTLINX_COROUTINES}") + api(platform(project(":opendc-platform"))) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core") } diff --git a/simulator/opendc-trace/opendc-trace-core/build.gradle.kts b/simulator/opendc-trace/opendc-trace-core/build.gradle.kts index 3db6669a..3051f733 100644 --- a/simulator/opendc-trace/opendc-trace-core/build.gradle.kts +++ b/simulator/opendc-trace/opendc-trace-core/build.gradle.kts @@ -24,9 +24,10 @@ description = "Event tracing library for OpenDC" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` } dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Library.KOTLINX_COROUTINES}") + api(platform(project(":opendc-platform"))) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core") } diff --git a/simulator/opendc-utils/build.gradle.kts b/simulator/opendc-utils/build.gradle.kts index d4b8c514..48214665 100644 --- a/simulator/opendc-utils/build.gradle.kts +++ b/simulator/opendc-utils/build.gradle.kts @@ -24,14 +24,13 @@ description = "Utilities used across OpenDC modules" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` + `testing-conventions` } dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Library.KOTLINX_COROUTINES}") + api(platform(project(":opendc-platform"))) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core") testImplementation(project(":opendc-simulator:opendc-simulator-core")) - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") } diff --git a/simulator/opendc-workflows/build.gradle.kts b/simulator/opendc-workflows/build.gradle.kts index e9c85de5..b4ffac7d 100644 --- a/simulator/opendc-workflows/build.gradle.kts +++ b/simulator/opendc-workflows/build.gradle.kts @@ -24,7 +24,8 @@ description = "Workflow service for OpenDC" /* Build configuration */ plugins { - `kotlin-library-convention` + `kotlin-library-conventions` + `testing-conventions` } dependencies { @@ -32,17 +33,11 @@ dependencies { api(project(":opendc-compute:opendc-compute-core")) api(project(":opendc-trace:opendc-trace-core")) implementation(project(":opendc-utils")) - implementation("io.github.microutils:kotlin-logging:1.7.9") + implementation("io.github.microutils:kotlin-logging:${versions.kotlinLogging}") testImplementation(project(":opendc-simulator:opendc-simulator-core")) testImplementation(project(":opendc-compute:opendc-compute-simulator")) testImplementation(project(":opendc-format")) - testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8") { - exclude("org.jetbrains.kotlin", module = "kotlin-reflect") - } - testImplementation(kotlin("reflect")) - testRuntimeOnly("org.slf4j:slf4j-simple:${Library.SLF4J}") - testImplementation("org.junit.jupiter:junit-jupiter-api:${Library.JUNIT_JUPITER}") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${Library.JUNIT_JUPITER}") - testImplementation("org.junit.platform:junit-platform-launcher:${Library.JUNIT_PLATFORM}") + testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin:${versions["jackson-module-kotlin"]}") + testRuntimeOnly("org.slf4j:slf4j-simple:${versions.slf4j}") } diff --git a/simulator/settings.gradle.kts b/simulator/settings.gradle.kts index 470303f4..77d78318 100644 --- a/simulator/settings.gradle.kts +++ b/simulator/settings.gradle.kts @@ -21,13 +21,14 @@ */ rootProject.name = "opendc-simulator" +include(":opendc-platform") include(":opendc-core") include(":opendc-compute:opendc-compute-core") include(":opendc-compute:opendc-compute-simulator") include(":opendc-workflows") include(":opendc-format") include(":opendc-experiments:opendc-experiments-sc18") -include(":opendc-experiments:opendc-experiments-sc20") +include(":opendc-experiments:opendc-experiments-capelin") include(":opendc-runner-web") include(":opendc-simulator:opendc-simulator-core") include(":opendc-simulator:opendc-simulator-compute") |
