Comment 0 for bug 1674283

Revision history for this message
Ankit Jain (ankitja) wrote :

AnalyticsTestSanityWithResource.test_verify_flow_tables test case failed due to this issue.

OpServerUtils.get_query_result(Async query) not returning the result.

In the following code, OpServerUtils.get_query_result is not returning anything:

                try:
                    qid = resp['href'].rsplit('/', 1)[1]
                    result = OpServerUtils.get_query_result(
                        self._ip, str(self._port), qid, headers)
                    for item in result:
                        res.append(item)
                except Exception as e:
                    if 'value' in resp:
                        for item in resp['value']:
                            res.append(item)

The following was the query:

http://10.204.217.172:8081/analytics/query/9ed98ea8-0d55-11e7-9b75-00000accd9ac/chunk-final/0

and the query did not return anything as opposed to the script expectation.

Looks like an issue with the where clause when async query is done.
In this case, src vn and dst were specified as shown below.. When

Query:
(Pdb) query_dict
{'table': 'FlowRecordTable', 'start_time': 1490024059000000, 'where': [[{'value2': None, 'name': 'sourcevn', 'value': 'default-domain:ctest-AnalyticsTestSanityWithResource-27927104:ctest-vn1-74822829', 'op': 1}, {'value2': None, 'name': 'destvn', 'value': 'default-domain:ctest-AnalyticsTestSanityWithResource-27927104:ctest-vn2-71443793', 'op': 1}]], 'end_time': 1490004657344320, 'select_fields': ['sourcevn', 'sourceip', 'destvn', 'destip', 'setup_time', 'teardown_time', 'agg-packets']}

Logs:

> /root/contrail-test-ci/tcutils/collector/opserver_introspect_utils.py(297)post_query()

-> flows_url = OpServerUtils.opserver_query_url(self._ip, str(self._port))
 flows_url
'http://10.204.217.172:8081/analytics/query'

-> query_dict = OpServerUtils.get_query_dict(table, start_time, end_time,select_fields,where_clause,sort_fields, sort, limit, filter, dir)
(Pdb) query_dict
{'table': 'FlowRecordTable', 'start_time': 1490024059000000, 'where': [[{'value2': None, 'name': 'sourcevn', 'value': 'default-domain:ctest-AnalyticsTestSanityWithResource-27927104:ctest-vn1-74822829', 'op': 1}, {'value2': None, 'name': 'destvn', 'value': 'default-domain:ctest-AnalyticsTestSanityWithResource-27927104:ctest-vn2-71443793', 'op': 1}]], 'end_time': 1490004657344320, 'select_fields': ['sourcevn', 'sourceip', 'destvn', 'destip', 'setup_time', 'teardown_time', 'agg-packets']}

-> resp = OpServerUtils.post_url_http(flows_url, json.dumps(query_dict), headers)

 resp
u'{"href": "/analytics/query/9ed98ea8-0d55-11e7-9b75-00000accd9ac"}'

-> qid = resp['href'].rsplit('/', 1)[1]

> /root/contrail-test-ci/tcutils/collector/opserver_introspect_utils.py(315)post_query()
-> result = OpServerUtils.get_query_result(self._ip, str(self._port), qid, headers)

-> print resp.__dict__

{'cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, '_content': False, 'headers': CaseInsensitiveDict({'date': 'Mon, 20 Mar 2017 10:12:16 GMT', 'transfer-encoding': 'chunked', 'content-type': 'application/json'}), 'url': u'http://10.204.217.172:8081/analytics/query/9ed98ea8-0d55-11e7-9b75-00000accd9ac/chunk-final/0', 'status_code': 200, '_content_consumed': False, 'encoding': None, 'request': <PreparedRequest [GET]>, 'connection': <requests.adapters.HTTPAdapter object at 0x7ff9946d1d50>, 'elapsed': datetime.timedelta(0, 0, 6647), 'raw': <urllib3.response.HTTPResponse object at 0x7ff994702310>, 'reason': 'OK', 'history': []}

> /root/contrail-test-ci/tcutils/collector/opserver_util.py(140)get_query_result()
-> for chunk in status['chunks']:
status['chunks']
[{u'count': 0, u'start_time': u'1490024059000000', u'lines': 0, u'href': u'/analytics/query/9ed98ea8-0d55-11e7-9b75-00000accd9ac/chunk-final/0', u'end_time': u'1490004657344320', u'ttl': 271, u'progress': 100}]

http://10.204.217.172:8081/analytics/query/9ed98ea8-0d55-11e7-9b75-00000accd9ac/chunk-final/0
{
value: [ ]
}

root/contrail-test-ci/serial_scripts/analytics/test_analytics_resource.py(874)test_verify_flow_tables()
-> self.logger.info("Query output: %s" % (self.res2))
(Pdb) n
2017-03-20 10:31:00,726 - INFO - Query output: []

Discussed with Nikhil.