yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #21683
[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