From 7f0f0374806f7eab59bfa02da6ac0bcd0eeb47e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Wed, 15 Nov 2017 12:56:53 +0100 Subject: [PATCH] Stop spinning on poll() #1232 Stop spinning on poll() when throttling bandwidth from backend because client is too slow --- lib/MySQL_Thread.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index 8aa1b51a0..15e1cd6b8 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -2519,6 +2519,19 @@ __mysql_thread_exit_add_mirror: } } } + if (myds && myds->myds_type==MYDS_BACKEND) { + if (myds->sess && myds->sess->client_myds) { + unsigned int buffered_data=0; + buffered_data = myds->sess->client_myds->PSarrayOUT->len * RESULTSET_BUFLEN; + buffered_data += myds->sess->client_myds->resultset->len * RESULTSET_BUFLEN; + // we pause receiving from backend at mysql_thread___threshold_resultset_size * 8 + // but assuming that client isn't completely blocked, we will stop checking for data + // only at mysql_thread___threshold_resultset_size * 4 + if (buffered_data > (unsigned int)mysql_thread___threshold_resultset_size*4) { + mypolls.fds[n].events = 0; + } + } + } } proxy_debug(PROXY_DEBUG_NET,1,"Poll for DataStream=%p will be called with FD=%d and events=%d\n", mypolls.myds[n], mypolls.fds[n].fd, mypolls.fds[n].events);