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

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

XMLWordPrintable

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

      None

      Show
      None
    • False
    • Hide

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

      When a logical switch is created or deleted,

      Then the ovn-northd incremental processing should handle the change without triggering a full lflow recompute. Only the affected logical flows should be updated and the operation should complete successfully without errors.

      Show
      Given a system administrator managing a network with ovn-northd, When a logical switch is created or deleted, Then the ovn-northd incremental processing should handle the change without triggering a full lflow recompute. Only the affected logical flows should be updated and the operation should complete successfully without errors.
    • rhel-sst-network-fastdatapath
    • ssg_networking
    • FDP 24.H, FDP 25.A, FDP 25.B
    • 3

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

      NB.Logical_Switch -> en_northd -> en_lflow

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

      bool
      northd_handle_ls_changes(struct ovsdb_idl_txn *ovnsb_idl_txn,
                               const struct northd_input *ni,
                               struct northd_data *nd)
      {
          const struct nbrec_logical_switch *changed_ls;
          struct northd_tracked_data *trk_data = &nd->trk_data;    NBREC_LOGICAL_SWITCH_TABLE_FOR_EACH_TRACKED (changed_ls,
                                                   ni->nbrec_logical_switch_table) {
              if (nbrec_logical_switch_is_new(changed_ls) ||
                  nbrec_logical_switch_is_deleted(changed_ls)) {
                  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.

              ovnteam@redhat.com OVN Team
              dceara@redhat.com Dumitru Ceara
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: