← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1668828] Re: test_list_servers_filtered_by_ip fails ccasionally

 

The bug is actually in nova here:

https://github.com/openstack/nova/blob/3a2a181796664fea7f6069d49f9cd367b8cff825/nova/compute/api.py#L2508

As demonstrated in this example:

>>> import re
>>> ipv4_f = re.compile(str('10.1.1.1'))
>>> address1 = '10.1.1.1'
>>> address2 = '10.1.1.10'
>>> addresses = (address1, address2)
>>> for addr in addresses:
...     if ipv4_f.match(addr):
...         print 'match found on address: %s' % addr
...
match found on address: 10.1.1.1
match found on address: 10.1.1.10
>>>

Nova should probably just attempt to do an exact match and if none
found, then do the regex match but rather than return the first match,
return all matches.

** Also affects: nova
   Importance: Undecided
       Status: New

-- 
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/1668828

Title:
  test_list_servers_filtered_by_ip fails ccasionally

Status in OpenStack Compute (nova):
  Triaged
Status in tempest:
  In Progress

Bug description:
  
  1. Problem:
      test_list_servers_filtered_by_ip sometimes fails with:
      Traceback (most recent call last):
        File "/home/zfl/tempest_m_git_local/tempest/api/compute/servers/test_list_server_filters.py", line 284, in test_list_servers_filtered_by_ip
          self.assertNotIn(self.s2_name, map(lambda x: x['name'], servers))
        File "/usr/lib/python2.7/site-packages/testtools/testcase.py", line 392, in assertNotIn
          self.assertThat(haystack, matcher, message)
        File "/usr/lib/python2.7/site-packages/testtools/testcase.py", line 433, in assertThat
          raise mismatch_error
      MismatchError: [u'tempest-ListServerFiltersTestJSON-instance-328761420'] matches Contains('tempest-ListServerFiltersTestJSON-instance-328761420')

  2. Reason:
      We can see from nova code that filter by ip is always "regexp match", 
      so if server2' ip happened to be part of server1's ip, then filter by
      server1's ip will also return server2.
      https://github.com/openstack/nova/blob/63805735c25a54ad1b9b97e05080c1a6153d8e22/nova/compute/api.py
      get_all

  3. Solution:
      There are 3 possibles ways,
      1) create servers with specified ips, such as 1.1.1.1, 1.1.1.2, 1.1.1.3
      2) find the longest ip in servers, and filter it by that ip, then only 
         one server will be returned
      3) filter using server1's ip, and using assertIn or assertNotIn according
         to whether other server ip is part of server1's ip

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