details: https://hg.nginx.org/nginx/rev/021416fca094 branches: changeset: 7872:021416fca094 user: Sergey Kandaurov <pluk...@nginx.com> date: Thu Jun 17 11:43:55 2021 +0300 description: gRPC: handling GOAWAY with a higher last stream identifier.
Previously, once received from upstream, it couldn't limit opening additional streams in a cached keepalive connection. diffstat: src/http/modules/ngx_http_grpc_module.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diffs (61 lines): diff -r 5f765427c17a -r 021416fca094 src/http/modules/ngx_http_grpc_module.c --- a/src/http/modules/ngx_http_grpc_module.c Tue Jun 01 17:37:51 2021 +0300 +++ b/src/http/modules/ngx_http_grpc_module.c Thu Jun 17 11:43:55 2021 +0300 @@ -121,6 +121,7 @@ typedef struct { unsigned done:1; unsigned status:1; unsigned rst:1; + unsigned goaway:1; ngx_http_request_t *request; @@ -1210,6 +1211,7 @@ ngx_http_grpc_reinit_request(ngx_http_re ctx->done = 0; ctx->status = 0; ctx->rst = 0; + ctx->goaway = 0; ctx->connection = NULL; return NGX_OK; @@ -1565,6 +1567,7 @@ ngx_http_grpc_body_output_filter(void *d && ctx->out == NULL && ctx->output_closed && !ctx->output_blocked + && !ctx->goaway && ctx->state == ngx_http_grpc_st_start) { u->keepalive = 1; @@ -1714,6 +1717,8 @@ ngx_http_grpc_process_header(ngx_http_re return NGX_HTTP_UPSTREAM_INVALID_HEADER; } + ctx->goaway = 1; + continue; } @@ -1907,6 +1912,7 @@ ngx_http_grpc_process_header(ngx_http_re && ctx->out == NULL && ctx->output_closed && !ctx->output_blocked + && !ctx->goaway && b->last == b->pos) { u->keepalive = 1; @@ -2035,6 +2041,7 @@ ngx_http_grpc_filter(void *data, ssize_t if (ctx->in == NULL && ctx->output_closed && !ctx->output_blocked + && !ctx->goaway && ctx->state == ngx_http_grpc_st_start) { u->keepalive = 1; @@ -2204,6 +2211,8 @@ ngx_http_grpc_filter(void *data, ssize_t return NGX_ERROR; } + ctx->goaway = 1; + continue; } _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel