From 9e19fe86e19dff2afdd90b3b571f438aef84433c Mon Sep 17 00:00:00 2001
From: Simon Ehrenstein <simon.ehrenstein@gmail.com>
Date: Wed, 23 Sep 2020 11:40:08 +0200
Subject: [PATCH] Use correct exp_id

---
 execution/strategies/config.py                    |  1 +
 execution/strategies/strategies/config.py         |  1 +
 .../strategies/search/binary_search_strategy.py   |  8 ++++----
 .../strategies/search/check_all_strategy.py       |  2 +-
 .../strategies/search/linear_search_strategy.py   |  2 +-
 .../subexperiment_executor.py                     |  2 +-
 execution/theodolite.py                           | 15 +++++++++++++++
 7 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/execution/strategies/config.py b/execution/strategies/config.py
index f6b639073..f9a678972 100644
--- a/execution/strategies/config.py
+++ b/execution/strategies/config.py
@@ -4,6 +4,7 @@ from dataclasses import dataclass
 class ExperimentConfig:
     """ Wrapper for the configuration of an experiment. """
     use_case: str
+    exp_id: int
     dim_values: list
     replicass: list
     partitions: int
diff --git a/execution/strategies/strategies/config.py b/execution/strategies/strategies/config.py
index 4a633c113..9d92831cd 100644
--- a/execution/strategies/strategies/config.py
+++ b/execution/strategies/strategies/config.py
@@ -4,6 +4,7 @@ from dataclasses import dataclass
 class SubexperimentConfig:
     """ Wrapper for the configuration of a subexperiment """
     use_case: str
+    exp_id: int
     counter: int
     dim_value: int
     replicas: int
diff --git a/execution/strategies/strategies/search/binary_search_strategy.py b/execution/strategies/strategies/search/binary_search_strategy.py
index 52992be5c..92eea2e7d 100644
--- a/execution/strategies/strategies/search/binary_search_strategy.py
+++ b/execution/strategies/strategies/search/binary_search_strategy.py
@@ -5,7 +5,7 @@ from strategies.strategies.config import SubexperimentConfig
 def binary_search(config, dim_value, lower, upper, subexperiment_counter):
     if lower == upper:
         print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[lower]}")
-        subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
+        subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
         config.subexperiment_executor.execute(subexperiment_config)
         result = config.subexperiment_evaluator.execute(subexperiment_config)
         if result==1: # successful, the upper neighbor is assumed to also has been successful
@@ -14,14 +14,14 @@ def binary_search(config, dim_value, lower, upper, subexperiment_counter):
             return (lower+1, subexperiment_counter)
     elif lower+1==upper:
         print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[lower]}")
-        subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
+        subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[lower], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
         config.subexperiment_executor.execute(subexperiment_config)
         result = config.subexperiment_evaluator.execute(subexperiment_config)
         if result==1: # minimal instances found
             return (lower, subexperiment_counter)
         else: # not successful, check if lower+1 instances are sufficient
             print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[upper]}")
-            subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[upper], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
+            subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[upper], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
             config.subexperiment_executor.execute(subexperiment_config)
             result = config.subexperiment_evaluator.execute(subexperiment_config)
             if result == 1: # minimal instances found
@@ -32,7 +32,7 @@ def binary_search(config, dim_value, lower, upper, subexperiment_counter):
         # test mid
         mid=(upper+lower)//2
         print(f"Run subexperiment {subexperiment_counter} with config {dim_value} {config.replicass[mid]}")
-        subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, config.replicass[mid], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
+        subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, config.replicass[mid], config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
         config.subexperiment_executor.execute(subexperiment_config)
         result = config.subexperiment_evaluator.execute(subexperiment_config)
         if result == 1: # success -> search in (lower, mid-1)
