DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
OksConfiguration.hpp
Go to the documentation of this file.
1//
2// DUNE DAQ modification notice:
3// This file has been modified from the original ATLAS oksconfig source for the DUNE DAQ project.
4// Fork baseline commit: oksconfig-03-02-00 (2021-04-20).
5// Renamed since fork: yes (from oksconfig/OksConfiguration.h to include/oksconflibs/OksConfiguration.hpp).
6//
7
8// this is -*- c++ -*-
9#ifndef OKSCONFLIBS_OKSCONFLIBSURATION_H_
10#define OKSCONFLIBS_OKSCONFLIBSURATION_H_
11
12//
13// $Id$
14//
15
16#include <list>
17#include <set>
18#include <string>
19#include <thread>
20
22
23namespace dunedaq {
24namespace oks {
25// forward declarations for OKS classes
26class OksKernel;
27class OksObject;
28class OksClass;
29class OksFile;
30}
31
32namespace oksconflibs {
33
34// forward declaration
35class OksConfigObject;
37
39{
40
41 friend class OksConfigObject;
43 friend class ResubscribeGuard;
44
45public:
47 : m_kernel(0)
48 , m_fn(0)
53 {
54 init_env();
55 }
56 virtual ~OksConfiguration() { close_db(); }
57
58 typedef std::map<std::string, std::set<std::string>> SMap;
59
60public:
61 virtual bool test_object(const std::string& class_name,
62 const std::string& name,
63 unsigned long rlevel,
64 const std::vector<std::string>* rclasses);
65 virtual void get(const std::string& class_name,
66 const std::string& name,
68 unsigned long rlevel,
69 const std::vector<std::string>* rclasses);
70 virtual void get(const std::string& class_name,
71 std::vector<conffwk::ConfigObject>& objects,
72 const std::string& query,
73 unsigned long rlevel,
74 const std::vector<std::string>* rclasses);
75 virtual void get(const conffwk::ConfigObject& obj_from,
76 const std::string& query,
77 std::vector<conffwk::ConfigObject>& objects,
78 unsigned long rlevel,
79 const std::vector<std::string>* rclasses);
80 virtual conffwk::class_t* get(const std::string& class_name, bool direct_only);
82
83 virtual void create(const std::string& at,
84 const std::string& class_name,
85 const std::string& id,
86 conffwk::ConfigObject& object);
87 virtual void create(const conffwk::ConfigObject& at,
88 const std::string& class_name,
89 const std::string& id,
90 conffwk::ConfigObject& object);
91 virtual void destroy(conffwk::ConfigObject& object);
92
93 virtual void open_db(const std::string& db_name);
94 virtual void close_db() { close_database(true); }
95 virtual bool loaded() const noexcept { return (m_kernel != 0); }
96 virtual void create(const std::string& db_name, const std::list<std::string>& includes);
97 virtual bool is_writable(const std::string& db_name);
98 virtual void add_include(const std::string& db_name, const std::string& include);
99 virtual void remove_include(const std::string& db_name, const std::string& include);
100 virtual void get_includes(const std::string& db_name, std::list<std::string>& includes) const;
101 virtual void get_updated_dbs(std::list<std::string>& dbs) const;
102 virtual void set_commit_credentials(const std::string& user, const std::string& password);
103 virtual void commit(const std::string& why);
104 virtual void abort();
105 virtual void prefetch_all_data() { ; } // nothing to do with OKS data already in-memory
106 virtual std::vector<dunedaq::conffwk::Version> get_changes();
107 virtual std::vector<dunedaq::conffwk::Version> get_versions(const std::string& since,
108 const std::string& until,
110 bool skip_irrelevant);
111
112 virtual void subscribe(const std::set<std::string>& class_names,
113 const SMap& objs,
114 ConfigurationImpl::notify cb,
115 ConfigurationImpl::pre_notify pre_cb);
116 virtual void unsubscribe();
117
118 virtual void print_profiling_info() noexcept;
119
120protected:
121 void create(oks::OksFile* at, const std::string& class_name, const std::string& id, conffwk::ConfigObject& object);
122
123private:
124 virtual void check_db();
125
126 void close_database(bool unsubscribe);
127
128public:
129 const oks::OksKernel& get_oks_kernel() const { return *m_kernel; } // required by Java oksconflibs
130
131protected:
135 std::set<std::string> m_class_names;
139
140 // read oks::OksKernel parameters from environment (silence mode)
141
142 void init_env();
143
145
146 // keep information about changed objects
147
148 std::list<oks::OksObject*> m_created;
149 std::set<oks::OksObject*> m_modified;
150 std::map<std::string, std::set<std::string>> m_removed;
151
152 void subscribe();
153
154 static void create_notify(oks::OksObject*, void*) noexcept;
155 static void change_notify(oks::OksObject*, void*) noexcept;
156 static void delete_notify(oks::OksObject*, void*) noexcept;
157
159 std::thread* m_check_db_thread;
160
161 std::string m_user;
162 std::string m_password;
163
164 // keep information about created files
165
166 std::set<oks::OksFile*> m_created_files;
167
168 //
169
170 unsigned int m_repo_error_count;
171};
172
173} // namespace oksconflibs
174} // namespace dunedaq
175
176#endif // OKSCONFLIBS_OKSCONFLIBSURATION_H_
Provides pure virtual interface used by the Configuration class.
void(*) pre_notify(Configuration *)
Callback to pre-notify database changes.
void(*) notify(std::vector< ConfigurationChange * > &changes, Configuration *)
Callback to notify database changes.
The OKS class.
Definition class.hpp:223
Provides interface to the OKS XML schema and data files.
Definition file.hpp:355
Provides interface to the OKS kernel.
Definition kernel.hpp:615
OksObject describes instance of OksClass.
Definition object.hpp:1144
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
const oks::OksKernel & get_oks_kernel() const
virtual void open_db(const std::string &db_name)
Open database implementation in accordance with given name.
static void delete_notify(oks::OksObject *, void *) noexcept
virtual void subscribe(const std::set< std::string > &class_names, const SMap &objs, ConfigurationImpl::notify cb, ConfigurationImpl::pre_notify pre_cb)
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 prefetch_all_data()
Prefetch all data into client cache.
virtual bool loaded() const noexcept
Check if a database is loaded.
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.
virtual void close_db()
Close database implementation.
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.
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.
virtual bool is_writable(const std::string &db_name)
Return write access status.
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.
conffwk::ConfigurationImpl::notify m_fn
The DUNE-DAQ namespace.
msgpack::object obj
Definition ral.hpp:59