This is an automated email from the ASF dual-hosted git repository.

ztao1987 pushed a commit to branch ztao
in repository https://gitbox.apache.org/repos/asf/hawq.git


The following commit(s) were added to refs/heads/ztao by this push:
     new 3ae9cee  HAWQ-1828. rm should reject request when unavailable segment 
ratio exceeds rm_rejectrequest_nseg_limit
3ae9cee is described below

commit 3ae9ceea07beb91dff7a7cfdd847c7f6fdcd344c
Author: ztao1987 <[email protected]>
AuthorDate: Sat Jan 15 15:26:41 2022 +0800

    HAWQ-1828. rm should reject request when unavailable segment ratio exceeds 
rm_rejectrequest_nseg_limit
---
 src/backend/resourcemanager/requesthandler.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/backend/resourcemanager/requesthandler.c 
b/src/backend/resourcemanager/requesthandler.c
index 6edd98e..4b268b0 100644
--- a/src/backend/resourcemanager/requesthandler.c
+++ b/src/backend/resourcemanager/requesthandler.c
@@ -412,7 +412,16 @@ bool handleRMRequestAcquireResource(void **arg)
         
*--------------------------------------------------------------------------
         */
        Assert(PRESPOOL->SlavesHostCount > 0);
-       int rejectlimit = ceil(PRESPOOL->SlavesHostCount * 
rm_rejectrequest_nseg_limit);
+       /*
+        * original check: unavailcount > rejectlimit cannot handle some 
situations.
+        *  int rejectlimit = ceil(PRESPOOL->SlavesHostCount * 
rm_rejectrequest_nseg_limit);
+        *  int unavailcount = PRESPOOL->SlavesHostCount - 
PRESPOOL->AvailNodeCount;
+        * e.g. rm_rejectrequest_nseg_limit default 0.25
+        * a cluster with (1-3) nodes, 1 node down, rejectlimit=1, 
unavailcount=1
+        * unavailcount > rejectlimit is false, the request won't be rejected.
+        * but the unavailable ratio varies from 33%~100% > 25%.
+        */
+       int rejectlimit = floor(PRESPOOL->SlavesHostCount * 
rm_rejectrequest_nseg_limit);
        int unavailcount = PRESPOOL->SlavesHostCount - PRESPOOL->AvailNodeCount;
        if ( unavailcount > rejectlimit )
        {
@@ -881,7 +890,11 @@ bool handleRMRequestAcquireResourceQuota(void **arg)
        }
 
        Assert(PRESPOOL->SlavesHostCount > 0);
-       int rejectlimit = ceil(PRESPOOL->SlavesHostCount * 
rm_rejectrequest_nseg_limit);
+       /*
+        * change from ceil to floor, reference to explanation in
+        * handleRMRequestAcquireResource
+        */
+       int rejectlimit = floor(PRESPOOL->SlavesHostCount * 
rm_rejectrequest_nseg_limit);
        int unavailcount = PRESPOOL->SlavesHostCount - PRESPOOL->AvailNodeCount;
        if ( unavailcount > rejectlimit )
        {

Reply via email to