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();
 
  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 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)
 
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
 
#define IFMAP_DEBUG(obj,...)
 
std::map< std::string, DBGraph::VisitorFilter::AllowedEdgeSet > VertexEdgeMap
 
std::pair< bool, AllowedEdgeSet > AllowedEdgeRetVal
 
virtual AllowedEdgeRetVal AllowedEdges(const DBGraphVertex *source) const
 
virtual bool VertexFilter(const DBGraphVertex *vertex) const