Comment 11 for bug 2025480

Revision history for this message
Bence Romsics (bence-romsics) wrote :

Btw for the ease of reproduction:

I usually changed some periodic job intervals to make the bug more frequent:

/etc/nova/nova-cpu.conf
[DEFAULT]
update_resources_interval = 60

And here's my final bug reproducer script (beware, it deletes all servers):

#! /bin/bash

flavor="cirros256-pinned"
image="cirros-0.5.2-x86_64-disk"
net="private"

source ~/src/os/openstack/devstack/openrc admin admin >/dev/null

# Delete twice because vms in the error state may need that.
openstack server list -f value -c ID | xargs -r openstack server delete --wait
openstack server list -f value -c ID | xargs -r openstack server delete --wait

since="$( date '+%Y-%m-%d %H:%M:%S' )"

openstack server create --flavor "$flavor" --image "$image" --nic net-id="$net" vm0 --wait >/dev/null
openstack server shelve vm0
sleep 10
openstack server create --flavor "$flavor" --image "$image" --nic net-id="$net" vm1 --wait >/dev/null
openstack server shelve vm1
sleep 10

openstack server unshelve vm0
sleep 15
openstack server unshelve vm1

while [ $( openstack server list -f value -c Name -c Status | egrep -w 'vm[01]' | egrep -cw ACTIVE ) != 2 ]
do
    sleep 1
done

until="$( date '+%Y-%m-%d %H:%M:%S' )"

# This way we only catch resource tracking errors during unshelve of vm0.
# The same resource tracking error may happen during unshelve of vm1,
# but we would need to start one more vm to catch that...
cpuset0="$( sudo virsh dumpxml $( openstack server show vm0 -f value -c OS-EXT-SRV-ATTR:instance_name ) | xmlstarlet sel -t -v '//vcpupin/@cpuset' )"
cpuset1="$( sudo virsh dumpxml $( openstack server show vm1 -f value -c OS-EXT-SRV-ATTR:instance_name ) | xmlstarlet sel -t -v '//vcpupin/@cpuset' )"
if [ "$cpuset0" = "$cpuset1" ]
then
    exit_msg=fail
    exit_code=1
else
    exit_msg=pass
    exit_code=0
fi

#echo -S "'$since'" -U "'$until'"

#echo '>>>'
#sudo journalctl -u devstack@n-cpu -S "$since" -U "$until" | egrep 'ERROR|AAA'
#echo '<<<'

echo >&2 "$exit_msg"
exit $exit_code