diff --git a/execution/strategies/strategies/search/check_all_strategy.py b/execution/strategies/strategies/search/check_all_strategy.py
index cd9f8e0b8..cd1a548d2 100644
--- a/execution/strategies/strategies/search/check_all_strategy.py
+++ b/execution/strategies/strategies/search/check_all_strategy.py
@@ -12,7 +12,7 @@ def execute(config, dim_value_index, lower_replicas_bound_index, subexperiment_c
         replicas=config.replicass[lower_replicas_bound_index]
         print(f"Run subexperiment {subexperiment_counter} of {subexperiments_total} with dimension value {dim_value} and {replicas} replicas.")
 
-        subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
+        subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
 
         config.subexperiment_executor.execute(subexperiment_config)
 
diff --git a/execution/strategies/strategies/search/linear_search_strategy.py b/execution/strategies/strategies/search/linear_search_strategy.py
index 9471f685e..eeda5ad32 100644
--- a/execution/strategies/strategies/search/linear_search_strategy.py
+++ b/execution/strategies/strategies/search/linear_search_strategy.py
@@ -11,7 +11,7 @@ def execute(config, dim_value_index, lower_replicas_bound_index, subexperiment_c
         replicas=config.replicass[lower_replicas_bound_index]
         print(f"Run subexperiment {subexperiment_counter} from at most {subexperiments_total} with dimension value {dim_value} and {replicas} replicas.")
 
-        subexperiment_config = SubexperimentConfig(config.use_case, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
+        subexperiment_config = SubexperimentConfig(config.use_case, config.exp_id, subexperiment_counter, dim_value, replicas, config.partitions, config.cpu_limit, config.memory_limit, config.kafka_streams_commit_interval_ms, config.execution_minutes)
 
         config.subexperiment_executor.execute(subexperiment_config)
         result = config.subexperiment_evaluator.execute(subexperiment_config)
diff --git a/execution/strategies/subexperiment_execution/subexperiment_executor.py b/execution/strategies/subexperiment_execution/subexperiment_executor.py
index 7e4d2359f..e31e3d22e 100644
--- a/execution/strategies/subexperiment_execution/subexperiment_executor.py
+++ b/execution/strategies/subexperiment_execution/subexperiment_executor.py
@@ -5,4 +5,4 @@ import os
 dirname = os.path.dirname(__file__)
 os.chdir(dirname+"/../../")
 def execute(subexperiment_config):
-    os.system(f"./run_uc{subexperiment_config.use_case}.sh {subexperiment_config.counter} {subexperiment_config.dim_value} {subexperiment_config.replicas} {subexperiment_config.partitions} {subexperiment_config.cpu_limit} {subexperiment_config.memory_limit} {subexperiment_config.kafka_streams_commit_interval_ms} {subexperiment_config.execution_minutes}")
\ No newline at end of file
+    os.system(f"./run_uc{subexperiment_config.use_case}.sh {subexperiment_config.exp_id} {subexperiment_config.dim_value} {subexperiment_config.replicas} {subexperiment_config.partitions} {subexperiment_config.cpu_limit} {subexperiment_config.memory_limit} {subexperiment_config.kafka_streams_commit_interval_ms} {subexperiment_config.execution_minutes}")
\ No newline at end of file
diff --git a/execution/theodolite.py b/execution/theodolite.py
index fa9beff9a..b6e624613 100755
--- a/execution/theodolite.py
+++ b/execution/theodolite.py
@@ -26,6 +26,15 @@ search_strategy=sys.argv[10] if len(sys.argv) >= 11 and (sys.argv[10] == "linear
 print(f"Domain restriction of search space activated: {domain_restriction}")
 print(f"Chosen search strategy: {search_strategy}")
 
+if os.path.exists("exp_counter.txt"):
+    with open("exp_counter.txt", mode="r") as read_stream:
+        exp_id = int(read_stream.read())
+else:
+    exp_id = 0
+
+with open("exp_counter.txt", mode="w") as write_stream:
+    write_stream.write(str(exp_id+1))
+
 # domain restriction
 if domain_restriction:
     # domain restriction + linear-search
@@ -33,6 +42,7 @@ if domain_restriction:
         print(f"Going to execute at most {len(dim_values)+len(replicas)-1} subexperiments in total..")
         experiment_config = ExperimentConfig(
             use_case=uc,
+            exp_id=exp_id,
             dim_values=dim_values,
             replicass=replicas,
             partitions=partitions,
@@ -48,6 +58,7 @@ if domain_restriction:
     elif search_strategy == "binary-search":
         experiment_config = ExperimentConfig(
             use_case=uc,
+            exp_id=exp_id,
             dim_values=dim_values,
             replicass=replicas,
             partitions=partitions,
@@ -64,6 +75,7 @@ if domain_restriction:
         print(f"Going to execute {len(dim_values)*len(replicas)} subexperiments in total..")
         experiment_config = ExperimentConfig(
             use_case=uc,
+            exp_id=exp_id,
             dim_values=dim_values,
             replicass=replicas,
             partitions=partitions,
@@ -82,6 +94,7 @@ else:
         print(f"Going to execute at most {len(dim_values)*len(replicas)} subexperiments in total..")
         experiment_config = ExperimentConfig(
             use_case=uc,
+            exp_id=exp_id,
             dim_values=dim_values,
             replicass=replicas,
             partitions=partitions,
@@ -97,6 +110,7 @@ else:
     elif search_strategy == "binary-search":
         experiment_config = ExperimentConfig(
             use_case=uc,
+            exp_id=exp_id,
             dim_values=dim_values,
             replicass=replicas,
             partitions=partitions,
@@ -113,6 +127,7 @@ else:
         print(f"Going to execute {len(dim_values)*len(replicas)} subexperiments in total..")
         experiment_config = ExperimentConfig(
             use_case=uc,
+            exp_id=exp_id,
             dim_values=dim_values,
             replicass=replicas,
             partitions=partitions,
-- 
GitLab