summaryrefslogtreecommitdiff
path: root/opendc/opendc-format/src/main
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-02-16 20:30:17 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-02-28 14:28:29 +0100
commitb82e573c67f0004945aa18c575268100fb279b56 (patch)
tree7af8e303ea9ab3821e8d8c7c1c7e9b1de058a9e7 /opendc/opendc-format/src/main
parent0c19b32433e2086e72e0d22595f4daa6ef04b64b (diff)
refactor: Change from logical processes to simulation domains
This change moves the simulator terminology from logical processes to simulation domains. This prevents the clash with "processes" that we are trying to simulate. In addition, simulation domains allows us to reduce the amount of boilerplate and instead allows for simulation modelled using standard techniques.
Diffstat (limited to 'opendc/opendc-format/src/main')
-rw-r--r--opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/EnvironmentReader.kt5
-rw-r--r--opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc18/Sc18EnvironmentReader.kt24
-rw-r--r--opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc20/Sc20EnvironmentReader.kt21
3 files changed, 22 insertions, 28 deletions
diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/EnvironmentReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/EnvironmentReader.kt
index 6ca53a05..42551f43 100644
--- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/EnvironmentReader.kt
+++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/EnvironmentReader.kt
@@ -24,6 +24,7 @@
package com.atlarge.opendc.format.environment
+import com.atlarge.odcsim.Domain
import com.atlarge.opendc.core.Environment
import java.io.Closeable
@@ -32,7 +33,7 @@ import java.io.Closeable
*/
interface EnvironmentReader : Closeable {
/**
- * Read the description of the datacenter environment as [Environment].
+ * Construct an [Environment] in the specified domain.
*/
- fun read(): Environment
+ suspend fun construct(dom: Domain): Environment
}
diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc18/Sc18EnvironmentReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc18/Sc18EnvironmentReader.kt
index ac44337a..8898ddc7 100644
--- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc18/Sc18EnvironmentReader.kt
+++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc18/Sc18EnvironmentReader.kt
@@ -24,6 +24,7 @@
package com.atlarge.opendc.format.environment.sc18
+import com.atlarge.odcsim.Domain
import com.atlarge.opendc.compute.core.ProcessingUnit
import com.atlarge.opendc.compute.core.MemoryUnit
import com.atlarge.opendc.compute.metal.driver.SimpleBareMetalDriver
@@ -37,7 +38,6 @@ import com.atlarge.opendc.format.environment.EnvironmentReader
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
-import kotlinx.coroutines.runBlocking
import java.io.InputStream
import java.util.UUID
@@ -52,10 +52,11 @@ class Sc18EnvironmentReader(input: InputStream, mapper: ObjectMapper = jacksonOb
/**
* The environment that was read from the file.
*/
- private val environment: Environment
+ private val setup: Setup = mapper.readValue(input)
+
+ override suspend fun construct(dom: Domain): Environment {
+ val provisioningDomain = dom.newDomain("provisioner")
- init {
- val setup = mapper.readValue<Setup>(input)
var counter = 0
val nodes = setup.rooms.flatMap { room ->
room.objects.flatMap { roomObject ->
@@ -69,18 +70,17 @@ class Sc18EnvironmentReader(input: InputStream, mapper: ObjectMapper = jacksonOb
else -> throw IllegalArgumentException("The cpu id $id is not recognized")
}
}
- SimpleBareMetalDriver(UUID.randomUUID(), "node-${counter++}", cores, listOf(MemoryUnit("", "", 2300.0, 16000)))
+ SimpleBareMetalDriver(UUID.randomUUID(), "node-${counter++}", cores, listOf(MemoryUnit("", "", 2300.0, 16000)),
+ dom.newDomain("node-$counter"))
}
}
}
}
}
- val provisioningService = SimpleProvisioningService()
- runBlocking {
- for (node in nodes) {
- provisioningService.create(node)
- }
+ val provisioningService = SimpleProvisioningService(provisioningDomain)
+ for (node in nodes) {
+ provisioningService.create(node)
}
val serviceRegistry = ServiceRegistryImpl()
@@ -92,10 +92,8 @@ class Sc18EnvironmentReader(input: InputStream, mapper: ObjectMapper = jacksonOb
)
)
- environment = Environment(setup.name, null, listOf(platform))
+ return Environment(setup.name, null, listOf(platform))
}
- override fun read(): Environment = environment
-
override fun close() {}
}
diff --git a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc20/Sc20EnvironmentReader.kt b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc20/Sc20EnvironmentReader.kt
index 5eb711cc..fecba302 100644
--- a/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc20/Sc20EnvironmentReader.kt
+++ b/opendc/opendc-format/src/main/kotlin/com/atlarge/opendc/format/environment/sc20/Sc20EnvironmentReader.kt
@@ -24,6 +24,7 @@
package com.atlarge.opendc.format.environment.sc20
+import com.atlarge.odcsim.Domain
import com.atlarge.opendc.compute.core.MemoryUnit
import com.atlarge.opendc.compute.core.ProcessingUnit
import com.atlarge.opendc.compute.metal.driver.SimpleBareMetalDriver
@@ -37,7 +38,6 @@ import com.atlarge.opendc.format.environment.EnvironmentReader
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
-import kotlinx.coroutines.runBlocking
import java.io.InputStream
import java.util.UUID
@@ -51,10 +51,9 @@ class Sc20EnvironmentReader(input: InputStream, mapper: ObjectMapper = jacksonOb
/**
* The environment that was read from the file.
*/
- private val environment: Environment
+ private val setup: Setup = mapper.readValue(input)
- init {
- val setup = mapper.readValue<Setup>(input)
+ override suspend fun construct(dom: Domain): Environment {
var counter = 0
val nodes = setup.rooms.flatMap { room ->
room.objects.flatMap { roomObject ->
@@ -74,18 +73,16 @@ class Sc20EnvironmentReader(input: InputStream, mapper: ObjectMapper = jacksonOb
else -> throw IllegalArgumentException("The cpu id $id is not recognized")
}
}
- SimpleBareMetalDriver(UUID.randomUUID(), "node-${counter++}", cores, memories)
+ SimpleBareMetalDriver(UUID.randomUUID(), "node-${counter++}", cores, memories, dom.newDomain("node-$counter"))
}
}
}
}
}
- val provisioningService = SimpleProvisioningService()
- runBlocking {
- for (node in nodes) {
- provisioningService.create(node)
- }
+ val provisioningService = SimpleProvisioningService(dom.newDomain("provisioner"))
+ for (node in nodes) {
+ provisioningService.create(node)
}
val serviceRegistry = ServiceRegistryImpl()
@@ -97,10 +94,8 @@ class Sc20EnvironmentReader(input: InputStream, mapper: ObjectMapper = jacksonOb
)
)
- environment = Environment(setup.name, null, listOf(platform))
+ return Environment(setup.name, null, listOf(platform))
}
- override fun read(): Environment = environment
-
override fun close() {}
}