smp_86112
Feb 13, 2012Cirrostratus
OneConnect, Cookie Persistence, and LB_FAILED event
I've got an HTTP virtual with a OneConnect and Cookie profiles applied. The virtual also has an iRule applied. In effect, the iRule is written like this:
rule myrule {
when HTTP_REQUEST {
log local0. "[LB::server]"
if { [HTTP::uri] starts_with "/app" } {
pool mypool
}
}
when LB_FAILED {
HTTP::redirect "http://myapp.app.com/error_page"
}
}
Client requests are coming to the app from a global content delivery provider. I have studied the requests at a TCP level, and it appears they are pipelining HTTP requests from different users through a single TCP connection. When a client request for "/something_else" comes in without a Cookie on an established TCP connection, the LTM appears to be making a load-balancing decision BEFORE processing the iRule. It appears this way because the log statement provides me with a pool name and a member, and the LB_FAILED event does not fire. When a client request for "/something_else" comes in on a new TCP session, no load-balancing decision is made and the LB_FAILED event fires as we expect (and want!). My understanding of OneConnect is that each request is evaluated for load-balancing. And if that's true, my expectation is that no load-balancing decision is made until all the iRules have been process. That appears to not be the case. Can someone explain to me what the expected behavior is in the scenario I described?