26#ifndef MYSQL_HARNESS_DIMANAGER_INCLUDED
27#define MYSQL_HARNESS_DIMANAGER_INCLUDED
29#include "harness_export.h"
35#include <shared_mutex>
41class RandomGeneratorInterface;
49class HARNESS_EXPORT
DIM {
59 static DIM &instance();
64 logging_registry_.set_static(instance);
70 logging_registry_.set(instance, deleter);
74 return static_cast<bool>(logging_registry_);
78 return logging_registry_.get();
84 random_generator_.set_static(inst);
91 random_generator_.set(inst, deleter);
95 return random_generator_.get();
103 loader_config_.set(instance, deleter);
106 bool has_Config()
const {
return static_cast<bool>(loader_config_); }
109 return loader_config_.
get();
117 dynamic_state_.set(instance, deleter);
123 return dynamic_state_.get();
130 return static_cast<bool>(sync_point_registry_);
134 return sync_point_registry_.
get();
145 std::unique_lock lk(mtx_);
151 std::unique_lock lk(mtx_);
153 inst_ = {inst, deleter};
157 std::shared_lock lk(mtx_);
163 std::unique_lock lk(mtx_);
168 explicit operator bool()
const {
169 std::shared_lock lk(mtx_);
171 return static_cast<bool>(inst_);
177 mutable std::shared_mutex
mtx_;
ConstSectionList get(const std::string §ion) const
Get a list of sections having a name.
Definition: config_parser.cc:237
value_type & get() const
Definition: dim.h:156
UniquePtr< value_type > inst_
Definition: dim.h:175
void set(value_type *inst, std::function< void(value_type *)> deleter)
Definition: dim.h:150
void reset()
Definition: dim.h:162
std::shared_mutex mtx_
Definition: dim.h:177
void set_static(value_type *inst)
Definition: dim.h:144
T value_type
Definition: dim.h:142
bool has_SyncPointRegistry() const
Definition: dim.h:129
void set_LoggingRegistry(mysql_harness::logging::Registry *instance, const std::function< void(mysql_harness::logging::Registry *)> &deleter)
Definition: dim.h:67
mysql_harness::RandomGeneratorInterface & get_RandomGenerator() const
Definition: dim.h:94
void set_DynamicState(mysql_harness::DynamicState *instance, const std::function< void(mysql_harness::DynamicState *)> &deleter)
Definition: dim.h:114
RWLockedUniquePtr< mysql_harness::logging::Registry > logging_registry_
Definition: dim.h:180
mysql_harness::DynamicState & get_DynamicState() const
Definition: dim.h:122
void set_static_LoggingRegistry(mysql_harness::logging::Registry *instance)
Definition: dim.h:63
RWLockedUniquePtr< mysql_harness::RandomGeneratorInterface > random_generator_
Definition: dim.h:182
bool has_Config() const
Definition: dim.h:106
void set_Config(mysql_harness::LoaderConfig *instance, const std::function< void(mysql_harness::LoaderConfig *)> &deleter)
Definition: dim.h:100
mysql_harness::logging::Registry & get_LoggingRegistry() const
Definition: dim.h:77
mysql_harness::SyncPointRegistry & get_SyncPointRegistry() const
Definition: dim.h:133
void set_static_RandomGenerator(mysql_harness::RandomGeneratorInterface *inst)
Definition: dim.h:82
RWLockedUniquePtr< mysql_harness::LoaderConfig > loader_config_
Definition: dim.h:184
RWLockedUniquePtr< mysql_harness::DynamicState > dynamic_state_
Definition: dim.h:186
mysql_harness::LoaderConfig & get_Config() const
Definition: dim.h:108
bool is_DynamicState() const
Definition: dim.h:120
DIM & operator=(const DIM &)=delete
RWLockedUniquePtr< mysql_harness::SyncPointRegistry > sync_point_registry_
Definition: dim.h:188
void set_RandomGenerator(mysql_harness::RandomGeneratorInterface *inst, const std::function< void(mysql_harness::RandomGeneratorInterface *)> &deleter)
Definition: dim.h:87
bool has_LoggingRegistry() const
Definition: dim.h:73
DynamicState represents a MySQLRouter dynamic state object.
Definition: dynamic_state.h:64
Configuration file handler for the loader.
Definition: loader_config.h:46
Definition: random_generator.h:36
Definition: sync_point.h:42
virtual std::shared_ptr< SyncPoint > get(const std::string &name)=0
Definition: unique_ptr.h:75
Definition: registry.h:48
#define T
Definition: jit_executor_value.cc:373
Singleton class that stores the application type.
Definition: component_application_type_name.h:31