49 return impl.release();
50 }
catch (dunedaq::conffwk::Exception& ex) {
51 throw dunedaq::conffwk::Generic(
ERS_HERE,
"oksconflibs initialization error", ex);
53 throw dunedaq::conffwk::Generic(
ERS_HERE,
54 "oksconflibs initialization error:\n***** caught unknown exception *****");
73 TLOG_DEBUG(3) <<
"Call destructor of OksConfigurationCheckDB object";
85 }
catch (dunedaq::conffwk::Generic& ex) {
89 if (getenv(
"OKSCONFLIBS_NO_RELOAD_ABORT") !=
nullptr) {
90 ers::fatal(dunedaq::conffwk::Generic(
ERS_HERE,
"database reload has failed, unsubscribing...", ex));
93 ers::fatal(dunedaq::conffwk::Generic(
ERS_HERE,
"database reload has failed, aborting...", ex));
99 TLOG_DEBUG(4) <<
"Destroy OksConfigurationCheckDB object = " << (
void*)
this;
115 bool is_absolute_path = (s[0] ==
'/');
117 if (!is_absolute_path)
125 static std::string user_repo_dir;
126 static std::once_flag flag;
128 std::call_once(flag, []() {
129 if (
const char* s = getenv(
"TDAQ_DB_USER_REPOSITORY")) {
135 TLOG_DEBUG(0) <<
"Failed to read TDAQ_DB_USER_REPOSITORY = \'" << s <<
"\':\n\tcaused by: " << ex.
what();
140 if (!user_repo_dir.empty() && s.find(user_repo_dir) == 0)
156 std::string::size_type idx = spec_params.find_first_of(
'&');
158 std::string data, params;
160 if (idx == std::string::npos) {
163 data = spec_params.substr(0, idx);
164 params = spec_params.substr(idx + 1);
174 while (!(token = t.
next()).empty()) {
183 if (!params.empty()) {
186 while (!(token = t.
next()).empty()) {
187 if (token ==
"norepo")
197 while (!(token = t.
next()).empty()) {
201 std::ostringstream text;
202 text <<
"cannot load file \'" << token <<
"\':\n" << e.
what();
204 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
206 std::ostringstream text;
207 text <<
"cannot load file \'" << token <<
'\'';
209 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
222 if (call_unsubscribe)
237 }
catch (oksconflibs::Exception& ex) {
238 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"failed to close database", ex));
239 }
catch (std::exception& ex) {
240 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"failed to close database", ex));
264 for (std::list<std::string>::const_iterator i = includes.begin(); i != includes.end(); ++i) {
268 std::ostringstream text;
269 text <<
"cannot add and load include file \'" << *i <<
"\' to \'" << db_name <<
"\':\n" << e.
what();
271 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
273 std::ostringstream text;
274 text <<
"cannot add and load include file \'" << *i <<
"\' to \'" << db_name <<
'\'';
276 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
283 std::ostringstream text;
284 text <<
"cannot create new data file \'" << db_name <<
"\': " << ex.
what();
285 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
286 }
catch (dunedaq::conffwk::Generic& ex) {
288 std::ostringstream text;
289 text <<
"cannot create new data file \'" << db_name <<
"\'";
290 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str(), ex));
293 std::ostringstream text;
294 text <<
"cannot create new data file \'" << db_name <<
'\'';
295 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
302 std::ostringstream text;
303 text <<
"cannot find file \'" << db <<
'\'';
310 std::ostringstream text;
311 text <<
"cannot add and load include file \'" <<
include <<
"\' to \'" << db <<
'\'';
313 text <<
":\n" <<
error;
321 if (i.second->is_updated())
322 dbs.push_back(i.second->get_full_file_name());
336 std::ostringstream text;
337 text <<
"cannot " << action <<
" file \'" << file_h->
get_full_file_name() <<
"\' since " << reason;
338 throw dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str());
351 unsigned int count(0);
365 if (!commit2repo && !log_message.empty())
372 std::ostringstream text;
373 text <<
"cannot save updated data file \'" << *(i.first) <<
"\':\n" << ex.
what();
374 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
379 if (commit2repo && count) {
432 const std::string file_name(i->get_full_file_name());
434 TLOG_DEBUG(1) <<
"destroy created file \'" << file_name <<
"\')";
437 if (
int result = unlink(file_name.c_str())) {
438 std::ostringstream text;
439 text <<
"abort changes failed since cannot erase created file \'" << file_name <<
"\'; unlink failed with code "
441 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
448 std::set<OksFile*> updated;
451 if (i.second->is_updated()) {
452 updated.insert(i.second);
453 TLOG_DEBUG(2) <<
"file \'" << i.second->get_full_file_name() <<
"\' was updated, to be reloaded...";
458 std::set<OksFile*> mfs, rfs;
462 std::ostringstream text;
464 <<
" and origin/master: " << ex.
what() <<
'\n';
465 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str(), ex));
469 if (!updated.empty()) {
476 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot reload updated data files", ex));
478 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot reload updated data files"));
483static std::vector<dunedaq::conffwk::Version>
486 std::vector<dunedaq::conffwk::Version>
out;
487 out.reserve(in.size());
490 out.emplace_back(x.m_commit_hash, x.m_user, x.m_date, x.m_comment, x.m_files);
495std::vector<dunedaq::conffwk::Version>
502 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot get new versions", ex));
505 std::vector<dunedaq::conffwk::Version>
out;
507 std::set<OksFile*> oks_files;
510 if (!oks_files.empty()) {
511 std::vector<std::string> files;
513 for (
const auto& x : oks_files)
514 files.push_back(x->get_well_formed_name());
516 out.emplace_back(
"",
"", 0,
"", files);
523std::vector<dunedaq::conffwk::Version>
525 const std::string& until,
527 bool skip_irrelevant)
535 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot get repository versions", ex));
538 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot get versions, repository is not set"));
553 const std::string& name,
555 const std::vector<std::string>* )
568 for (OksClass::FList::const_iterator it = subclasses->begin(); it != subclasses->end(); ++it) {
569 if ((*it)->get_object(name))
579 const std::string& name,
582 const std::vector<std::string>* )
586 if (
obj ==
nullptr) {
589 for (
const auto& it : *subclasses) {
590 obj = it->get_object(name);
595 if (
obj ==
nullptr) {
596 const std::string id(name +
'@' + class_name);
597 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"object",
id.c_str());
603 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"class", class_name.c_str());
609 std::vector<conffwk::ConfigObject>& objects,
610 const std::string& query,
612 const std::vector<std::string>* )
620 objs = cl->create_list_of_all_objects();
623 std::unique_ptr<OksQuery> qe(
new OksQuery(cl, query.c_str()));
624 if (qe->good() ==
false) {
625 std::ostringstream text;
626 text <<
"bad query syntax \"" << query <<
"\" in scope of class \"" << class_name <<
'\"';
627 throw dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str());
629 objs = cl->execute_query(qe.get());
631 std::ostringstream text;
632 text <<
"failed to execute query:\n" << ex.
what();
633 throw dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str());
638 for (OksObject::List::iterator i = objs->begin(); i != objs->end(); ++i) {
644 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"class", class_name.c_str());
650 const std::string& query,
651 std::vector<conffwk::ConfigObject>& objects,
653 const std::vector<std::string>* )
656 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"parameter \'obj_from\' is (null)"));
664 for (OksObject::List::iterator i = objs->begin(); i != objs->end(); ++i) {
670 std::ostringstream text;
671 text <<
"bad path-query \"" << query <<
"\" to object " << o;
672 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
682 throw dunedaq::conffwk::NotFound(
ERS_HERE,
"class", class_name.c_str());
686 c->get_name(), c->get_description(), c->get_file()->get_full_file_name(), c->get_is_abstract());
689 if (
const std::list<std::string*>* classes = c->direct_super_classes()) {
690 for (
const auto& i : *classes) {
691 const_cast<std::vector<std::string>&
>(d->p_superclasses).push_back(*i);
696 for (
const auto& i : *classes) {
697 const_cast<std::vector<std::string>&
>(d->p_superclasses).push_back(i->get_name());
703 for (
const auto& i : *subclasses) {
704 if (direct_only ==
false || i->has_direct_super_class(c->get_name()) ==
true) {
705 const_cast<std::vector<std::string>&
>(d->p_subclasses).push_back(i->get_name());
710 if (
const std::list<OksAttribute*>* attrs = (direct_only ? c->direct_attributes() : c->all_attributes())) {
711 for (
const auto& i : *attrs) {
715 const_cast<std::vector<dunedaq::conffwk::attribute_t>&
>(d->p_attributes)
740 i->get_is_multi_values(),
742 i->get_description()));
746 if (
const std::list<OksRelationship*>* rels = (direct_only ? c->direct_relationships() : c->all_relationships())) {
747 for (
const auto& i : *rels) {
748 const_cast<std::vector<dunedaq::conffwk::relationship_t>&
>(d->p_relationships)
753 i->get_is_composite(),
754 i->get_description()));
774 const std::string* name = &conffwk::DalFactory::instance().get_known_class_name_ref(i->second->get_name());
776 auto& subclasses = schema[name];
779 subclasses.reserve(scl->size() * 3);
780 for (OksClass::FList::const_iterator j = scl->begin(); j != scl->end(); ++j) {
781 subclasses.insert(&conffwk::DalFactory::instance().get_known_class_name_ref((*j)->get_name()));
790 const std::string& class_name,
791 const std::string&
id,
803 std::ostringstream text;
804 text <<
"cannot find class \"" << class_name <<
'\"';
805 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
806 }
else if (
id.empty() ==
false) {
808 std::ostringstream text;
809 text <<
"object \"" <<
id <<
'@' << class_name <<
"\" already exists in file \""
810 <<
obj->get_file()->get_full_file_name() <<
'\"';
811 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
823 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"cannot create configuration object", ex));
829 const std::string& class_name,
830 const std::string&
id,
833 if (at.empty() ==
true) {
834 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"parameter \'at\' (i.e. filename) cannot be empty"));
838 return create(h, class_name,
id,
object);
840 std::ostringstream text;
841 text <<
"file \"" << at <<
"\" is not loaded";
842 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
848 const std::string& class_name,
849 const std::string&
id,
885 for (OksClass::Map::const_iterator i = kernel.
classes().begin(); i != kernel.
classes().end(); ++i)
887 std::set<std::string>&
data(
m_data[i->second->get_name()]);
888 for (
const auto& j : *slist)
889 data.insert(j->get_name());
903check(std::vector<conffwk::ConfigurationChange*>& changes,
905 const std::set<std::string>& class_names,
907 const std::string& obj_class,
908 const std::string& obj_id,
912 bool any = (class_names.empty() && objects.empty());
919 OksConfiguration::SMap::const_iterator omi = objects.end();
922 omi = objects.find(obj_class);
923 if (omi != objects.end()) {
924 std::set<std::string>::const_iterator i = omi->second.find(obj_id);
926 if (i != omi->second.end()) {
934 if (action ==
'+' || omi == objects.end()) {
935 if (any || class_names.find(obj_class) != class_names.end()) {
942 OksConfiguration::SMap::const_iterator it = inheritance.
data().find(obj_class);
943 if (it != inheritance.
data().end()) {
944 for (std::set<std::string>::const_iterator j = it->second.begin(); j != it->second.end(); ++j) {
945 omi = (action !=
'+' ? objects.find(*j) : objects.end());
951 if (any || (omi == objects.end() && class_names.find(*j) != class_names.end()) ||
952 (omi != objects.end() && omi->second.find(obj_id) != omi->second.end())) {
1009 std::vector<conffwk::ConfigurationChange*> changes;
1012 for (std::set<std::string>::const_iterator j = i->second.begin(); j != i->second.end(); ++j) {
1017 if (!changes.empty()) {
1034 }
catch (
const std::exception& ex) {
1035 std::ostringstream text;
1036 text <<
"cannot check access status of file \'" << db_name <<
"\': " << ex.what();
1037 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
1047 std::ostringstream text;
1048 text <<
"cannot remove include file \'" <<
include <<
"\' from \'" << db <<
'\'';
1050 text <<
":\n" <<
error;
1060 }
catch (dunedaq::conffwk::Generic& ex) {
1083 h->remove_include_file(
include);
1084 }
catch (dunedaq::conffwk::Generic& ex) {
1095 std::vector<conffwk::ConfigurationChange*> changes;
1098 for (std::set<std::string>::const_iterator j = i->second.begin(); j != i->second.end(); ++j) {
1103 if (!changes.empty()) {
1112 if (db_name.empty()) {
1114 if (i.second->get_parent() ==
nullptr)
1115 includes.push_back(*i.first);
1119 for (
auto& i : h->get_include_files()) {
1120 includes.push_back(i);
1131 static const std::string
version(
"origin/master");
1134 std::set<OksFile*> ufs, rfs;
1140 std::ostringstream text;
1144 std::ostringstream text;
1145 text <<
"cannot get modified files: " << ex.
what();
1146 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
1149 for (
const auto& x : ufs) {
1150 if (x->get_oks_format() ==
"schema") {
1151 std::ostringstream text;
1152 text <<
"reload of schema files is not supported (\'" << x->get_well_formed_name() <<
"\')";
1153 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
1157 if (ufs.empty() ==
false) {
1174 std::ostringstream text;
1175 text <<
"failed to reload updated files:\n" << ex.
what();
1176 throw(dunedaq::conffwk::Generic(
ERS_HERE, text.str().c_str()));
1180 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"failed to reload updated files"));
1187 std::vector<conffwk::ConfigurationChange*> changes;
1193 std::set<OksObject*>::iterator j =
m_modified.find(i);
1195 TLOG_DEBUG(1) <<
"created object " << i <<
" appears in \'modified\' set, removing...";
1204 TLOG_DEBUG(1) <<
"object " << (
void*)(i) <<
" is dangling, ignore...";
1213 for (
auto& j : i.second) {
1219 if (!changes.empty()) {
1220 (*m_fn)(changes,
m_conf);
1229 throw(dunedaq::conffwk::Generic(
ERS_HERE,
"no subscription has been done"));
1240 ConfigurationImpl::notify cb,
1241 ConfigurationImpl::pre_notify pre_cb)
1257 TLOG_DEBUG(2) <<
"starting CheckDB thread ...";
1271 TLOG_DEBUG(2) <<
"stopping CheckDB thread ...";
1277 TLOG_DEBUG(2) <<
"the CheckDB thread has been terminated";
1284 std::cout <<
"OksConfiguration profiler report:\n"
1285 " number of loaded schema files: "
1288 " number of loaded data files: "
1291 " number of loaded classes: "
1294 " number of loaded objects: "
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)
void update_cache(std::vector< ConfigurationChange * > &changes) noexcept
System function invoked in case of modifications.
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.
void subscribe_change_object(OksObject::notify_obj, void *)
Subscribe on object changing.
const std::string & get_user_repository_root() const
Get user OKS repository root.
void subscribe_delete_object(OksObject::notify_obj, void *)
Subscribe on object deleting.
OksFile * load_file(const std::string &name, bool bind=true)
Load OKS database file.
static std::string & get_user_name()
Get username of given process.
bool is_dangling(OksClass *class_ptr) const
Check pointer on oks class.
static bool check_read_only(OksFile *f)
Check if the OKS file is read-only.
void update_repository(const std::string &hash_val, RepositoryUpdateType update_type)
Update user repository files from origin by hash.
void get_modified_files(std::set< OksFile * > &mfs, std::set< OksFile * > &rfs, const std::string &version)
Get modified data files.
const OksFile::Map & data_files() const
Get all data files.
OksFile * new_data(const std::string &name, const std::string &logical_name="", const std::string &type="")
Create OKS data file.
OksFile * find_data_file(const std::string &s) const
Finds OKS data file.
bool is_user_repository_created() const
void registrate_all_classes(bool skip_registered=false)
The method rebuilds all classes taking into account inheritance.
const OksObject::Set & objects() const
Get objects.
bool get_test_duplicated_objects_via_inheritance_mode() const
Get status of test inherited duplicated objects mode. The method returns true, if the mode is switche...
OksKernel(bool silence_mode=false, bool verbose_mode=false, bool profiling_mode=false, bool allow_repository=true, const char *version=nullptr, std::string branch_name="")
Constructor to build OksKernel object.
void reload_data(std::set< OksFile * > &files, bool allow_schema_extension=true)
Reload OKS data files.
const OksClass::Map & classes() const
Get classes.
std::vector< OksRepositoryVersion > get_repository_versions_by_date(bool skip_irrelevant=true, const std::string &since="", const std::string &until="")
Return repository versions between timestamps.
void subscribe_create_object(OksObject::notify_obj cb_f, void *parameter)
Subscribe on object creation.
void close_all_data()
Close all OKS data files.
void save_data(OksFile *file_h, bool ignore_bad_objects=false, OksFile *true_file_h=nullptr, bool force_defaults=false)
Save OKS data file.
void set_test_duplicated_objects_via_inheritance_mode(const bool b)
Set status of test inherited duplicated objects mode. To switch 'On'/'Off' use the method's parameter...
void bind_objects()
Bind oks objects.
static const std::string & get_repository_root()
Get OKS repository root.
void commit_repository(const std::string &comments, const std::string &credentials="")
Commit user modifications into repository.
const std::string & get_repository_version()
void close_data(OksFile *file_h, bool unbind_objects=true)
Close OKS data file.
static const char * get_cwd()
std::vector< OksRepositoryVersion > get_repository_versions_by_hash(bool skip_irrelevant=true, const std::string &sha1="", const std::string &sha2="")
Return repository versions between hash keys.
OksClass * find_class(const std::string &class_name) const
Find class by name (C++ string).
void close_all_schema()
Close all OKS schema files.
void set_active_data(OksFile *file_h)
Set active OKS data file.
const OksFile::Map & schema_files() const
Get all schema files.
OksObject describes instance of OksClass.
static void destroy(OksObject *obj, bool fast=false)
Destroy OKS object.
std::list< OksObject * > List
OksObject(const OksClass *oks_class, const char *object_id=0, bool skip_init=false)
OKS object constructor.
OksObject::List * find_path(const oks::QueryPath &query) const
OksQuery(bool b, OksQueryExpression *q=0)
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
virtual void subscribe(const std::set< std::string > &class_names, const SMap &objs, ConfigurationImpl::notify cb, ConfigurationImpl::pre_notify pre_cb)
friend class ResubscribeGuard
std::list< oks::OksObject * > m_created
virtual void print_profiling_info() noexcept
Print implementation specific profiling information.
std::set< oks::OksObject * > m_modified
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
virtual void remove_include(const std::string &db_name, const std::string &include)
Remove include file.
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 > > SMap
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
virtual void unsubscribe()
Remove subscription on database changes.
std::set< oks::OksFile * > m_created_files
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.
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
ResubscribeGuard(OksConfiguration &db)
#define TLOG_DEBUG(lvl,...)
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
ERS_DECLARE_ISSUE(cibmodules, CIBCommunicationError, " CIB Hardware Communication Error: "<< descriptor,((std::string) descriptor)) ERS_DECLARE_ISSUE(cibmodules
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
CIB Buffer std::string descriptor Message from std::string descriptor CIB process error
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)