From ff8a7c8b93b25168549b10386a842436c454f884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Wed, 2 May 2018 09:09:32 +0300 Subject: [PATCH] MXS-1507: Add transaction replay statistics Added a simple counter for the number of replayed transactions. --- .../routing/readwritesplit/readwritesplit.cc | 15 +++++++++------ .../routing/readwritesplit/readwritesplit.hh | 4 +++- .../routing/readwritesplit/rwsplitsession.cc | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/server/modules/routing/readwritesplit/readwritesplit.cc b/server/modules/routing/readwritesplit/readwritesplit.cc index c1a3f9e93..39dd216ce 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.cc +++ b/server/modules/routing/readwritesplit/readwritesplit.cc @@ -358,18 +358,20 @@ void RWSplit::diagnostics(DCB *dcb) all_pct = ((double)stats().n_all / (double)stats().n_queries) * 100.0; } - dcb_printf(dcb, "\tNumber of router sessions: %" PRIu64 "\n", + dcb_printf(dcb, "\tNumber of router sessions: %" PRIu64 "\n", stats().n_sessions); - dcb_printf(dcb, "\tCurrent no. of router sessions: %d\n", + dcb_printf(dcb, "\tCurrent no. of router sessions: %d\n", service()->stats.n_current); - dcb_printf(dcb, "\tNumber of queries forwarded: %" PRIu64 "\n", + dcb_printf(dcb, "\tNumber of queries forwarded: %" PRIu64 "\n", stats().n_queries); - dcb_printf(dcb, "\tNumber of queries forwarded to master: %" PRIu64 " (%.2f%%)\n", + dcb_printf(dcb, "\tNumber of queries forwarded to master: %" PRIu64 " (%.2f%%)\n", stats().n_master, master_pct); - dcb_printf(dcb, "\tNumber of queries forwarded to slave: %" PRIu64 " (%.2f%%)\n", + dcb_printf(dcb, "\tNumber of queries forwarded to slave: %" PRIu64 " (%.2f%%)\n", stats().n_slave, slave_pct); - dcb_printf(dcb, "\tNumber of queries forwarded to all: %" PRIu64 " (%.2f%%)\n", + dcb_printf(dcb, "\tNumber of queries forwarded to all: %" PRIu64 " (%.2f%%)\n", stats().n_all, all_pct); + dcb_printf(dcb, "\tNumber of replayed transactions: %" PRIu64 "\n", + stats().n_trx_replay); if (*weightby) { @@ -399,6 +401,7 @@ json_t* RWSplit::diagnostics_json() const json_object_set_new(rval, "route_master", json_integer(stats().n_master)); json_object_set_new(rval, "route_slave", json_integer(stats().n_slave)); json_object_set_new(rval, "route_all", json_integer(stats().n_all)); + json_object_set_new(rval, "replayed_transactions", json_integer(stats().n_trx_replay)); const char *weightby = serviceGetWeightingParameter(service()); diff --git a/server/modules/routing/readwritesplit/readwritesplit.hh b/server/modules/routing/readwritesplit/readwritesplit.hh index 8a61b6c7e..27d4f4649 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.hh +++ b/server/modules/routing/readwritesplit/readwritesplit.hh @@ -211,7 +211,8 @@ public: n_queries(0), n_master(0), n_slave(0), - n_all(0) + n_all(0), + n_trx_replay(0) { } @@ -220,6 +221,7 @@ public: uint64_t n_master; /**< Number of stmts sent to master */ uint64_t n_slave; /**< Number of stmts sent to slave */ uint64_t n_all; /**< Number of stmts sent to all */ + uint64_t n_trx_replay; /**< Number of replayed transactions */ }; class RWSplitSession; diff --git a/server/modules/routing/readwritesplit/rwsplitsession.cc b/server/modules/routing/readwritesplit/rwsplitsession.cc index 7bbf1dc88..bf2021003 100644 --- a/server/modules/routing/readwritesplit/rwsplitsession.cc +++ b/server/modules/routing/readwritesplit/rwsplitsession.cc @@ -380,6 +380,7 @@ void RWSplitSession::handle_trx_replay() { // No more statements to execute m_is_replay_active = false; + atomic_add_uint64(&m_router->stats().n_trx_replay, 1); // Check that the checksums match. SHA1Checksum chksum = m_trx.checksum();