From: Timo Sirainen Date: Fri, 28 May 2004 01:04:01 +0000 (+0300) Subject: Don't complain about transaction log indexid changes when rebuilding index. X-Git-Tag: 1.1.alpha1~4033 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e687badfdd7f4001e9a89a80a2c4a79ec4bafc8d;p=thirdparty%2Fdovecot%2Fcore.git Don't complain about transaction log indexid changes when rebuilding index. --HG-- branch : HEAD --- diff --git a/src/lib-index/mail-index-private.h b/src/lib-index/mail-index-private.h index b9b55cfe20..36bd22241a 100644 --- a/src/lib-index/mail-index-private.h +++ b/src/lib-index/mail-index-private.h @@ -73,7 +73,6 @@ struct mail_index { unsigned int fsck:1; }; -void mail_index_header_init(struct mail_index_header *hdr); int mail_index_write_header(struct mail_index *index, const struct mail_index_header *hdr); diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 1928f603aa..621b73207f 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -425,28 +425,6 @@ mail_index_try_open(struct mail_index *index, unsigned int *lock_id_r) return ret; } -void mail_index_header_init(struct mail_index_header *hdr) -{ - time_t now = time(NULL); - - memset(hdr, 0, sizeof(*hdr)); - - hdr->major_version = MAIL_INDEX_MAJOR_VERSION; - hdr->minor_version = MAIL_INDEX_MINOR_VERSION; - hdr->header_size = sizeof(*hdr); - -#ifndef WORDS_BIGENDIAN - hdr->compat_data[0] = MAIL_INDEX_COMPAT_LITTLE_ENDIAN; -#endif - hdr->compat_data[1] = sizeof(uoff_t); - hdr->compat_data[2] = sizeof(time_t); - hdr->compat_data[3] = sizeof(keywords_mask_t); - - hdr->indexid = now; - - hdr->next_uid = 1; -} - int mail_index_write_header(struct mail_index *index, const struct mail_index_header *hdr) { @@ -545,6 +523,28 @@ static int mail_index_create(struct mail_index *index, return 1; } +static void mail_index_header_init(struct mail_index_header *hdr) +{ + time_t now = time(NULL); + + memset(hdr, 0, sizeof(*hdr)); + + hdr->major_version = MAIL_INDEX_MAJOR_VERSION; + hdr->minor_version = MAIL_INDEX_MINOR_VERSION; + hdr->header_size = sizeof(*hdr); + +#ifndef WORDS_BIGENDIAN + hdr->compat_data[0] = MAIL_INDEX_COMPAT_LITTLE_ENDIAN; +#endif + hdr->compat_data[1] = sizeof(uoff_t); + hdr->compat_data[2] = sizeof(time_t); + hdr->compat_data[3] = sizeof(keywords_mask_t); + + hdr->indexid = now; + + hdr->next_uid = 1; +} + static int mail_index_open_files(struct mail_index *index, enum mail_index_open_flags flags) { diff --git a/src/lib-index/mail-transaction-log.c b/src/lib-index/mail-transaction-log.c index b2e9abe4ab..8fb059a85f 100644 --- a/src/lib-index/mail-transaction-log.c +++ b/src/lib-index/mail-transaction-log.c @@ -307,12 +307,13 @@ mail_transaction_log_file_read_hdr(struct mail_transaction_log_file *file, file->filepath); return 0; } - if (file->hdr.indexid != file->log->index->indexid && - file->log->index->indexid != 0) { - /* either index was just recreated, or transaction has wrong - indexid. we don't know here which one is the case, so we'll - just fail. If index->indexid == 0, we're rebuilding it and - we just want to lock the transaction log. */ + if (file->hdr.indexid != file->log->index->indexid) { + if (file->log->index->fd == -1) { + /* creating index file, silently rebuild + transaction log as well */ + return 0; + } + mail_index_set_error(file->log->index, "Transaction log file %s: invalid indexid (%u != %u)", file->filepath, file->hdr.indexid,