DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::conffwk::ConfigurationImpl Class Referenceabstract

Provides pure virtual interface used by the Configuration class. More...

#include <ConfigurationImpl.hpp>

Inheritance diagram for dunedaq::conffwk::ConfigurationImpl:
[legend]
Collaboration diagram for dunedaq::conffwk::ConfigurationImpl:
[legend]

Public Types

typedef void(*) notify(std::vector< ConfigurationChange * > &changes, Configuration *)
 Callback to notify database changes.
 
typedef void(*) pre_notify(Configuration *)
 Callback to pre-notify database changes.
 

Public Member Functions

 ConfigurationImpl () noexcept
 The constructor.
 
virtual ~ConfigurationImpl ()
 Virtual destructor.
 
virtual void open_db (const std::string &db_name)=0
 Open database implementation in accordance with given name.
 
virtual void close_db ()=0
 Close database implementation.
 
virtual bool loaded () const noexcept=0
 Check if a database is loaded.
 
virtual void create (const std::string &db_name, const std::list< std::string > &includes)=0
 Create database.
 
virtual bool is_writable (const std::string &db_name)=0
 Return write access status.
 
virtual void add_include (const std::string &db_name, const std::string &include)=0
 Add include file.
 
virtual void remove_include (const std::string &db_name, const std::string &include)=0
 Remove include file.
 
virtual void get_includes (const std::string &db_name, std::list< std::string > &includes) const =0
 Get included files.
 
virtual void get_updated_dbs (std::list< std::string > &dbs) const =0
 Get uncommitted files.
 
virtual void set_commit_credentials (const std::string &user, const std::string &password)=0
 Set commit credentials.
 
virtual void commit (const std::string &log_message)=0
 Commit database changes.
 
virtual void abort ()=0
 Abort database changes.
 
virtual void prefetch_all_data ()=0
 Prefetch all data into client cache.
 
virtual std::vector< dunedaq::conffwk::Versionget_changes ()=0
 Get newly available versions.
 
virtual std::vector< dunedaq::conffwk::Versionget_versions (const std::string &since, const std::string &until, dunedaq::conffwk::Version::QueryType type, bool skip_irrelevant)=0
 Get archived versions.
 
virtual void get (const std::string &class_name, const std::string &id, ConfigObject &object, unsigned long rlevel, const std::vector< std::string > *rclasses)=0
 Get object of class by id.
 
virtual void get (const std::string &class_name, std::vector< ConfigObject > &objects, const std::string &query, unsigned long rlevel, const std::vector< std::string > *rclasses)=0
 Get objects of class according to query.
 
virtual void get (const ConfigObject &obj_from, const std::string &query, std::vector< ConfigObject > &objects, unsigned long rlevel, const std::vector< std::string > *rclasses)=0
 Get objects according to path.
 
virtual bool test_object (const std::string &class_name, const std::string &id, unsigned long rlevel, const std::vector< std::string > *rclasses)=0
 Test object existence (used by Python binding)
 
virtual void create (const std::string &at, const std::string &class_name, const std::string &id, ConfigObject &object)=0
 Create object of class by id at given file.
 
virtual void create (const ConfigObject &at, const std::string &class_name, const std::string &id, ConfigObject &object)=0
 Create object of class by id at file identified by object 'at'.
 
virtual void destroy (ConfigObject &object)=0
 Destroy object of class by id.
 
virtual dunedaq::conffwk::class_tget (const std::string &class_name, bool direct_only)=0
 Get description of class in accordance with parameters.
 
virtual void get_superclasses (conffwk::fmap< conffwk::fset > &schema)=0
 Get inheritance hierarchy.
 
virtual void subscribe (const std::set< std::string > &class_names, const std::map< std::string, std::set< std::string > > &objs, notify cb, pre_notify pre_cb)=0
 Subscribe on database changes.
 
virtual void unsubscribe ()=0
 Remove subscription on database changes.
 
virtual void print_profiling_info () noexcept=0
 Print implementation specific profiling information.
 
void print_cache_info () noexcept
 Print profiling information about objects in cache.
 
void set (Configuration *db) noexcept
 set configuration object
 
void rename_impl_object (const std::string *class_name, const std::string &old_id, const std::string &new_id) noexcept
 rename object in cache
 

Protected Member Functions

ConfigObjectImplget_impl_object (const std::string &class_name, const std::string &id) const noexcept
 get object from cache
 
void put_impl_object (const std::string &class_name, const std::string &id, ConfigObjectImpl *obj) noexcept
 put object to cache
 
