Uploaded image for project: 'Fast Datapath Product'
  1. Fast Datapath Product
  2. FDP-757

ovn-northd incremental processing - handle logical router creation/deletion

XMLWordPrintable

    • Icon: Story Story
    • Resolution: Unresolved
    • Icon: Major Major
    • FDP-25.A
    • None
    • ovn24.09
    • 8
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Given a system administrator managing a network with ovn-northd,

      When a logical router is created or deleted,

      Then, the ovn-northd incremental processing should handle the logical router change without triggering a full lflow recompute.

      Show
      Given a system administrator managing a network with ovn-northd, When a logical router is created or deleted, Then, the ovn-northd incremental processing should handle the logical router change without triggering a full lflow recompute.
    • rhel-sst-network-fastdatapath
    • ssg_networking
    • FDP 24.H, FDP 25.A

      Currently northd incremental processing fails when logical routers are added/removed.  The I-P node dependency is:

      NB.Logical_Router -> en_northd -> en_lflow

      When a new router is created/deleted the "en_northd" input handler for logical routers is called:

      bool
      northd_handle_lr_changes(const struct northd_input *ni,
                               struct northd_data *nd)
      {
          const struct nbrec_logical_router *changed_lr;    NBREC_LOGICAL_ROUTER_TABLE_FOR_EACH_TRACKED (changed_lr,
                                                   ni->nbrec_logical_router_table) {
              if (nbrec_logical_router_is_new(changed_lr) ||
                  nbrec_logical_router_is_deleted(changed_lr)) {
                  goto fail;
              }
      ...
      fail:
          destroy_northd_data_tracked_changes(nd);
          return false;
      }

      which in turn causes "en_lflow" handler for en_northd data changes to fail:

      bool
      lflow_northd_handler(struct engine_node *node,
                           void *data)
      {
          struct northd_data *northd_data = engine_get_input_data("northd", node);
          if (!northd_has_tracked_data(&northd_data->trk_data)) {
              return false;
          }
      ... 

      This triggers a full recompute of the "en_lflow" node which can be costly at scale.

              nusiddiq@redhat.com Siddique Numan
              dceara@redhat.com Dumitru Ceara
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: