← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1062097] Re: virtual interface create error

 

Going to assume the unique keys blueprint addressed this

** Changed in: nova
     Assignee: Boris Pavlovic (boris-42) => (unassigned)

** Changed in: nova
       Status: Triaged => Invalid

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1062097

Title:
  virtual interface create error

Status in OpenStack Compute (Nova):
  Invalid

Bug description:
  I saw instance creation failed when nova-network attempted create duplicated MAC address for vif.
  In nova code, there are exception code exists but It looks doesn't catch exception Integrity error.

  This is my test code.

  #!/usr/bin/python
  from nova import utils
  from nova import flags
  import nova.context
  import sys
  from nova import db

  def main(sys):
      context = nova.context.RequestContext('test@xxxxxxxx','prj-test',True,False)
      vif = {'address': '02:16:3e:63:c9:39',
                 'instance_id': 1,
                 'network_id': 1,
                 'uuid': str(utils.gen_uuid())}

      db.virtual_interface_create(context, vif)

  if __name__ == '__main__':
      utils.default_flagfile()
      FLAGS = flags.FLAGS(sys.argv)

  '02:16:3e:63:c9:39' is already exists db table. So I expected
  exception.VirtualInterfaceCreateException() because In
  db/sqlalchemy/api.py,

   @require_context
   def virtual_interface_create(context, values):
       """Create a new virtual interface record in teh database.

       :param values: = dict containing column values
       """
       try:
           vif_ref = models.VirtualInterface()
          vif_ref.update(values)
           vif_ref.save()
       except IntegrityError:
          raise exception.VirtualInterfaceCreateException()

       return vif_ref

  But next error is occured when I tested.
  Traceback (most recent call last):
    File "./test_create_vif.sh", line 23, in <module>
      main(sys)
    File "./test_create_vif.sh", line 17, in main
      db.virtual_interface_create(context, vif)
    File "/usr/local/lib/python2.7/dist-packages/nova-2012.1-py2.7.egg/nova/db/api.py", line 448, in virtual_interface_create
      return IMPL.virtual_interface_create(context, values)
    File "/usr/local/lib/python2.7/dist-packages/nova-2012.1-py2.7.egg/nova/db/sqlalchemy/api.py", line 120, in wrapper
      return f(*args, **kwargs)
    File "/usr/local/lib/python2.7/dist-packages/nova-2012.1-py2.7.egg/nova/db/sqlalchemy/api.py", line 1002, in virtual_interface_create
      vif_ref.save()
    File "/usr/local/lib/python2.7/dist-packages/nova-2012.1-py2.7.egg/nova/db/sqlalchemy/models.py", line 59, in save
      session.flush()
    File "/usr/local/lib/python2.7/dist-packages/nova-2012.1-py2.7.egg/nova/exception.py", line 98, in _wrap
      raise DBError(e)
  nova.exception.DBError: (IntegrityError) (1062, "Duplicate entry '02:16:3e:63:c9:39' for key 'address'") 'INSERT INTO virtual_interfaces (created_at, updated_at, deleted_at, deleted, address, network_id, instance_id, uuid) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)' (datetime.datetime(2012, 10, 5, 8, 7, 30, 868674), None, None, 0, '02:16:3e:63:c9:39', 1, 1, '9452abe3-3fea-4706-94e3-876753e8bcb1')

  For this reason, When VIF's mac address is duplicated, maybe instance
  creation is failed.

  When Instance is created, below code is executed.

  nova/network/manager.py

      def add_virtual_interface(self, context, instance_uuid, network_id):
          vif = {'address': utils.generate_mac_address(),
                 'instance_uuid': instance_uuid,
                 'network_id': network_id,
                 'uuid': str(utils.gen_uuid())}
          # try FLAG times to create a vif record with a unique mac_address
          for i in xrange(FLAGS.create_unique_mac_address_attempts):
              try:
                  return self.db.virtual_interface_create(context, vif)
              except exception.VirtualInterfaceCreateException:
                  vif['address'] = utils.generate_mac_address()
          else:
              self.db.virtual_interface_delete_by_instance(context,
                                                           instance_uuid)
              raise exception.VirtualInterfaceMacAddressException()

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