Forum Discussion

Frank_ten_Wolde's avatar
Frank_ten_Wolde
Icon for Nimbostratus rankNimbostratus
Dec 20, 2023

[LB::server pool] evaluation changes between HTTP_REQUEST and HTTP_REQUEST_SEND

Consider a virtual server with two pools, one for virtual host A and one for virtual host B:

  1. https://A.example.com/ --> pool_A
  2. https://B.example.com/ --> pool_B
  • We are using a Local Traffic Policy to perform pool selection.
  • We have a client-side HTTP/2 profile attached to this virtual server.
  • We are using TMOS 16.1.4.
  • We do not have OneConnect enabled.

When I browse to site A and check "[LB::server pool]" in HTTP_REQUEST, it evaluates to "pool_A". In HTTP_REQUEST_SEND, "[LB::server pool]" also evaluates to "pool_A". This is to be expected…

However, when I then browse to site B and check "[LB::server pool]" in HTTP_REQUEST, I still get "pool_A"???

In the corresponding HTTP_REQUEST_SEND event, "[LB::server pool]" does correctly evaluates to "pool_B". (Also: in the corresponding LB_SELECTED event, "[LB::server pool]" correctly evaluates to "pool_B".)

Somewhere between HTTP_REQUEST and LB_SELECTED/HTTP_REQUEST_SEND, the value of "[LB::server pool]" changes from "pool_A" to "pool_B". This is NOT what I would expect...

If I remove the HTTP/2 client-side profile, this behaviour is not observed (and "[LB::server pool]" evaluates to the same pool in both the HTTP_REQUEST and LB_SELECTED/HTTP_REQUEST_SEND event).

Has anyone observed this behaviour before? Is this a 'bug' perhaps?

3 Replies

  • No, we're not using persistence, nor cookies. And we are using LTPs to do the pool selection.

    Also, I wouldn't expect the "LB::server pool" to change between the HTTP_REQUEST and LB_SELECTED/HTTP_REQUEST_SEND events...

     

    • zamroni777's avatar
      zamroni777
      Icon for Cumulonimbus rankCumulonimbus

      I test using below irules and found that LB_SELECTED happens before HTTP_REQUEST.
      so it seems that's why in HTTP_REQUEST you still get pool_A when traffic policy config should select pool_B.

       

      when LB_SELECTED {
      log local0. "CCCCCCCCC"
      }
      
      when  HTTP_REQUEST  {
      log local0. "BBBBBBBBBBBBB"
      }
      
      when  HTTP_REQUEST_SEND  {
      log local0. "AAAAAAAAAAAAAAA"
      }