5 #ifndef TCPSPSUITE_STORAGE_HPP
6 #define TCPSPSUITE_STORAGE_HPP
8 #include "../datastructures/maybe.hpp"
9 #include "../instance/solution.hpp"
10 #include "../manager/memoryinfo.hpp"
11 #include "../util/log.hpp"
12 #include "db_factory.hpp"
16 #include <odb/database.hxx>
27 class AdditionalResultStorage {
31 AdditionalResultStorage() =
default;
32 AdditionalResultStorage(
const AdditionalResultStorage &) =
delete;
33 AdditionalResultStorage & operator=(
const AdditionalResultStorage &) =
delete;
35 struct IntermediateResult
39 Maybe<unsigned int> iteration;
42 Maybe<Solution> solution;
45 struct ExtendedMeasure
49 constexpr
static unsigned int TYPE_DOUBLE = 2;
50 constexpr
static unsigned int TYPE_INT = 3;
53 Maybe<unsigned int> iteration;
61 V(
double v) : v_double(v){};
62 V(
int v) : v_int(v){};
66 std::vector<IntermediateResult> intermediate_results;
67 std::vector<ExtendedMeasure> extended_measures;
72 explicit Storage(std::string filename,
unsigned int retry_count = 1000);
74 long unsigned int insert(
const Solution & sol,
const std::string & run_id,
75 const std::string & algorithm_id,
76 const std::string & config_name,
int instance_seed,
77 double elapsed_time,
const SolverConfig & sc,
78 const AdditionalResultStorage & additional,
79 const manager::LinuxMemoryInfo * mem_info,
80 const manager::PAPIPerformanceInfo * papi_info);
82 void insert_error(
const std::string & instance_id,
const std::string & run_id,
83 const std::string & algorithm_id,
84 const std::string & config_name,
int seed,
85 unsigned int error_id,
int fault_code);
90 bool check_result(
const std::string & instance_id,
const std::string & run_id,
91 const std::string & algorithm_id,
const SolverConfig & sc,
92 bool only_optimal =
false,
bool ignore_config_name =
false,
93 bool ignore_run_name =
false);
95 bool check_error(std::vector<int> error_ids, std::vector<int> fault_codes,
96 const std::string & instance_id,
const std::string & run_id,
97 const std::string & algorithm_id,
const SolverConfig & sc,
98 bool ignore_config_name =
false,
99 bool ignore_run_name =
false);
101 std::vector<std::shared_ptr<DBResult>>
102 get_results_for_config(
const SolverConfig & sc);
104 std::shared_ptr<DBConfig>
105 find_equivalent_config(std::shared_ptr<DBConfig> src);
107 static void initialize(std::string filename,
int argc,
const char ** argv);
108 static std::shared_ptr<DBInvocation> get_invocation();
111 static std::mutex insert_mutex;
112 static std::mutex insert_error_mutex;
113 static std::mutex check_result_mutex;
114 static std::mutex check_error_mutex;
116 static std::shared_ptr<DBInvocation> invocation;
118 unsigned int retry_count;
120 std::vector<unsigned long> find_db_configs(
const SolverConfig & sc,
121 bool ignore_name =
false);
126 void insert_intermediate_result(
127 std::shared_ptr<DBResult> res,
128 const AdditionalResultStorage::IntermediateResult & intermediate);
129 void insert_extended_measure(
130 std::shared_ptr<DBResult> res,
131 const AdditionalResultStorage::ExtendedMeasure & measure);
132 std::shared_ptr<DBSolution> insert_solution(std::shared_ptr<DBResult> res,
135 std::unique_ptr<odb::database> db;
137 std::shared_ptr<DBConfig> get_solverconfig(
const SolverConfig & sc);
138 std::shared_ptr<DBConfig> get_or_insert_solverconfig(
const SolverConfig & sc);
143 friend class DBMerger;
146 #endif // TCPSPSUITE_STORAGE_HPP