a better distribution or less predictable results especially when
used on strings.
+ none don't hash the key, the key will be used as a hash, this can be
+ useful to manually hash the key using a converter for that purpose
+ and let haproxy use the result directly.
+
<modifier> indicates an optional method applied after hashing the key :
avalanche This directive indicates that the result from the hash
#define BE_LB_HASH_MOD 0x200000 /* get/clear hash modifier */
/* BE_LB_HFCN_* is the hash function, to be used with BE_LB_HASH_FUNC */
-#define BE_LB_HFCN_SDBM 0x000000 /* sdbm hash */
-#define BE_LB_HFCN_DJB2 0x400000 /* djb2 hash */
-#define BE_LB_HFCN_WT6 0x800000 /* wt6 hash */
-#define BE_LB_HFCN_CRC32 0xC00000 /* crc32 hash */
-#define BE_LB_HASH_FUNC 0xC00000 /* get/clear hash function */
+#define BE_LB_HFCN_SDBM 0x000000 /* sdbm hash */
+#define BE_LB_HFCN_DJB2 0x400000 /* djb2 hash */
+#define BE_LB_HFCN_WT6 0x800000 /* wt6 hash */
+#define BE_LB_HFCN_CRC32 0xC00000 /* crc32 hash */
+#define BE_LB_HFCN_NONE 0x1000000 /* none - no hash */
+#define BE_LB_HASH_FUNC 0x1C00000 /* get/clear hash function */
/* various constants */
case BE_LB_HFCN_CRC32:
hash = hash_crc32(key, len);
break;
+ case BE_LB_HFCN_NONE:
+ /* use key as a hash */
+ {
+ const char *_key = key;
+
+ hash = read_int64(&_key, _key + len);
+ }
+ break;
case BE_LB_HFCN_SDBM:
/* this is the default hash function */
default:
else if (strcmp(args[2], "crc32") == 0) {
curproxy->lbprm.algo |= BE_LB_HFCN_CRC32;
}
+ else if (strcmp(args[2], "none") == 0) {
+ curproxy->lbprm.algo |= BE_LB_HFCN_NONE;
+ }
else {
ha_alert("parsing [%s:%d] : '%s' only supports 'sdbm', 'djb2', 'crc32', or 'wt6' hash functions.\n", file, linenum, args[0]);
err_code |= ERR_ALERT | ERR_FATAL;