From: Timo Sirainen Date: Thu, 22 Jul 2021 12:31:11 +0000 (+0300) Subject: lib-index: Remove mail_index_transaction_get_highest_modseq() X-Git-Tag: 2.3.17~233 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c5cbbdf177d751ef86831c9bd49b4040e211fee8;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Remove mail_index_transaction_get_highest_modseq() This isn't actually used anywhere, so there's no need to keep it. --- diff --git a/src/lib-index/mail-index-transaction-export.c b/src/lib-index/mail-index-transaction-export.c index e944edd205..4f903cf8e7 100644 --- a/src/lib-index/mail-index-transaction-export.c +++ b/src/lib-index/mail-index-transaction-export.c @@ -530,117 +530,3 @@ void mail_index_transaction_export(struct mail_index_transaction *t, (t->view->index->set.fsync_mask & change_mask) != 0 || (t->flags & MAIL_INDEX_TRANSACTION_FLAG_FSYNC) != 0; } - -static unsigned int -count_modseq_incs_with(struct mail_index_transaction *t, - ARRAY_TYPE(seq_range) *tmp_seqs, - const ARRAY_TYPE(seq_range) *orig_seqs) -{ - if (!array_is_created(orig_seqs)) - return 0; - - array_clear(tmp_seqs); - array_append_array(tmp_seqs, orig_seqs); - mail_index_transaction_seq_range_to_uid(t, tmp_seqs); - return array_count(tmp_seqs) > 0 ? 1 : 0; -} - -static unsigned int -mail_index_transaction_keywords_count_modseq_incs(struct mail_index_transaction *t) -{ - const struct mail_index_transaction_keyword_update *update; - ARRAY_TYPE(seq_range) tmp_seqs; - unsigned int count = 0; - - i_array_init(&tmp_seqs, 64); - array_foreach_modifiable(&t->keyword_updates, update) { - count += count_modseq_incs_with(t, &tmp_seqs, &update->add_seq); - count += count_modseq_incs_with(t, &tmp_seqs, &update->remove_seq); - } - array_free(&tmp_seqs); - return count; -} - -static bool -transaction_flag_updates_have_non_internal(struct mail_index_transaction *t) -{ - struct mail_transaction_log_file *file = t->view->index->log->head; - const uint8_t internal_flags = - MAIL_INDEX_MAIL_FLAG_BACKEND | MAIL_INDEX_MAIL_FLAG_DIRTY; - const struct mail_index_flag_update *u; - const unsigned int hdr_version = - MAIL_TRANSACTION_LOG_HDR_VERSION(&file->hdr); - - if (!MAIL_TRANSACTION_LOG_VERSION_HAVE(hdr_version, HIDE_INTERNAL_MODSEQS)) { - /* this check can be a bit racy if the call isn't done while - transaction log is locked. practically it won't matter - now though. */ - return array_count(&t->updates) > 0; - } - - array_foreach(&t->updates, u) { - uint16_t changed_flags = u->add_flags | u->remove_flags; - - if ((changed_flags & ~internal_flags) != 0) - return TRUE; - } - return FALSE; -} - -uint64_t mail_index_transaction_get_highest_modseq(struct mail_index_transaction *t) -{ - struct mail_transaction_log_file *file = t->view->index->log->head; - uint64_t new_highest_modseq = file->sync_highest_modseq; - - i_assert(file->locked); - - if (new_highest_modseq == 0) { - /* highest-modseq tracking isn't enabled in this transaction - log file. This shouldn't happen with logs created since - v2.2.26+, because initial_modseq is always set. We don't - also bother checking if this transaction itself enables the - highest-modseq tracking, because it's always done as a - standalone transaction in mail_index_modseq_enable(), - which doesn't care about this function. */ - i_warning("%s: Requested highest-modseq for transaction, " - "but modseq tracking isn't enabled for the file " - "(this shouldn't happen)", file->filepath); - return 0; - } - - /* finish everything that can affect highest-modseq */ - mail_index_transaction_finish_so_far(t); - - /* NOTE: keep in sync with mail_transaction_update_modseq() */ - if (array_is_created(&t->appends) && array_count(&t->appends) > 0) { - /* sorting may change the order of keyword_updates, */ - new_highest_modseq++; - } - if (array_is_created(&t->updates) && - transaction_flag_updates_have_non_internal(t)) - new_highest_modseq++; - if (array_is_created(&t->keyword_updates)) { - new_highest_modseq += - mail_index_transaction_keywords_count_modseq_incs(t); - } - if (t->attribute_updates != NULL) - new_highest_modseq++; - /* NOTE: the order of modseq_updates and everything following it - must match mail_index_transaction_export(). */ - if (array_is_created(&t->modseq_updates)) { - const struct mail_transaction_modseq_update *mu; - - /* mail_index_update_highest_modseq() is handled here also, - as a special case of uid==0. */ - array_foreach(&t->modseq_updates, mu) { - uint64_t modseq = ((uint64_t)mu->modseq_high32 << 32) | - mu->modseq_low32; - if (new_highest_modseq < modseq) - new_highest_modseq = modseq; - } - } - if (array_is_created(&t->expunges) && array_count(&t->expunges) > 0 && - (t->flags & MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL) != 0) - new_highest_modseq++; - return new_highest_modseq; -} diff --git a/src/lib-index/mail-index-transaction.c b/src/lib-index/mail-index-transaction.c index ae152eae15..0c61170a18 100644 --- a/src/lib-index/mail-index-transaction.c +++ b/src/lib-index/mail-index-transaction.c @@ -191,11 +191,6 @@ mail_index_transaction_commit_real(struct mail_index_transaction *t, if (mail_transaction_log_append_begin(log->index, trans_flags, &ctx) < 0) return -1; ret = mail_transaction_log_file_refresh(t, ctx); -#ifdef DEBUG - uint64_t expected_highest_modseq = - log->head->sync_highest_modseq == 0 ? 0 : - mail_index_transaction_get_highest_modseq(t); -#endif if (ret > 0) T_BEGIN { mail_index_transaction_finish(t); mail_index_transaction_export(t, ctx, changes_r); @@ -207,11 +202,6 @@ mail_index_transaction_commit_real(struct mail_index_transaction *t, mail_transaction_log_get_head(log, &log_seq2, &log_offset2); i_assert(log_seq1 == log_seq2); -#ifdef DEBUG - i_assert(t->reset || - expected_highest_modseq == log->head->sync_highest_modseq); -#endif - if (t->reset) { /* get rid of the old index. it might just confuse readers, especially if it's broken. */ diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index 7f34eb52bc..4a397f4810 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -450,11 +450,6 @@ void mail_index_transaction_reset(struct mail_index_transaction *t); void mail_index_transaction_set_max_modseq(struct mail_index_transaction *t, uint64_t max_modseq, ARRAY_TYPE(seq_range) *seqs); -/* Returns the resulting highest-modseq after this commit. This can be called - only if transaction log is locked, which normally means only during mail - index syncing. If there are any appends, they all must have been assigned - UIDs before calling this. */ -uint64_t mail_index_transaction_get_highest_modseq(struct mail_index_transaction *t); /* Returns the view transaction was created for. */ struct mail_index_view * diff --git a/src/lib-index/mail-transaction-log-file.c b/src/lib-index/mail-transaction-log-file.c index 3e66d7e00a..753cb65c76 100644 --- a/src/lib-index/mail-transaction-log-file.c +++ b/src/lib-index/mail-transaction-log-file.c @@ -1056,7 +1056,6 @@ void mail_transaction_update_modseq(const struct mail_transaction_header *hdr, return; } - /* NOTE: keep in sync with mail_index_transaction_get_highest_modseq() */ switch (hdr->type & MAIL_TRANSACTION_TYPE_MASK) { case MAIL_TRANSACTION_EXPUNGE | MAIL_TRANSACTION_EXPUNGE_PROT: case MAIL_TRANSACTION_EXPUNGE_GUID | MAIL_TRANSACTION_EXPUNGE_PROT: