3.6 KiB
Items filtering in Mistral
https://blueprints.launchpad.net/mistral/+spec/mistral-items-filtering
Problem description
Currently, we don't have any support for items filtering on the server side which affects performance badly. In future, we may have thousands of actions. So, we should be able to filter items before transferring them over the network. Also, it is very difficult to find specific data in the list of returned items. For example, we have a lot of 'standard' OpenStack actions. So it is not very convenient to look through all of them to find actions for nova.
Use Cases
As a user, I want to have an ability to filter data.
Proposed change
To solve this problem, I would like to implement customized filter for database. This filter will support "in", "nin", ">", ">=", "<" and "<=" operations. Also, new parameters will be allowed in REST API. These parameters are the name of columns by which users are allowed to filter data.
Alternatives
None
Data model impact
None
REST API impact
- Gets only those actions which have '<some_value>' as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=<some_value>
- Gets only those actions which have '<some_value_1>' or '<some_value_2>' as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=in:<some_value_1>,<some_value_2>
- Gets only those actions which have not '<some_value_1>' or '<some_value_2>' as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=nin:<some_value_1>,<some_value_2>
- Gets only those actions which have not <some_value> as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=neq:<some_value>
- Gets only those actions which have greater value than <some_value> as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=gt:<some_value>
- Gets only those actions which have greater than or equal to <some_value> as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=gte:<some_value>
- Gets only those actions which have less value than <some_value> as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=lt:<some_value>
- Gets only those actions which have less than or equal to <some_value> as <column_name> value.
GET http://127.0.0.1:8989/v2/actions?<column_name>=lte:<some_value>
Same changes are proposed for workflows, workbooks, cron triggers, executions, tasks etc.
End user impact
User can add new option in CLI. For instance :
mistral action-list --filter <column-name>=<op>:<some_value>
Here '<op>' can be "eq", "neq", "gt", "gte", "lt", "lte", "in" or "nin". Multiple values can be provided by using ";" separator.
Performance Impact
Only requested/filtered data will be fetched from database and transmitted over network. So, it will improve the response time for the request.
Deployer impact
None
Implementation
Assignee(s)
hardik <hardik.parekh@nectechnologies.in>
Work Items
- Add new parameter to REST api.
- Add new option for CLI.
Dependencies
None
Testing
Tests should cover all the scenarios memtioned in use cases section.
References
[1]: https://review.openstack.org/269971 [2]: http://specs.openstack.org/openstack/api-wg/guidelines/pagination_filter_sort.html