44 if(!spec.empty()) { impl->open_db(spec); }
45 return impl.release();
47 catch(dunedaq::conffwk::Exception & ex) {
48 throw dunedaq::conffwk::Generic(
ERS_HERE,
"oksconflibs initialization error", ex);
51 throw dunedaq::conffwk::Generic(
ERS_HERE,
"oksconflibs initialization error:\n***** caught unknown exception *****");
64 TLOG_DEBUG( 3 ) <<
"Call destructor of OksConfigurationCheckDB object" ;
80 catch (dunedaq::conffwk::Generic& ex)
82 m_db->m_check_db_thread =
nullptr;
83 m_db->m_check_db_obj =
nullptr;
85 if (getenv(
"OKSCONFLIBS_NO_RELOAD_ABORT") !=
nullptr)
87 ers::fatal(dunedaq::conffwk::Generic(
ERS_HERE,
"database reload has failed, unsubscribing...", ex ) );
92 ers::fatal ( dunedaq::conffwk::Generic(
ERS_HERE,
"database reload has failed, aborting...", ex ) );
98 TLOG_DEBUG( 4 ) <<
"Destroy OksConfigurationCheckDB object = " << (
void *)
this ;
117 bool is_absolute_path = (s[0] ==
'/');
119 if (!is_absolute_path)
128 static std::string user_repo_dir;
129 static std::once_flag flag;
131 std::call_once(flag, []()
133 if (
const char * s = getenv(
"TDAQ_DB_USER_REPOSITORY"))
143 TLOG_DEBUG( 0) <<
"Failed to read TDAQ_DB_USER_REPOSITORY = \'" << s <<
"\':\n\tcaused by: " << ex.
what() ;
149 if (!user_repo_dir.empty() && s.find(user_repo_dir) == 0)
166 std::string::size_type idx = spec_params.find_first_of(
'&');
168 std::string data, params;
170 if (idx == std::string::npos)
176 data = spec_params.substr(0, idx);
177 params = spec_params.substr(idx + 1);
187 while (!(token = t.
next()).empty())
202 while (!(token = t.
next()).empty())
204 if(token ==
"norepo")
214 while(!(token = t.
next()).empty()) {
219 std::ostringstream text;
220 text <<
"cannot load file \'" << token <<
"\':\n" << e.
what();
222 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
225 std::ostringstream text;
226 text <<
"cannot load file \'" << token <<
'\'';
228 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
246 m_kernel->subscribe_create_object(0, 0);
247 m_kernel->subscribe_change_object(0, 0);
248 m_kernel->subscribe_delete_object(0, 0);
256 catch(oksconflibs::Exception& ex) {
257 throw ( dunedaq::conffwk::Generic(
ERS_HERE,
"failed to close database", ex ) );
259 catch(std::exception& ex) {
260 throw ( dunedaq::conffwk::Generic(
ERS_HERE,
"failed to close database", ex ) );
287 for(std::list<std::string>::const_iterator i = includes.begin(); i != includes.end(); ++i) {
292 std::ostringstream text;
293 text <<
"cannot add and load include file \'" << *i <<
"\' to \'" << db_name <<
"\':\n" << e.
what();
295 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
298 std::ostringstream text;
299 text <<
"cannot add and load include file \'" << *i <<
"\' to \'" << db_name <<
'\'';
301 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
309 std::ostringstream text;
310 text <<
"cannot create new data file \'" << db_name <<
"\': " << ex.
what();
311 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
313 catch (dunedaq::conffwk::Generic & ex) {
315 std::ostringstream text;
316 text <<
"cannot create new data file \'" << db_name <<
"\'";
317 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str(), ex ) );
321 std::ostringstream text;
322 text <<
"cannot create new data file \'" << db_name <<
'\'';
323 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
330 std::ostringstream text;
331 text <<
"cannot find file \'" << db <<
'\'';
338 std::ostringstream text;
339 text <<
"cannot add and load include file \'" << include <<
"\' to \'" << db <<
'\'';
341 text <<
":\n" <<
error;
349 for (
const auto& i :
m_kernel->data_files())
351 if (i.second->is_updated())
352 dbs.push_back(i.second->get_full_file_name());
366 std::ostringstream text;
367 text <<
"cannot " << action <<
" file \'" << file_h->
get_full_file_name() <<
"\' since " << reason;
368 throw dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() );
383 const bool commit2repo(!
m_kernel->get_user_repository_root().empty() &&
m_kernel->is_user_repository_created());
384 unsigned int count(0);
386 for (
const auto &i :
m_kernel->data_files())
401 if (!commit2repo && !log_message.empty())
410 std::ostringstream text;
411 text <<
"cannot save updated data file \'" << *(i.first) <<
"\':\n" << ex.
what();
412 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
417 if (commit2repo && count)
421 m_kernel->commit_repository(log_message);
439 if(
m_db.m_check_db_obj) {
447 m_db.m_created.clear();
448 m_db.m_modified.clear();
449 m_db.m_removed.clear();
476 const std::string file_name(i->get_full_file_name());
478 TLOG_DEBUG(1) <<
"destroy created file \'" << file_name <<
"\')" ;
481 if (
int result = unlink(file_name.c_str()))
483 std::ostringstream text;
484 text <<
"abort changes failed since cannot erase created file \'" << file_name <<
"\'; unlink failed with code " << result <<
": " <<
dunedaq::oks::strerror(errno);
485 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
494 std::set<OksFile *> updated;
496 for (
const auto& i :
m_kernel->data_files())
498 if (i.second->is_updated())
500 updated.insert(i.second);
501 TLOG_DEBUG(2) <<
"file \'" << i.second->get_full_file_name() <<
"\' was updated, to be reloaded..." ;
505 if (!
m_kernel->get_user_repository_root().empty())
507 std::set<OksFile *> mfs, rfs;
510 m_kernel->get_modified_files(mfs, rfs,
"origin/master");
514 std::ostringstream text;
515 text <<
"failed to get differences between revisions " <<
m_kernel->get_repository_version() <<
" and origin/master: " << ex.
what() <<
'\n';
516 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str(), ex));
520 if (!updated.empty())
524 if (!
m_kernel->get_user_repository_root().empty())
531 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot reload updated data files", ex));
535 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot reload updated data files"));
541static std::vector<dunedaq::conffwk::Version>
544 std::vector<dunedaq::conffwk::Version>
out;
545 out.reserve(in.size());
548 out.emplace_back(x.m_commit_hash, x.m_user, x.m_date, x.m_comment, x.m_files);
553std::vector<dunedaq::conffwk::Version>
556 if (!
m_kernel->get_repository_root().empty())
564 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot get new versions", ex));
569 std::vector<dunedaq::conffwk::Version>
out;
571 std::set<OksFile *> oks_files;
572 m_kernel->get_modified_files(oks_files, oks_files,
"");
574 if (!oks_files.empty())
576 std::vector<std::string> files;
578 for(
const auto& x : oks_files)
579 files.push_back(x->get_well_formed_name());
581 out.emplace_back(
"",
"", 0,
"", files);
589std::vector<dunedaq::conffwk::Version>
592 if (!
m_kernel->get_repository_root().empty())
600 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot get repository versions", ex));
605 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot get versions, repository is not set"));
632 for (OksClass::FList::const_iterator it = subclasses->begin(); it != subclasses->end(); ++it)
634 if ((*it)->get_object(name))
654 for (
const auto& it : *subclasses)
656 obj = it->get_object(name);
663 const std::string id(name +
'@' + class_name);
664 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"object",
id.c_str());
672 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"class", class_name.c_str());
677OksConfiguration::get(
const std::string& class_name, std::vector<conffwk::ConfigObject>& objects,
const std::string& query,
unsigned long ,
const std::vector<std::string> * )
685 objs = cl->create_list_of_all_objects();
689 std::unique_ptr<OksQuery> qe(
new OksQuery(cl, query.c_str()));
690 if(qe->good() ==
false) {
691 std::ostringstream text;
692 text <<
"bad query syntax \"" << query <<
"\" in scope of class \"" << class_name <<
'\"';
693 throw dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str());
695 objs = cl->execute_query(qe.get());
698 std::ostringstream text;
699 text <<
"failed to execute query:\n" << ex.
what();
700 throw dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str());
705 for(OksObject::List::iterator i = objs->begin(); i != objs->end(); ++i) {
712 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"class", class_name.c_str());
720 throw ( dunedaq::conffwk::Generic(
ERS_HERE,
"parameter \'obj_from\' is (null)" ) );
728 for(OksObject::List::iterator i = objs->begin(); i != objs->end(); ++i) {
735 std::ostringstream text;
736 text <<
"bad path-query \"" << query <<
"\" to object " << o;
737 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
748 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"class", class_name.c_str());
754 if(
const std::list<std::string *> * classes = c->direct_super_classes()) {
755 for(
const auto& i : *classes) {
756 const_cast< std::vector<std::string>&
>(d->p_superclasses).push_back(*i);
762 for(
const auto& i : *classes) {
763 const_cast< std::vector<std::string>&
>(d->p_superclasses).push_back(i->get_name());
769 for(
const auto& i : *subclasses) {
770 if(direct_only ==
false || i->has_direct_super_class(c->get_name()) ==
true) {
771 const_cast< std::vector<std::string>&
>(d->p_subclasses).push_back(i->get_name());
776 if(
const std::list<OksAttribute *> * attrs = (direct_only ? c->direct_attributes() : c->all_attributes())) {
777 for(
const auto& i : *attrs) {
781 const_cast< std::vector<dunedaq::conffwk::attribute_t>&
>(d->p_attributes).push_back(
812 i->get_is_multi_values(),
821 if(
const std::list<OksRelationship *> * rels = (direct_only ? c->direct_relationships() : c->all_relationships())) {
822 for(
const auto& i : *rels) {
823 const_cast< std::vector<dunedaq::conffwk::relationship_t>&
>(d->p_relationships).push_back(
829 i->get_is_composite(),
848 schema.reserve(
m_kernel->classes().size() * 3);
850 for(OksClass::Map::const_iterator i =
m_kernel->classes().begin(); i !=
m_kernel->classes().end(); ++i) {
852 const std::string* name = &conffwk::DalFactory::instance().get_known_class_name_ref(i->second->get_name());
854 auto& subclasses = schema[name];
857 subclasses.reserve(scl->size() * 3);
858 for(OksClass::FList::const_iterator j = scl->begin(); j != scl->end(); ++j) {
859 subclasses.insert(&conffwk::DalFactory::instance().get_known_class_name_ref((*j)->get_name()));
874 throw ( dunedaq::conffwk::Generic(
ERS_HERE, ex.
what()) );
880 std::ostringstream text;
881 text <<
"cannot find class \"" << class_name <<
'\"';
882 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
884 else if(
id.empty() ==
false) {
886 std::ostringstream text;
887 text <<
"object \"" <<
id <<
'@' << class_name <<
"\" already exists in file \"" <<
obj->get_file()->get_full_file_name() <<
'\"';
888 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
892 if(
m_kernel->get_test_duplicated_objects_via_inheritance_mode() ==
false)
894 m_kernel->set_test_duplicated_objects_via_inheritance_mode(
true);
903 throw ( dunedaq::conffwk::Generic(
ERS_HERE,
"cannot create configuration object", ex ) );
910 if(at.empty() ==
true) {
911 throw ( dunedaq::conffwk::Generic(
ERS_HERE,
"parameter \'at\' (i.e. filename) cannot be empty" ) );
915 return create(h, class_name,
id,
object);
918 std::ostringstream text;
919 text <<
"file \"" << at <<
"\" is not loaded";
920 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
961 for (OksClass::Map::const_iterator i = kernel.
classes().begin(); i != kernel.
classes().end(); ++i)
964 std::set<std::string> &
data(
m_data[i->second->get_name()]);
965 for (
const auto &j : *slist)
966 data.insert(j->get_name());
981check(std::vector<conffwk::ConfigurationChange *>& changes,
983 const std::set<std::string>& class_names,
985 const std::string& obj_class,
986 const std::string& obj_id,
990 bool any = (class_names.empty() && objects.empty());
998 OksConfiguration::SMap::const_iterator omi = objects.end();
1001 omi = objects.find(obj_class);
1002 if(omi != objects.end()) {
1003 std::set<std::string>::const_iterator i = omi->second.find(obj_id);
1005 if(i != omi->second.end()) {
1014 if(action ==
'+' || omi == objects.end()) {
1015 if(any || class_names.find(obj_class) != class_names.end()) {
1023 OksConfiguration::SMap::const_iterator it = inheritance.
data().find(obj_class);
1024 if(it != inheritance.
data().end()) {
1025 for(std::set<std::string>::const_iterator j = it->second.begin(); j != it->second.end(); ++j) {
1026 omi = (action !=
'+' ? objects.find(*j) : objects.end());
1035 omi == objects.end() &&
1036 class_names.find(*j) != class_names.end()
1039 omi != objects.end() &&
1040 omi->second.find(obj_id) != omi->second.end()
1057 m_kernel.subscribe_delete_object(0, 0);
1098 throw ( dunedaq::conffwk::Generic(
ERS_HERE, ex.
what()) );
1102 std::vector<conffwk::ConfigurationChange *> changes;
1105 for(std::set<std::string>::const_iterator j = i->second.begin(); j != i->second.end(); ++j) {
1110 if(!changes.empty()) {
1111 m_conf->update_cache(changes);
1124 if (!
m_kernel->get_user_repository_root().empty())
1133 catch (
const std::exception& ex)
1135 std::ostringstream text;
1136 text <<
"cannot check access status of file \'" << db_name <<
"\': " << ex.what();
1137 throw ( dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
1149 std::ostringstream text;
1150 text <<
"cannot remove include file \'" << include <<
"\' from \'" << db <<
'\'';
1152 text <<
":\n" <<
error;
1161 h->add_include_file(include);
1163 catch(dunedaq::conffwk::Generic& ex) {
1189 h->remove_include_file(include);
1191 catch(dunedaq::conffwk::Generic& ex) {
1205 std::vector<conffwk::ConfigurationChange *> changes;
1208 for(std::set<std::string>::const_iterator j = i->second.begin(); j != i->second.end(); ++j) {
1213 if(!changes.empty()) {
1214 m_conf->update_cache(changes);
1223 if (db_name.empty())
1225 for (
auto& i :
m_kernel->data_files())
1227 if(i.second->get_parent() ==
nullptr)
1228 includes.push_back(*i.first);
1235 for (
auto& i : h->get_include_files())
1237 includes.push_back(i);
1251 static const std::string
version(
"origin/master");
1255 std::set<OksFile *> ufs, rfs;
1264 std::ostringstream text;
1270 std::ostringstream text;
1271 text <<
"cannot get modified files: " << ex.
what();
1272 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
1275 for (
const auto& x : ufs)
1277 if (x->get_oks_format() ==
"schema")
1279 std::ostringstream text;
1280 text <<
"reload of schema files is not supported (\'" << x->get_well_formed_name() <<
"\')";
1281 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
1285 if (ufs.empty() ==
false)
1297 if(!
m_kernel->get_user_repository_root().empty())
1306 std::ostringstream text;
1307 text <<
"failed to reload updated files:\n" << ex.
what();
1308 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str() ) );
1314 throw ( dunedaq::conffwk::Generic(
ERS_HERE,
"failed to reload updated files" ) );
1318 m_kernel->subscribe_create_object(0, 0);
1319 m_kernel->subscribe_change_object(0, 0);
1320 m_kernel->subscribe_delete_object(0, 0);
1322 std::vector<conffwk::ConfigurationChange *> changes;
1329 std::set<OksObject *>::iterator j =
m_modified.find(i);
1332 TLOG_DEBUG(1) <<
"created object " << i <<
" appears in \'modified\' set, removing..." ;
1343 TLOG_DEBUG(1) <<
"object " << (
void *)(i) <<
" is dangling, ignore..." ;
1355 for (
auto& j : i.second)
1362 if (!changes.empty())
1364 (*m_fn)(changes,
m_conf);
1375 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"no subscription has been done" ) );
1387 ConfigurationImpl::notify cb,
1388 ConfigurationImpl::pre_notify pre_cb)
1404 TLOG_DEBUG( 2) <<
"starting CheckDB thread ..." ;
1419 TLOG_DEBUG( 2) <<
"stopping CheckDB thread ..." ;
1425 TLOG_DEBUG( 2) <<
"the CheckDB thread has been terminated" ;
1434 "OksConfiguration profiler report:\n"
static void throw_update_exception(const OksFile *file_h, const char *action, const char *reason)
conffwk::ConfigurationImpl * _oksconflibs_creator_(const std::string &spec)
static std::string mk_no_file_error_text(const std::string &db)
static void check(std::vector< conffwk::ConfigurationChange * > &changes, const InheritanceData &inheritance, const std::set< std::string > &class_names, const OksConfiguration::SMap &objects, const std::string &obj_class, const std::string &obj_id, const char action)
bool is_repo_name(const std::string &name)
static std::string mk_add_include_error_text(const std::string &db, const std::string &include, const char *error=nullptr)
static std::string mk_rm_include_error_text(const std::string &db, const std::string &include, const char *error=0)
DestroyGuard1(OksKernel &kernel)
DestroyGuard2(OksConfiguration::SMap &removed)
OksConfiguration::SMap & m_removed
Represents database objects.
bool is_null() const noexcept
Check if object's implementation points to null.
const ConfigObjectImpl * implementation() const noexcept
Returns pointer on implementation.
static void clear(std::vector< ConfigurationChange * > &changes)
Helper method to clear vector of changes (pointers).
static void add(std::vector< ConfigurationChange * > &changes, const std::string &class_name, const std::string &obj_id, const char action)
Helper method to add object to the vector of existing changes.
Provides pure virtual interface used by the Configuration class.
void clean() noexcept
clean cache (e.g. to be used by destructor)
Configuration * m_conf
Configuration pointer is needed for notification on changes, e.g. in case of subscription or an objec...
T * insert_object(OBJ &obj, const std::string &id, const std::string &class_name) noexcept
insert new object (update cache or create-and-insert)
const FList * all_sub_classes() const noexcept
std::list< OksClass *, boost::fast_pool_allocator< OksClass * > > FList
OksObject * get_object(const std::string &id) const noexcept
Get object by ID.
Provides interface to the OKS XML schema and data files.
void add_include_file(const std::string &name)
Add include file.
void add_comment(const std::string &text, const std::string &author)
Add new comment to file.
bool is_updated() const
Return update status of OKS file.
const std::string & get_full_file_name() const
FileStatus get_status_of_file() const
Return update status of file.
Provides interface to the OKS kernel.
static const std::string & get_repository_mapping_dir()
Get OKS repository name.
static std::string & get_user_name()
Get username of given process.
static bool check_read_only(OksFile *f)
Check if the OKS file is read-only.
const OksClass::Map & classes() const
Get classes.
static const std::string & get_repository_root()
Get OKS repository root.
static const char * get_cwd()
OksObject describes instance of OksClass.
static void destroy(OksObject *obj, bool fast=false)
Destroy OKS object.
std::list< OksObject * > List
OksObject::List * find_path(const oks::QueryPath &query) const
static void substitute_variables(std::string &)
static bool real_path(std::string &, bool ignore_errors)
Cannot commit, checkout or release files.
virtual const char * what() const noexcept
virtual bool test_object(const std::string &class_name, const std::string &name, unsigned long rlevel, const std::vector< std::string > *rclasses)
Test object existence (used by Python binding).
conffwk::ConfigurationImpl::pre_notify m_pre_fn
static void change_notify(oks::OksObject *, void *) noexcept
oks::OksKernel * m_kernel
OksConfiguration() noexcept
virtual void open_db(const std::string &db_name)
Open database implementation in accordance with given name.
std::thread * m_check_db_thread
static void delete_notify(oks::OksObject *, void *) noexcept
std::set< std::string > m_class_names
friend class ResubscribeGuard
virtual void print_profiling_info() noexcept
Print implementation specific profiling information.
virtual void get_includes(const std::string &db_name, std::list< std::string > &includes) const
Get included files.
virtual void destroy(conffwk::ConfigObject &object)
Destroy object of class by id.
static void create_notify(oks::OksObject *, void *) noexcept
std::list< oks::OksObject * > m_created
virtual void remove_include(const std::string &db_name, const std::string &include)
Remove include file.
std::set< oks::OksFile * > m_created_files
OksConfigObject * new_object(oks::OksObject *obj) noexcept
virtual void get_updated_dbs(std::list< std::string > &dbs) const
Get uncommitted files.
OksConfigurationCheckDB * m_check_db_obj
virtual void close_db()
Close database implementation.
bool m_oks_kernel_no_repo
std::map< std::string, std::set< std::string > > m_removed
virtual void set_commit_credentials(const std::string &user, const std::string &password)
Set commit credentials.
virtual std::vector< dunedaq::conffwk::Version > get_versions(const std::string &since, const std::string &until, dunedaq::conffwk::Version::QueryType type, bool skip_irrelevant)
Get archived versions.
unsigned int m_repo_error_count
friend struct OksConfigurationCheckDB
virtual void unsubscribe()
Remove subscription on database changes.
virtual void add_include(const std::string &db_name, const std::string &include)
Add include file.
virtual std::vector< dunedaq::conffwk::Version > get_changes()
Get newly available versions.
virtual void create(const std::string &at, const std::string &class_name, const std::string &id, conffwk::ConfigObject &object)
Create object of class by id at given file.
virtual void abort()
Abort database changes.
virtual void get_superclasses(conffwk::fmap< conffwk::fset > &schema)
Get inheritance hierarchy.
std::set< oks::OksObject * > m_modified
friend class OksConfigObject
virtual bool is_writable(const std::string &db_name)
Return write access status.
bool m_oks_kernel_silence
virtual void get(const std::string &class_name, const std::string &name, conffwk::ConfigObject &object, unsigned long rlevel, const std::vector< std::string > *rclasses)
Get object of class by id.
virtual void commit(const std::string &why)
Commit database changes.
void close_database(bool unsubscribe)
conffwk::ConfigurationImpl::notify m_fn
std::map< std::string, std::set< std::string > > SMap
ResubscribeGuard(OksConfiguration &db)
#define TLOG_DEBUG(lvl,...)
#define ERS_DECLARE_ISSUE( namespace_name, class_name, message_, attributes)
const std::string strerror(int error)
Convert C error number to string.
static std::vector< dunedaq::conffwk::Version > oks2config(const std::vector< OksRepositoryVersion > &in)
bool is_writable(const oks::OksFile &file, const std::string &user=oks::OksKernel::get_user_name())
FELIX Initialization std::string initerror FELIX queue timed out
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
void fatal(const Issue &issue)
void error(const Issue &issue)
InheritanceData(const OksKernel &)
const OksConfiguration::SMap & data() const
OksConfiguration::SMap m_data
~OksConfigurationCheckDB()
OksConfigurationCheckDB(OksConfiguration *db)
Factory couldn t std::string alg_name Invalid configuration error