Em nossa configuração do verniz, temos uma função vcl_fetch definida da seguinte forma:
if (beresp.ttl > 0s) {
/* Remove Expires from backend, it's not long enough */
unset beresp.http.expires;
/* Set the clients TTL on this object */
set beresp.http.cache-control = "max-age=900";
/* Set how long Varnish will keep it */
set beresp.ttl = 1h;
/* marker for vcl_deliver to reset Age: */
set beresp.http.magicmarker = "1";
}
Em seguida, em vcl_deliver:
if (resp.http.magicmarker) {
/* Remove the magic marker */
unset resp.http.magicmarker;
/* By definition we have a fresh object */
set resp.http.age = "0";
}
O problema é que, se eu configurar um script (um shell script ou um script php) para acessar a mesma URL, vejo primeiro uma mensagem MISS, seguida por um HIT (tudo bem até agora).
O que eu espero é repetir HITS até que a marca de 1 hora tenha passado, uma MISS na marca de 1 hora, seguida por uma hora de HITs novamente. Em outras palavras, porque estou atingindo a mesma URL repetidamente, ele deve alternar entre HIT e MISS a cada 1 HORA.
Em vez disso, o que vejo é algo assim:
6/20/2013 6:30:05 - STRING HIT NOT FOUND
6/20/2013 10:32:11 - STRING HIT NOT FOUND
6/21/2013 12:33:06 - STRING HIT NOT FOUND
6/21/2013 2:34:06 - STRING HIT NOT FOUND
Agora são 5:57 (quase 4 horas desde que o HIT não foi encontrado).
Os erros de cache acima aparecem ao redor da marca de meia hora, mas são 4 horas, 2 horas e 2 horas de intervalo e o TTL é definido para 1 hora.
Então eu não entendo porque o objeto está sendo mantido por mais de uma hora e por que ele é despejado em intervalos aparentemente aleatórios. Como posso determinar melhor o que está acontecendo?
A propósito, estou usando o verniz 3, se isso ajudar.