]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail-duplicate - Add debug messages for transaction.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 13 Jul 2021 03:03:02 +0000 (05:03 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Thu, 23 Sep 2021 07:03:28 +0000 (07:03 +0000)
src/lib-storage/mail-duplicate.c

index 40334102606740a5bcdb8a4e35aee1fb57349ec7..8bca684f26bdb70968c24eca2330e4eec2e559ac 100644 (file)
@@ -171,6 +171,8 @@ static int mail_duplicate_read(struct mail_duplicate_transaction *trans)
        int fd;
        unsigned int record_size = 0;
 
+       e_debug(trans->event, "Reading %s", trans->path);
+
        fd = open(trans->path, O_RDONLY);
        if (fd == -1) {
                if (errno == ENOENT)
@@ -224,9 +226,12 @@ mail_duplicate_transaction_begin(struct mail_duplicate_db *db)
 
        if (db->path == NULL) {
                /* Duplicate database disabled; return dummy transaction */
+               e_debug(trans->event, "Transaction begin (dummy)");
                return trans;
        }
 
+       e_debug(trans->event, "Transaction begin; lock %s", db->path);
+
        trans->path = p_strdup(pool, db->path);
        trans->new_fd = file_dotlock_open(&db->dotlock_set, trans->path, 0,
                                         &trans->dotlock);
@@ -256,6 +261,8 @@ mail_duplicate_transaction_free(struct mail_duplicate_transaction **_trans)
                return;
        *_trans = NULL;
 
+       e_debug(trans->event, "Transaction free");
+
        i_assert(trans->db->transaction_count > 0);
        trans->db->transaction_count--;
 
@@ -275,6 +282,7 @@ mail_duplicate_check(struct mail_duplicate_transaction *trans,
 
        if (trans->path == NULL) {
                /* Duplicate database disabled */
+               e_debug(trans->event, "Check ID (dummy)");
                return MAIL_DUPLICATE_CHECK_RESULT_NOT_FOUND;
        }
 
@@ -282,9 +290,12 @@ mail_duplicate_check(struct mail_duplicate_transaction *trans,
        d.id_size = id_size;
        d.user = user;
 
-       if (hash_table_lookup(trans->hash, &d) != NULL)
+       if (hash_table_lookup(trans->hash, &d) != NULL) {
+               e_debug(trans->event, "Check ID: found");
                return MAIL_DUPLICATE_CHECK_RESULT_EXISTS;
+       }
 
+       e_debug(trans->event, "Check ID: not found");
        return MAIL_DUPLICATE_CHECK_RESULT_NOT_FOUND;
 }
 
@@ -297,9 +308,12 @@ void mail_duplicate_mark(struct mail_duplicate_transaction *trans,
 
        if (trans->path == NULL) {
                /* Duplicate database disabled */
+               e_debug(trans->event, "Mark ID (dummy)");
                return;
        }
 
+       e_debug(trans->event, "Mark ID");
+
        new_id = p_malloc(trans->pool, id_size);
        memcpy(new_id, id, id_size);
 
@@ -327,12 +341,19 @@ void mail_duplicate_transaction_commit(
                return;
        *_trans = NULL;
 
-       if (!trans->changed || trans->new_fd == -1) {
+       if (trans->new_fd == -1) {
+               e_debug(trans->event, "Commit (dummy)");
+               mail_duplicate_transaction_free(&trans);
+               return;
+       }
+       if (!trans->changed) {
+               e_debug(trans->event, "Commit; no changes");
                mail_duplicate_transaction_free(&trans);
                return;
        }
 
        i_assert(trans->path != NULL);
+       e_debug(trans->event, "Commit; overwrite %s", trans->path);
 
        i_zero(&hdr);
        hdr.version = DUPLICATE_VERSION;
@@ -373,7 +394,15 @@ void mail_duplicate_transaction_commit(
 void mail_duplicate_transaction_rollback(
        struct mail_duplicate_transaction **_trans)
 {
-       mail_duplicate_transaction_free(_trans);
+       struct mail_duplicate_transaction *trans = *_trans;
+
+       if (trans == NULL)
+               return;
+       *_trans = NULL;
+
+       e_debug(trans->event, "Rollback");
+
+       mail_duplicate_transaction_free(&trans);
 }
 
 struct mail_duplicate_db *