From 726610b67dbf8e913839c98fd8c64006d6140a51 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Thu, 30 Mar 2017 12:44:27 +0300 Subject: [PATCH] Use 64-bit integers for statistics in rwsplit Wraparound is not likely anymore. --- .../modules/routing/readwritesplit/readwritesplit.c | 13 +++++++------ .../modules/routing/readwritesplit/readwritesplit.h | 10 +++++----- .../modules/routing/readwritesplit/rwsplit_mysql.c | 2 +- .../routing/readwritesplit/rwsplit_route_stmt.c | 8 ++++---- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 4c4d5ebab..7b0e3da46 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -13,6 +13,7 @@ #include "readwritesplit.h" +#include #include #include #include @@ -620,17 +621,17 @@ static void diagnostics(MXS_ROUTER *instance, DCB *dcb) all_pct = ((double)router->stats.n_all / (double)router->stats.n_queries) * 100.0; } - dcb_printf(dcb, "\tNumber of router sessions: %d\n", + dcb_printf(dcb, "\tNumber of router sessions: %" PRIu64 "\n", router->stats.n_sessions); dcb_printf(dcb, "\tCurrent no. of router sessions: %d\n", router->service->stats.n_current); - dcb_printf(dcb, "\tNumber of queries forwarded: %d\n", + dcb_printf(dcb, "\tNumber of queries forwarded: %" PRIu64 "\n", router->stats.n_queries); - dcb_printf(dcb, "\tNumber of queries forwarded to master: %d (%.2f%%)\n", + dcb_printf(dcb, "\tNumber of queries forwarded to master: %" PRIu64 " (%.2f%%)\n", router->stats.n_master, master_pct); - dcb_printf(dcb, "\tNumber of queries forwarded to slave: %d (%.2f%%)\n", + dcb_printf(dcb, "\tNumber of queries forwarded to slave: %" PRIu64 " (%.2f%%)\n", router->stats.n_slave, slave_pct); - dcb_printf(dcb, "\tNumber of queries forwarded to all: %d (%.2f%%)\n", + dcb_printf(dcb, "\tNumber of queries forwarded to all: %" PRIu64 " (%.2f%%)\n", router->stats.n_all, all_pct); if ((weightby = serviceGetWeightingParameter(router->service)) != NULL) @@ -782,7 +783,7 @@ static void clientReply(MXS_ROUTER *instance, gwbuf_clone(bref->bref_pending_cmd))) == 1) { ROUTER_INSTANCE* inst = (ROUTER_INSTANCE *)instance; - atomic_add(&inst->stats.n_queries, 1); + atomic_add_uint64(&inst->stats.n_queries, 1); /** * Add one query response waiter to backend reference */ diff --git a/server/modules/routing/readwritesplit/readwritesplit.h b/server/modules/routing/readwritesplit/readwritesplit.h index d687d0e4b..671bd9f9c 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.h +++ b/server/modules/routing/readwritesplit/readwritesplit.h @@ -335,11 +335,11 @@ struct router_client_session */ typedef struct { - int n_sessions; /*< Number sessions created */ - int n_queries; /*< Number of queries forwarded */ - int n_master; /*< Number of stmts sent to master */ - int n_slave; /*< Number of stmts sent to slave */ - int n_all; /*< Number of stmts sent to all */ + uint64_t n_sessions; /*< Number sessions created */ + uint64_t n_queries; /*< Number of queries forwarded */ + 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 */ } ROUTER_STATS; /** diff --git a/server/modules/routing/readwritesplit/rwsplit_mysql.c b/server/modules/routing/readwritesplit/rwsplit_mysql.c index ab767e250..68ca4a3ef 100644 --- a/server/modules/routing/readwritesplit/rwsplit_mysql.c +++ b/server/modules/routing/readwritesplit/rwsplit_mysql.c @@ -282,7 +282,7 @@ handle_target_is_all(route_target_t route_target, if (result) { - atomic_add(&inst->stats.n_all, 1); + atomic_add_uint64(&inst->stats.n_all, 1); } return result; } diff --git a/server/modules/routing/readwritesplit/rwsplit_route_stmt.c b/server/modules/routing/readwritesplit/rwsplit_route_stmt.c index 27fe33470..5f020065f 100644 --- a/server/modules/routing/readwritesplit/rwsplit_route_stmt.c +++ b/server/modules/routing/readwritesplit/rwsplit_route_stmt.c @@ -1069,7 +1069,7 @@ bool handle_slave_is_target(ROUTER_INSTANCE *inst, ROUTER_CLIENT_SES *rses, */ if (rwsplit_get_dcb(target_dcb, rses, BE_SLAVE, NULL, rlag_max)) { - atomic_add(&inst->stats.n_slave, 1); + atomic_add_uint64(&inst->stats.n_slave, 1); return true; } else @@ -1157,14 +1157,14 @@ bool handle_master_is_target(ROUTER_INSTANCE *inst, ROUTER_CLIENT_SES *rses, if (succp && master_dcb == curr_master_dcb) { - atomic_add(&inst->stats.n_master, 1); + atomic_add_uint64(&inst->stats.n_master, 1); *target_dcb = master_dcb; } else { if (succp && master_dcb == curr_master_dcb) { - atomic_add(&inst->stats.n_master, 1); + atomic_add_uint64(&inst->stats.n_master, 1); *target_dcb = master_dcb; } else @@ -1253,7 +1253,7 @@ handle_got_target(ROUTER_INSTANCE *inst, ROUTER_CLIENT_SES *rses, backend_ref_t *bref; - atomic_add(&inst->stats.n_queries, 1); + atomic_add_uint64(&inst->stats.n_queries, 1); /** * Add one query response waiter to backend reference */