summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc
diff options
context:
space:
mode:
authormjkwiatkowski <mati.rewa@gmail.com>2026-02-15 18:26:59 +0100
committermjkwiatkowski <mati.rewa@gmail.com>2026-02-15 18:26:59 +0100
commit86d35fcec83057e346e4982b5a6908f25342a392 (patch)
tree2a9cbd42582fc87b81e7414a78b43ead51c623aa /opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc
parent213130fdca719d9dc7f29fe7c11acde40e4f964e (diff)
feat: opendc -> postgresql connection works
Diffstat (limited to 'opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc')
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt84
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt10
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt16
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt12
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt25
5 files changed, 23 insertions, 124 deletions
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt
deleted file mode 100644
index 26244544..00000000
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ConfigParser.kt
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.opendc.experiments.base.runner
-
-import kotlinx.serialization.ExperimentalSerializationApi
-import kotlinx.serialization.Serializable
-import kotlinx.serialization.json.Json
-import kotlinx.serialization.json.decodeFromStream
-
-import java.io.File
-import java.io.IOException
-import java.io.InputStream
-import java.io.OutputStream
-import java.net.Socket
-import java.sql.Connection
-import java.sql.DriverManager
-import java.sql.SQLException
-
-
-/**
- * @property name
- * @property backlog the amount of connections to accept
- * @property databasePath
- * @property address IPv4 address
- * @property port
- */
-@Serializable
-public data class Config(
- val name: String = "",
- var backlog: Int = 0,
- val database: Int = 5342,
- val address: String = "",
- val port: Int = 8080,
- val username : String = "",
- val password : String = "",
- val schema: String = ""
-){
-
- public companion object{
- public var input: InputStream? = null
- public var output: OutputStream? = null
- public var connection : Connection? = null
-
- public var socket: Socket? = null
-
- public fun setConfigSocket(socket: Socket?){
- this.socket = socket
- try {
- input = socket?.getInputStream()
- output = socket?.getOutputStream()
- } catch (e: IOException){
- print("${e.message}")
- }
- }
-
- public fun getConfigReader() : InputStream? {
- return input
- }
-
- public fun getConfigWriter() : OutputStream? {
- return output
- }
-
- public fun setupDatabase(address : String, port : Int, dbUser : String, dbPassword : String, dbSchema : String){
- val dbUrl = "jdbc:postgresql://$address:$port/$dbSchema"
- println(dbUrl)
- try {
- connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword)
- } catch (e: SQLException) {
- print("${e.message}")
- }
- }
-
- }
-}
-/**
- * Reads `config.json` into Config data class.
- */
-public class ConfigReader {
- private val jsonReader = Json
- public fun read(file: File): Config = read(file.inputStream())
- @OptIn(ExperimentalSerializationApi::class)
- public fun read(input: InputStream): Config {
- return jsonReader.decodeFromStream<Config>(input)
- }
-}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt
index 96eb3b21..874f5654 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentCli.kt
@@ -28,6 +28,9 @@ import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.parameters.options.defaultLazy
import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.file
+import org.opendc.common.utils.Config
+import org.opendc.common.utils.ConfigReader
+import org.opendc.common.utils.PostgresqlDB
import org.opendc.experiments.base.experiment.getExperiment
import java.io.File
import java.io.IOException
@@ -43,6 +46,8 @@ public fun main(args: Array<String>) {
else ExperimentListener().main(args)
}
+
+
/**
* Opens a client socket from `config`, but otherwise works as before.
*/
@@ -87,11 +92,14 @@ internal class ExperimentListener: CliktCommand(name = "listener") {
val configReader = ConfigReader()
var serverSocket: ServerSocket? = null
val config = configReader.read(configPath)
+ val database = PostgresqlDB()
val inetAddress = InetAddress.getByName(config.address)
try {
serverSocket = ServerSocket(config.port, config.backlog, inetAddress)
- Config.setupDatabase(config.address, config.database, config.username, config.password, config.schema)
+ database.setupDatabase(config.address, config.postgresql, config.username, config.password, config.database)
+ database.clear()
+ database.create()
runListener(serverSocket)
} catch (e: IOException) {
println("${e.message}")
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt
index 312cb0ac..9d1f7374 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ExperimentRunner.kt
@@ -24,17 +24,12 @@ package org.opendc.experiments.base.runner
import me.tongfei.progressbar.ProgressBarBuilder
import me.tongfei.progressbar.ProgressBarStyle
+import org.opendc.common.utils.Config
import org.opendc.experiments.base.experiment.Scenario
-import java.io.BufferedReader
-import java.io.BufferedWriter
import java.io.IOException
-import java.io.InputStream
-import java.io.InputStreamReader
-import java.io.OutputStream
-import java.io.OutputStreamWriter
import java.net.ServerSocket
import java.net.Socket
-
+import org.opendc.demo.runRequest
/**
* Run scenario when no pool is available for parallel execution
@@ -61,9 +56,6 @@ public fun runExperiment(experiment: List<Scenario>) {
println("$ansiGreen================================================================================$ansiReset")
for (seed in 0..<scenario.runs) {
-
- Config.getConfigWriter()?.write("123\n".toByteArray())
-
println("$ansiBlue Starting seed: $seed $ansiReset")
runScenario(scenario, seed.toLong())
pb.step()
@@ -84,10 +76,10 @@ public fun runListener(socket: ServerSocket) {
// communication, and to store the incoming results into Postgresql
Config.setConfigSocket(client)
- var request = ByteArray(1024)
+ val request = ByteArray(1024)
while(true){
- var ret : Int? = Config.getConfigReader()?.read(request)
+ val ret : Int? = Config.getConfigReader()?.read(request)
if(ret == -1) break
if(ret != null && ret > 0) runRequest(String(request, 0, ret))
}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt
deleted file mode 100644
index 0316119f..00000000
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/RequestRunner.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.opendc.experiments.base.runner
-
-/**
- * Processes a single HTTP request.
- * @param request The request to process.
- */
-
-public fun runRequest(request: String) {
- // https://github.com/am-i-helpful/opendc/blob/master/opendc-oda/opendc-oda-experiments/src/main/kotlin/org/opendc/oda/experimentrunner/ODAComputeMonitor.kt
- // Do this here
- println("The request is $request\n")
-} \ No newline at end of file
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
index 6d094eb4..f33b6da8 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
@@ -34,6 +34,7 @@ import org.opendc.compute.simulator.telemetry.parquet.ComputeExportConfig
import org.opendc.compute.simulator.telemetry.parquet.ParquetComputeMonitor
import org.opendc.compute.simulator.telemetry.parquet.withGpuColumns
import org.opendc.compute.topology.clusterTopology
+import org.opendc.demo.DemoComputeMonitor
import org.opendc.experiments.base.experiment.Scenario
import org.opendc.experiments.base.experiment.specs.allocation.TimeShiftAllocationPolicySpec
import org.opendc.experiments.base.experiment.specs.allocation.createComputeScheduler
@@ -136,11 +137,7 @@ public fun runScenario(
provisioner,
serviceDomain,
scenario,
- seed,
startTime,
- scenario.id,
- computeExportConfig =
- scenario.exportModelSpec.computeExportConfig.withGpuColumns(gpuCount),
)
val service = provisioner.registry.resolve(serviceDomain, ComputeService::class.java)!!
@@ -181,7 +178,7 @@ public fun runScenario(
}
/**
- * Saves the simulation results into a specific output folder received from the input.A
+ * Saves the simulation results into a specific output folder received from the input.
*
* @param provisioner The provisioner used to setup and run the simulation.
* @param serviceDomain The domain of the compute service.
@@ -193,21 +190,19 @@ public fun addExportModel(
provisioner: Provisioner,
serviceDomain: String,
scenario: Scenario,
- seed: Long,
startTime: Duration,
- index: Int,
- computeExportConfig: ComputeExportConfig = scenario.exportModelSpec.computeExportConfig,
) {
+
+ /*
+ * @Mateusz
+ * Here is the entry point to DemoComputeMonitor().
+ * With this setting, the simulator no longer writes to parquet files.
+ * To get back the original code, refer to https://github.com/atlarge-research/opendc
+ * */
provisioner.runStep(
registerComputeMonitor(
serviceDomain,
- ParquetComputeMonitor(
- File("${scenario.outputFolder}/raw-output/$index"),
- "seed=$seed",
- bufferSize = 4096,
- scenario.exportModelSpec.filesToExportDict,
- computeExportConfig = computeExportConfig,
- ),
+ DemoComputeMonitor(),
Duration.ofSeconds(scenario.exportModelSpec.exportInterval),
startTime,
scenario.exportModelSpec.filesToExportDict,