Forum Discussion

Jon_Strabala_46's avatar
Jon_Strabala_46
Icon for Nimbostratus rankNimbostratus
Apr 29, 2010

iRule to avoide "Invalid action EV_COLLECT during ST_HTTP_EARLY_100CONTINUE" error

Hello,

 

 

I have an a few messages in my /var/ltm/log which I really do not understand anything about they are of the form:

 

    Invalid action EV_COLLECT during ST_HTTP_EARLY_100CONTINUE (Server side: vip=vs_main_http profile=http pool=evdo_routers) I do not under stand what the above means, also why is this is reported against a "simple" config with a trivial iRULE. The virtual server identified processes HTTP port 80 and indeed the iRULE in some cases will do a HTTP::collect.

     

     

    What is this message? What does it mean? Should I worry about it?

     

     

    Portions of my big-IP config is as follows with a very simple iRULE where vs_main is type "Performance (Layer 4)" against all ports, address, protocols, and vlans.
      self 10.0.185.10 { netmask 255.255.255.0 unit 1 floating enable vlan vlan185 allow default } virtual vlan185 { ip forward destination 10.0.185.0:any mask 255.255.255.0 } route default inet { pool evdo_routers } node 10.255.252.2 { screen evdo1 } node 10.255.252.3 { screen evdo2 } pool evdo_routers { lb method member observed monitor all gateway_icmp members { 10.255.252.2:any {} 10.255.252.3:any {} } } virtual vs_main { destination any:any mask 0.0.0.0 rules hele_main } when RULE_INIT { set ::m_prod_ver_maj 001 set ::m_prod_ver_min 001 log local0. "initialized: $::m_prod_ver_maj.$::m_prod_ver_min" } when CLIENT_ACCEPTED { if { [IP::client_addr] == "174.47.71.225" || [IP::client_addr] == "174.47.71.226"} { if {[IP::local_addr] == "65.203.136.33" && [TCP::local_port] == 8} { set info "ICMP client { [IP::client_addr]:[TCP::client_port] -> [IP::local_addr]:[TCP::local_port] }" log local0. $info } } } virtual vs_main_http { translate service disable destination any:http mask 0.0.0.0 ip protocol tcp rules hele_main_http httpclass httpclass profiles { http {} oneconnect {} tcp {} } vlans vlan185 enable } when RULE_INIT { set ::h_prod_ver_maj 001 set ::h_prod_ver_min 001 log local0. "initialized: version $::h_prod_ver_maj.$::h_prod_ver_min" } when HTTP_REQUEST { ONECONNECT::reuse enable } when HTTP_RESPONSE { if {[HTTP::header "Content-Type"] starts_with "text/html"} { HTTP::collect $content_length } } when HTTP_RESPONSE_DATA { set bidxh [string last " set bidxb [string last " if {$bidxh != -1 && $bidxb != -1} { log local0. "has body and html tags ..." } unset content }
      • Hi Jon,

         

         

        I have the same issue. Please can you tell me how you solved?

         

         

        Thanks in advance

         

        Emanuele
      • Emanuele,

         

         

        Gosh it was a while ago 14 months, sorry I can not remember exactly what fixed it (it might even have been my HTTP profile .... or an upgrade to the LTM software ... I am just not positive) but perhaps this will help.

         

         

        Hmm, I still get a few of the messages so at best I limited the number of messages going to my /var/log/ltm log file. I think you might want to try a STREAM instread of a COLLECT - I just haven't had the time to port my work yet.

         

         

        It is possible that a code block like this might have helped - limit the issues.

         

         

        when HTTP_RESPONSE {

         

        set okay 1

         

        if {[HTTP::status] != 200} {

         

        set okay 0

         

        }

         

        if {(!([HTTP::header "Content-Type"] starts_with "text/html"))} {

         

        set okay 0

         

        }

         

        if {$okay == 1} {

         

        Trigger collection for up to 1MB of data

         

        if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576}{

         

        set content_length [HTTP::header "Content-Length"]

         

        } else {

         

        set content_length 1048576

         

        }

         

        if { [info exists content_length] && $content_length > 0} {

         

        this will trigger the HTTP_RESPONSE_DATA action block

         

        HTTP::collect $content_length

         

        } else {

         

        set okay 0

         

        }

         

        }

         

        if {$okay == 0} {

         

        log the issue here or not you skipped

         

         

        }

         

        }

         

         

         

        when HTTP_RESPONSE_DATA {

         

         

        only apply transformations if okay== 1, e.g. had a minimal set of html tags

         

        if {$okay == 1} {

         

        set content [string tolower [HTTP::payload]]

         

        }

         

         

        *

         

        *

         

        *

         

         

        this could be a big a 1MB free up ASAP now that we are done

         

        unset content

         

        }

         

         

         

         

        Or perhaps I possibly I limited the issue via altering the ONECONNECT statement:

         

         

         

        when HTTP_REQUEST {

         

        ONECONNECT::reuse enable

         

        ONECONNECT::reuse disable

         

        *

         

        *

         

        }

         

         

         

        Regards,

         

         

        Jon Strabala