Skip to content
This repository was archived by the owner on Feb 16, 2026. It is now read-only.
This repository was archived by the owner on Feb 16, 2026. It is now read-only.

Unexpected VCL subroutine flow #4163

Description

@Vormillion

Expected Behavior

Waitinglist requests should not be considered as cached.

Current Behavior

After purge request to URL, next request is getting MISS and backend fetch as expected, but next requests are getting HIT VCL_call although they are in waitinglist.

Possible Solution

No response

Steps to Reproduce (for bugs)

No response

Context

We are trying to troubleshoot scenario, when varnishlog is showing that object was served from cache but in reality fetch time was quite long due to waitinglist.

We are setting special response header called X-Cache-Status:

sub vcl_deliver {
    if (obj.hits > 0) {
       set resp.http.X-UPS = "V";
       set resp.http.X-Cache-Status = "HIT";
       unset resp.http.X-UPS-RESTIME;
    } else {
       set resp.http.X-Cache-Status = "MISS";
       set resp.http.X-UPS = "M";
    }
}

Varnishlog output showing cache purge -> miss on first call -> hit on second call while request is in waitinglist so in reality it's not HIT, so my question is why VCL_HIT is called here.

Cache purge request

*   << Request  >> 862691    
-   Begin          req 862690 rxreq
-   Timestamp      Start: 1723626741.517823 0.000000 0.000000
-   Timestamp      Req: 1723626741.517823 0.000000 0.000000
-   VCL_use        varnish_1723557604
-   ReqStart       10.26.31.38 54314 a0
-   ReqMethod      PURGE
-   ReqURL         /
-   ReqProtocol    HTTP/1.1
-   ReqHeader      X-Magento-Tags-Pattern: ((^|,)cat_c_p_22(,|$))
-   ReqHeader      Host: XXX
-   ReqHeader      X-Forwarded-For: XXX
-   VCL_call       RECV
-   ReqHeader      disable_http_basic: 1
-   VCL_return     synth
-   VCL_call       HASH
-   VCL_return     lookup
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     Purged
-   RespHeader     Date: Wed, 14 Aug 2024 09:12:21 GMT
-   RespHeader     Server: Varnish
-   RespHeader     X-Varnish: 862691
-   VCL_call       SYNTH
-   RespHeader     Content-Type: text/html; charset=utf-8
-   RespHeader     Retry-After: 5
-   VCL_return     deliver
-   Timestamp      Process: 1723626741.517868 0.000045 0.000045
-   RespHeader     Content-Length: 241
-   Storage        malloc Transient
-   Filters        
-   RespHeader     Connection: keep-alive
-   Timestamp      Resp: 1723626741.517892 0.000069 0.000024
-   ReqAcct        95 0 95 197 241 438
-   End  

Fresh call to /napoje - this is MISS as expected

*   << Request  >> 2387316   
-   Begin          req 862673 rxreq
-   Timestamp      Start: 1723626735.944309 0.000000 0.000000
-   Timestamp      Req: 1723626735.944309 0.000000 0.000000
-   VCL_use        varnish_1723557604
-   ReqStart       10.26.19.1 34820 a0
-   ReqMethod      GET
-   ReqURL         /napoje
-   ReqProtocol    HTTP/1.1
-   ReqHeader      Host: XXX
-   ReqHeader      X-Request-ID: 5b2a2082bd338f875428ed54a37213d4
-   ReqHeader      X-Real-IP: XXX
-   ReqHeader      X-Forwarded-For: XXX
-   ReqHeader      X-Forwarded-Host: XXX
-   ReqHeader      X-Forwarded-Port: 443
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      X-Forwarded-Scheme: https
-   ReqHeader      X-Scheme: https
-   ReqHeader      X-Original-Forwarded-For: XXX
-   ReqHeader      Sec-CH-UA: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"
-   ReqHeader      sec-ch-ua-mobile: ?0
-   ReqHeader      sec-ch-ua-platform: "Linux"
-   ReqHeader      upgrade-insecure-requests: 1
-   ReqHeader      User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
-   ReqHeader      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
-   ReqHeader      sec-fetch-site: same-origin
-   ReqHeader      sec-fetch-mode: navigate
-   ReqHeader      sec-fetch-user: ?1
-   ReqHeader      sec-fetch-dest: document
-   ReqHeader      Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
-   ReqHeader      priority: u=0, i
-   ReqHeader      Accept-Encoding: gzip
-   ReqHeader      Cache-Control: no-cache, max-age=0
-   VCL_call       RECV
-   ReqUnset       X-Forwarded-For: XXX
-   ReqHeader      X-Forwarded-For: XXX
-   ReqUnset       X-Real-IP: XXX
-   ReqHeader      X-Real-Ip: XXX
-   ReqURL         /napoje
-   ReqUnset       Accept-Encoding: gzip
-   ReqHeader      Accept-Encoding: gzip
-   ReqURL         /napoje
-   VCL_return     hash
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       MISS
-   VCL_return     fetch
-   Link           bereq 2387317 fetch
-   Timestamp      Fetch: 1723626742.356807 6.412498 6.412498
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     OK
-   RespHeader     Server: nginx
-   RespHeader     Date: Wed, 14 Aug 2024 09:12:22 GMT
-   RespHeader     Content-Type: text/html; charset=UTF-8
-   RespHeader     Edge-Control: bypass-cache
-   RespHeader     X-Content-Type-Options: nosniff
-   RespHeader     X-XSS-Protection: 1; mode=block
-   RespHeader     X-Frame-Options: SAMEORIGIN
-   RespHeader     Vary: Accept-Encoding
-   RespHeader     X-UPS-RESTIME: 6.354
-   RespHeader     X-UPS: M
-   RespHeader     Pragma: no-cache
-   RespHeader     Expires: -1
-   RespHeader     Cache-Control: no-store, no-cache, must-revalidate, max-age=0
-   RespHeader     backend: default
-   RespHeader     Content-Encoding: gzip
-   RespHeader     X-Varnish: 2387316
-   RespHeader     Age: 0
-   RespHeader     Accept-Ranges: bytes
-   VCL_call       DELIVER
-   RespUnset      Age: 0
-   RespHeader     X-Cache-Status: MISS
-   RespUnset      X-UPS: M
-   RespHeader     X-UPS: M
-   RespUnset      Server: nginx
-   RespUnset      X-Varnish: 2387316
-   VCL_return     deliver
-   Timestamp      Process: 1723626742.356844 6.412534 0.000036
-   Filters        
-   RespHeader     Content-Length: 114887
-   RespHeader     Connection: keep-alive
-   Timestamp      Resp: 1723626742.356931 6.412621 0.000087
-   ReqAcct        2416 0 2416 6231 114887 121118
-   End            

