Persistence commands
HTTP:persist(save_tbl) — Saves the entry to the stick table.
HTTP:persist(read_tbl) — Reads the stick table content according to the hash_value.
HTTP:persist(dump_tbl) — Dumps the stick table content.
HTTP:persist(get_valid_server) — Gets the list of usable real servers and statuses.
HTTP:persist(cal_server_from_hash) — Calculates the real server from the hash.
HTTP:lookup_tbl(t) — Use this hash value to lookup the stick table, and then persist the session.
HTTP:persist(get_current_assigned_server) — Gets the real server currently assigned to this session.
PROXY:init_stick_tbl_timeout(int) — Sets the timeout of the stick table.
HTTP:persist(save_tbl)
Saves the entry to the stick table.
Syntax
HTTP:persist(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation, hash value, and server_name. |
Example
when PERSISTENCE{ cip = HTTP:client_addr() hash_str_cip = sha512_hex(cip) debug("-----save_tbl-----\n") t={} t["operation"] = "save_tbl" t["hash_value"] = hash_str_cip t["srv_name"] = "pool1-2" ret = HTTP:persist(t) if ret then debug("hash save table success\n"); else debug("save table failed\n"); end t={}; t["operation"] = "save_tbl"; t["hash_value"] = "246810"; t["srv_name"] = "pool1-3"; ret = HTTP: persist(t); if ret then debug("===server add success\n"); else debug("===server add fail\n"); end } Output: true: success, false: failed
Note:
Due to limitations in the stick table, it only supports 16 characters in the hash value. Otherwise, we will hash it to obtain 16 bytes as index.
FortiADC version: V5.4, V7.2 (extended function to HTTP_REQUEST events)
Used in events: PERSISTENCE / POST_PERSIST / HTTP_REQUEST
HTTP:persist(read_tbl)
Reads the stick table content according to the hash_value.
Syntax
HTTP:persist(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation and hash value. |
Example
when PERSISTENCE{ t={}; t["operation"] = "save_tbl"; t["hash_value"] = "246810"; t["srv_name"] = "pool1-3"; ret = HTTP: persist(t); if ret then debug("===server add success\n"); else debug("===server add fail\n"); end t={} t["operation"] = "read_tbl" t["hash_value"] = "246810" ret_tbl = HTTP:persist(t) if ret_tbl then debug("246810-server: %s\n",ret_tbl) else debug("246810-server read fail\n") end } Output: Return server name of the entry, or false if no entry found
FortiADC version: V5.4, V7.2 (extended function to HTTP_REQUEST events)
Used in events: PERSISTENCE / HTTP_REQUEST
HTTP:persist(dump_tbl)
Dumps the stick table content.
Syntax
HTTP:persist(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation. |
Example
when PERSISTENCE{ t={}; t["operation"] = "save_tbl"; t["hash_value"] = "246810"; t["srv_name"] = "pool1-3"; ret = HTTP: persist(t); if ret then debug("===server add success\n"); else debug("===server add fail\n"); end t={} t["operation"] = "dump_tbl" t[“index”] = 1 t[“count”] = 15 ret_tbl = HTTP:persist(t) if ret_tbl then for hash, srv in pairs(ret_tbl) do debug("tbl hash %s srv %s\n",hash,srv) end end } “index”: “count”: Output: Return A table include hash and server name
FortiADC version: V5.4, V7.2 (extended function to HTTP_REQUEST events)
Used in events: PERSISTENCE / HTTP_REQUEST
HTTP:persist(get_valid_server)
Gets the list of usable real servers and statuses.
Syntax
HTTP:persist(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation. |
Example
when PERSISTENCE{ debug("-----get valid server-----\n") t={} t["operation"] = "get_valid_server" ret = HTTP:persist(t) if ret then for srv,stat in pairs(ret) do debug("server %s, status %s\n",srv,stat) end end } Output: Return the table of usable real server and server state(enable, backup)
FortiADC version: V5.4, V7.2 (extended function to HTTP_REQUEST events)
Used in events: PERSISTENCE / HTTP_REQUEST
HTTP:persist(cal_server_from_hash)
Calculates the real server from the hash.
Syntax
HTTP:persist(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation and hash value. |
Example
when PERSISTENCE{ debug("-----cal_server_from_hash-----\n") t={} t["operation"] = "cal_server_from_hash" t["hash_value"] = "246810" ret = HTTP:persist(t) if ret then debug("hash 246810, server %s\n",ret) end } Output: Return the real server name according to the hash value using our algorithm or False if failed
FortiADC version: V5.4, V7.2 (extended function to HTTP_REQUEST events)
Used in events: PERSISTENCE / HTTP_REQUEST
HTTP:lookup_tbl(t)
Use this hash value to lookup the stick table, and then persist the session.
Syntax
HTTP:lookup_tbl(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation and hash value. |
Example
when PERSISTENCE{ cip = HTTP:client_addr() hash_str_cip = sha512_hex(cip) t={} t["operation"] = "save_tbl" t["hash_value"] = hash_str_cip t["srv_name"] = "pool1-3" ret = HTTP:persist(t) if ret then debug("hash save table success\n"); else debug("save table failed\n"); end t={} t["hash_value"]=hash_str_cip ret = HTTP:lookup_tbl(t) if ret then debug("hash LOOKUP success\n") else debug("hash lookup failed\n") end } Output: Return True: lookup success, False, lookup failed and use the org. LB method
FortiADC version: V5.4
Used in events: PERSISTENCE
HTTP:persist(get_current_assigned_server)
Gets the real server currently assigned to this session.
Syntax
HTTP:persist(t);
Arguments
Name | Description |
---|---|
t |
A table specifies the operation. |
Example
when PERSISTENCE{ cip = HTTP:client_addr() hash_str_cip = sha512_hex(cip) t={} t["operation"] = "save_tbl" t["hash_value"] = hash_str_cip t["srv_name"] = "pool1-3" ret = HTTP:persist(t) if ret then debug("hash save table success\n"); else debug("save table failed\n"); end t={} t["hash_value"]=hash_str_cip ret = HTTP:lookup_tbl(t) if ret then debug("hash LOOKUP success\n") else debug("hash lookup failed\n") end } when POST_PERSIST{ debug("-----event POST_PERSIST-----\n") debug("-----get current assigned server-----\n") t={} t["operation"]="get_current_assigned_server" ret=HTTP:persist(t) debug("current assigned server: %s\n",ret) } Output: Return the real server name which is assigned to current session or False if no server is assigned right now
FortiADC version: V5.4, V7.2 (extended function to HTTP_REQUEST events)
Used in events: POST_PERSIST / HTTP_REQUEST
PROXY:init_stick_tbl_timeout(int)
Sets the timeout of the stick table.
Syntax
PROXY:init_stick_tbl_timeout(init);
Arguments
Name | Description |
---|---|
int |
A positive integer that specifies the timeout. |
Example
when RULE_INIT{ env={} PROXY:init_stick_tbl_timeout(500) } when PERSISTENCE{ cip = HTTP:client_addr() hash_str_cip = sha512_hex(cip) debug("-----save_tbl-----\n") t={} t["operation"] = "save_tbl" t["hash_value"] = hash_str_cip t["srv_name"] = "pool1-3" ret = HTTP:persist(t) if ret then debug("hash save table success\n"); else debug("save table failed\n"); end } Output: Return True: success, False: failed
FortiADC version: V5.4
Used in events: RULE_INIT