Initialize.
13 {
15 m_env = std::make_unique<mpi3::environment>(mpi3::thread_level::multiple);
16
17 if (
m_env->thread_support() != mpi3::thread_level::multiple) {
18 ATH_MSG_ERROR(
"MPI_THREAD_MULTIPLE is required but unavailable");
19 return StatusCode::FAILURE;
20 }
22
23
24 char version_string[MPI_MAX_LIBRARY_VERSION_STRING];
25 int version_string_len;
26 MPI_Get_library_version(version_string, &version_string_len);
29
33 return StatusCode::FAILURE;
34 }
40 if (const char* env_rank = std::getenv("RANK");
41 env_rank && std::to_string(
m_rank) != env_rank) {
44 }
45
47 m_mpiLog->createStatement(
"PRAGMA foreign_keys = ON").run();
48
50 ->createStatement(
51 "CREATE TABLE ranks (rank INTEGER PRIMARY KEY, "
52 "node TEXT, start_time FLOAT, end_time FLOAT)")
53 .run();
55 ->createStatement(
56 "INSERT INTO ranks (rank, node, start_time) "
57 "VALUES(?1, ?2, julianday('now'))")
60 ->createStatement(
61 "CREATE TABLE files (fileId INTEGER PRIMARY KEY, fileName TEXT)")
62 .run();
64 ->createStatement(
65 "CREATE TABLE event_log (rank INTEGER, id INTEGER UNIQUE,"
66 "inputFileId INTEGER,"
67 "runNumber INTEGER, eventNumber INTEGER, complete INTEGER,"
68 "status INTEGER, request_time_ns INTEGER, start_time FLOAT,"
69 "end_time FLOAT, PRIMARY KEY (runNumber, eventNumber, id), "
70 "FOREIGN KEY (rank) REFERENCES ranks(rank),"
71 "FOREIGN KEY (inputFileId) REFERENCES files(fileId))")
72 .run();
74 "INSERT INTO event_log(id, rank, inputFileId, runNumber, eventNumber, "
75 "complete, "
76 "start_time, request_time_ns) "
77
78 "VALUES(?1, ?4, NULLIF(?6, 0), ?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,...)
#define ATH_MSG_INFO(x,...)
#define ATH_MSG_FATAL(x,...)
SQLite::Statement m_mpiLog_addEvent
SQLite::Statement m_mpiLog_completeEvent