Fix response format 'total' for v2 dataframes API

Based on [1], the response for v2 dataframes is {"total": 3}. However,
for Elasticsearch search response [2], the "hits.total" in the response
body is {"value": 3, "relation": "eq"}, which does not match the API
response schema.

[1]: https://docs.openstack.org/cloudkitty/latest/api-reference/v2/index.html?expanded=get-dataframes-from-the-storage-backend-detail#response-example
[2]: https://www.elastic.co/guide/en/elasticsearch/reference/8.3/search-your-data.html

Story: 2010219
Task: 45967

Change-Id: Ie2c8fd1b146138efc085d7c844afd27b7e10f3f3
Co-Authored-By: Rafael Weingärtner <rafael@apache.org>
Signed-off-by: Ning Yao <yaoning@unitedstack.com>
This commit is contained in:
Ning Yao 2020-02-29 01:43:08 +08:00 committed by Pierre Riteau
parent f9d2ff341b
commit 3ba19ed1c7
2 changed files with 15 additions and 1 deletions

View File

@ -308,7 +308,14 @@ class ElasticsearchClient(object):
scroll_id = resp['_scroll_id'] scroll_id = resp['_scroll_id']
self._scroll_ids.add(scroll_id) self._scroll_ids.add(scroll_id)
total = resp['hits']['total'] total_hits = resp['hits']['total']
if isinstance(total_hits, dict):
LOG.debug("Total hits [%s] is a dict. Therefore, we only extract "
"the 'value' attribute as the total option.", total_hits)
total_hits = total_hits.get("value")
total = total_hits
chunk = resp['hits']['hits'] chunk = resp['hits']['hits']
output = chunk[offset:offset+limit if paginate else len(chunk)] output = chunk[offset:offset+limit if paginate else len(chunk)]

View File

@ -0,0 +1,7 @@
---
fixes:
- |
Fix response format ``total`` for v2 dataframes API. The response for v2
dataframes is ``{"total": 3}``. However, for Elasticsearch search response,
the ``"hits.total"`` in the response body is ``{"value": 3, "relation":
"eq"}``, which does not match the API response schema.