If I attempt to run many concurrent instances with source security groups I get the following traceback:
2012-06-28 01:34:49 ERROR nova.compute.manager [req-6961da6f-2576-43a6-8f3b-d66f6ade61e9 vish vish] [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] Instance failed to spawn
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] Traceback (most recent call last):
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/compute/manager.py", line 637, in _spawn
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] self._legacy_nw_info(network_info), block_device_info)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/exception.py", line 117, in wrapped
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] temp_level, payload)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] self.gen.next()
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/exception.py", line 92, in wrapped
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] return f(*args, **kw)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/virt/libvirt/connection.py", line 976, in spawn
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] self._create_domain_and_network(xml, instance, network_info)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/virt/libvirt/connection.py", line 1737, in _create_do
main_and_network
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] self.firewall_driver.prepare_instance_filter(instance, network_info)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/virt/firewall.py", line 150, in prepare_instance_filt
er
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] self.add_filters_for_instance(instance)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/virt/firewall.py", line 195, in add_filters_for_insta
nce
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] ipv4_rules, ipv6_rules = self.instance_rules(instance, network_info)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/virt/firewall.py", line 365, in instance_rules
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] instance)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/network/api.py", line 44, in wrapper
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] res = f(self, context, *args, **kwargs)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/network/api.py", line 265, in get_instance_nw_info
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] return self._get_instance_nw_info(context, instance)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/network/api.py", line 271, in _get_instance_nw_info
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] 'rxtx_factor': instance['instance_type']['rxtx_factor'],
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/opt/stack/nova/nova/db/sqlalchemy/models.py", line 74, in __getitem__
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] return getattr(self, key)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 168, in __get__
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] return self.impl.get(instance_state(instance),dict_)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/attributes.py", line 453, in get
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] value = self.callable_(state, passive)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/strategies.py", line 485, in _load_for_state
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] (mapperutil.state_str(state), key)
2012-06-28 01:34:49 TRACE nova.compute.manager [instance: 51720089-48bb-4db7-84c2-a5c2a7a12354] DetachedInstanceError: Parent instance <Instance at 0x47bc8d0> is not bound to a Session; lazy load operation of attribute 'instance_type' cannot proceed
Example script to reproduce issue (on 3 compute host multihost flatdhcp kvm deployment):
#!/bin/bash
for d in $(nova list | cut -f3 -d'|' | grep source); do nova delete ${d}; done
for d in $(nova list | cut -f3 -d'|' | grep rules); do nova delete ${d}; done
while $(nova list | grep source); do
sleep 5
done
while $(nova list | grep rules); do
sleep 5
done
nova secgroup-delete sources
nova secgroup-delete rules
nova secgroup-create source source
nova secgroup-add-rule source tcp 22 22 0.0.0.0/0
nova secgroup-add-rule source icmp -1 -1 0.0.0.0/0
nova secgroup-create rules rules
nova secgroup- add-group- rule rules --ip_proto tcp --from_port 22 --to_port 22 source
for d in {1..2}; do nova boot --flavor 2 --image <centos-image-id> --security_ groups= source source-${d}; done groups= rules rules-${d}; done
for d in {1..6}; do nova boot --flavor 2 --image <centos-image-id> --security_