yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #61933
[Bug 1668828] Re: ip filtering short circuits based on regex
Now that I've written a recreate test for this on the nova side, I think
patch set 3 on the Tempest change was actually correct and the nova api
is performing as intended. The nova api code performs a regex match on
the ip filter, it always has. Earlier today when I was looking at this,
I thought the nova-api code was short circuiting and only returning the
10.1.1.10 match in this example, but now that I re-read the commit
message on the tempest change, it's actually returning both 10.1.1.10
and 10.1.1.1 and it's tempest that's not handling that correctly.
** Changed in: nova
Status: Triaged => Invalid
** Also affects: tempest
Importance: Undecided
Status: New
** Changed in: tempest
Status: New => Confirmed
** Changed in: tempest
Status: Confirmed => In Progress
** Changed in: tempest
Assignee: (unassigned) => zhufl (zhu-fanglei)
--
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:
ip filtering short circuits based on regex
Status in OpenStack Compute (nova):
Invalid
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