template<class T , class OBJ >
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 clean () noexcept
 clean cache (e.g. to be used by destructor)
 
std::mutex & get_conf_impl_mutex () const
 Is required by reload methods.
 

Protected Attributes

Configurationm_conf
 Configuration pointer is needed for notification on changes, e.g. in case of subscription or an object deletion.
 

Private Attributes

conffwk::pmap< conffwk::map< ConfigObjectImpl * > * > m_impl_objects
 cache of implementation objects (class-name::->object_id->implementation)
 
std::vector< ConfigObjectImpl * > m_tangled_objects
 
unsigned long p_number_of_cache_hits
 
unsigned long p_number_of_object_read
 

Friends

class ConfigObject
 
class ConfigObjectImpl
 
class Configuration
 

Detailed Description

Provides pure virtual interface used by the Configuration class.

The class has several pure virtual methods to manipulate databases, access database information, subscribe and receive notification on data changes. Any database implementation inherits from this class and implements it's methods.

The methods may throw dunedaq::conffwk::Exception exception (like Generic, NotFound) in case of an error unless noexcept is explicitly used in their specification.

Definition at line 43 of file ConfigurationImpl.hpp.

Member Typedef Documentation

◆ notify

void(*) dunedaq::conffwk::ConfigurationImpl::notify(std::vector< ConfigurationChange * > &changes, Configuration *)

Callback to notify database changes.

Definition at line 182 of file ConfigurationImpl.hpp.

◆ pre_notify

void(*) dunedaq::conffwk::ConfigurationImpl::pre_notify(Configuration *)

Callback to pre-notify database changes.

Definition at line 186 of file ConfigurationImpl.hpp.

Constructor & Destructor Documentation

◆ ConfigurationImpl()

dunedaq::conffwk::ConfigurationImpl::ConfigurationImpl ( )
noexcept

The constructor.

Definition at line 224 of file ConfigurationImpl.cpp.

224 :
227 m_conf (0)
228{
229}
Configuration * m_conf
Configuration pointer is needed for notification on changes, e.g. in case of subscription or an objec...

◆ ~ConfigurationImpl()

dunedaq::conffwk::ConfigurationImpl::~ConfigurationImpl ( )
virtual

Virtual destructor.

Definition at line 231 of file ConfigurationImpl.cpp.

232{
233 clean();
234}
void clean() noexcept
clean cache (e.g. to be used by destructor)

Member Function Documentation

◆ abort()

virtual void dunedaq::conffwk::ConfigurationImpl::abort ( )
pure virtual

Abort database changes.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ add_include()

virtual void dunedaq::conffwk::ConfigurationImpl::add_include ( const std::string & db_name,
const std::string & include )
pure virtual

Add include file.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ clean()

void dunedaq::conffwk::ConfigurationImpl::clean ( )
protectednoexcept

clean cache (e.g. to be used by destructor)

Definition at line 379 of file ConfigurationImpl.cpp.

380{
381 for (auto& i : m_impl_objects)
382 {
383 for (auto& j : *i.second)
384 delete j.second;
385
386 delete i.second;
387 }
388
389 m_impl_objects.clear();
390
391 for (auto& x : m_tangled_objects)
392 delete x;
393
394 m_tangled_objects.clear();
395}
std::vector< ConfigObjectImpl * > m_tangled_objects
conffwk::pmap< conffwk::map< ConfigObjectImpl * > * > m_impl_objects
cache of implementation objects (class-name::->object_id->implementation)

◆ close_db()

virtual void dunedaq::conffwk::ConfigurationImpl::close_db ( )
pure virtual

Close database implementation.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ commit()

virtual void dunedaq::conffwk::ConfigurationImpl::commit ( const std::string & log_message)
pure virtual

Commit database changes.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ create() [1/3]

virtual void dunedaq::conffwk::ConfigurationImpl::create ( const ConfigObject & at,
const std::string & class_name,
const std::string & id,
ConfigObject & object )
pure virtual

Create object of class by id at file identified by object 'at'.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ create() [2/3]

virtual void dunedaq::conffwk::ConfigurationImpl::create ( const std::string & at,
const std::string & class_name,
const std::string & id,
ConfigObject & object )
pure virtual

Create object of class by id at given file.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ create() [3/3]

virtual void dunedaq::conffwk::ConfigurationImpl::create ( const std::string & db_name,
const std::list< std::string > & includes )
pure virtual

Create database.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ destroy()