Second call to /napoje (in the meantime previous request is still fetching page from backend ~6 seconds)

*   << Request  >> 1538196   
-   Begin          req 1538181 rxreq
-   Timestamp      Start: 1723626736.342492 0.000000 0.000000
-   Timestamp      Req: 1723626736.342492 0.000000 0.000000
-   VCL_use        varnish_1723557604
-   ReqStart       10.26.11.78 54734 a0
-   ReqMethod      GET
-   ReqURL         /napoje
-   ReqProtocol    HTTP/1.1
-   ReqHeader      Host: XXX
-   ReqHeader      X-Request-ID: cf20f0e2e9ef40211ae49485149abe50
-   ReqHeader      X-Real-IP: XXX
-   ReqHeader      X-Forwarded-For: XXX
-   ReqHeader      X-Forwarded-Host: XXX
-   ReqHeader      X-Forwarded-Port: 443
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      X-Forwarded-Scheme: https
-   ReqHeader      X-Scheme: https
-   ReqHeader      X-Original-Forwarded-For: XXX
-   ReqHeader      Sec-CH-UA: "Not)A;Brand";v="99", "Android WebView";v="127", "Chromium";v="127"
-   ReqHeader      sec-ch-ua-mobile: ?1
-   ReqHeader      sec-ch-ua-platform: "Android"
-   ReqHeader      upgrade-insecure-requests: 1
-   ReqHeader      User-Agent: Mozilla/5.0 (Linux; Android 11; SM-A202F Build/RP1A.200720.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/127.0.6533.97 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/476.0.0.49.74;]
-   ReqHeader      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
-   ReqHeader      Accept-Language: cs-CZ,cs;q=0.9,en-US;q=0.8,en;q=0.7
-   ReqHeader      priority: u=0, i
-   VCL_call       RECV
-   ReqUnset       X-Forwarded-For: XXX
-   ReqHeader      X-Forwarded-For:XXX
-   ReqUnset       X-Real-IP: XXX
-   ReqHeader      X-Real-Ip: XXX
-   ReqURL         /napoje
-   ReqUnset       Accept-Encoding: gzip
-   ReqHeader      Accept-Encoding: gzip
-   ReqURL         /napoje
-   VCL_return     hash
-   VCL_call       HASH
-   VCL_return     lookup
-   Hit            2387317 86405.956800 60.000000 0.000000 114887
-   Timestamp      Waitinglist: 1723626742.356823 6.014330 6.014330
-   VCL_call       HIT
-   VCL_return     deliver
-   RespProtocol   HTTP/1.1
-   RespStatus     200
-   RespReason     OK
-   RespHeader     Server: nginx
-   RespHeader     Date: Wed, 14 Aug 2024 09:12:22 GMT
-   RespHeader     Content-Type: text/html; charset=UTF-8
-   RespHeader     Edge-Control: bypass-cache
-   RespHeader     X-Content-Type-Options: nosniff
-   RespHeader     X-XSS-Protection: 1; mode=block
-   RespHeader     X-Frame-Options: SAMEORIGIN
-   RespHeader     Vary: Accept-Encoding
-   RespHeader     X-UPS-RESTIME: 6.354
-   RespHeader     X-UPS: M
-   RespHeader     Pragma: no-cache
-   RespHeader     Expires: -1
-   RespHeader     Cache-Control: no-store, no-cache, must-revalidate, max-age=0
-   RespHeader     backend: default
-   RespHeader     Content-Encoding: gzip
-   RespHeader     X-Varnish: 1538196 2387317
-   RespHeader     Age: 0
-   RespHeader     Accept-Ranges: bytes
-   VCL_call       DELIVER
-   RespUnset      Age: 0
-   RespUnset      X-UPS: M
-   RespHeader     X-UPS: V
-   RespHeader     X-Cache-Status: HIT
-   RespUnset      X-UPS-RESTIME: 6.354
-   RespHeader     Referrer-Policy: no-referrer-when-downgrade
-   RespUnset      Server: nginx
-   RespUnset      X-Varnish: 1538196 2387317
-   VCL_return     deliver
-   Timestamp      Process: 1723626742.356853 6.014360 0.000030
-   Filters        
-   RespHeader     Content-Length: 114887
-   RespHeader     Connection: keep-alive
-   Timestamp      Resp: 1723626742.356943 6.014450 0.000089
-   ReqAcct        3634 0 3634 6208 114887 121095
-   End 

Varnish Cache version

7.5.0

Operating system

Debian 12

Source of binary packages used (if any)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions