diff --git a/include/maxscale/buffer.h b/include/maxscale/buffer.h index 02a208e19..00187b65b 100644 --- a/include/maxscale/buffer.h +++ b/include/maxscale/buffer.h @@ -403,10 +403,11 @@ extern void dprintAllBuffers(void *pdcb); #endif /** - * Debug function for dumping buffer contents to INFO log + * Debug function for dumping buffer contents to log * - * @param buffer Buffer to dump + * @param buffer Buffer to dump + * @param log_level Log priority where the message is written */ -void gwbuf_hexdump(GWBUF* buffer); +void gwbuf_hexdump(GWBUF* buffer, int log_level); MXS_END_DECLS diff --git a/server/core/buffer.cc b/server/core/buffer.cc index a938c1f67..fe52e369a 100644 --- a/server/core/buffer.cc +++ b/server/core/buffer.cc @@ -892,7 +892,7 @@ static std::string dump_one_buffer(GWBUF* buffer) return rval; } -void gwbuf_hexdump(GWBUF* buffer) +void gwbuf_hexdump(GWBUF* buffer, int log_level) { std::stringstream ss; @@ -910,5 +910,5 @@ void gwbuf_hexdump(GWBUF* buffer) n = 1024; } - MXS_INFO("%.*s", n, ss.str().c_str()); + MXS_LOG_MESSAGE(log_level, "%.*s", n, ss.str().c_str()); } diff --git a/server/modules/routing/readwritesplit/readwritesplit.cc b/server/modules/routing/readwritesplit/readwritesplit.cc index db3d86012..cb5de21bb 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.cc +++ b/server/modules/routing/readwritesplit/readwritesplit.cc @@ -473,6 +473,14 @@ static bool route_stored_query(RWSplitSession *rses) query_queue = gwbuf_make_contiguous(query_queue); ss_dassert(query_queue); + if (query_queue == NULL) + { + MXS_ALERT("Queued query unexpectedly empty. Bytes queued: %d Hexdump: ", + gwbuf_length(rses->query_queue)); + gwbuf_hexdump(rses->query_queue, LOG_ALERT); + return true; + } + /** Store the query queue locally for the duration of the routeQuery call. * This prevents recursive calls into this function. */ GWBUF *temp_storage = rses->query_queue;