]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Remove most reason_code=mail:*
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 28 Dec 2021 07:37:42 +0000 (09:37 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 28 Dec 2021 07:51:05 +0000 (09:51 +0200)
Event reasons create events internally. This is rather expensive if it's
done for operations that access all emails in a large folder, e.g. SORT.
The per-mail reason_codes also didn't seem to be hugely helpful, so best
to just remove them.

Some of the mail:* reasons were left where they are causing mail stream to
be opened anyway. In these cases the extra CPU used by event reasons is
relatively little.

Reverts ce517f8323fa4a60b230f29712b207139badb3f0

src/lib-storage/index/index-mail.c
src/lib-storage/mail.c

index a663e3e0c92026c9e739d768f838e92aa81db645..87b9efc1563529f34e75f7ae2e147f0b4beb5e53 100644 (file)
@@ -1121,12 +1121,9 @@ static int index_mail_write_body_snippet(struct index_mail *mail)
                return 0;
        }
 
-       struct event_reason *reason = event_reason_begin("mail:snippet");
        old_offset = mail->data.stream == NULL ? 0 : mail->data.stream->v_offset;
-       ret = mail_get_stream_because(&mail->mail.mail, NULL, NULL,
-               index_mail_cache_reason(&mail->mail.mail, "snippet"), &input);
-       event_reason_end(&reason);
-       if (ret < 0)
+       const char *reason = index_mail_cache_reason(&mail->mail.mail, "snippet");
+       if (mail_get_stream_because(&mail->mail.mail, NULL, NULL, reason, &input) < 0)
                return -1;
        i_assert(mail->data.stream != NULL);
 
index 412ce14c5682c3524f81259ce1e20f5e879c6283..20882ad62b8ded6e635a8ac96107721b0e2cd7c8 100644 (file)
@@ -80,10 +80,7 @@ bool mail_prefetch(struct mail *mail)
        bool ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:prefetch");
                ret = p->v.prefetch(mail);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -209,10 +206,7 @@ int mail_get_parts(struct mail *mail, struct message_part **parts_r)
        int ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:mime_parts");
                ret = p->v.get_parts(mail, parts_r);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -223,10 +217,7 @@ int mail_get_date(struct mail *mail, time_t *date_r, int *timezone_r)
        int ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:date");
                ret = p->v.get_date(mail, date_r, timezone_r);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -237,10 +228,7 @@ int mail_get_received_date(struct mail *mail, time_t *date_r)
        int ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:received_date");
                ret = p->v.get_received_date(mail, date_r);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -251,10 +239,7 @@ int mail_get_save_date(struct mail *mail, time_t *date_r)
        int ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:received_date");
                ret = p->v.get_save_date(mail, date_r);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -265,10 +250,7 @@ int mail_get_virtual_size(struct mail *mail, uoff_t *size_r)
        int ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:virtual_size");
                ret = p->v.get_virtual_size(mail, size_r);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -279,10 +261,7 @@ int mail_get_physical_size(struct mail *mail, uoff_t *size_r)
        int ret;
 
        T_BEGIN {
-               struct event_reason *reason =
-                       event_reason_begin("mail:physical_size");
                ret = p->v.get_physical_size(mail, size_r);
-               event_reason_end(&reason);
        } T_END;
        return ret;
 }
@@ -448,36 +427,8 @@ int mail_get_special(struct mail *mail, enum mail_fetch_field field,
                     const char **value_r)
 {
        struct mail_private *p = (struct mail_private *)mail;
-       struct event_reason *reason = NULL;
-       const char *reason_code = NULL;
-
-       switch (field) {
-       case MAIL_FETCH_STORAGE_ID:
-               reason_code = "mail:storage_id";
-               break;
-       case MAIL_FETCH_UIDL_BACKEND:
-               reason_code = "mail:pop3_uidl";
-               break;
-       case MAIL_FETCH_GUID:
-               reason_code = "mail:guid";
-               break;
-       case MAIL_FETCH_POP3_ORDER:
-               reason_code = "mail:pop3_order";
-               break;
-       case MAIL_FETCH_REFCOUNT:
-               reason_code = "mail:refcount";
-               break;
-       case MAIL_FETCH_REFCOUNT_ID:
-               reason_code = "mail:refcount_id";
-               break;
-       default:
-               break;
-       }
-       if (reason_code != NULL)
-               reason = event_reason_begin(reason_code);
-       int ret = p->v.get_special(mail, field, value_r);
-       event_reason_end(&reason);
-       if (ret < 0)
+
+       if (p->v.get_special(mail, field, value_r) < 0)
                return -1;
        i_assert(*value_r != NULL);
        return 0;