From d94153c29f1ad6bd2c40e85db91f3fe6cdbffe16 Mon Sep 17 00:00:00 2001 From: vraatikka Date: Thu, 8 Aug 2013 00:10:33 +0300 Subject: [PATCH] If maxscale is compiled with DEBUG=Y readconnrouter module writes slave selection info to trace log. Example: SkySQL MaxScale Thu Aug 8 00:01:08 2013 ------------------------------------------ 2013 08/08 00:01:17 Selected server in port 3003 to as candidate. Connections : 0 2013 08/08 00:01:17 Examine server in port 3002 with 0 connections. Status is 5, inst->bitvalue is 6 2013 08/08 00:01:17 Examine server in port 3001 with 0 connections. Status is 5, inst->bitvalue is 6 2013 08/08 00:01:17 Examine server in port 3000 with 0 connections. Status is 3, inst->bitvalue is 6 2013 08/08 00:01:17 Final selection is server in port 3003. Connections : 1 2013 08/08 00:01:22 Selected server in port 3003 to as candidate. Connections : 1 2013 08/08 00:01:22 Examine server in port 3002 with 0 connections. Status is 5, inst->bitvalue is 6 2013 08/08 00:01:22 Examine server in port 3001 with 0 connections. Status is 5, inst->bitvalue is 6 2013 08/08 00:01:22 Examine server in port 3000 with 0 connections. Status is 3, inst->bitvalue is 6 2013 08/08 00:01:22 Final selection is server in port 3002. Connections : 1 --- server/modules/routing/readconnroute.c | 39 +++++++++++++++++++++----- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/server/modules/routing/readconnroute.c b/server/modules/routing/readconnroute.c index 155ec7504..1b6e0f6bb 100644 --- a/server/modules/routing/readconnroute.c +++ b/server/modules/routing/readconnroute.c @@ -263,6 +263,14 @@ int i; && (inst->servers[i]->server->status & inst->bitmask) == inst->bitvalue) { candidate = inst->servers[i]; +#if defined(SS_DEBUG) + skygw_log_write( + LOGFILE_TRACE, + "Selected server in port %d to as candidate. " + "Connections : %d\n", + candidate->server->port, + candidate->count); +#endif /* SS_DEBUG */ break; } } @@ -281,22 +289,32 @@ int i; */ for (i = 1; inst->servers[i]; i++) { +#if defined(SS_DEBUG) + skygw_log_write( + LOGFILE_TRACE, + "Examine server in port %d with %d connections. Status is %d, " + "inst->bitvalue is %d", + inst->servers[i]->server->port, + inst->servers[i]->count, + inst->servers[i]->server->status, + inst->bitmask); +#endif /* SS_DEBUG */ if (inst->servers[i] && SERVER_IS_RUNNING(inst->servers[i]->server) && (inst->servers[i]->server->status & inst->bitmask) == inst->bitvalue) - { + { if (inst->servers[i]->count < candidate->count) { - candidate = inst->servers[i]; + candidate = inst->servers[i]; } else if (inst->servers[i]->count == candidate->count && inst->servers[i]->server->stats.n_connections < candidate->server->stats.n_connections) { - candidate = inst->servers[i]; - } + candidate = inst->servers[i]; + } } } - + /* no candidate server here, clean and return NULL */ if (!candidate) { free(client); @@ -310,8 +328,15 @@ int i; atomic_add(&candidate->count, 1); client->backend = candidate; - - /* +#if defined(SS_DEBUG) + skygw_log_write( + LOGFILE_TRACE, + "Final selection is server in port %d. " + "Connections : %d\n", + candidate->server->port, + candidate->count); +#endif /* SS_DEBUG */ + /* * Open a backend connection, putting the DCB for this * connection in the client->dcb */