From 2d3491e12307038e08205ddc1106199670970408 Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Sat, 3 Jan 2015 01:47:11 +0200 Subject: [PATCH] Additional fix to bug #676 readwritesplit.c:route_session_write: added check that at least one backend is being used. --- .../routing/readwritesplit/readwritesplit.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 165814fec..e9000a71f 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -4059,8 +4059,6 @@ return_rc: * Suppress redundant OK packets sent by backends. * * The first OK packet is replied to the client. - * Return true if succeed, false is returned if router session was closed or - * if execute_sescmd_in_backend failed. * * @param router_cli_ses Client's router session pointer * @param querybuf GWBUF including the query to be routed @@ -4068,7 +4066,8 @@ return_rc: * @param packet_type Type of MySQL packet * @param qtype Query type from query_classifier * - * @return True if routing succeed to all backends being used, otherwise false. + * @return True if at least one backend is used and routing succeed to all + * backends being used, otherwise false. * */ static bool route_session_write( @@ -4111,7 +4110,6 @@ static bool route_session_write( /** Lock router session */ if (!rses_begin_locked_router_action(router_cli_ses)) { - succp = false; goto return_succp; } @@ -4147,13 +4145,16 @@ static bool route_session_write( /** Lock router session */ if (!rses_begin_locked_router_action(router_cli_ses)) { - succp = false; goto return_succp; } if (router_cli_ses->rses_nbackends <= 0) { - succp = false; + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, + "Router session doesn't have any backends in use. " + "Routing failed. <"))); + goto return_succp; } /** @@ -4233,9 +4234,9 @@ static bool route_session_write( return_succp: /** * Routing must succeed to all backends that are used. - * There must be at most max_nslaves+1 backends. + * There must be at leas one and at most max_nslaves+1 backends. */ - succp = (nsucc == nbackends && nbackends <= max_nslaves+1); + succp = (nbackends > 0 && nsucc == nbackends && nbackends <= max_nslaves+1); return succp; }