virtual void dunedaq::conffwk::ConfigurationImpl::destroy ( ConfigObject & object)
pure virtual

Destroy object of class by id.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get() [1/4]

virtual void dunedaq::conffwk::ConfigurationImpl::get ( const ConfigObject & obj_from,
const std::string & query,
std::vector< ConfigObject > & objects,
unsigned long rlevel,
const std::vector< std::string > * rclasses )
pure virtual

Get objects according to path.

◆ get() [2/4]

virtual dunedaq::conffwk::class_t * dunedaq::conffwk::ConfigurationImpl::get ( const std::string & class_name,
bool direct_only )
pure virtual

Get description of class in accordance with parameters.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get() [3/4]

virtual void dunedaq::conffwk::ConfigurationImpl::get ( const std::string & class_name,
const std::string & id,
ConfigObject & object,
unsigned long rlevel,
const std::vector< std::string > * rclasses )
pure virtual

Get object of class by id.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get() [4/4]

virtual void dunedaq::conffwk::ConfigurationImpl::get ( const std::string & class_name,
std::vector< ConfigObject > & objects,
const std::string & query,
unsigned long rlevel,
const std::vector< std::string > * rclasses )
pure virtual

Get objects of class according to query.

◆ get_changes()

virtual std::vector< dunedaq::conffwk::Version > dunedaq::conffwk::ConfigurationImpl::get_changes ( )
pure virtual

Get newly available versions.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get_conf_impl_mutex()

std::mutex & dunedaq::conffwk::ConfigurationImpl::get_conf_impl_mutex ( ) const
protected

Is required by reload methods.

Definition at line 398 of file ConfigurationImpl.cpp.

399{
400 return m_conf->m_impl_mutex;
401}

◆ get_impl_object()

ConfigObjectImpl * dunedaq::conffwk::ConfigurationImpl::get_impl_object ( const std::string & class_name,
const std::string & id ) const
protectednoexcept

get object from cache

Definition at line 246 of file ConfigurationImpl.cpp.

247{
248
249 conffwk::pmap<conffwk::map<ConfigObjectImpl *> *>::const_iterator i = m_impl_objects.find(&name);
250
251 const std::string * class_name = nullptr;
252
253 if(i != m_impl_objects.end()) {
254 conffwk::map<ConfigObjectImpl *>::const_iterator j = i->second->find(id);
255
256 if(j != i->second->end()) {
258 TLOG_DEBUG(4) << "\n * found the object with id = \'" << id << "\' in class \'" << name << '\'' ;
259 return j->second;
260 }
261
262 class_name = i->first;
263
264
265 // prepare and print out debug message
266
267 if(ers::debug_level() >= 4) {
268 TLOG_DEBUG(40) << " * there is no object with id = \'" << id << "\' found in the class \'" << name
269 << "\' that has " << i->second->size() << " objects in cache: ";
270 for(j=i->second->begin(); j != i->second->end();++j) {
271 TLOG_DEBUG(40) << '\'' << j->first << '\'';
272 }
273 }
274
275 }
276 else {
277 class_name = &DalFactory::instance().get_known_class_name_ref(name);
278 TLOG_DEBUG(40) << " * there is no object with id = \'" << id << "\' found in the class \'" << name
279 << "\' that has no objects in cache";
280 }
281
282 // check implementation objects of subclasses
283
284 if(m_conf) {
285 conffwk::fmap<conffwk::fset>::const_iterator subclasses = m_conf->subclasses().find(class_name);
286
287 if(subclasses != m_conf->subclasses().end()) {
288 for(conffwk::fset::const_iterator k = subclasses->second.begin(); k != subclasses->second.end(); ++k) {
289 i = m_impl_objects.find(*k);
290 if(i != m_impl_objects.end()) {
291 conffwk::map<ConfigObjectImpl *>::const_iterator j = i->second->find(id);
292
293 if(j != i->second->end()) {
295 TLOG_DEBUG(40) << " * found the object with id = \'" << id << "\' in class \'" << *k << '\'';
296
297 return j->second;
298 }
299
300
301 // prepare and print out debug message
302
303 else if(ers::debug_level() >= 4) {
304 TLOG_DEBUG(40) << " * there is no object with id = \'" << id << "\' found in the class \'" << *k
305 << "\' that has " << i->second->size() << " objects in cache: ";
306 for(j=i->second->begin(); j != i->second->end();++j) {
307 TLOG_DEBUG(40) << '\'' << j->first << '\'';
308 }
309 }
310
311
312 }
313 else {
314 TLOG_DEBUG(40) << " * there is no object with id = \'" << id << "\' found in the class \'" << *k
315 << "\' that has no objects in cache\n";
316 }
317
318 }
319 }
320
321 TLOG_DEBUG(40) << " * there is no object \'" << id << "\' in class \'" << name
322 << "\' and it's subclasses, returning NULL ...";
323 }
324 else {
325 TLOG_DEBUG(40) << " * there is no object \'" << id << "\' in class \'" << name << "\', returning NULL ...";
326 }
327
328 return nullptr;
329}
const conffwk::fmap< conffwk::fset > & subclasses() const
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
int debug_level()
Definition ers.hpp:66

