From 0d252dccb3013fea4d9a28bd5fafb5ea6e847d0e Mon Sep 17 00:00:00 2001 From: Siavash Tavakoli Date: Wed, 31 Mar 2021 03:08:26 +0100 Subject: [PATCH] lib-index: Add "mail_cache_lookup" event Adds new event for cache lookups with lookup name as "field" event field. --- src/lib-index/mail-cache-lookup.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lib-index/mail-cache-lookup.c b/src/lib-index/mail-cache-lookup.c index 300c9e21c7..cbac674315 100644 --- a/src/lib-index/mail-cache-lookup.c +++ b/src/lib-index/mail-cache-lookup.c @@ -9,6 +9,19 @@ #define CACHE_PREFETCH IO_BLOCK_SIZE +static struct event *mail_cache_lookup_event(struct mail_cache_view *view, + uint32_t seq) +{ + struct event *e = event_create(view->cache->event); + uint32_t uid; + mail_index_lookup_uid(view->view, seq, &uid); + event_set_name(e, "mail_cache_lookup_finished"); + event_add_int(e, "seq", seq); + event_add_int(e, "uid", uid); + event_set_append_log_prefix(e, t_strdup_printf("UID %u: ", uid)); + return e; +} + int mail_cache_get_record(struct mail_cache *cache, uint32_t offset, const struct mail_cache_record **rec_r) { @@ -419,15 +432,19 @@ int mail_cache_lookup_field(struct mail_cache_view *view, buffer_t *dest_buf, struct mail_cache_lookup_iterate_ctx iter; struct mail_cache_iterate_field field; int ret; + struct event *lookup_event; ret = mail_cache_field_exists(view, seq, field_idx); mail_cache_decision_state_update(view, seq, field_idx); if (ret <= 0) return ret; + lookup_event = mail_cache_lookup_event(view, seq); + /* the field should exist */ mail_cache_lookup_iter_init(view, seq, &iter); field_def = &view->cache->fields[field_idx].field; + event_add_str(lookup_event, "field", field_def->name); if (field_def->type == MAIL_CACHE_FIELD_BITMASK) { ret = mail_cache_lookup_bitmask(&iter, field_idx, field_def->field_size, @@ -442,6 +459,8 @@ int mail_cache_lookup_field(struct mail_cache_view *view, buffer_t *dest_buf, } } } + e_debug(lookup_event, "Looked up field %s from mail cache", field_def->name); + event_unref(&lookup_event); return ret; } @@ -523,6 +542,7 @@ mail_cache_lookup_headers_real(struct mail_cache_view *view, string_t *dest, uint8_t want = HDR_FIELD_STATE_WANT; buffer_t *buf; int ret; + struct event *lookup_event; *pool_r = NULL; @@ -550,6 +570,7 @@ mail_cache_lookup_headers_real(struct mail_cache_view *view, string_t *dest, ctx.pool = *pool_r = pool_alloconly_create(MEMPOOL_GROWING"mail cache headers", 1024); t_array_init(&ctx.lines, 32); + lookup_event = mail_cache_lookup_event(view, seq); mail_cache_lookup_iter_init(view, seq, &iter); while ((ret = mail_cache_lookup_iter_next(&iter, &field)) > 0) { if (field.field_idx > max_field || @@ -559,8 +580,12 @@ mail_cache_lookup_headers_real(struct mail_cache_view *view, string_t *dest, field_state[field.field_idx] = HDR_FIELD_STATE_SEEN; header_lines_save(&ctx, &field); } - + const char *field_name = view->cache->fields[field.field_idx].field.name; + e_debug(event_create_passthrough(lookup_event)-> + add_str("field", field_name)->event(), + "Looked up field %s from mail cache", field_name); } + event_unref(&lookup_event); if (ret < 0) return -1; -- 2.47.3