]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Add "mail_cache_lookup" event
authorSiavash Tavakoli <siavash.tavakoli@open-xchange.com>
Wed, 31 Mar 2021 02:08:26 +0000 (03:08 +0100)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 15 Apr 2021 07:06:27 +0000 (07:06 +0000)
Adds new event for cache lookups with lookup name as "field" event field.

src/lib-index/mail-cache-lookup.c

index 300c9e21c7d371c6629f56cfffa4472e685e1b80..cbac67431578ceb84170a9bfdf273321025e9e76 100644 (file)
@@ -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;