31-Jan-2023 10:38 - edited 31-Jan-2023 10:41
Haven't been in here for a looong time... :-7
Trying to store a header value received from pool member in a new header as that item is added to the ramcache (so it'll be present when that item is subsequently retrieved from the ramcache), but using CACHE::header insert NewHeader $value in the CACHE_UPDATE event doesn't seem to work (13.1) - has anyone used it successfully?
02-Feb-2023 09:51
Hey @Hendel - welcome back! I see nobody has come to answer this yet, so I'll see if one of my colleagues can come in to help.
06-Feb-2023 09:42
Hi @Hendel, I haven't done much with the cache in iRules, but your format for setting appears to be correct. That said, can you post a sanitized version of your iRule and whether you have any other iRules or policies that might be interfering? How are you validating that it is not working? Could use CACHE::trace to see if anything is at least being set by the system before hitting a tcpdump on the wire.
07-Feb-2023
15:27
- last edited on
07-Feb-2023
15:55
by
JRahm
There aren't any other rules or policies. I'd tried both insert and replace, but the logging in CACHE_RESPONSE never showed any effect from either of the UPDATE commands.
when CACHE_UPDATE {
CACHE::header insert X-LTM-Cached $cache
# CACHE::header replace Cache-Control $cache
}
when CACHE_RESPONSE {
log local0. "[IP::client_addr] path:$path cache:$cache [CACHE::headers]"
}
when HTTP_REQUEST {
set path [string tolower [HTTP::path]]
if { !($path ends_with ".js") } {
CACHE::disable
} else {
HTTP::uri [HTTP::path]
CACHE::enable
}
}
when HTTP_RESPONSE {
set cache [HTTP::header value Cache-Control]
HTTP::header replace Cache-Control public
}
07-Feb-2023 15:59
I updated the formatting to make it a little easier to read through...let me reach out internally to see if anyone has worked with the cache commands before, I'm not quite sure what the flow should be here.
08-Feb-2023
10:14
- last edited on
08-Feb-2023
20:39
by
JRahm
Are you using the webacceleration profile: optimized-caching?
can you post any changes you may have made.
Can you include a log statement in the CACHE_UPDATE event so we can see if it is firing?
when CACHE_UPDATE {
log local0. "Caching [HTTP::uri]"
}
Thanks.
08-Feb-2023 11:05
I did some quick testing.
1) Your iRule does not work as is, the variable 'cache' is not passed from LTM Events to Cache events. So you will run into "variable not found" TCL errors. I excluded that variable to continue testing.
2) I used the 'optimized-caching' profile which defaults to 'Minimum Object Size' of 0 bytes. I could not get the header to insert, or the CACHE_UPDATE to fire, until I increased that to 1 byte. It must be a bug of sorts.
You can see the header inserted X-LTM-Cached: test. Note , i used a static value because as i mentioned, the variable was not transfered.
One way to transfer variable is with iRule tables. Try passing from one event to another using a Table record.
HTH.
08-Feb-2023 08:31
I'm able to log CACHE::headers when I retrieve objects from the cache, it's just that they only come out with all of their original headers/values as sent by the pool member, not the ones I was trying to insert and/or modify as they went in to the cache.
08-Feb-2023
12:41
- last edited on
08-Feb-2023
20:40
by
JRahm
i used this version and was able to change the headers Cache-Control. I was also able to insert headers. No dynamic values though.
when CACHE_UPDATE {
CACHE::header insert X-LTM-Cached "test"
CACHE::header replace Cache-Control "private"
log local0. "Cache update- path:$path cache: [CACHE::headers]"
}
But you have to invalidate the cache before every expected change of behavior. You do that from the CLI with this command:
tmsh delete /ltm profile ramcache optimized-caching
and reload page twice. First reload will not have the cached version.
HTH