Public bug reported:

this problem can be reprodeced as bellow:
1. vm A in computeA, vm B in computeB, l2 pop enable;
2. vmB continue ping vmA 
3. live migrate vmA to computeB 
4. when live-migrate finish, vmB ping vmA failed

the reason is bellow, in l2pop driver, when vmA migrate to computeB, port 
status change form BUILD to ACTIVE,
it add the port to  self.migrated_ports when port status is ACTIVE, but 
'remove_fdb_entries' in port status is BUILD :
    def update_port_postcommit(self, context):
        ...
        ...
        elif (context.host != context.original_host
            and context.status == const.PORT_STATUS_ACTIVE
            and not self.migrated_ports.get(orig['id'])):
            # The port has been migrated. We have to store the original
            # binding to send appropriate fdb once the port will be set
            # on the destination host
            self.migrated_ports[orig['id']] = (
                (orig, context.original_host))
        elif context.status != context.original_status:
            if context.status == const.PORT_STATUS_ACTIVE:
                self._update_port_up(context)
            elif context.status == const.PORT_STATUS_DOWN:
                fdb_entries = self._update_port_down(
                    context, port, context.host)
                self.L2populationAgentNotify.remove_fdb_entries(
                    self.rpc_ctx, fdb_entries)
            elif context.status == const.PORT_STATUS_BUILD:
                orig = self.migrated_ports.pop(port['id'], None)
                if orig:
                    original_port = orig[0]
                    original_host = orig[1]
                    # this port has been migrated: remove its entries from fdb
                    fdb_entries = self._update_port_down(
                        context, original_port, original_host)
                    self.L2populationAgentNotify.remove_fdb_entries(
                        self.rpc_ctx, fdb_entries)

** Affects: neutron
     Importance: Undecided
     Assignee: shihanzhang (shihanzhang)
         Status: New

** Changed in: neutron
     Assignee: (unassigned) => shihanzhang (shihanzhang)

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

Title:
  fdb entries can't be removed when a VM is migrated

Status in OpenStack Neutron (virtual network service):
  New

Bug description:
  this problem can be reprodeced as bellow:
  1. vm A in computeA, vm B in computeB, l2 pop enable;
  2. vmB continue ping vmA 
  3. live migrate vmA to computeB 
  4. when live-migrate finish, vmB ping vmA failed

  the reason is bellow, in l2pop driver, when vmA migrate to computeB, port 
status change form BUILD to ACTIVE,
  it add the port to  self.migrated_ports when port status is ACTIVE, but 
'remove_fdb_entries' in port status is BUILD :
      def update_port_postcommit(self, context):
          ...
          ...
          elif (context.host != context.original_host
              and context.status == const.PORT_STATUS_ACTIVE
              and not self.migrated_ports.get(orig['id'])):
              # The port has been migrated. We have to store the original
              # binding to send appropriate fdb once the port will be set
              # on the destination host
              self.migrated_ports[orig['id']] = (
                  (orig, context.original_host))
          elif context.status != context.original_status:
              if context.status == const.PORT_STATUS_ACTIVE:
                  self._update_port_up(context)
              elif context.status == const.PORT_STATUS_DOWN:
                  fdb_entries = self._update_port_down(
                      context, port, context.host)
                  self.L2populationAgentNotify.remove_fdb_entries(
                      self.rpc_ctx, fdb_entries)
              elif context.status == const.PORT_STATUS_BUILD:
                  orig = self.migrated_ports.pop(port['id'], None)
                  if orig:
                      original_port = orig[0]
                      original_host = orig[1]
                      # this port has been migrated: remove its entries from fdb
                      fdb_entries = self._update_port_down(
                          context, original_port, original_host)
                      self.L2populationAgentNotify.remove_fdb_entries(
                          self.rpc_ctx, fdb_entries)

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

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to