← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1348737] [NEW] Once a Gateway is set L-3 agent attempts to update external Gateway on every router update

 

Public bug reported:

once an external gateway is set, due to a logic error, for every
subsequent router update the L-3 agent incorrectly concludes there is a
change in external gateway.  This causes the codepath to set external
gateway getting  invoked un-necessarily.

In process_router(...)

  ....
        ex_gw_port = self._get_ex_gw_port(ri)                               returns ri.router.get('gw_port')
  ...
          if ex_gw_port and ex_gw_port != ri.ex_gw_port:
            self._set_subnet_info(ex_gw_port)                                 <--------
 ...
         ri.ex_gw_port = ex_gw_port


The _set_subnet_info adds an element to the ex_gw_port thus making it different from the gw_port obtained out of router dict. Any subsequent  ex_gw_port != ri.ex_gw_port would result True, incorrectly.

One way to fix it would be to change

From:

         if ex_gw_port and ex_gw_port != ri.ex_gw_port:
To:

        if (ex_gw_port and (not ri.ex_gw_port
                            or ex_gw_port['id'] != ri.ex_gw_port['id'])):

** Affects: neutron
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1348737

Title:
  Once a Gateway is set L-3 agent attempts to update external Gateway on
  every router update

Status in OpenStack Neutron (virtual network service):
  New

Bug description:
  once an external gateway is set, due to a logic error, for every
  subsequent router update the L-3 agent incorrectly concludes there is
  a change in external gateway.  This causes the codepath to set
  external gateway getting  invoked un-necessarily.

  In process_router(...)

    ....
          ex_gw_port = self._get_ex_gw_port(ri)                               returns ri.router.get('gw_port')
    ...
            if ex_gw_port and ex_gw_port != ri.ex_gw_port:
              self._set_subnet_info(ex_gw_port)                                 <--------
   ...
           ri.ex_gw_port = ex_gw_port

  
  The _set_subnet_info adds an element to the ex_gw_port thus making it different from the gw_port obtained out of router dict. Any subsequent  ex_gw_port != ri.ex_gw_port would result True, incorrectly.

  One way to fix it would be to change

  From:

           if ex_gw_port and ex_gw_port != ri.ex_gw_port:
  To:

          if (ex_gw_port and (not ri.ex_gw_port
                              or ex_gw_port['id'] != ri.ex_gw_port['id'])):

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1348737/+subscriptions


Follow ups

References