◆ get_includes()

virtual void dunedaq::conffwk::ConfigurationImpl::get_includes ( const std::string & db_name,
std::list< std::string > & includes ) const
pure virtual

Get included files.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get_superclasses()

virtual void dunedaq::conffwk::ConfigurationImpl::get_superclasses ( conffwk::fmap< conffwk::fset > & schema)
pure virtual

Get inheritance hierarchy.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get_updated_dbs()

virtual void dunedaq::conffwk::ConfigurationImpl::get_updated_dbs ( std::list< std::string > & dbs) const
pure virtual

Get uncommitted files.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ get_versions()

virtual std::vector< dunedaq::conffwk::Version > dunedaq::conffwk::ConfigurationImpl::get_versions ( const std::string & since,
const std::string & until,
dunedaq::conffwk::Version::QueryType type,
bool skip_irrelevant )
pure virtual

Get archived versions.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ insert_object()

template<class T , class OBJ >
T * dunedaq::conffwk::ConfigurationImpl::insert_object ( OBJ & obj,
const std::string & id,
const std::string & class_name )
inlineprotectednoexcept

insert new object (update cache or create-and-insert)

Definition at line 232 of file ConfigurationImpl.hpp.

233 {
234 ConfigObjectImpl * p = get_impl_object(class_name, id);
235
236 if (p == nullptr)
237 {
238 p = static_cast<ConfigObjectImpl *>(new T(obj, this));
239 put_impl_object(class_name, id, p);
240 }
241 else
242 {
243 static_cast<T *>(p)->set(obj);
244 p->m_state = dunedaq::conffwk::Valid;
245 }
246
247 return static_cast<T *>(p);
248 }
void put_impl_object(const std::string &class_name, const std::string &id, ConfigObjectImpl *obj) noexcept
put object to cache
ConfigObjectImpl * get_impl_object(const std::string &class_name, const std::string &id) const noexcept
get object from cache
std::unordered_set< std::string > set
Definition set.hpp:10

◆ is_writable()

virtual bool dunedaq::conffwk::ConfigurationImpl::is_writable ( const std::string & db_name)
pure virtual

Return write access status.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ loaded()

virtual bool dunedaq::conffwk::ConfigurationImpl::loaded ( ) const
pure virtualnoexcept

Check if a database is loaded.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ open_db()

virtual void dunedaq::conffwk::ConfigurationImpl::open_db ( const std::string & db_name)
pure virtual

Open database implementation in accordance with given name.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ prefetch_all_data()

virtual void dunedaq::conffwk::ConfigurationImpl::prefetch_all_data ( )
pure virtual

Prefetch all data into client cache.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ print_cache_info()

void dunedaq::conffwk::ConfigurationImpl::print_cache_info ( )
noexcept

Print profiling information about objects in cache.

Definition at line 237 of file ConfigurationImpl.cpp.

238{
239 std::cout <<
240 "Configuration implementation profiler report:\n"
241 " number of read objects: " << p_number_of_object_read << "\n"
242 " number of cache hits: " << p_number_of_cache_hits << std::endl;
243}

◆ print_profiling_info()

virtual void dunedaq::conffwk::ConfigurationImpl::print_profiling_info ( )
pure virtualnoexcept

Print implementation specific profiling information.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ put_impl_object()

void dunedaq::conffwk::ConfigurationImpl::put_impl_object ( const std::string & class_name,
const std::string & id,
ConfigObjectImpl * obj )
protectednoexcept

put object to cache

Definition at line 333 of file ConfigurationImpl.cpp.

334{
336
337 conffwk::pmap<conffwk::map<ConfigObjectImpl *> * >::iterator i = m_impl_objects.find(&name);
338
339 if(i != m_impl_objects.end()) {
340 (*i->second)[id] = obj;
341 obj->m_class_name = i->first;
342 }
343 else {
344 conffwk::map<ConfigObjectImpl *> * m = new conffwk::map<ConfigObjectImpl *>();
345 obj->m_class_name = &DalFactory::instance().get_known_class_name_ref(name);
346 m_impl_objects[obj->m_class_name] = m;
347 (*m)[id] = obj;
348 }
349}

◆ remove_include()

virtual void dunedaq::conffwk::ConfigurationImpl::remove_include ( const std::string & db_name,
const std::string & include )
pure virtual

Remove include file.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ rename_impl_object()

void dunedaq::conffwk::ConfigurationImpl::rename_impl_object ( const std::string * class_name,
const std::string & old_id,
const std::string & new_id )
noexcept

rename object in cache

Definition at line 352 of file ConfigurationImpl.cpp.

353{
354 conffwk::pmap<conffwk::map<ConfigObjectImpl *> *>::iterator i = m_impl_objects.find(class_name);
355
356 if (i != m_impl_objects.end())
357 {
358 conffwk::map<ConfigObjectImpl *>::iterator j = i->second->find(old_id);
359
360 if (j != i->second->end())
361 {
362 ConfigObjectImpl*& obj = (*i->second)[new_id];
363
364 if (obj != nullptr)
365 {
367 m_tangled_objects.push_back(obj);
368 }
369
370 obj = j->second;
371
372 TLOG_DEBUG(2) << "rename implementation " << (void *)j->second << " of object \'" << old_id << '@' << *class_name << "\' to \'" << new_id << '\'';
373 i->second->erase(j);
374 }
375 }
376}

◆ set()

void dunedaq::conffwk::ConfigurationImpl::set ( Configuration * db)
inlinenoexcept

set configuration object

Definition at line 272 of file ConfigurationImpl.hpp.

272{ m_conf = db; }

◆ set_commit_credentials()

virtual void dunedaq::conffwk::ConfigurationImpl::set_commit_credentials ( const std::string & user,
const std::string & password )
pure virtual

Set commit credentials.

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ subscribe()

virtual void dunedaq::conffwk::ConfigurationImpl::subscribe ( const std::set< std::string > & class_names,
const std::map< std::string, std::set< std::string > > & objs,
notify cb,
pre_notify pre_cb )
pure virtual

Subscribe on database changes.

◆ test_object()

virtual bool dunedaq::conffwk::ConfigurationImpl::test_object ( const std::string & class_name,
const std::string & id,
unsigned long rlevel,
const std::vector< std::string > * rclasses )
pure virtual

Test object existence (used by Python binding)

Implemented in dunedaq::oksconflibs::OksConfiguration.

◆ unsubscribe()

virtual void dunedaq::conffwk::ConfigurationImpl::unsubscribe ( )
pure virtual

Remove subscription on database changes.

Implemented in dunedaq::oksconflibs::OksConfiguration.

Friends And Related Symbol Documentation

◆ ConfigObject

friend class ConfigObject
friend

Definition at line 45 of file ConfigurationImpl.hpp.

◆ ConfigObjectImpl

friend class ConfigObjectImpl
friend

Definition at line 46 of file ConfigurationImpl.hpp.

◆ Configuration

friend class Configuration
friend

Definition at line 47 of file ConfigurationImpl.hpp.

Member Data Documentation

◆ m_conf

Configuration* dunedaq::conffwk::ConfigurationImpl::m_conf
protected

Configuration pointer is needed for notification on changes, e.g. in case of subscription or an object deletion.

Definition at line 260 of file ConfigurationImpl.hpp.

◆ m_impl_objects

conffwk::pmap<conffwk::map<ConfigObjectImpl *> * > dunedaq::conffwk::ConfigurationImpl::m_impl_objects
private

cache of implementation objects (class-name::->object_id->implementation)

Definition at line 209 of file ConfigurationImpl.hpp.

◆ m_tangled_objects

std::vector<ConfigObjectImpl *> dunedaq::conffwk::ConfigurationImpl::m_tangled_objects
private

Definition at line 210 of file ConfigurationImpl.hpp.

◆ p_number_of_cache_hits

unsigned long dunedaq::conffwk::ConfigurationImpl::p_number_of_cache_hits
mutableprivate

Definition at line 212 of file ConfigurationImpl.hpp.

◆ p_number_of_object_read

unsigned long dunedaq::conffwk::ConfigurationImpl::p_number_of_object_read
mutableprivate

Definition at line 213 of file ConfigurationImpl.hpp.


The documentation for this class was generated from the following files: