17 #include "ifmap/ifmap_log_types.h"
20 #include "schema/vnc_cfg_types.h"
72 AddNodesToWhitelist();
107 assert(
dynamic_cast<IFMapNode *
>(lnode));
108 assert(
dynamic_cast<IFMapNode *
>(rnode));
110 assert(!
dynamic_cast<IFMapLink *
>(lnode));
111 assert(!
dynamic_cast<IFMapLink *
>(rnode));
135 rnode = link->
right();
216 rm_mask.
set(client_index);
227 ninterest |= state->
nmask();
229 if (state->
interest() == ninterest) {
238 iter != state->
end(); ++iter) {
240 table->
Change(iter.operator->());
255 while (iter != end_iter) {
266 assert(state == nstate);
282 for (
Rns_citer iter = rnset->begin(); iter != rnset->end(); ++iter) {
288 assert(state == nstate);
329 rnset->insert(state);
344 "physical-router-virtual-router",
345 "virtual-router-virtual-machine",
346 "virtual-router-network-ipam",
347 "global-system-config-virtual-router",
348 "provider-attachment-virtual-router",
349 "virtual-router-virtual-machine-interface",
350 "virtual-router-sub-cluster",
352 {
"virtual-router-network-ipam", {
353 "virtual-router-network-ipam",
355 {
"virtual-machine", {
356 "virtual-machine-service-instance",
357 "virtual-machine-interface-virtual-machine",
358 "virtual-machine-tag",
360 {
"control-node-zone", {}},
362 "bgp-router-sub-cluster",
365 "instance-bgp-router",
366 "physical-router-bgp-router",
367 "bgp-router-control-node-zone",
369 {
"bgp-as-a-service", {
371 "bgpaas-health-check",
372 "bgpaas-control-node-zone",
374 {
"bgpaas-control-node-zone", {
375 "bgpaas-control-node-zone",
377 {
"global-system-config", {
378 "global-system-config-global-vrouter-config",
379 "global-system-config-global-qos-config",
380 "global-system-config-bgp-router",
381 "qos-config-global-system-config",
383 {
"provider-attachment", {}},
384 {
"service-instance", {
385 "service-instance-service-template",
386 "service-instance-port-tuple",
388 {
"global-vrouter-config", {
389 "application-policy-set-global-vrouter-config",
390 "global-vrouter-config-security-logging-object",
392 {
"virtual-machine-interface", {
393 "virtual-machine-virtual-machine-interface",
394 "virtual-machine-interface-sub-interface",
395 "instance-ip-virtual-machine-interface",
396 "virtual-machine-interface-virtual-network",
397 "virtual-machine-interface-security-group",
398 "floating-ip-virtual-machine-interface",
399 "alias-ip-virtual-machine-interface",
400 "customer-attachment-virtual-machine-interface",
401 "virtual-machine-interface-routing-instance",
402 "virtual-machine-interface-route-table",
403 "subnet-virtual-machine-interface",
404 "service-port-health-check",
405 "bgpaas-virtual-machine-interface",
406 "virtual-machine-interface-qos-config",
407 "virtual-machine-interface-bridge-domain",
408 "virtual-machine-interface-security-logging-object",
409 "project-virtual-machine-interface",
410 "port-tuple-interface",
411 "virtual-machine-interface-tag",
412 "virtual-machine-interface-bgp-router",
414 {
"virtual-machine-interface-bridge-domain", {
415 "virtual-machine-interface-bridge-domain",
418 "security-group-access-control-list",
420 {
"physical-router", {
421 "physical-router-physical-interface",
422 "physical-router-logical-interface",
423 "physical-router-virtual-network",
425 {
"service-template", {
426 "domain-service-template",
429 "instance-ip-virtual-network",
431 {
"virtual-network", {
432 "virtual-network-floating-ip-pool",
433 "virtual-network-alias-ip-pool",
434 "virtual-network-network-ipam",
435 "virtual-network-access-control-list",
436 "virtual-network-routing-instance",
437 "virtual-network-qos-config",
438 "virtual-network-bridge-domain",
439 "virtual-network-security-logging-object",
440 "virtual-network-tag",
441 "virtual-network-provider-network",
442 "virtual-network-multicast-policy",
444 "host-based-service-virtual-network",
445 "project-virtual-network",
448 "floating-ip-pool-floating-ip",
449 "instance-ip-floating-ip",
452 "alias-ip-pool-alias-ip",
454 {
"customer-attachment", {}},
455 {
"virtual-machine-interface-routing-instance", {
456 "virtual-machine-interface-routing-instance",
458 {
"physical-interface", {
459 "physical-interface-logical-interface",
460 "virtual-port-group-physical-interface",
462 {
"virtual-port-group-physical-interface", {
463 "virtual-port-group-physical-interface",
465 {
"virtual-port-group", {
466 "virtual-port-group-virtual-machine-interface",
467 "virtual-port-group-physical-interface",
471 "domain-virtual-DNS",
473 {
"floating-ip-pool", {
474 "virtual-network-floating-ip-pool",
477 "virtual-network-alias-ip-pool",
479 {
"logical-interface", {
480 "logical-interface-virtual-machine-interface",
482 {
"logical-router-virtual-network", {
483 "logical-router-virtual-network",
486 "logical-router-virtual-network",
487 "logical-router-interface",
489 {
"virtual-network-network-ipam", {
490 "virtual-network-network-ipam",
492 {
"access-control-list", {}},
493 {
"routing-instance", {}},
496 "virtual-DNS-virtual-DNS-record",
499 "network-ipam-virtual-DNS",
501 {
"virtual-DNS-record", {}},
502 {
"interface-route-table", {}},
504 {
"service-health-check", {}},
507 {
"forwarding-class", {
508 "forwarding-class-qos-queue",
510 {
"global-qos-config", {
511 "global-qos-config-forwarding-class",
512 "global-qos-config-qos-queue",
513 "global-qos-config-qos-config",
515 {
"bridge-domain", {}},
516 {
"security-logging-object", {
517 "virtual-network-security-logging-object",
518 "virtual-machine-interface-security-logging-object",
519 "global-vrouter-config-security-logging-object",
520 "security-logging-object-network-policy",
521 "security-logging-object-security-group",
524 "application-policy-set-tag",
526 {
"application-policy-set", {
527 "application-policy-set-firewall-policy",
528 "policy-management-application-policy-set",
530 {
"application-policy-set-firewall-policy", {
531 "application-policy-set-firewall-policy",
533 {
"firewall-policy", {
534 "firewall-policy-firewall-rule",
535 "firewall-policy-security-logging-object",
537 {
"firewall-policy-firewall-rule", {
538 "firewall-policy-firewall-rule",
540 {
"firewall-policy-security-logging-object", {
541 "firewall-policy-security-logging-object",
545 "firewall-rule-service-group",
546 "firewall-rule-address-group",
547 "firewall-rule-security-logging-object",
549 {
"firewall-rule-security-logging-object", {
550 "firewall-rule-security-logging-object",
552 {
"service-group", {}},
556 {
"host-based-service", {
557 "host-based-service-virtual-network",
559 {
"host-based-service-virtual-network", {
564 "project-logical-router",
565 "project-host-based-service",
568 "service-instance-port-tuple",
569 "port-tuple-interface",
571 {
"policy-management", {}},
572 {
"multicast-policy", {
573 "virtual-network-multicast-policy",
void Set(const BitSet &rhs)
size_t find_first() const
void BuildComplement(const BitSet &lhs, const BitSet &rhs)
void Reset(const BitSet &rhs)
size_t find_next(size_t pos) const
bool Contains(const BitSet &rhs) const
bool test(size_t pos) const
std::string ToString() const
DBState * GetState(DBTableBase *tbl_base, ListenerId listener) const
virtual std::string ToString() const =0
void Visit(DBGraphVertex *start, VertexVisitor vertex_visit_fn, EdgeVisitor edge_visit_fn)
virtual void Change(DBEntryBase *entry)
DBGraph::VisitorFilter::AllowedEdgeRetVal AllowedEdges(const DBGraphVertex *vertex) const
bool EdgeFilter(const DBGraphVertex *source, const DBGraphVertex *target, const DBGraphEdge *edge) const
GraphPropagateFilter(IFMapExporter *exporter, const IFMapTypenameWhiteList *type_filter, const BitSet &bitset)
bool VertexFilter(const DBGraphVertex *vertex) const
const IFMapNodeState * NodeStateLookup(const IFMapNode *node) const
const IFMapTypenameWhiteList * type_filter_
IFMapExporter * exporter_
virtual const std::string & identifier() const =0
Cs_citer ClientConfigTrackerEnd(TrackerType tracker_type, int index) const
void StateInterestOr(IFMapState *state, const BitSet &interest_bits)
Cs_citer ClientConfigTrackerBegin(TrackerType tracker_type, int index) const
void StateInterestSet(IFMapState *state, const BitSet &interest_bits)
ConfigSet::const_iterator Cs_citer
DBTable::ListenerId TableListenerId(const DBTable *table) const
IFMapNodeState * NodeStateLookup(IFMapNode *node)
IFMapNodeState * NodeStateLocate(IFMapNode *node)
std::set< IFMapState * > ReachableNodesSet
void JoinVertex(DBGraphVertex *vertex, const BitSet &bset)
void AddNodesToWhitelist()
void OrLinkDeleteClients(const BitSet &bset)
void UpdateNewReachableNodesTracker(int client_index, IFMapState *state)
const IFMapTypenameWhiteList & get_traversal_white_list() const
void LinkAdd(IFMapLink *link, IFMapNode *lnode, const BitSet &lhs, IFMapNode *rnode, const BitSet &rhs)
void NotifyEdge(DBGraphEdge *edge, const BitSet &bset)
ReachableNodesTracker new_reachable_nodes_tracker_
void LinkDeleteWalkBatchEnd(const BitSet &done_set)
ReachableNodesSet::const_iterator Rns_citer
IFMapGraphWalker(DBGraph *graph, IFMapExporter *exporter)
size_t walk_client_index_
boost::scoped_ptr< TaskTrigger > link_delete_walk_trigger_
IFMapExporter * exporter_
void NewReachableNodesCleanupInterest(int client_index)
void OldReachableNodesCleanupInterest(int client_index)
void LinkRemove(const BitSet &bset)
static const int kMaxLinkDeleteWalks
void ProcessLinkAdd(IFMapNode *lnode, IFMapNode *rnode, const BitSet &bset)
bool FilterNeighbor(IFMapNode *lnode, IFMapLink *link)
void DeleteNewReachableNodesTracker(int client_index)
void CleanupInterest(int client_index, IFMapNode *node, IFMapNodeState *state)
void AddNewReachableNodesTracker(int client_index)
BitSet link_delete_clients_
void ResetLinkDeleteClients(const BitSet &bset)
void RecomputeInterest(DBGraphVertex *vertex, int bit)
std::unique_ptr< IFMapTypenameWhiteList > traversal_white_list_
const BitSet & nmask() const
virtual std::string ToString() const
IFMapClient * GetClient(int index)
const BitSet & interest() const
IFMapNode * GetIFMapNode() const
static IFMapTable * FindTable(DB *db, const std::string &element_type)
IFMapNode * FindNode(const std::string &name)
int GetTaskId(const std::string &name)
static TaskScheduler * GetInstance()
#define IFMAP_DEBUG(obj,...)
std::pair< bool, AllowedEdgeSet > AllowedEdgeRetVal
virtual AllowedEdgeRetVal AllowedEdges(const DBGraphVertex *source) const
virtual bool VertexFilter(const DBGraphVertex *vertex) const