The performance of filtering instance by IP is poor, due to the fact that
the IP address is part of a JSON-encoded filed and we need to unpack the
field and do a search on the field for each record in instances table, we
have to iterate one by one to find the instance that matches the request.
As discussed in Queens PTG[1], one possible solution is to get filtered
ports from Neutron and retrieve the instance uuid from the port.device_id
and then merge to the other filters.
As Nova provides regex matching manner filtering for IP filter, so this
depend on Neutron changes that add substring matching functionality to
the GET /ports API[2]
The performance test results of the POC are presented in[3].
[1]http://lists.openstack.org/pipermail/openstack-dev/2017-September/122258.html
[2]https://bugs.launchpad.net/neutron/+bug/1718605
[3]http://lists.openstack.org/pipermail/openstack-dev/2018-January/125990.html
Depends-On: I9549b2ba676e1bad0812682c3f3f3c97de15f5f6
Co-Authored-By: Matt Riedemann <mriedem.os@gmail.com>
Implements: blueprint improve-filter-instances-by-ip-performance
Change-Id: I06aabfdce4aaefde080c7e122552ce4f36da5804