7 #include <boost/assign/list_of.hpp>
8 #include <boost/bind.hpp>
20 #include "ifmap/ifmap_log_types.h"
23 #include "schema/vnc_cfg_types.h"
25 using boost::assign::list_of;
26 using boost::assign::map_list_of;
77 TaskScheduler::GetInstance()->GetTaskId(
"db::IFMapTable"), 0)),
78 walk_client_index_(
BitSet::npos) {
115 assert(dynamic_cast<IFMapNode *>(lnode));
116 assert(dynamic_cast<IFMapNode *>(rnode));
118 assert(!dynamic_cast<IFMapLink *>(lnode));
119 assert(!dynamic_cast<IFMapLink *>(rnode));
143 rnode = link->
right();
184 if ((node != NULL) && node->IsVertexValid()) {
224 rm_mask.
set(client_index);
235 ninterest |= state->
nmask();
237 if (state->
interest() == ninterest) {
246 iter != state->
end(); ++iter) {
248 table->
Change(iter.operator->());
263 while (iter != end_iter) {
274 assert(state == nstate);
290 for (
Rns_citer iter = rnset->begin(); iter != rnset->end(); ++iter) {
296 assert(state == nstate);
337 rnset->insert(state);
352 list_of(
"physical-router-virtual-router")
353 (
"virtual-router-virtual-machine")
354 (
"virtual-router-network-ipam")
355 (
"global-system-config-virtual-router")
356 (
"provider-attachment-virtual-router")
357 (
"virtual-router-virtual-machine-interface")
358 (
"virtual-router-sub-cluster")
359 .convert_to_container<set<string> >())
360 (
"virtual-router-network-ipam", list_of(
"virtual-router-network-ipam")
361 .convert_to_container<set<string> >())
363 list_of(
"virtual-machine-service-instance")
364 (
"virtual-machine-interface-virtual-machine")
365 (
"virtual-machine-tag")
366 .convert_to_container<set<string> >())
367 (
"control-node-zone", set<string>())
369 list_of(
"bgp-router-sub-cluster")
370 .convert_to_container<set<string> >())
372 list_of(
"instance-bgp-router")
373 (
"physical-router-bgp-router")
374 (
"bgp-router-control-node-zone")
375 .convert_to_container<set<string> >())
377 list_of(
"bgpaas-bgp-router")
378 (
"bgpaas-health-check")
379 (
"bgpaas-control-node-zone")
380 .convert_to_container<set<string> >())
381 (
"bgpaas-control-node-zone", list_of(
"bgpaas-control-node-zone")
382 .convert_to_container<set<string> >())
383 (
"global-system-config",
384 list_of(
"global-system-config-global-vrouter-config")
385 (
"global-system-config-global-qos-config")
386 (
"global-system-config-bgp-router")
387 (
"qos-config-global-system-config")
388 .convert_to_container<set<string> >())
389 (
"provider-attachment", set<string>())
390 (
"service-instance", list_of(
"service-instance-service-template")
391 (
"service-instance-port-tuple")
392 .convert_to_container<set<string> >())
393 (
"global-vrouter-config",
394 list_of(
"application-policy-set-global-vrouter-config")
395 (
"global-vrouter-config-security-logging-object")
396 .convert_to_container<set<string> >())
397 (
"virtual-machine-interface",
398 list_of(
"virtual-machine-virtual-machine-interface")
399 (
"virtual-machine-interface-sub-interface")
400 (
"instance-ip-virtual-machine-interface")
401 (
"virtual-machine-interface-virtual-network")
402 (
"virtual-machine-interface-security-group")
403 (
"floating-ip-virtual-machine-interface")
404 (
"alias-ip-virtual-machine-interface")
405 (
"customer-attachment-virtual-machine-interface")
406 (
"virtual-machine-interface-routing-instance")
407 (
"virtual-machine-interface-route-table")
408 (
"subnet-virtual-machine-interface")
409 (
"service-port-health-check")
410 (
"bgpaas-virtual-machine-interface")
411 (
"virtual-machine-interface-qos-config")
412 (
"virtual-machine-interface-bridge-domain")
413 (
"virtual-machine-interface-security-logging-object")
414 (
"project-virtual-machine-interface")
415 (
"port-tuple-interface")
416 (
"virtual-machine-interface-tag")
417 (
"virtual-machine-interface-bgp-router")
418 .convert_to_container<set<string> >())
419 (
"virtual-machine-interface-bridge-domain",
420 list_of(
"virtual-machine-interface-bridge-domain")
421 .convert_to_container<set<string> >())
422 (
"security-group", list_of(
"security-group-access-control-list")
423 .convert_to_container<set<string> >())
425 list_of(
"physical-router-physical-interface")
426 (
"physical-router-logical-interface")
427 (
"physical-router-virtual-network")
428 .convert_to_container<set<string> >())
429 (
"service-template", list_of(
"domain-service-template")
430 .convert_to_container<set<string> >())
431 (
"instance-ip", list_of(
"instance-ip-virtual-network")
432 .convert_to_container<set<string> >())
434 list_of(
"virtual-network-floating-ip-pool")
435 (
"virtual-network-alias-ip-pool")
436 (
"virtual-network-network-ipam")
437 (
"virtual-network-access-control-list")
438 (
"virtual-network-routing-instance")
439 (
"virtual-network-qos-config")
440 (
"virtual-network-bridge-domain")
441 (
"virtual-network-security-logging-object")
442 (
"virtual-network-tag")
443 (
"virtual-network-provider-network")
444 (
"virtual-network-multicast-policy")
446 (
"host-based-service-virtual-network")
447 (
"project-virtual-network")
448 .convert_to_container<set<string> >())
449 (
"floating-ip", list_of(
"floating-ip-pool-floating-ip")
450 (
"instance-ip-floating-ip").convert_to_container<set<string> >())
451 (
"alias-ip", list_of(
"alias-ip-pool-alias-ip")
452 .convert_to_container<set<string> >())
453 (
"customer-attachment", set<string>())
454 (
"virtual-machine-interface-routing-instance",
455 list_of(
"virtual-machine-interface-routing-instance")
456 .convert_to_container<set<string> >())
457 (
"physical-interface", list_of(
"physical-interface-logical-interface")
458 (
"virtual-port-group-physical-interface")
459 .convert_to_container<set<string> >())
460 (
"virtual-port-group-physical-interface",
461 list_of(
"virtual-port-group-physical-interface")
462 .convert_to_container<std::set<std::string> >())
463 (
"virtual-port-group",
464 list_of(
"virtual-port-group-virtual-machine-interface")
465 (
"virtual-port-group-physical-interface")
466 .convert_to_container<std::set<std::string> >())
467 (
"domain", list_of(
"domain-namespace")(
"domain-virtual-DNS")
468 .convert_to_container<set<string> >())
469 (
"floating-ip-pool", list_of(
"virtual-network-floating-ip-pool")
470 .convert_to_container<set<string> >())
471 (
"alias-ip-pool", list_of(
"virtual-network-alias-ip-pool")
472 .convert_to_container<set<string> >())
473 (
"logical-interface", list_of(
"logical-interface-virtual-machine-interface")
474 .convert_to_container<set<string> >())
475 (
"logical-router-virtual-network", list_of(
"logical-router-virtual-network")
476 .convert_to_container<set<string> >())
477 (
"logical-router", list_of(
"logical-router-virtual-network")
478 (
"logical-router-interface")
479 .convert_to_container<set<string> >())
480 (
"virtual-network-network-ipam", list_of(
"virtual-network-network-ipam")
481 .convert_to_container<set<string> >())
482 (
"access-control-list", set<string>())
483 (
"routing-instance", set<string>())
484 (
"namespace", set<string>())
485 (
"virtual-DNS", list_of(
"virtual-DNS-virtual-DNS-record")
486 .convert_to_container<set<string> >())
487 (
"network-ipam", list_of(
"network-ipam-virtual-DNS")
488 .convert_to_container<set<string> >())
489 (
"virtual-DNS-record", std::set<std::string>())
490 (
"interface-route-table", std::set<std::string>())
491 (
"subnet", std::set<std::string>())
492 (
"service-health-check", std::set<std::string>())
493 (
"qos-config", std::set<std::string>())
494 (
"qos-queue", std::set<std::string>())
495 (
"forwarding-class", list_of(
"forwarding-class-qos-queue")
496 .convert_to_container<set<string> >())
497 (
"global-qos-config",
498 list_of(
"global-qos-config-forwarding-class")
499 (
"global-qos-config-qos-queue")
500 (
"global-qos-config-qos-config")
501 .convert_to_container<set<string> >())
502 (
"bridge-domain", std::set<std::string>())
503 (
"security-logging-object",
504 list_of(
"virtual-network-security-logging-object")
505 (
"virtual-machine-interface-security-logging-object")
506 (
"global-vrouter-config-security-logging-object")
507 (
"security-logging-object-network-policy")
508 (
"security-logging-object-security-group")
509 .convert_to_container<set<string> >())
510 (
"tag", list_of(
"application-policy-set-tag")
511 .convert_to_container<std::set<std::string> >())
512 (
"application-policy-set", list_of(
"application-policy-set-firewall-policy")
513 (
"policy-management-application-policy-set")
514 .convert_to_container<std::set<std::string> >())
515 (
"application-policy-set-firewall-policy",
516 list_of(
"application-policy-set-firewall-policy")
517 .convert_to_container<std::set<std::string> >())
518 (
"firewall-policy", list_of(
"firewall-policy-firewall-rule")
519 (
"firewall-policy-security-logging-object")
520 .convert_to_container<std::set<std::string> >())
521 (
"firewall-policy-firewall-rule",
522 list_of(
"firewall-policy-firewall-rule")
523 .convert_to_container<std::set<std::string> >())
524 (
"firewall-policy-security-logging-object",
525 list_of(
"firewall-policy-security-logging-object")
526 .convert_to_container<std::set<std::string> >())
527 (
"firewall-rule", list_of(
"firewall-rule-tag")
528 (
"firewall-rule-service-group")
529 (
"firewall-rule-address-group")
530 (
"firewall-rule-security-logging-object")
531 .convert_to_container<std::set<std::string> >())
532 (
"firewall-rule-security-logging-object",
533 list_of(
"firewall-rule-security-logging-object")
534 .convert_to_container<std::set<std::string> >())
535 (
"service-group", std::set<std::string>())
536 (
"address-group", list_of(
"address-group-tag")
537 .convert_to_container<std::set<std::string> >())
538 (
"host-based-service", list_of(
"host-based-service-virtual-network")
539 .convert_to_container<std::set<std::string> >())
540 (
"host-based-service-virtual-network", list_of(
"virtual-network")
541 .convert_to_container<std::set<std::string> >())
542 (
"project", list_of(
"project-tag")
543 (
"project-logical-router")
544 (
"project-host-based-service")
545 .convert_to_container<std::set<std::string> >())
546 (
"port-tuple", list_of(
"service-instance-port-tuple")
547 (
"port-tuple-interface")
548 .convert_to_container<std::set<std::string> >())
549 (
"policy-management", std::set<std::string>())
550 (
"multicast-policy", list_of(
"virtual-network-multicast-policy")
551 .convert_to_container<std::set<std::string> >())
void OldReachableNodesCleanupInterest(int client_index)
const BitSet & nmask() const
void NotifyEdge(DBGraphEdge *edge, const BitSet &bset)
virtual const std::string & identifier() const =0
void CleanupInterest(int client_index, IFMapNode *node, IFMapNodeState *state)
const IFMapTypenameWhiteList & get_traversal_white_list() const
void AddNewReachableNodesTracker(int client_index)
static const int kMaxLinkDeleteWalks
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
void RecomputeInterest(DBGraphVertex *vertex, int bit)
void JoinVertex(DBGraphVertex *vertex, const BitSet &bset)
DBState * GetState(DBTableBase *tbl_base, ListenerId listener) const
bool test(size_t pos) const
DBGraph::VisitorFilter::AllowedEdgeRetVal AllowedEdges(const DBGraphVertex *vertex) const
virtual std::string ToString() const
GraphPropagateFilter(IFMapExporter *exporter, const IFMapTypenameWhiteList *type_filter, const BitSet &bitset)
std::string ToString() const
const BitSet & interest() const
std::unique_ptr< IFMapTypenameWhiteList > traversal_white_list_
void ResetLinkDeleteClients(const BitSet &bset)
void Reset(const BitSet &rhs)
const IFMapTypenameWhiteList * type_filter_
boost::scoped_ptr< TaskTrigger > link_delete_walk_trigger_
virtual void Change(DBEntryBase *entry)
void UpdateNewReachableNodesTracker(int client_index, IFMapState *state)
bool EdgeFilter(const DBGraphVertex *source, const DBGraphVertex *target, const DBGraphEdge *edge) const
void StateInterestSet(IFMapState *state, const BitSet &interest_bits)
bool Contains(const BitSet &rhs) const
ReachableNodesTracker new_reachable_nodes_tracker_
void NewReachableNodesCleanupInterest(int client_index)
void AddNodesToWhitelist()
Cs_citer ClientConfigTrackerEnd(TrackerType tracker_type, int index) const
Cs_citer ClientConfigTrackerBegin(TrackerType tracker_type, int index) const
DBTable::ListenerId TableListenerId(const DBTable *table) const
#define IFMAP_DEBUG(obj,...)
IFMapNodeState * NodeStateLocate(IFMapNode *node)
IFMapClient * GetClient(int index)
void ProcessLinkAdd(IFMapNode *lnode, IFMapNode *rnode, const BitSet &bset)
bool FilterNeighbor(IFMapNode *lnode, IFMapLink *link)
std::map< std::string, DBGraph::VisitorFilter::AllowedEdgeSet > VertexEdgeMap
IFMapNodeState * NodeStateLookup(IFMapNode *node)
void Visit(DBGraphVertex *start, VertexVisitor vertex_visit_fn, EdgeVisitor edge_visit_fn)
void StateInterestOr(IFMapState *state, const BitSet &interest_bits)
ConfigSet::const_iterator Cs_citer
void LinkAdd(IFMapLink *link, IFMapNode *lnode, const BitSet &lhs, IFMapNode *rnode, const BitSet &rhs)
const IFMapNodeState * NodeStateLookup(const IFMapNode *node) const
IFMapExporter * exporter_
size_t walk_client_index_
std::pair< bool, AllowedEdgeSet > AllowedEdgeRetVal
void DeleteNewReachableNodesTracker(int client_index)
IFMapGraphWalker(DBGraph *graph, IFMapExporter *exporter)
void LinkDeleteWalkBatchEnd(const BitSet &done_set)
std::set< IFMapState * > ReachableNodesSet
IFMapNode * GetIFMapNode() const
void Set(const BitSet &rhs)
size_t find_first() const
static IFMapTable * FindTable(DB *db, const std::string &element_type)
void LinkRemove(const BitSet &bset)
void BuildComplement(const BitSet &lhs, const BitSet &rhs)
size_t find_next(size_t pos) const
virtual AllowedEdgeRetVal AllowedEdges(const DBGraphVertex *source) const
virtual bool VertexFilter(const DBGraphVertex *vertex) const
BitSet link_delete_clients_
bool VertexFilter(const DBGraphVertex *vertex) const
virtual std::string ToString() const =0
ReachableNodesSet::const_iterator Rns_citer
void OrLinkDeleteClients(const BitSet &bset)
IFMapExporter * exporter_