nginxinc / docker-nginx

Official NGINX Dockerfiles
BSD 2-Clause "Simplified" License
3.25k stars 1.73k forks source link

Connection Timed out always seen for UDP when num req/rsp are matched given a wrong perception on upstream delay #877

Open bnnk opened 6 months ago

bnnk commented 6 months ago

Describe the bug

When number of UDP Req/Rsp matched session should be deleted without any error log

To reproduce

Configured UDP Req/Rsp to 10/10 and send 10 packet and receive 10 rsp

Expected behavior

Post 10 req/rsp session should be cleaned up without any error log saying timed out

Your environment

nginx:alpine

Additional context


                if (pscf->responses == NGX_MAX_INT32_VALUE
                    || (u->responses >= pscf->responses * u->requests))
                {

                    /*
                     * successfully terminate timed out UDP session
                     * if expected number of responses was received
                     */

                    handler = c->log->handler;
                    c->log->handler = NULL;

                    c->log->handler = handler;

                    ngx_stream_proxy_finalize(s, NGX_STREAM_OK);
                    return;
                }

I expect above condition should rather be

                if (pscf->responses == NGX_MAX_INT32_VALUE
                    || (u->responses >=  u->requests)) << like this
                {

                    /*

Seeing always log

2024/04/08 20:31:58 [error] 1932#0: *131 upstream timed out (110: Connection timed out) while proxying connection, udp client: 127.0.0.1, server: 0.0.0.0:3123, upstream: "127.0.0.1:8084", bytes from/to client:0/170, bytes from/to upstream:170/0

thresheek commented 6 months ago

Hi @bnnk,

can you show the configuration you're using?

bnnk commented 6 months ago

@thresheek Please find the same below

upstream ts_mod_transporter-app {
    zone ts_mod_transporter-app 256k;

    random two least_conn;

    server 127.0.0.1:8080 max_fails=0 fail_timeout=10s max_conns=0;
    server 127.0.0.1:8081 max_fails=0 fail_timeout=10s max_conns=0;
    server 127.0.0.1:8082 max_fails=0 fail_timeout=10s max_conns=0;
    server 127.0.0.1:8083 max_fails=0 fail_timeout=10s max_conns=0;
    server 127.0.0.1:8084 max_fails=0 fail_timeout=10s max_conns=0;
}

server {

    listen 3123 udp;

    proxy_requests 10;
    proxy_responses 10;

    proxy_pass ts_mod_transporter-app;

    proxy_timeout 8s;
    proxy_connect_timeout 12s;

    proxy_next_upstream on;
    proxy_next_upstream_timeout 20s;
    proxy_next_upstream_tries 1;
}
bnnk commented 6 months ago

@thresheek Any input on the same ? does this looks like a bug ?

bnnk commented 6 months ago

Can someone help on the same ? Is this a bug ? if not why this multiplier ?