Forum Discussion
TCL error :Prerequisite operation not in progress (line ...
I have an iRule that looks like this :
when HTTP_REQUEST { if {[HTTP::path] eq "/"} { HTTP::uri "/newpath" pool website-pool} }
It seems to do his job, but sometimes the next error appears in the Local Traffic Logs:
TCL error: /Partition/iRule-name - Prerequisite operation not in progress (line 1) invoked from within "HTTP::path"
TCL error: _plugin_rule_/Common/pluginasm - Prerequisite operation not in progress (line 1) invoked from within "HTTP::class asm"
Tried searching for TCL errors but found nothing that could help me. Can someone tell me what I am doing wrong ? I know, it is only to keep the logs clean, but I want to understand what I am doing wrong.
- Chris_GrantEmployeeDo you have any other profiles or irules on this virtual server?
- WillyNimbostratusYes , there is. In the mean time I made some progress, but still confronted with the error. Since there were issues with the websocket sessions an iRule was created based on the SOL 14814. It now appears that if the HTTP is disabled , a websocket request, the error appears. My idea is now to try to combine both rules in one rule, avoiding the second rule to run when HTTP is disabled. Should you have any suggestions, they are more than welcome.
- Josh_AbaireNimbostratus
I agree. I do not think the rule will work if HTTP is disabled. Combine the rules and set it up to only continue if the first part is not true (if/elseif) or perhaps add "return" after disabling HTTP to stop processing the event.
- WillyNimbostratus
Thank you for the suggestion about the combination of the iRules. At this moment the next iRule is in place :
when HTTP_REQUEST { if {[HTTP::uri] starts_with "/partinsert"} { if { [string tolower [HTTP::header Upgrade]] contains "websocket" }{ log local0. "websocket detected" HTTP::disable } } else { HTTP::uri "/partinsert[HTTP::uri]" } }
The goal is to insert a text like partinsert into the url if it is not there, because of tha mentioned solution 14814 HTTP has to be disabled if websocket is detected. However this solution keeps on giving me the TCL error if a webconnect header is detected. I would like to solve the error message. This error is displayed :
err tmm4[9434]: 01220001:3: TCL error: _plugin_rule_/Common/pluginasm - Prerequisite peration not in progress (line 1) invoked from within "HTTP::class asm"
Any suggestions ?
- arpydaysNimbostratus
Looks like you may have ASM enabled on the VS, which would require HTTP profile. You could try disabling ASM as per below;
when HTTP_REQUEST { if {([HTTP::uri] starts_with "/partinsert") and ([string tolower [HTTP::header Upgrade]] contains "websocket")}{ log local0. "websocket detected" HTTP::disable ASM::disable } else { HTTP::uri "/partinsert[HTTP::uri]" } }
- WillyNimbostratus
It did not do the trick, however after some extra testing I was able to avoid the TCL error. The solution was to disable HTTP:class before disabling HTTP. The order seems real critical. The rule looks now like below.
when HTTP_REQUEST { if {[HTTP::uri] starts_with "/partinsert"} { if { [string tolower [HTTP::header Upgrade]] contains "websocket" }{ log local0. "websocket detected" HTTP::class disable HTTP::disable } } else { HTTP::uri "/partinsert[HTTP::uri]" } }
Thank you all for helping me to get to this solution. Should you have remarks on the last solution, let me know.
- Koni_51721Cirrus
As far as i know, it should be enough to disable asm. Since 11.4.0, websocket should work with enabled http profile.
Recent Discussions
Related Content
* 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