]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Avoid duplicate "Couldn't find session GUID" warnings.
authorTimo Sirainen <tss@iki.fi>
Mon, 12 Sep 2011 11:43:31 +0000 (14:43 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 12 Sep 2011 11:43:31 +0000 (14:43 +0300)
When it happens, just create a dummy session for it and log a warning once.

src/stats/mail-command.c
src/stats/mail-session.c
src/stats/mail-session.h

index ce5212104033387ad54474f567edba1ab17fedb9..cab7a42fa68b063acc8d6133183a3d478a28eca7 100644 (file)
@@ -97,15 +97,14 @@ int mail_command_update_parse(const char *const *args, const char **error_r)
        const char *error;
        unsigned int cmd_id;
        bool done;
-       int ret;
 
        /* <session guid> <cmd id> <done> <name> <args> [key=value ..] */
        if (str_array_length(args) < 4) {
                *error_r = "UPDATE-CMD: Too few parameters";
                return -1;
        }
-       if ((ret = mail_session_lookup(args[0], &session, error_r)) <= 0)
-               return ret;
+       if (mail_session_get(args[0], &session, error_r) < 0)
+               return -1;
 
        if (str_to_uint(args[1], &cmd_id) < 0 || cmd_id == 0) {
                *error_r = "UPDATE-CMD: Invalid command id";
index 4936364377d1872aadd4d3e4f8f1f79013f4c5ff..f0124b8fbb1f03526aad1d07e85da6f179154115 100644 (file)
@@ -160,13 +160,35 @@ int mail_session_lookup(const char *guid, struct mail_session **session_r,
        }
        *session_r = hash_table_lookup(mail_sessions_hash, session_guid);
        if (*session_r == NULL) {
-               i_warning("mail disconnect couldn't find session GUID: %s",
+               i_warning("Couldn't find session GUID: %s",
                          guid_128_to_string(session_guid));
                return 0;
        }
        return 1;
 }
 
+int mail_session_get(const char *guid, struct mail_session **session_r,
+                    const char **error_r)
+{
+       const char *new_args[5];
+       int ret;
+
+       if ((ret = mail_session_lookup(guid, session_r, error_r)) != 0)
+               return ret;
+
+       /* Create a new dummy session to avoid repeated warnings */
+       new_args[0] = guid;
+       new_args[1] = ""; /* username */
+       new_args[2] = ""; /* service */
+       new_args[3] = "0"; /* pid */
+       new_args[4] = NULL;
+       if (mail_session_connect_parse(new_args, error_r) < 0)
+               i_unreached();
+       if (mail_session_lookup(guid, session_r, error_r) != 1)
+               i_unreached();
+       return 0;
+}
+
 int mail_session_disconnect_parse(const char *const *args, const char **error_r)
 {
        struct mail_session *session;
@@ -203,11 +225,10 @@ int mail_session_update_parse(const char *const *args, const char **error_r)
        struct mail_session *session;
        struct mail_stats stats, diff_stats;
        const char *error;
-       int ret;
 
        /* <session guid> [key=value ..] */
-       if ((ret = mail_session_lookup(args[0], &session, error_r)) <= 0)
-               return ret;
+       if (mail_session_get(args[0], &session, error_r) < 0)
+               return -1;
 
        if (mail_stats_parse(args+1, &stats, error_r) < 0) {
                *error_r = t_strconcat("UPDATE-SESSION: ", *error_r, NULL);
index fa72065d0f06e19212ebf9f99f46361a38584a8a..39141298f17bf4c0041dec19b77b903ad965c46d 100644 (file)
@@ -16,6 +16,8 @@ void mail_session_unref(struct mail_session **session);
 
 int mail_session_lookup(const char *guid, struct mail_session **session_r,
                        const char **error_r);
+int mail_session_get(const char *guid, struct mail_session **session_r,
+                    const char **error_r);
 void mail_session_refresh(struct mail_session *session,
                          const struct mail_stats *diff_stats);