From 2ad4aa8f265e02d01f77e5d29d8377d849c78d11 Mon Sep 17 00:00:00 2001 From: Alexey Tikhonov Date: Wed, 4 Mar 2020 22:33:17 +0100 Subject: [PATCH 32/35] mem-cache: added log message in case cache is full Reviewed-by: Sumit Bose --- src/responder/nss/nsssrv_mmap_cache.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/responder/nss/nsssrv_mmap_cache.c b/src/responder/nss/nsssrv_mmap_cache.c index 5e23bbe6f..23df164da 100644 --- a/src/responder/nss/nsssrv_mmap_cache.c +++ b/src/responder/nss/nsssrv_mmap_cache.c @@ -371,6 +371,20 @@ static bool sss_mc_is_valid_rec(struct sss_mc_ctx *mcc, struct sss_mc_rec *rec) return true; } +static const char *mc_type_to_str(enum sss_mc_type type) +{ + switch (type) { + case SSS_MC_PASSWD: + return "PASSWD"; + case SSS_MC_GROUP: + return "GROUP"; + case SSS_MC_INITGROUPS: + return "INITGROUPS"; + default: + return "-UNKNOWN-"; + } +} + /* FIXME: This is a very simplistic, inefficient, memory allocator, * it will just free the oldest entries regardless of expiration if it * cycled the whole free bits map and found no empty slot */ @@ -438,6 +452,14 @@ static errno_t sss_mc_find_free_slots(struct sss_mc_ctx *mcc, } else { cur = mcc->next_slot; } + if (cur == 0) { + /* inform only once per full loop to avoid excessive spam */ + DEBUG(SSSDBG_IMPORTANT_INFO, "mmap cache of type '%s' is full\n", + mc_type_to_str(mcc->type)); + sss_log(SSS_LOG_NOTICE, "mmap cache of type '%s' is full, if you see " + "this message often then please consider increase of cache size", + mc_type_to_str(mcc->type)); + } for (i = 0; i < num_slots; i++) { MC_PROBE_BIT(mcc->free_table, cur + i, used); if (used) { -- 2.21.3