Details
-
Bug
-
Resolution: Fixed
-
Critical
-
6.0.3
-
Untriaged
-
Unknown
Description
Sometimes the metadata for a query is turning out to be empty. I've attached a wireshark dump when the issue got reproduced - tcp-dump.pcap . Also the following client_context_id correspond to those queries for which metadata was empty -
2019-11-06T18:44:14.568+05:30 [INFO] "ID : doc_id_0 error : Unable to parse error JSON"
|
2019-11-06T18:44:14.575+05:30 [INFO] "ID : doc_id_5 error : Unable to parse error JSON"
|
2019-11-06T18:44:15.495+05:30 [INFO] "ID : doc_id_6 error : Unable to parse error JSON"
|
2019-11-06T18:44:22.592+05:30 [INFO] "ID : doc_id_14 error : Unable to parse error JSON"
|
2019-11-06T18:44:22.593+05:30 [INFO] "ID : doc_id_11 error : Unable to parse error JSON"
|
2019-11-06T18:44:23.508+05:30 [INFO] "ID : doc_id_8 error : Unable to parse error JSON"
|
2019-11-06T18:44:30.595+05:30 [INFO] "ID : doc_id_20 error : Unable to parse error JSON"
|
2019-11-06T18:44:30.599+05:30 [INFO] "ID : doc_id_25 error : Unable to parse error JSON"
|
2019-11-06T18:44:31.514+05:30 [INFO] "ID : doc_id_12 error : Unable to parse error JSON"
|
2019-11-06T18:44:38.615+05:30 [INFO] "ID : doc_id_33 error : Unable to parse error JSON"
|
2019-11-06T18:44:38.615+05:30 [INFO] "ID : doc_id_36 error : Unable to parse error JSON"
|
2019-11-06T18:44:39.530+05:30 [INFO] "ID : doc_id_26 error : Unable to parse error JSON"
|
2019-11-06T18:44:46.617+05:30 [INFO] "ID : doc_id_40 error : Unable to parse error JSON"
|
2019-11-06T18:44:46.617+05:30 [INFO] "ID : doc_id_38 error : Unable to parse error JSON"
|
2019-11-06T18:44:47.532+05:30 [INFO] "ID : doc_id_28 error : Unable to parse error JSON"
|
Eventing registers the callback to be invoked by the SDK to receive the data - https://github.com/couchbase/eventing/blob/master/features/query/src/iterator.cc#L85-L86 . Eventing logs the data received from SDK - https://github.com/couchbase/eventing/blob/master/features/query/src/iterator.cc#L106-L111
We see that the data is empty but the is_last flag is set. (resp->rflags & LCB_RESP_F_FINAL) != 0; evaluates to is_last flag being set -
2019-11-05T19:10:58.090+05:30 [INFO] Query::Iterator::RowCallback data : <ud></ud> is_last : 1 is_error : 1 is_client_auth_error : 0 resp rflags : 1 resp rc : 23
|
As per the documentation, if LCB_RESP_F_FINAL is set, it must contain metadata - https://docs.couchbase.com/sdk-api/couchbase-c-client/group__lcb-n1ql-api.html#structlcb___r_e_s_p_n1_q_l . But the data is turning out to be empty.
Since eventing tries to parse the empty row, it results in an exception as trying to parse an empty string causes an error in JavaScript.