Forum Discussion

jaikumar_f5's avatar
Aug 05, 2017

Irule avoid LB_SELECTED during PERSIST_DOWN

I'm trying to send back custom 500 error code for persisted session. VS has sourceip persistence with 1800 sec timeout and the below Irule to send back custom error. But looks PERSIST_DOWN event is triggered but immediately goes with LB_SELECTED event. Thus going to another available member with new persistence.

 

when CLIENT_ACCEPTED {
if { [persist lookup source_addr [IP::client_addr]] ne "" } {
    log local0. "Persistent Event Triggered for ClientIP [IP::client_addr]"
}
}
when HTTP_REQUEST {
log local0. "HTTP Request Event for APPS."
}
when LB_SELECTED {
    log local0. "LB Selected Event [LB::server addr] : [LB::server port]"
}

when PERSIST_DOWN {
    log local0. "Persist down Event [LB::server addr] : [LB::server port]"
    LB::down
    persist none
    HTTP::respond 500 content {
  
     
        500 Error
     
     
        We are sorry, but the site you are looking for is temporarily out of service
     
  
 }
    }

Here's a gist of the log, could see the persistence is removed and going to new member with new persistence value.

 

`Rule /Common/NEW_Irule : HTTP Request Event for APPS.`

`Rule /Common/NEW_Irule : Persist down Event 22.22.22.22 : 443`

`Rule /Common/NEW_Irule : HTTP Request Event for APPS.`

`Rule /Common/NEW_Irule : LB Selected Event 33.33.33.33 : 443`

How to enforce PERSIST_DOWN Block to work. Tried without the PERSIST_DOWN event too, but no luck. Member down persistence is automatically removed and LB_SELECT event is invoked to chose another available member.

 

when HTTP_REQUEST {
set persistrecord [persist lookup source_addr [IP::client_addr]]
log local0. "$persistrecord - 1"
if { $persistrecord ne "" } {
log local0. "$persistrecord triggered - 2"
set ip [lindex $persistrecord 1]
log local0. "$ip - 3"
set port [lindex $persistrecord 2]
log local0. "$port - 4"
set persiststatus [LB::status pool dummy_pool member $ip $port]
log local0. "persiststatus $persiststatus - 5"
if {$persiststatus eq "down"} {
log local0. "persiststatus $persiststatus - 6"
HTTP::respond 500
return
}
}
No RepliesBe the first to reply