Forum Discussion

Kai_Wilke's avatar
Feb 03, 2016

SOL9800: Dokumentation Bug?

Hi Folks,

SOL9800 states the following...

"With a OneConnect profile applied, the server-side connection is always detached upon completion of the server response, and the default pool selection is reset for each request to match the default pool configured on the virtual server. As a result, pool reselection using an iRule applied to a OneConnect virtual server operates as expected:

  • Requests matching the pool selection conditions coded in the iRule are always sent to the indicated pool.
  • Requests not matching any pool selection condition in the iRule are always sent to the default pool configured on the virtual server, regardless of whether a pool was already selected for a previous request on the same connection."

Link: https://support.f5.com/kb/en-us/solutions/public/9000/800/sol9800.html

While using TMOS v12 this behavior can not be observed. The pool selection wouldn't get reverted to match the default pool on each subsequent request.

iRule used to repro the behavior

when CLIENT_ACCEPTED {
    log -noname local0.debug "CLIENT_ACCEPTED: Virtual Server Default Pool = [LB::server pool]"
    log -noname local0.debug "CLIENT_ACCEPTED: OneConntect Profile = [PROFILE::exists oneconnect]"
    set keep_alive 0

}
when HTTP_REQUEST {
    log -noname local0.debug "HTTP_REQUEST: Connection Keep-Alive = $keep_alive"
    log -noname local0.debug "HTTP_REQUEST: Current Pool Selection = [LB::server pool]"
    if { not [info exists pool_selected] } then {
        pool www.itacs.de
        log -noname local0.debug "HTTP_REQUEST: New Pool Selection = [LB::server pool]"
        set pool_selected 1
    }
    set keep_alive 1
}

Log output for OneConnect enabled Virtual Servers

Wed Feb 3 11:27:33 CET 2016  debug   f5-02   tmm[10466]      CLIENT_ACCEPTED: Virtual Server Default Pool = /Common/default_pool
Wed Feb 3 11:27:33 CET 2016  debug   f5-02   tmm[10466]      CLIENT_ACCEPTED: OneConntect Profile = 1
Wed Feb 3 11:27:35 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Connection Keep-Alive = 0
Wed Feb 3 11:27:35 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Current Pool Selection = /Common/default_pool
Wed Feb 3 11:27:35 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: New Pool Selection = /Common/other_pool
Wed Feb 3 11:27:37 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Connection Keep-Alive = 1
Wed Feb 3 11:27:37 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Current Pool Selection = /Common/other_pool
Wed Feb 3 11:27:38 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Connection Keep-Alive = 1
Wed Feb 3 11:27:38 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Current Pool Selection = /Common/other_pool

Log output for OneConnect disabled Virtual Servers

Wed Feb 3 11:25:21 CET 2016  debug   f5-02   tmm[10466]      CLIENT_ACCEPTED: Virtual Server Default Pool = /Common/default_pool
Wed Feb 3 11:25:21 CET 2016  debug   f5-02   tmm[10466]      CLIENT_ACCEPTED: OneConntect Profile = 0
Wed Feb 3 11:25:23 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Connection Keep-Alive = 0
Wed Feb 3 11:25:23 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Current Pool Selection = /Common/default_pool
Wed Feb 3 11:25:23 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: New Pool Selection = /Common/other_pool
Wed Feb 3 11:25:25 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Connection Keep-Alive = 1
Wed Feb 3 11:25:25 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Current Pool Selection = /Common/other_pool
Wed Feb 3 11:25:26 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Connection Keep-Alive = 1
Wed Feb 3 11:25:26 CET 2016  debug   f5-02   tmm[10466]      HTTP_REQUEST: Current Pool Selection = /Common/other_pool

Note: I realy love the observed behavior for OneConnect enabled Vitual Servers! The observed behavior allows me to save ~10000 clicks for every keep-alived HTTP request, by implementing a custom flow mechanism. The mentioned flow mechanism would only select a new pool when needed (amongst other per-connection settings/variables), but not reapply an already selected pool on each subsequent request. So if you gonna raise a Bugfix or DCR to match SOL9800, then please make sure the behavior can be controlled by SYS-DB options. Or at least control the behavior this way, that when no default pool is specified, then it should not revert back to nothing. Thanks... 😉

Cheers, Kai

5 Replies

  • Update: Same behavior can be observed using LTM Policies, while forwarding just a specific URI to another pool. The pool change persists on keep-alived connections, even if consecutive requests doesn't trigger the LTM Policy Rule anymore. To make it work you have to manually revert to the default pool using an additional LTM Policy Rule. The LTM Policy default pool selection behavior in combination with OneConnect is described in SOL15097 https://support.f5.com/kb/en-us/solutions/public/15000/000/sol15097.html
  • Coming from https://devcentral.f5.com/s/feed/0D51T00006i7cmoSAA I am certain that this behavior did not occur in LTM v10, but does occur in v11.3 and v11.5.3.
  • The best way to report this possible discrepancy is to open an F5 Support case. Details on your testing will be valuable for the support organization.

     

  • Update:

     

    The F5 support was able to repro this issue for v11.5.3-HF2, v12.0.0-HF0 and v12.0.0-HF1. They are trying to restore to the outlined behavior of SOL9800 and SOL15097 for v12.0.0-HF2.

     

    In addition I've escalated the ticket and asked for a DCR, so that the OneConnect revert to default pool behavior could be somehow controled/bypassed. But didn't received any feedback at this time...

     

    Cheers, Kai