jens-skribble opened a new issue, #13200:
URL: https://github.com/apache/apisix/issues/13200

   ### Current Behavior
   
   After upgrading to apisix 3.16.0 in our staging environment and activating 
the new [comprehensive tracing 
feature](https://github.com/apache/apisix/pull/12686), by setting 
`apisix.tracing: true` in `config.yaml` apisix shows `500` errors on HTTPS 
connections instead of serving the correct pages.
   
   We are using apisix in api driven mode in k8s with tls termination within 
apisix behind our cloud providers load balancer with proxy protocol. Hence the 
HTTPS connections are kept open. The bug however is easier to reproduce without 
any plugins as described below.
   
   ---
   
   Claude Code helped me with the local reproduction of the bug and already 
created a root cause analysis and a proposed fix that I'm not able to verify on 
my own. Here is its output. 
   Use it at your own discretion:
   
   `tracer.release()` in `apisix/tracer.lua` returns the tracing table to a 
memory pool (which zeroes all its fields, including spans) but never sets 
`ctx.tracing = nil`:                                                            
               
   
   ```lua                                                                       
                                                                                
                                                                                
       
     function _M.release(ctx)                                                   
                                                                                
                                                                                
 
         local tracing = ctx.tracing                                            
                                                                                
                                                                                
 
         if not tracing then return end                                         
                                                                                
                                                                                
 
         for _, sp in ipairs(tracing.spans) do sp:release() end                 
                                                                                
                                                                                
 
         tablepool.release("tracing_spans", tracing.spans)  -- zeroes 
tracing.spans                                                                   
                                                                                
           
         tablepool.release("tracing", tracing)              -- zeroes entire 
table                                                                           
                                                                                
    
         -- BUG: ctx.tracing is not set to nil                                  
                                                                                
                                                                                
 
     end                                                                        
                                                                                
                                                                                
 
   ```
                                                                                
                                                                                
                                                                                
 
   `tracer.start()` guards initialisation with if not tracing then — which 
evaluates to false for a stale non-nil pointer — so it skips setup and 
immediately crashes at `table.insert(tracing.spans, self) (span.lua:62)` 
because spans is nil.   
      
   The trigger is that `ngx.ctx` is shared across all HTTP requests on the same 
TLS keepalive connection in OpenResty. APISIX calls `tracer.start(ngx_ctx)` in 
`ssl_client_hello_phase()` (confirmed by `ngx.ctx.matched_ssl` and 
`ngx.ctx.client_hello_sni` being written there and read later in 
`http_access_phase` without repopulation). After the first HTTP request's 
http_log_phase calls `tracer.release()`, `ngx_ctx.tracing` is left stale. The 
second HTTP request on the same connection inherits it and crashes at 
`init.lua:693`.
                     
   Plain HTTP is not affected because there is no SSL handshake phase — tracing 
is initialised fresh inside http_access_phase on every request and the 
stale-pointer path is never reached.                                            
        
      
   Fix — one line in `tracer.release()`:                                        
       
   ```lua
         tablepool.release("tracing", tracing)                                  
                                                                                
                                                                                
 
         ctx.tracing = nil  -- add this
    ```                                                                         
                                                                                
                                                                                
    
     
   Workaround: 
   disable `apisix.tracing: true` in `config.yaml`.
   
   ### Expected Behavior
   
   The distributed tracing feature introduced with apisix 3.16.0 doesn't break 
on HTTPS connections.
   
   ### Error Logs
   
   The original masked logs from our staging k8s cluster:
   ```
   2026/04/09 12:40:04 [error] 51#51: *2136 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   stack traceback:
   coroutine 0:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:693: in function 'http_access_phase'
        access_by_lua(nginx.conf:396):2: in main chunk, client: w.x.y.z, 
server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", request_id: 
"414cfde9f1276f6a277cf9aadf8f611b"
   2026/04/09 12:40:04 [error] 51#51: *2136 failed to run 
header_filter_by_lua*: /usr/local/apisix/apisix/utils/span.lua:62: bad argument 
#1 to 'insert' (table expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:899: in function 
'http_header_filter_phase'
        header_filter_by_lua(nginx.conf:440):2: in main chunk, client: w.x.y.z, 
server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", request_id: 
"414cfde9f1276f6a277cf9aadf8f611b"
   2026/04/09 12:40:04 [error] 51#51: *2136 failed to run log_by_lua*: 
/usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' (table 
expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/plugin.lua:1333: in function 'run_global_rules'
        /usr/local/apisix/apisix/init.lua:482: in function 'common_phase'
        /usr/local/apisix/apisix/init.lua:1086: in function 'http_log_phase'
        log_by_lua(nginx.conf:448):2: in main chunk while logging request, 
client: w.x.y.z, server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", request_id: 
"414cfde9f1276f6a277cf9aadf8f611b"
   2026/04/09 12:40:05 [error] 51#51: *2136 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   stack traceback:
   coroutine 0:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:693: in function 'http_access_phase'
        access_by_lua(nginx.conf:396):2: in main chunk, client: w.x.y.z, 
server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", referrer: "https://yyy.test.de/";, 
request_id: "3947105387852a1c5b34673beaeef84d"
   2026/04/09 12:40:05 [error] 51#51: *2136 failed to run 
header_filter_by_lua*: /usr/local/apisix/apisix/utils/span.lua:62: bad argument 
#1 to 'insert' (table expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:899: in function 
'http_header_filter_phase'
        header_filter_by_lua(nginx.conf:440):2: in main chunk, client: w.x.y.z, 
server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", referrer: "https://yyy.test.de/";, 
request_id: "3947105387852a1c5b34673beaeef84d"
   2026/04/09 12:40:05 [error] 51#51: *2136 failed to run log_by_lua*: 
/usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' (table 
expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/plugin.lua:1333: in function 'run_global_rules'
        /usr/local/apisix/apisix/init.lua:482: in function 'common_phase'
        /usr/local/apisix/apisix/init.lua:1086: in function 'http_log_phase'
        log_by_lua(nginx.conf:448):2: in main chunk while logging request, 
client: w.x.y.z, server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", referrer: "https://yyy.test.de/";, 
request_id: "3947105387852a1c5b34673beaeef84d"
   104.28.237.3 - - [09/Apr/2026:12:40:04 +0000] xxx.yyy.test.de "GET 
/login?return_url=https://yyy.test.de HTTP/2.0" 302 217 0.347 
"https://yyy.test.de/"; "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36" - - - 
"http://xxx.yyy.test.de";
   w.x.y.z - - [09/Apr/2026:12:40:04 +0000] xxx.yyy.test.de "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0" 500 0 0.000 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36" - - - 
"http://xxx.yyy.test.de";
   w.x.y.z - - [09/Apr/2026:12:40:05 +0000] xxx.yyy.test.de "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0" 500 0 0.000 "https://yyy.test.de/"; "Mozilla/5.0 (X11; Linux x86_64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36" - - - 
"http://xxx.yyy.test.de";
   2026/04/09 12:40:10 [error] 51#51: *2136 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   stack traceback:
   coroutine 0:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:693: in function 'http_access_phase'
        access_by_lua(nginx.conf:396):2: in main chunk, client: w.x.y.z, 
server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", referrer: "https://yyy.test.de/";, 
request_id: "42a1ff9cff0f1e665c31bba2243cd59a"
   2026/04/09 12:40:10 [error] 51#51: *2136 failed to run 
header_filter_by_lua*: /usr/local/apisix/apisix/utils/span.lua:62: bad argument 
#1 to 'insert' (table expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:899: in function 
'http_header_filter_phase'
        header_filter_by_lua(nginx.conf:440):2: in main chunk, client: w.x.y.z, 
server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", referrer: "https://yyy.test.de/";, 
request_id: "42a1ff9cff0f1e665c31bba2243cd59a"
   2026/04/09 12:40:10 [error] 51#51: *2136 failed to run log_by_lua*: 
/usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' (table 
expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/plugin.lua:1333: in function 'run_global_rules'
        /usr/local/apisix/apisix/init.lua:482: in function 'common_phase'
        /usr/local/apisix/apisix/init.lua:1086: in function 'http_log_phase'
        log_by_lua(nginx.conf:448):2: in main chunk while logging request, 
client: w.x.y.z, server: _, request: "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0", host: "xxx.yyy.test.de", referrer: "https://yyy.test.de/";, 
request_id: "42a1ff9cff0f1e665c31bba2243cd59a"
   w.x.y.z - - [09/Apr/2026:12:40:10 +0000] xxx.yyy.test.de "GET 
/callback?state=7e1ef2007f378c7483c018fd706e27c7&session_state=6be03944-8f05-4e43-a4f5-e4d082cf14c4&iss=https%3A%2F%2Fkc.test.de%2Fauth%2Frealms%2Ftesting&code=42d3f6c3-5164-4e51-8749-813ed8810d34.6be03944-8f05-4e43-a4f5-e4d082cf14c4.d249ae51-c1d2-4f02-890e-0383d9ba42b3
 HTTP/2.0" 500 0 0.000 "https://yyy.test.de/"; "Mozilla/5.0 (X11; Linux x86_64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36" - - - 
"http://xxx.yyy.test.de";
   ```
   
   The logs when reproducing the bug locally:
   ```
   /usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua init
   /usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua init_etcd
   2026/04/10 06:56:18 [warn] 1#1: [lua] config_yaml.lua:198: 
read_apisix_config(): config file /usr/local/apisix/conf/apisix.yaml reloaded.
   nginx: [warn] [lua] config_yaml.lua:198: read_apisix_config(): config file 
/usr/local/apisix/conf/apisix.yaml reloaded.
   2026/04/10 06:56:18 [warn] 70#70: *13 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 70#70: *13 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 47#47: *7 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 46#46: *6 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 46#46: *6 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 47#47: *7 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 52#52: *2 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 52#52: *2 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 51#51: *5 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 51#51: *5 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 49#49: *8 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 49#49: *8 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 60#60: *11 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 60#60: *11 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 44#44: *4 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 44#44: *4 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 50#50: *9 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 50#50: *9 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 45#45: *3 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 45#45: *3 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 48#48: *1 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 48#48: *1 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 65#65: *15 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 54#54: *10 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 54#54: *10 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 65#65: *15 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 53#53: *12 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 53#53: *12 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 66#66: *14 [lua] plugin.lua:237: load(): new 
plugins: {}, context: init_worker_by_lua*
   2026/04/10 06:56:18 [warn] 66#66: *14 [lua] plugin.lua:287: load_stream(): 
new plugins: 
{"limit-conn":true,"ip-restriction":true,"traffic-split":true,"mqtt-proxy":true,"syslog":true},
 context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 70#70: *13 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 51#51: *5 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 46#46: *6 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 47#47: *7 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 52#52: *2 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 50#50: *9 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 66#66: *14 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 49#49: *8 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 54#54: *10 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 48#48: *1 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 65#65: *15 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 45#45: *3 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 44#44: *4 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 53#53: *12 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:18 [error] 60#60: *11 [lua] plugin.lua:159: load_plugin(): 
failed to load plugin [syslog] err: 
/usr/local/apisix/apisix/plugins/prometheus/exporter.lua:54: lua_shared_dict 
"prometheus-cache" not configured, context: init_worker_by_lua*
   2026/04/10 06:56:22 [error] 46#46: *518 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   stack traceback:
   coroutine 0:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:693: in function 'http_access_phase'
        access_by_lua(nginx.conf:282):2: in main chunk, client: 10.89.0.3, 
server: _, request: "GET /get HTTP/2.0", host: "localhost:9443", request_id: 
"19d856ac5aec32b28b24237ece910294"
   2026/04/10 06:56:22 [error] 46#46: *518 failed to run header_filter_by_lua*: 
/usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' (table 
expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:899: in function 
'http_header_filter_phase'
        header_filter_by_lua(nginx.conf:308):2: in main chunk, client: 
10.89.0.3, server: _, request: "GET /get HTTP/2.0", host: "localhost:9443", 
request_id: "19d856ac5aec32b28b24237ece910294"
   2026/04/10 06:56:22 [error] 46#46: *518 failed to run log_by_lua*: 
/usr/local/apisix/apisix/tracer.lua:80: bad argument #1 to 'ipairs' (table 
expected, got nil)
   stack traceback:
        [C]: in function 'ipairs'
        /usr/local/apisix/apisix/tracer.lua:80: in function 'release'
        /usr/local/apisix/apisix/init.lua:1106: in function 'http_log_phase'
        log_by_lua(nginx.conf:316):2: in main chunk while logging request, 
client: 10.89.0.3, server: _, request: "GET /get HTTP/2.0", host: 
"localhost:9443", request_id: "19d856ac5aec32b28b24237ece910294"
   10.89.0.3 - - [10/Apr/2026:06:56:19 +0000] localhost:9080 "GET / HTTP/1.1" 
200 9593 0.036 "-" "curl/8.14.1" 10.89.0.2:80 200 0.027 "http://localhost:9080"; 
"9a3b42b85727a63ea30e6c58b47b57af"
   10.89.0.3 - - [10/Apr/2026:06:56:19 +0000] localhost:9443 "GET / HTTP/2.0" 
200 9593 0.019 "-" "curl/8.14.1" 10.89.0.2:80 200 0.004 "http://localhost:9443"; 
"615eccdffa91ed129ba17a6ffe325cb3"
   10.89.0.3 - - [10/Apr/2026:06:56:22 +0000] localhost:9443 "GET /get 
HTTP/2.0" 200 222 0.034 "-" "curl/8.14.1" 10.89.0.2:80 200 0.017 
"http://localhost:9443"; "364e2ce25b63ad2ed2ca41a1bda2873e"
   10.89.0.3 - - [10/Apr/2026:06:56:22 +0000] localhost:9443 "GET /get 
HTTP/2.0" 500 0 0.000 "-" "curl/8.14.1" - - - "http://localhost:9443"; 
"19d856ac5aec32b28b24237ece910294
   ```
   
   ### Steps to Reproduce
   
   Unzip attached 
[reproduce.zip](https://github.com/user-attachments/files/26622764/reproduce.zip),
 and run `./reproduce.sh`.
   
   ```
   jens@[de-stage]:~/reproduce$ ./reproduce.sh 
   ==> Using: podman compose
   ==> Starting services...
   >>>> Executing external compose provider "/usr/bin/podman-compose". Please 
see podman-compose(1) for how to disable this message. <<<<
   
   Error: creating container storage: the container name "reproduce_upstream_1" 
is already in use by 
badffba2ace7ae731b452d84df9c8b5dee1fb1aae6656c0b0ebcdae2ca2360f3. You have to 
remove that container to be able to reuse that name: that name is already in 
use, or use --replace to instruct Podman to do so.
   reproduce_upstream_1
   Error: creating container storage: the container name "reproduce_apisix_1" 
is already in use by 
99aa23e4f03d830eb172f0f126394589e3d9e79a8505cc39c4d46403c617b651. You have to 
remove that container to be able to reuse that name: that name is already in 
use, or use --replace to instruct Podman to do so.
   reproduce_apisix_1
   ==> Waiting for APISIX HTTP (9080)...
   ==> Waiting for APISIX HTTPS (9443)...
   
   ════════════════════════════════════════════════════════════
    Two requests on the same HTTPS keepalive connection
   ════════════════════════════════════════════════════════════
   Sending two requests in one curl invocation (connection reuse)...
     HTTP statuses: 200000
     CRASH CONFIRMED
   
   ════════════════════════════════════════════════════════════
    LOG ANALYSIS
   ════════════════════════════════════════════════════════════
   span.lua errors:
   2026/04/10 06:56:22 [error] 46#46: *518 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   stack traceback:
   coroutine 0:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:693: in function 'http_access_phase'
        access_by_lua(nginx.conf:282):2: in main chunk, client: 10.89.0.3, 
server: _, request: "GET /get HTTP/2.0", host: "localhost:9443", request_id: 
"19d856ac5aec32b28b24237ece910294"
   2026/04/10 06:56:22 [error] 46#46: *518 failed to run header_filter_by_lua*: 
/usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' (table 
expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:899: in function 
'http_header_filter_phase'
        header_filter_by_lua(nginx.conf:308):2: in main chunk, client: 
10.89.0.3, server: _, request: "GET /get HTTP/2.0", host: "localhost:9443", 
request_id: "19d856ac5aec32b28b24237ece910294"
   2026/04/10 06:56:22 [error] 46#46: *518 failed to run log_by_lua*: 
/usr/local/apisix/apisix/tracer.lua:80: bad argument #1 to 'ipairs' (table 
expected, got nil)
   stack traceback:
   --
   2026/04/10 07:04:33 [error] 48#48: *68818 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   stack traceback:
   coroutine 0:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:693: in function 'http_access_phase'
        access_by_lua(nginx.conf:282):2: in main chunk, client: 10.89.0.3, 
server: _, request: "GET /get HTTP/2.0", host: "localhost:9443", request_id: 
"1ac4dd450ec2fc15a291d741865dafe4"
   2026/04/10 07:04:33 [error] 48#48: *68818 failed to run 
header_filter_by_lua*: /usr/local/apisix/apisix/utils/span.lua:62: bad argument 
#1 to 'insert' (table expected, got nil)
   stack traceback:
        [C]: in function 'insert'
        /usr/local/apisix/apisix/utils/span.lua:62: in function 'new'
        /usr/local/apisix/apisix/tracer.lua:53: in function 'start'
        /usr/local/apisix/apisix/init.lua:899: in function 
'http_header_filter_phase'
        header_filter_by_lua(nginx.conf:308):2: in main chunk, client: 
10.89.0.3, server: _, request: "GET /get HTTP/2.0", host: "localhost:9443", 
request_id: "1ac4dd450ec2fc15a291d741865dafe4"
   2026/04/10 07:04:33 [error] 48#48: *68818 failed to run log_by_lua*: 
/usr/local/apisix/apisix/tracer.lua:80: bad argument #1 to 'ipairs' (table 
expected, got nil)
   stack traceback:
   
   lua runtime errors:
   2026/04/10 06:56:22 [error] 46#46: *518 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   2026/04/10 07:04:33 [error] 48#48: *68818 lua entry thread aborted: runtime 
error: /usr/local/apisix/apisix/utils/span.lua:62: bad argument #1 to 'insert' 
(table expected, got nil)
   
   ==> To clean up: podman compose down
   ```
   
   ### Environment
   
   - APISIX version (run `apisix version`):
   ```
   /usr/local/openresty//luajit/bin/luajit ./apisix/cli/apisix.lua version
   3.16.0
   ```
   
   - Operating system (run `uname -a`):
   ```
   Linux 99aa23e4f03d 6.17.0-20-generic #20-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 
13 20:07:29 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
   ```
   
   - OpenResty / Nginx version (run `openresty -V` or `nginx -V`):
   ```
   nginx version: openresty/1.27.1.2
   built by gcc 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) 
   built with OpenSSL 3.4.1 11 Feb 2025
   TLS SNI support enabled
   configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt='-O2 
-DAPISIX_RUNTIME_VER=1.3.3 -DNGX_LUA_ABORT_AT_PANIC 
-I/usr/local/openresty/zlib/include -I/usr/local/openresty/pcre/include 
-I/usr/local/openresty/openssl3/include' --add-module=../ngx_devel_kit-0.3.3 
--add-module=../echo-nginx-module-0.63 --add-module=../xss-nginx-module-0.06 
--add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.33 
--add-module=../form-input-nginx-module-0.12 
--add-module=../encrypted-session-nginx-module-0.09 
--add-module=../srcache-nginx-module-0.33 --add-module=../ngx_lua-0.10.28 
--add-module=../ngx_lua_upstream-0.07 
--add-module=../headers-more-nginx-module-0.37 
--add-module=../array-var-nginx-module-0.06 
--add-module=../memc-nginx-module-0.20 --add-module=../redis2-nginx-module-0.15 
--add-module=../redis-nginx-module-0.3.9 --add-module=../ngx_stream_lua-0.0.16 
--with-ld-opt='-Wl,-rpath,/usr/local/openresty/luajit/lib 
-Wl,-rpath,/usr/local/openresty/wasmtime-c-api/li
 b -L/usr/local/openresty/zlib/lib -L/usr/local/openresty/pcre/lib 
-L/usr/local/openresty/openssl3/lib 
-Wl,-rpath,/usr/local/openresty/zlib/lib:/usr/local/openresty/pcre/lib:/usr/local/openresty/openssl3/lib'
 --add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../mod_dubbo-1.0.2 
--add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../ngx_multi_upstream_module-1.3.2
 
--add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../apisix-nginx-module-1.19.3
 
--add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../apisix-nginx-module-1.19.3/src/stream
 
--add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../apisix-nginx-module-1.19.3/src/meta
 --add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../wasm-nginx-module-0.7.0 
--add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../lua-var-nginx-module-v0.5.3
 --add-module=/tmp/tmp.y0ZMBsRAqW/openresty-1.27.1.2/../lua-resty-events-0.2.0 
--with-poll_module --with-pcre-jit --with-stream --with-stream_ssl_module 
--with-stream_ssl_preread_module --with-http_v2_mod
 ule --with-http_v3_module --without-mail_pop3_module 
--without-mail_imap_module --without-mail_smtp_module 
--with-http_stub_status_module --with-http_realip_module 
--with-http_addition_module --with-http_auth_request_module 
--with-http_secure_link_module --with-http_random_index_module 
--with-http_gzip_static_module --with-http_sub_module --with-http_dav_module 
--with-http_flv_module --with-http_mp4_module --with-http_gunzip_module 
--with-threads --with-compat --with-stream --with-http_ssl_module
   ```
   
   - etcd version, if relevant (run `curl 
http://127.0.0.1:9090/v1/server_info`): n/a
   - APISIX Dashboard version, if relevant: n/a
   - Plugin runner version, for issues related to plugin runners: n/a
   - LuaRocks version, for installation issues (run `luarocks --version`): n/a
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to