6 #include <boost/assign/list_of.hpp>
7 #include <sandesh/request_pipeline.h>
18 #include "config_client_log_types.h"
19 #include "config_client_show_types.h"
22 #include "schema/bgp_schema_types.h"
23 #include "schema/vnc_cfg_types.h"
25 using namespace boost::assign;
29 list_of(
"perms2")(
"draft_mode_state");
33 static bool init_ =
false;
34 static int num_config_readers = 0;
38 char *count_str = getenv(
"CONFIG_NUM_WORKERS");
40 num_config_readers = strtol(count_str, NULL, 0);
42 num_config_readers = kNumConfigReaderTasks;
46 return num_config_readers;
50 static bool config_policy_set;
51 if (config_policy_set)
53 config_policy_set =
true;
57 TaskPolicy cassadra_reader_policy = boost::assign::list_of
61 cassadra_reader_policy.push_back(
65 cassadra_reader_policy);
68 TaskPolicy cassadra_obj_process_policy = boost::assign::list_of
71 cassadra_obj_process_policy.push_back(
75 cassadra_obj_process_policy);
78 TaskPolicy fq_name_reader_policy = boost::assign::list_of
82 fq_name_reader_policy);
85 TaskPolicy cassandra_init_policy = boost::assign::list_of
91 cassandra_init_policy);
94 TaskPolicy rabbitmq_reader_policy = boost::assign::list_of
97 rabbitmq_reader_policy);
100 TaskPolicy etcd_watcher_policy = boost::assign::list_of
103 etcd_watcher_policy);
108 config_json_parser_.reset(cfg_json_base);
109 config_json_parser_->Init(
this);
110 thread_count_ = GetNumConfigReader();
112 if (!config_options_.config_db_use_etcd) {
113 config_db_client_.reset(
114 ConfigStaticObjectFactory::CreateRef<ConfigCassandraClient>(
120 module_name_, config_options_));
122 SetDefaultSchedulingPolicy();
127 init_trigger_.reset(
new
131 reinit_triggered_ =
false;
136 std::string hostname,
137 std::string module_name,
140 generation_number_(0),
141 hostname_(hostname), module_name_(module_name),
142 config_options_(config_options) {
144 SetUp(cfg_json_base);
188 "Config Client Mgr SM: End of RIB computed and notification sent");
214 message =
"Config Client Mgr SM: End of RIB notification received, "
221 ConfigClientManagerInfo &info)
const {
242 CreateRef<ConfigCassandraClient>(
253 "Config Client Mgr SM: Post shutdown, next version of config: "
282 "Config Client Mgr SM: Start RabbitMqReader and init Database");
286 "Config Client Mgr SM: Init Database");
309 "Config Client Mgr SM: Re init triggered!");
void EnqueueUUIDRequest(std::string oper, std::string obj_type, std::string uuid_str)
static const std::set< std::string > skip_properties
ConfigDbClient * config_db_client() const
ConfigClientOptions config_options_
tbb::mutex end_of_rib_sync_mutex_
void WaitForEndOfConfig()
bool GetEndOfRibComputed() const
static bool end_of_rib_computed_
bool is_reinit_triggered()
boost::scoped_ptr< TaskTrigger > init_trigger_
uint64_t GetGenerationNumber() const
tbb::interface5::condition_variable cond_var_
boost::scoped_ptr< ConfigAmqpClient > config_amqp_client_
uint64_t GetEndOfRibComputedAt() const
ConfigJsonParserBase * config_json_parser()
void SetDefaultSchedulingPolicy()
tbb::atomic< bool > reinit_triggered_
static int GetNumConfigReader()
uint64_t end_of_rib_computed_at_
uint64_t IncrementGenerationNumber()
ConfigAmqpClient * config_amqp_client() const
void GetClientManagerInfo(ConfigClientManagerInfo &info) const
void ReinitConfigClient()
ConfigClientManager(EventManager *evm, ConfigJsonParserBase *cfg_json_base, std::string hostname, std::string module_name, const ConfigClientOptions &config_options)
boost::scoped_ptr< ConfigDbClient > config_db_client_
void SetUp(ConfigJsonParserBase *)
virtual void EndOfConfig()
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
int GetTaskId(const std::string &name)
void SetPolicy(int task_id, TaskPolicy &policy)
Sets the task exclusion policy. Adds policy entries for the task Examples:
static TaskScheduler * GetInstance()
static ConnectionState * GetInstance()
#define CONFIG_CLIENT_DEBUG(obj,...)
std::vector< TaskExclusion > TaskPolicy
static std::string UTCUsecToString(uint64_t tstamp)
static uint64_t UTCTimestampUsec()