273 def load(self) -> dict[str, Any]:
274 credentials: dict[str,Any] = ConfigDBLoader.getConnectionParameters(self.dbalias)
275
276 if not credentials:
277 log.error("No TriggerDB connections found for %s", self.dbalias)
278 raise RuntimeError(f"No TriggerDB connections found for {self.dbalias}")
279
280 svc = coral.ConnectionService()
281 svcconfig = svc.configuration()
282 svcconfig.disablePoolAutomaticCleanUp()
283 svcconfig.setConnectionTimeOut(0)
284
285 failureMode = 0
286 for credential in credentials:
287 log.debug("Trying credentials %s",credential)
288
289 try:
290 session = svc.connect(credential, coral.access_ReadOnly)
291 except Exception as e:
292 log.warning("Failed to establish connection: %s",e)
293 failureMode =
max(1, failureMode)
294 continue
295
296
297 if 'FRONTIER_SERVER' in os.environ and os.environ['FRONTIER_SERVER']:
298 svcconfig.setConnectionRetrialPeriod(300)
299 svcconfig.setConnectionRetrialTimeOut(3600)
300 else:
301 svcconfig.setConnectionRetrialPeriod(1)
302 svcconfig.setConnectionRetrialTimeOut(1)
303
304 try:
305 session.transaction().start(True)
306 self.schema = ConfigDBLoader.getSchema(credential)
307 qdict = { "schema" : self.schema, "dbkey" : self.dbkey }
308
309
310 schemaVersion = ConfigDBLoader.readSchemaVersion(qdict, session)
311 qstr = self.getQueryDefinition(schemaVersion)
312
313 query = ConfigDBLoader.getCoralQuery(session, qstr, qdict)
314 cursor = query.execute()
315
316 except Exception as e:
317 log.warning(f"DB query on {credential} failed to execute.")
318 log.warning("Exception message: %r", e)
319 failureMode =
max(2, failureMode)
320 continue
321
322
323 if not cursor.next():
324
325 log.warning(f"DB query on {credential} returned empty result, likely due to non-existing key {self.dbkey}")
326 failureMode = 3
327 continue
328
329 configblob = cursor.currentRow()[0].
data()
330 if type(configblob)
is not str:
331 configblob = configblob.readline()
332 config = json.loads(configblob)
333 session.transaction().commit()
334
335 self.confirmConfigType(config)
336 return config
337
338 if failureMode == 1:
339 log.error("TriggerDB query: could not connect to any source for %s", self.configType.basename)
340 log.error("Considered sources: %s", ", ".join(credentials))
341 raise RuntimeError("TriggerDB query: could not connect to any source", self.configType.basename)
342 if failureMode == 2:
343 log.error("Query failed due to wrong definition for %s", self.configType.basename)
344 log.error("DB query was: %s", qstr.format(**qdict))
345 raise RuntimeError("Query failed due to wrong definition", self.configType.basename)
346 elif failureMode == 3:
347 log.error("DB key %s does not exist for %s", self.dbkey, self.configType.basename)
348 raise KeyError("DB key does not exist", self.dbkey, self.configType.basename)
349 else:
350 raise RuntimeError("Query failed for unknown reason")
351
char data[hepevt_bytes_allocation_ATLAS]