Skip to content
Snippets Groups Projects
Commit 434b753f authored by Simon Ehrenstein's avatar Simon Ehrenstein
Browse files

Add executionDuration to BenchmarkExecutor

parent 727e62b4
No related branches found
No related tags found
4 merge requests!159Re-implementation of Theodolite with Kotlin/Quarkus,!157Update Graal Image in CI pipeline,!83WIP: Re-implementation of Theodolite with Kotlin/Quarkus,!78Resolve "Implement Quarkus/Kotlin protype"
...@@ -4,7 +4,8 @@ import theodolite.util.Benchmark ...@@ -4,7 +4,8 @@ import theodolite.util.Benchmark
import theodolite.util.LoadDimension import theodolite.util.LoadDimension
import theodolite.util.Resource import theodolite.util.Resource
import theodolite.util.Results import theodolite.util.Results
import java.time.Duration
abstract class BenchmarkExecutor(val benchmark: Benchmark, val results: Results) { abstract class BenchmarkExecutor(val benchmark: Benchmark, val results: Results, val executionDuration: Duration) {
abstract fun runExperiment(load: LoadDimension, res: Resource): Boolean; abstract fun runExperiment(load: LoadDimension, res: Resource): Boolean;
} }
\ No newline at end of file
...@@ -4,12 +4,13 @@ import theodolite.util.Benchmark ...@@ -4,12 +4,13 @@ import theodolite.util.Benchmark
import theodolite.util.LoadDimension import theodolite.util.LoadDimension
import theodolite.util.Resource import theodolite.util.Resource
import theodolite.util.Results import theodolite.util.Results
import java.time.Duration
class KafkaBenchmarkExecutor(benchmark: Benchmark, results: Results) : BenchmarkExecutor(benchmark, results) { class KafkaBenchmarkExecutor(benchmark: Benchmark, results: Results, executionDuration: Duration) : BenchmarkExecutor(benchmark, results, executionDuration) {
override fun runExperiment(load: LoadDimension, res: Resource): Boolean { override fun runExperiment(load: LoadDimension, res: Resource): Boolean {
benchmark.start() benchmark.start()
// wait // wait
benchmark.stop(); benchmark.stop()
// evaluate // evaluate
val result = false // if success else false val result = false // if success else false
this.results.setResult(Pair(load, res), result) this.results.setResult(Pair(load, res), result)
......
...@@ -4,12 +4,14 @@ import theodolite.strategies.restriction.LowerBoundRestriction ...@@ -4,12 +4,14 @@ import theodolite.strategies.restriction.LowerBoundRestriction
import theodolite.strategies.searchstrategy.CompositeStrategy import theodolite.strategies.searchstrategy.CompositeStrategy
import theodolite.strategies.searchstrategy.LinearSearch import theodolite.strategies.searchstrategy.LinearSearch
import theodolite.util.* import theodolite.util.*
import java.time.Duration
class TheodoliteExecutor() { class TheodoliteExecutor() {
private fun loadConfig(): Config { private fun loadConfig(): Config {
val benchmark: Benchmark = KafkaBenchmark() val benchmark: Benchmark = KafkaBenchmark(emptyMap())
val results: Results = Results() val results: Results = Results()
val executor: BenchmarkExecutor = KafkaBenchmarkExecutor(benchmark, results) val executionDuration = Duration.ofSeconds(60*5 )
val executor: BenchmarkExecutor = KafkaBenchmarkExecutor(benchmark, results, executionDuration)
val restrictionStrategy = LowerBoundRestriction(results) val restrictionStrategy = LowerBoundRestriction(results)
val searchStrategy = LinearSearch(executor, results) val searchStrategy = LinearSearch(executor, results)
...@@ -17,7 +19,8 @@ class TheodoliteExecutor() { ...@@ -17,7 +19,8 @@ class TheodoliteExecutor() {
return Config( return Config(
loads = (0..6).map{ number -> LoadDimension(number) }, loads = (0..6).map{ number -> LoadDimension(number) },
resources = (0..6).map{ number -> Resource(number) }, resources = (0..6).map{ number -> Resource(number) },
compositeStrategy = CompositeStrategy(executor, searchStrategy, restrictionStrategies = setOf(restrictionStrategy), results = results) compositeStrategy = CompositeStrategy(executor, searchStrategy, restrictionStrategies = setOf(restrictionStrategy), results = results),
executionDuration = executionDuration
) )
} }
......
...@@ -20,7 +20,7 @@ class BinarySearch(benchmarkExecutor: BenchmarkExecutor, results: Results) : Sea ...@@ -20,7 +20,7 @@ class BinarySearch(benchmarkExecutor: BenchmarkExecutor, results: Results) : Sea
throw IllegalArgumentException() throw IllegalArgumentException()
} }
if (lower == upper ) { if (lower == upper ) {
if (this.benchmarkExecutor.runExperiment(load, resources[upper])) return upper; if (this.benchmarkExecutor.runExperiment(load, resources[lower])) return lower;
else { else {
if (lower + 1 == resources.size) return - 1 if (lower + 1 == resources.size) return - 1
return lower + 1; return lower + 1;
......
package theodolite.util package theodolite.util
// todo: needs cluster and resource config // todo: needs cluster and resource config
interface Benchmark { abstract class Benchmark(val config: Map<String, Any>) {
abstract fun start();
fun start(); abstract fun stop();
fun stop();
} }
\ No newline at end of file
...@@ -3,11 +3,13 @@ package theodolite.util ...@@ -3,11 +3,13 @@ package theodolite.util
import theodolite.strategies.restriction.RestrictionStrategy import theodolite.strategies.restriction.RestrictionStrategy
import theodolite.strategies.searchstrategy.CompositeStrategy import theodolite.strategies.searchstrategy.CompositeStrategy
import theodolite.strategies.searchstrategy.SearchStrategy import theodolite.strategies.searchstrategy.SearchStrategy
import java.time.Duration
data class Config( data class Config(
val loads: List<LoadDimension>, val loads: List<LoadDimension>,
val resources: List<Resource>, val resources: List<Resource>,
val compositeStrategy: CompositeStrategy val compositeStrategy: CompositeStrategy,
val executionDuration: Duration
) { ) {
} }
\ No newline at end of file
package theodolite.util package theodolite.util
class KafkaBenchmark: Benchmark { class KafkaBenchmark(config: Map<String, Any>): Benchmark(config) {
override fun start() { override fun start() {
TODO("Not yet implemented") TODO("Not yet implemented")
......
...@@ -8,6 +8,8 @@ import theodolite.strategies.searchstrategy.BinarySearch ...@@ -8,6 +8,8 @@ import theodolite.strategies.searchstrategy.BinarySearch
import theodolite.strategies.restriction.LowerBoundRestriction import theodolite.strategies.restriction.LowerBoundRestriction
import theodolite.strategies.searchstrategy.CompositeStrategy import theodolite.strategies.searchstrategy.CompositeStrategy
import theodolite.execution.TestBenchmarkExecutor import theodolite.execution.TestBenchmarkExecutor
import theodolite.strategies.restriction.RestrictionStrategy
import theodolite.strategies.searchstrategy.SearchStrategy
import theodolite.util.* import theodolite.util.*
@QuarkusTest @QuarkusTest
...@@ -75,6 +77,34 @@ class CompositeStrategyTest { ...@@ -75,6 +77,34 @@ class CompositeStrategyTest {
assertEquals(actual, expected) assertEquals(actual, expected)
} }
@Test
fun testEnd2EndBinarySearch2() {
val mockResults = arrayOf(
arrayOf( true , true , true , true , true , true , true, true),
arrayOf( false, false, true , true , true , true , true, true),
arrayOf( false, false, true , true , true , true , true, true),
arrayOf( false, false, false, true , true , true , true, true),
arrayOf( false, false, false, false, true , true , true, true),
arrayOf( false, false, false, false, false, false, true, true),
arrayOf( false, false, false, false, false, false, false, true)
)
val mockLoads: List<LoadDimension> = (0..6).map{number -> LoadDimension(number)}
val mockResources: List<Resource> = (0..7).map{number -> Resource(number)}
val results: Results = Results();
val benchmark = TestBenchmark()
val benchmarkExecutor: TestBenchmarkExecutor = TestBenchmarkExecutor(mockResults, benchmark, results)
val binarySearch: BinarySearch = BinarySearch(benchmarkExecutor, results);
val lowerBoundRestriction: LowerBoundRestriction = LowerBoundRestriction(results);
val strategy: CompositeStrategy = CompositeStrategy(benchmarkExecutor, binarySearch, setOf(lowerBoundRestriction), results) // sets instead of lists
val actual: ArrayList<Resource?> = ArrayList<Resource?>()
val expected: ArrayList<Resource?> = ArrayList(listOf(0,2,2,3,4,6,7).map{ x -> Resource(x)})
for(load in mockLoads) {
actual.add(strategy.findSuitableResources(load, mockResources))
}
assertEquals(actual, expected)
}
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment