Initialize.
14 {
16 m_env = std::make_unique<mpi3::environment>(mpi3::thread_level::multiple);
17
18 if (
m_env->thread_support() != mpi3::thread_level::multiple) {
19 ATH_MSG_ERROR(
"MPI_THREAD_MULTIPLE is required but unavailable");
20 return StatusCode::FAILURE;
21 }
23
24
25 char version_string[MPI_MAX_LIBRARY_VERSION_STRING];
26 int version_string_len;
27 MPI_Get_library_version(version_string, &version_string_len);
30
33 << " ranks! This is insufficient!");
34 return StatusCode::FAILURE;
35 }
41 if (std::getenv(
"RANK") != std::to_string(
m_rank)) {
42 const char* env_rank = std::getenv("RANK");
44 << ") does not match $RANK = " << env_rank);
45 }
46
48 m_mpiLog->createStatement(
"PRAGMA foreign_keys = ON").run();
49
51 ->createStatement(
52 "CREATE TABLE ranks (rank INTEGER PRIMARY KEY, "
53 "node TEXT, start_time FLOAT, end_time FLOAT)")
54 .run();
56 ->createStatement(
57 "INSERT INTO ranks (rank, node, start_time) "
58 "VALUES(?1, ?2, julianday('now'))")
61 ->createStatement(
62 "CREATE TABLE files (fileId INTEGER PRIMARY KEY, fileName TEXT)")
63 .run();
65 ->createStatement(
66 "CREATE TABLE event_log (rank INTEGER, id INTEGER UNIQUE,"
67 "inputFileId INTEGER,"
68 "runNumber INTEGER, eventNumber INTEGER, complete INTEGER,"
69 "status INTEGER, request_time_ns INTEGER, start_time FLOAT,"
70 "end_time FLOAT, PRIMARY KEY (runNumber, eventNumber, id), "
71 "FOREIGN KEY (rank) REFERENCES ranks(rank),"
72 "FOREIGN KEY (inputFileId) REFERENCES files(fileId))")
73 .run();
75 "INSERT INTO event_log(id, rank, inputFileId, runNumber, eventNumber, "
76 "complete, "
77 "start_time, request_time_ns) "
78 "VALUES(?1, ?4, ?6, ?2, ?3, 0, julianday('now'), ?5)");
80 "UPDATE event_log SET complete = 1, status = ?4, end_time = "
81 "julianday('now') WHERE runNumber = ?2 "
82 "AND eventNumber = ?3 AND id = ?1");
84 "INSERT INTO files (fileId, fileName) VALUES(?1, ?2)");
85
86
87 ServiceHandle<IIncidentSvc> incsvc(
"IncidentSvc", this->
name());
88 if (!incsvc.retrieve().isSuccess()) {
90 return (StatusCode::FAILURE);
91 }
92 incsvc->addListener(this, IncidentType::BeginInputFile, 100);
93 incsvc->addListener(this, IncidentType::BeginProcessing, 100);
94
95 return StatusCode::SUCCESS;
96}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
std::unique_ptr< mpi3::environment > m_env
SQLite::Statement m_mpiLog_addEvent
SQLite::Statement m_mpiLog_completeEvent