Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 

Insert header when item added to ramcache

Hendel
Nimbostratus
Nimbostratus

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? 

9 REPLIES 9

Leslie_Hubertus
Community Manager
Community Manager

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. 

Hendel
Nimbostratus
Nimbostratus

Thanks, I'd appreciate that - seems like this ought to be pretty simple, so I'm probably just holding the wrong end of the metaphorical wrench or something

 

JRahm
Community Manager
Community Manager

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.

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
}

JRahm
Community Manager
Community Manager

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.

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.

 

 

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.

John_Alam_2-1675882865796.png

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.

 

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.

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.

John_Alam_0-1675888758059.png

HTH