Port groups are collections of logical switch ports. Currently northd incremental processing fails when the mapping between a port group and the sets of switches that have ports in the port group changes. The I-P node dependencies are:
en_port_group -> en_lflow (lflow_port_group_handler() handler)
en_port_group -> en_ls_stateful (ls_stateful_port_group_handler() handler) -> en_lflow (lflow_ls_stateful_handler() handler)
The handlers are implemented as:
bool lflow_port_group_handler(struct engine_node *node, void *data OVS_UNUSED) { struct port_group_data *pg_data = engine_get_input_data("port_group", node); /* If the set of switches per port group didn't change then there's no * need to reprocess lflows. Otherwise, there might be a need to * add/delete port-group ACLs to/from switches. */ if (pg_data->ls_port_groups_sets_changed) { return false; } ... bool ls_stateful_port_group_handler(struct engine_node *node, void *data_) { struct port_group_data *pg_data = engine_get_input_data("port_group", node); if (pg_data->ls_port_groups_sets_changed) { return false; } ...
Failure to handle such updates triggers a full recomputation of the lflow I-P node which can be costly at scale.