From e0b305fd1d845cba1b11578722f88adb193f756e Mon Sep 17 00:00:00 2001 From: Matthijs Bijman Date: Thu, 16 Feb 2017 22:06:09 +0100 Subject: Update simulator to work with new db schema The new schema removes the queued_simulation_section table and introduces the state and last_simulated_tick columns to the experiments table. --- Simulator/Simulator.vcxproj | 18 +++---- Simulator/Simulator.vcxproj.filters | 93 +++++++++++++++++++---------------- Simulator/include/Simulator.h | 1 + Simulator/include/database/Database.h | 4 ++ Simulator/include/database/Queries.h | 15 ++++-- Simulator/src/database/Database.cpp | 17 ++++++- 6 files changed, 92 insertions(+), 56 deletions(-) diff --git a/Simulator/Simulator.vcxproj b/Simulator/Simulator.vcxproj index 8f852ecf..aba44dba 100644 --- a/Simulator/Simulator.vcxproj +++ b/Simulator/Simulator.vcxproj @@ -30,7 +30,7 @@ {7CF8EE44-A898-46CC-9F6C-1245D1F893BF} Simulator Simulator - 8.1 + 10.0.14393.0 @@ -109,7 +109,7 @@ Level3 Disabled - $(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories) + $(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories) true @@ -121,12 +121,12 @@ Level3 Disabled - $(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories) + $(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories) true sqlite3.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(SolutionDir)external\sqlite3; + $(SolutionDir)opendc-simulator-dependencies\sqlite @@ -135,7 +135,7 @@ MaxSpeed true true - $(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories) + $(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories) true @@ -151,14 +151,14 @@ MaxSpeed true true - $(SolutionDir)external\sqlite3;$(ProjectDir)include;%(AdditionalIncludeDirectories) + $(SolutionDir)opendc-simulator-dependencies\sqlite;$(ProjectDir)include;%(AdditionalIncludeDirectories) true true true sqlite3.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - $(SolutionDir)external\sqlite3; + $(SolutionDir)opendc-simulator-dependencies\sqlite @@ -199,7 +199,7 @@ $(SolutionDir)external\sqlite3; - $(SolutionDir)external\sqlite3;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories) + $(SolutionDir)opendc-simulator-dependencies\sqlite;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories) MultiThreaded @@ -209,7 +209,7 @@ $(SolutionDir)external\sqlite3; - $(SolutionDir)external\sqlite3;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories) + $(SolutionDir)opendc-simulator-dependencies\sqlite;$(SolutionDir)external\gtest;$(ProjectDir)include;%(AdditionalIncludeDirectories) MultiThreaded diff --git a/Simulator/Simulator.vcxproj.filters b/Simulator/Simulator.vcxproj.filters index 62867ed7..cd94ae30 100644 --- a/Simulator/Simulator.vcxproj.filters +++ b/Simulator/Simulator.vcxproj.filters @@ -21,9 +21,6 @@ {d9c26546-3166-46e6-ac93-5559d5ab32b8} - - {0717ffeb-69ab-4832-904c-3041b3b86ac5} - {f9450bee-6bd3-4870-ae67-d4e1a5c5c800} @@ -36,6 +33,18 @@ {ec05c495-e179-4db3-b21c-fd2292482f95} + + {f691ce9e-8a17-4f0a-b661-7e8734ce37b6} + + + {a5b36e44-8d0c-477b-a833-55467dc0cad1} + + + {70aa99d9-c949-42b9-905a-6fcb59c259a5} + + + {0bbea619-1ef1-4e50-b32e-fe9a4099a23a} + @@ -50,29 +59,26 @@ Source Files\Modeling - + Source Files - - Source Files\Modeling + + Source Files\Simulation\Workloads - - Source Files + + Source Files\Modeling\Machine - - Source Files + + Source Files\Modeling\Machine - - Source Files\Simulation + + Source Files\Modeling\Machine Header Files\Database - - Header Files\Simulation - Header Files\Simulation\Workloads @@ -91,62 +97,65 @@ Header Files\Modeling - - Header Files\Modeling - Header Files\Modeling Header Files\Modeling - - Header Files - - - Header Files\Modeling - Header Files\Modeling Header Files\Modeling - - Header Files + + Header Files\Simulation - + Header Files - - Header Files + + Header Files\Simulation - - Header Files\Simulation\Workloads + + Header Files\Simulation + + + Header Files\Simulation\Schedulers - Header Files + Header Files\Simulation\Schedulers - - Header Files\Simulation + + Header Files\Simulation\Schedulers - Header Files + Header Files\Simulation\History - Header Files + Header Files\Simulation\History + + + Header Files\Simulation\History + Header Files\Simulation\History + + Header Files\Simulation\Workloads - - Header Files\Simulation + + Header Files\Modeling\Machine - - Header Files + + Header Files\Modeling\Machine - - Header Files + + Header Files\Modeling + + + Header Files\Modeling\Machine \ No newline at end of file diff --git a/Simulator/include/Simulator.h b/Simulator/include/Simulator.h index 381639af..1e0aaeb6 100644 --- a/Simulator/include/Simulator.h +++ b/Simulator/include/Simulator.h @@ -72,6 +72,7 @@ namespace Simulation if ((*it).second.isFinished()) { std::cout << "Finished simulation." << std::endl; + database.finishExperiment((*it).first); it = experiments.erase(it); } else diff --git a/Simulator/include/database/Database.h b/Simulator/include/database/Database.h index 6e8bfeef..7f867d6c 100644 --- a/Simulator/include/database/Database.h +++ b/Simulator/include/database/Database.h @@ -49,6 +49,10 @@ namespace Database */ void dequeueExperiment(int id) const; + /* + Marks the given experiment as finished in the database. + */ + void finishExperiment(int id) const; /* Creates a simulation object from a simulation in the database. diff --git a/Simulator/include/database/Queries.h b/Simulator/include/database/Queries.h index 73afc1a1..33e8cdb9 100644 --- a/Simulator/include/database/Queries.h +++ b/Simulator/include/database/Queries.h @@ -6,11 +6,15 @@ namespace Database namespace Queries { Query GET_QUEUED_EXPERIMENTS(std::string(R"query( - SELECT experiment_id FROM queued_experiments; + SELECT id FROM experiments WHERE state LIKE 'QUEUED'; )query")); - Query<> REMOVE_QUEUED_EXPERIMENT(std::string(R"query( - DELETE FROM queued_experiments WHERE experiment_id = $id; + Query<> SET_EXPERIMENT_STATE_SIMULATING(std::string(R"query( + UPDATE experiments SET state='SIMULATING' WHERE id=$id; + )query")); + + Query<> SET_EXPERIMENT_STATE_FINISHED(std::string(R"query( + UPDATE experiments SET state='FINISHED' WHERE id=$id; )query")); Query GET_EXPERIMENT_BY_ID(std::string(R"query( @@ -25,7 +29,10 @@ namespace Database SELECT id, path_id, datacenter_id, start_tick FROM sections WHERE path_id = $id; )query")); - + Query<> WRITE_EXPERIMENT_LAST_SIMULATED_TICK(std::string(R"query( + UPDATE experiments SET last_simulated_tick = $val WHERE id = $id; + )query")); + /* Returns the type of the scheduler of the given simulation section. Returns: diff --git a/Simulator/src/database/Database.cpp b/Simulator/src/database/Database.cpp index bb76abda..b953bc73 100644 --- a/Simulator/src/database/Database.cpp +++ b/Simulator/src/database/Database.cpp @@ -76,6 +76,12 @@ namespace Database }); history.clearHistory(); + + uint32_t lastSimulatedTick = experiment.getCurrentTick() - 1; + QueryExecuter<> writeLastSimulatedTick(db); + writeLastSimulatedTick.setQuery(Queries::WRITE_EXPERIMENT_LAST_SIMULATED_TICK) + .bindParams(lastSimulatedTick, experiment.getId()) + .executeOnce(); } int Database::pollQueuedExperiments() const @@ -91,11 +97,20 @@ namespace Database void Database::dequeueExperiment(int experimentId) const { QueryExecuter<> q(db); - q.setQuery(Queries::REMOVE_QUEUED_EXPERIMENT) + q.setQuery(Queries::SET_EXPERIMENT_STATE_SIMULATING) .bindParams(experimentId) .executeOnce(); } + void Database::finishExperiment(int id) const + { + QueryExecuter<> q(db); + q.setQuery(Queries::SET_EXPERIMENT_STATE_FINISHED) + .bindParams(id) + .executeOnce(); + } + + Simulation::Experiment Database::createExperiment(uint32_t experimentId) { // Retrieves the experiment data by ID -- cgit v1.2.3