[PATCH 02 of 11] SSL: reduced logging of session cache failures (ticket #621)
Sergey Kandaurov
pluknet at nginx.com
Thu Sep 15 05:37:17 UTC 2022
> On 26 Aug 2022, at 07:01, Maxim Dounin <mdounin at mdounin.ru> wrote:
>
> # HG changeset patch
> # User Maxim Dounin <mdounin at mdounin.ru>
> # Date 1661481947 -10800
> # Fri Aug 26 05:45:47 2022 +0300
> # Node ID 5b137f110e84af974ef2b9efcf35bec2d883c187
> # Parent 2cd8fbeb4edc5a99b725585edc02a16a8a0c503e
> SSL: reduced logging of session cache failures (ticket #621).
>
> Session cache allocations might fail as long as the new session is different
> in size from the one least recently used (and freed when the first allocation
> fails). In particular, it might not be possible to allocate space for
> sessions with client certificates, since they are noticeably bigger than
> normal sessions.
>
> To ensure such allocation failures won't clutter logs, logging level changed
> to "warn", and logging is now limited to at most one warning per second.
>
> diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
> --- a/src/event/ngx_event_openssl.c
> +++ b/src/event/ngx_event_openssl.c
> @@ -3949,8 +3949,11 @@ failed:
>
> ngx_shmtx_unlock(&shpool->mutex);
>
> - ngx_log_error(NGX_LOG_ALERT, c->log, 0,
> - "could not allocate new session%s", shpool->log_ctx);
> + if (cache->fail_time != ngx_time()) {
> + cache->fail_time = ngx_time();
> + ngx_log_error(NGX_LOG_WARN, c->log, 0,
> + "could not allocate new session%s", shpool->log_ctx);
> + }
>
This makes three ngx_time() calls in this function in total.
A good reason to cache value in a local variable.
> return 0;
> }
> diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h
> --- a/src/event/ngx_event_openssl.h
> +++ b/src/event/ngx_event_openssl.h
> @@ -150,6 +150,7 @@ typedef struct {
> ngx_rbtree_t session_rbtree;
> ngx_rbtree_node_t sentinel;
> ngx_queue_t expire_queue;
> + time_t fail_time;
> } ngx_ssl_session_cache_t;
>
Missed initialization to something sensible (zero?).
--
Sergey Kandaurov
More information about the nginx-devel
mailing list