Forum Discussion
Oct 04, 2013
The attached one seems to work as expected in v10.2.4.
Perhaps there is still a little overhead. I will investigate further but concentrate on v11.2.1.when CLIENT_ACCEPTED {
set retry 0
set reselect 0
set default_pool [LB::server pool]
}
when HTTP_REQUEST {
if { ([HTTP::method] eq "GET") && ($retry == 0) } {
set request_headers [HTTP::request]
log local0. "Current retries of $retry for [HTTP::uri]"
} elseif { ([HTTP::method] eq "GET") && ($retry > 0) && ($reselect > 0)} {
persist none
} elseif { ([HTTP::method] eq "GET") && ($retry > 0) && ($reselect == 0)} {
persist cookie insert "BIGipServer$default_pool"
}
}
when LB_SELECTED {
if { ($retry > 0) && ($reselect ==1) } {
log local0. "Re-loadbalancing to [LB::server] retries $retry [HTTP::uri]"
LB::reselect pool $default_pool
persist cookie insert "BIGipServer$default_pool"
}
}
when HTTP_RESPONSE {
if { [HTTP::status] starts_with "5" } {
LB::down
set reselect 1
incr retry
log local0. "5xx error caught: retry $retry out of [active_members $default_pool]"
if { $retry < [active_members $default_pool] } {
log local0. "will retry now"
HTTP::retry $request_headers
return
}
} else {
persist cookie insert "BIGipServer$default_pool"
set retry 0
set reselect 0
}
}