6 #include <boost/assign/list_of.hpp>
7 #include <sandesh/request_pipeline.h>
17 #ifdef CONTRAIL_ETCD_INCL
21 #include "config_client_log_types.h"
22 #include "config_client_show_types.h"
25 #include "schema/bgp_schema_types.h"
26 #include "schema/vnc_cfg_types.h"
28 using namespace boost::assign;
32 list_of(
"perms2")(
"draft_mode_state");
36 static bool init_ =
false;
37 static int num_config_readers = 0;
41 char *count_str = getenv(
"CONFIG_NUM_WORKERS");
43 num_config_readers = strtol(count_str, NULL, 0);
45 num_config_readers = kNumConfigReaderTasks;
49 return num_config_readers;
53 static bool config_policy_set;
54 if (config_policy_set)
56 config_policy_set =
true;
60 TaskPolicy cassadra_reader_policy = boost::assign::list_of
64 cassadra_reader_policy.push_back(
68 cassadra_reader_policy);
71 TaskPolicy cassadra_obj_process_policy = boost::assign::list_of
74 cassadra_obj_process_policy.push_back(
78 cassadra_obj_process_policy);
81 TaskPolicy fq_name_reader_policy = boost::assign::list_of
85 fq_name_reader_policy);
88 TaskPolicy cassandra_init_policy = boost::assign::list_of
94 cassandra_init_policy);
97 TaskPolicy rabbitmq_reader_policy = boost::assign::list_of
100 rabbitmq_reader_policy);
103 TaskPolicy etcd_watcher_policy = boost::assign::list_of
106 etcd_watcher_policy);
111 config_json_parser_.reset(cfg_json_base);
112 config_json_parser_->Init(
this);
113 thread_count_ = GetNumConfigReader();
115 if (config_options_.config_db_use_etcd) {
116 #ifdef CONTRAIL_ETCD_INCL
117 config_db_client_.reset(ConfigStaticObjectFactory::Create<ConfigEtcdClient>
118 (
this, evm_, config_options_,
122 config_db_client_.reset(
123 ConfigStaticObjectFactory::CreateRef<ConfigCassandraClient>(
129 module_name_, config_options_));
131 SetDefaultSchedulingPolicy();
136 init_trigger_.reset(
new
140 reinit_triggered_ =
false;
145 std::string hostname,
146 std::string module_name,
149 generation_number_(0),
150 hostname_(hostname), module_name_(module_name),
151 config_options_(config_options) {
153 SetUp(cfg_json_base);
197 "Config Client Mgr SM: End of RIB computed and notification sent");
223 message =
"Config Client Mgr SM: End of RIB notification received, "
230 ConfigClientManagerInfo &info)
const {
250 #ifdef CONTRAIL_ETCD_INCL
257 CreateRef<ConfigCassandraClient>(
268 "Config Client Mgr SM: Post shutdown, next version of config: "
296 #ifdef CONTRAIL_ETCD_INCL
298 "Config Client Mgr SM: Start ETCD Watcher");
303 "Config Client Mgr SM: Start RabbitMqReader and init Database");
307 "Config Client Mgr SM: Init Database");
330 "Config Client Mgr SM: Re init triggered!");
ConfigJsonParserBase * config_json_parser()
void SetUp(ConfigJsonParserBase *)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
uint64_t GetGenerationNumber() const
void SetPolicy(int task_id, TaskPolicy &policy)
Sets the task exclusion policy. Adds policy entries for the task Examples:
ConfigDbClient * config_db_client() const
uint64_t GetEndOfRibComputedAt() const
ConfigAmqpClient * config_amqp_client() const
ConfigClientOptions config_options_
uint64_t IncrementGenerationNumber()
static int GetNumConfigReader()
#define CONFIG_CLIENT_DEBUG(obj,...)
int GetTaskId(const std::string &name)
bool GetEndOfRibComputed() const
static const std::set< std::string > skip_properties
tbb::interface5::condition_variable cond_var_
void SetDefaultSchedulingPolicy()
void WaitForEndOfConfig()
void ReinitConfigClient()
boost::scoped_ptr< ConfigDbClient > config_db_client_
boost::scoped_ptr< ConfigAmqpClient > config_amqp_client_
virtual void EndOfConfig()
boost::scoped_ptr< TaskTrigger > init_trigger_
static TaskScheduler * GetInstance()
static bool end_of_rib_computed_
tbb::mutex end_of_rib_sync_mutex_
std::vector< TaskExclusion > TaskPolicy
tbb::atomic< bool > reinit_triggered_
ConfigClientManager(EventManager *evm, ConfigJsonParserBase *cfg_json_base, std::string hostname, std::string module_name, const ConfigClientOptions &config_options)
static uint64_t UTCTimestampUsec()
void GetClientManagerInfo(ConfigClientManagerInfo &info) const
bool is_reinit_triggered()
void EnqueueUUIDRequest(std::string oper, std::string obj_type, std::string uuid_str)
uint64_t end_of_rib_computed_at_
static ConnectionState * GetInstance()
static std::string UTCUsecToString(uint64_t tstamp)