From a3fd5a0218cb82b900d46ee2aa29d2f41b7cb4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 28 Jan 2020 16:09:31 +0200 Subject: [PATCH] MXS-2854: Repeat read on schema event The read needs to be repeated if MaxScale sends a schema event. --- connectors/cdc-connector/cdc_connector.cpp | 41 +++++++++++++++------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/connectors/cdc-connector/cdc_connector.cpp b/connectors/cdc-connector/cdc_connector.cpp index 05dd04da0..11b530a3c 100644 --- a/connectors/cdc-connector/cdc_connector.cpp +++ b/connectors/cdc-connector/cdc_connector.cpp @@ -170,7 +170,7 @@ void Closer::close(int fd) namespace CDC { -const char* const TIMEOUT = "Request timed out"; +const char* const TIMEOUT = "Request timed out"; /** * Public functions @@ -449,21 +449,36 @@ SRow Connection::read() SRow rval; std::string row; - if (read_row(row)) + while (true) { - json_error_t err; - json_t* js = json_loads(row.c_str(), JSON_ALLOW_NUL, &err); + if (read_row(row)) + { + json_error_t err; + json_t* js = json_loads(row.c_str(), JSON_ALLOW_NUL, &err); - if (js) - { - rval = process_row(js); - json_decref(js); - } - else - { - m_error = "Failed to parse JSON: "; - m_error += err.text; + if (js) + { + if (is_schema(js)) + { + m_schema = row; + process_schema(js); + json_decref(js); + continue; + } + else + { + rval = process_row(js); + json_decref(js); + } + } + else + { + m_error = "Failed to parse JSON: "; + m_error += err.text; + } } + + break; } return rval;