Forum Discussion
Hamish
May 18, 2010Cirrocumulus
iRule events firing out of order?
Is it SUPPOSED to be posisble for events to fire out of order?
. I have a 10.1.0 6900 that's running an iRule to measure LDAP searchtimes. As part of it, it sets up a few variables in SERVER_CONNECTED, but every now & again (About 5% of the time) under load, we find that the SERVER_DATA even is firing with an undefined variable that happens to be set (Unconditionally) in SERVER_CONNECTED.
Is there a guarantee for event firing? Have I found a bug? or a feature?
Hamish.
- Michael_YatesNimbostratusThat's an interesting problem.
- hooleylistCirrostratusHey Hamish,
- HamishCirrocumulusHmm... Not my iRule, so let me look..
- HamishCirrocumulusHmm... Problem just moved... Another variable now claims it isn't set (But this one is set in CLIENT_DATA only on specific packets. That may be a genuine bug in the iRule itself)
- HamishCirrocumulusI wonder how the events are supported within the F5... It's almost like some variables aren't being made available between events immediately... And if the events trigger too close to each other, then I get no such variable errors... (WHich should be impossible, because SERVER_CONNECTED is literally
when SERVER_CONNECTED { set s_offset 1 TCP::collect }
- spark_86682Historic F5 AccountJust to reassure you (and other readers), it is impossible for iRule events to fire out of order, though this is mostly true by definition. An iRule event fires whenever that action happens, so SERVER_CONNECTED fires whenever we have successfully connected to the server. That said, I don't know what could be causing the problem you describe. The only thing that makes any sense to me is if the client connection closes after we get the SYN-ACK from the server and before server data arrives. That would sever the relationship between the client and server connections, and I think it just happens that variables are associated with the client connection. You could test this theory by testing inside SERVER_DATA if the variable exists, and if it doesn't then see if there's a client connection (maybe do a catch of clientside { [IP::client_addr] } and log the result, or something like that). Just a thought.
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects