0 will mean no balancing occurs; otherwise it represents the ratio
between the highest-loaded server and the average load, times 100 (i.e.
a value of 150 means a 1.5x ratio), assuming equal weights.
---
 include/types/lb_chash.h |  1 +
 src/cfgparse.c           | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/include/types/lb_chash.h b/include/types/lb_chash.h
index 5991ce9..b711636 100644
--- a/include/types/lb_chash.h
+++ b/include/types/lb_chash.h
@@ -30,6 +30,7 @@ struct lb_chash {
        struct eb_root act;     /* weighted chash entries of active servers */
        struct eb_root bck;     /* weighted chash entries of backup servers */
        struct eb32_node *last; /* last node found in case of round robin (or 
NULL) */
+       int balance_factor;     /* load balancing factor * 100, 0 if disabled */
 };
 
 #endif /* _TYPES_LB_CHASH_H */
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 7b58ef6..376c8b0 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -5932,6 +5932,19 @@ stats_error_parsing:
                        }
                }
        }
+       else if (strcmp(args[0], "hash-balance-factor") == 0) {
+               if (*(args[1]) == 0) {
+                       Alert("parsing [%s:%d] : '%s' expects an integer 
argument.\n", file, linenum, args[0]);
+                       err_code |= ERR_ALERT | ERR_FATAL;
+                       goto out;
+               }
+               curproxy->lbprm.chash.balance_factor = atol(args[1]);
+               if (curproxy->lbprm.chash.balance_factor != 0 && 
curproxy->lbprm.chash.balance_factor <= 100) {
+                       Alert("parsing [%s:%d] : '%s' must be 0 or greater than 
100.\n", file, linenum, args[0]);
+                       err_code |= ERR_ALERT | ERR_FATAL;
+                       goto out;
+               }
+       }
        else if (strcmp(args[0], "unique-id-format") == 0) {
                if (!*(args[1])) {
                        Alert("parsing [%s:%d] : %s expects an argument.\n", 
file, linenum, args[0]);
-- 
2.9.3



Reply via email to