On 03/17/2014 04:28 PM, Chris Friesen wrote:

The second one filters out all of the objects and returns nothing.

(Pdb) query_prefix.filter(models.Instance.vm_state != 
vm_states.SOFT_DELETED).all()
[]

I think I've found another problem.  (The rabbit hole continues...)

It appears that by design in SQL and sqlalchemy the comparison operators do not test NULL values, so the above filter will not return objects where vm_state is NULL. This seems to me to be extra confusing in sqlalchemy since you can in fact use the comparison operators to explicitly test against None.

The problem is that in the Instance object the "vm_state" field is declared as nullable. In many cases "vm_state" will in fact have a value, but in get_test_instance() in test/utils.py the value of "vm_state" is not specified.

Given the above, it seems that either we need to configure "models.Instance.vm_state" as not nullable (and deal with the fallout), or else we need to update instance_get_all_by_filters() to explicitly check for None--something like this perhaps:

if not filters.pop('soft_deleted', False):
    query_prefix = query_prefix.\
        filter(or_(models.Instance.vm_state != vm_states.SOFT_DELETED,
                   models.Instance.vm_state == None))


I could do the latter--should I open another bug and make the fix for bug 1292963 dependent on the other fix going in first?

I wonder if we have other similar tests that might behave unexpectedly?

Chris

_______________________________________________
OpenStack-dev mailing list
[email protected]
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to