]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: dsync - Extract dsync_mailbox_import_init() arguments to a structure
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 11 Nov 2025 07:00:07 +0000 (09:00 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 11 Nov 2025 10:46:09 +0000 (12:46 +0200)
It's easier to extend in future

src/doveadm/dsync/dsync-brain-mailbox.c
src/doveadm/dsync/dsync-mailbox-import.c
src/doveadm/dsync/dsync-mailbox-import.h

index cdb20bd86e743b8827076d2e02f6b10f305bdf95..84d25c18f7251850375b33984547e06fc2a6e5b2 100644 (file)
@@ -220,24 +220,30 @@ dsync_brain_sync_mailbox_init_remote(struct dsync_brain *brain,
        if (brain->no_header_hashes)
                import_flags |= DSYNC_MAILBOX_IMPORT_FLAG_NO_HEADER_HASHES;
 
+       const struct dsync_mailbox_import_settings import_set = {
+               .virtual_all_box = brain->virtual_all_box,
+               .last_common_uid = last_common_uid,
+               .last_common_modseq = last_common_modseq,
+               .last_common_pvt_modseq = last_common_pvt_modseq,
+               .remote_uid_next = remote_dsync_box->uid_next,
+               .remote_first_recent_uid = remote_dsync_box->first_recent_uid,
+               .remote_highest_modseq = remote_dsync_box->highest_modseq,
+               .remote_highest_pvt_modseq = remote_dsync_box->highest_pvt_modseq,
+               .sync_since_timestamp = brain->sync_since_timestamp,
+               .sync_until_timestamp = brain->sync_until_timestamp,
+               .sync_max_size = brain->sync_max_size,
+               .sync_flag = brain->sync_flag,
+               .commit_msgs_interval = brain->import_commit_msgs_interval,
+               .flags = import_flags,
+               .hdr_hash_version = brain->hdr_hash_version,
+               .hashed_headers = brain->hashed_headers,
+               .parent_event = brain->event,
+       };
+
        brain->box_importer = brain->backup_send ? NULL :
                dsync_mailbox_import_init(brain->box,
-                                         brain->virtual_all_box,
                                          brain->log_scan,
-                                         last_common_uid, last_common_modseq,
-                                         last_common_pvt_modseq,
-                                         remote_dsync_box->uid_next,
-                                         remote_dsync_box->first_recent_uid,
-                                         remote_dsync_box->highest_modseq,
-                                         remote_dsync_box->highest_pvt_modseq,
-                                         brain->sync_since_timestamp,
-                                         brain->sync_until_timestamp,
-                                         brain->sync_max_size,
-                                         brain->sync_flag,
-                                         brain->import_commit_msgs_interval,
-                                         import_flags, brain->hdr_hash_version,
-                                         brain->hashed_headers,
-                                         brain->event);
+                                         &import_set);
 }
 
 int dsync_brain_sync_mailbox_open(struct dsync_brain *brain,
index 07f0733fba6104de88784b5d981c09651f519855..c879ca406138fa273fafc7e5537a43503cc438df 100644 (file)
@@ -204,53 +204,38 @@ dsync_mailbox_import_transaction_begin(struct dsync_mailbox_importer *importer)
 
 struct dsync_mailbox_importer *
 dsync_mailbox_import_init(struct mailbox *box,
-                         struct mailbox *virtual_all_box,
                          struct dsync_transaction_log_scan *log_scan,
-                         uint32_t last_common_uid,
-                         uint64_t last_common_modseq,
-                         uint64_t last_common_pvt_modseq,
-                         uint32_t remote_uid_next,
-                         uint32_t remote_first_recent_uid,
-                         uint64_t remote_highest_modseq,
-                         uint64_t remote_highest_pvt_modseq,
-                         time_t sync_since_timestamp,
-                         time_t sync_until_timestamp,
-                         uoff_t sync_max_size,
-                         const char *sync_flag,
-                         unsigned int commit_msgs_interval,
-                         enum dsync_mailbox_import_flags flags,
-                         unsigned int hdr_hash_version,
-                         const char *const *hashed_headers,
-                         struct event *parent_event)
+                         const struct dsync_mailbox_import_settings *set)
 {
        struct dsync_mailbox_importer *importer;
        struct mailbox_status status;
        pool_t pool;
+       const char *sync_flag = set->sync_flag;
 
        pool = pool_alloconly_create(MEMPOOL_GROWING"dsync mailbox importer",
                                     10240);
        importer = p_new(pool, struct dsync_mailbox_importer, 1);
        importer->pool = pool;
-       importer->event = event_create(parent_event);
+       importer->event = event_create(set->parent_event);
        event_set_append_log_prefix(importer->event, t_strdup_printf(
                "Import mailbox %s: ", mailbox_get_vname(box)));
 
        importer->box = box;
-       importer->virtual_all_box = virtual_all_box;
-       importer->last_common_uid = last_common_uid;
-       importer->last_common_modseq = last_common_modseq;
-       importer->last_common_pvt_modseq = last_common_pvt_modseq;
+       importer->virtual_all_box = set->virtual_all_box;
+       importer->last_common_uid = set->last_common_uid;
+       importer->last_common_modseq = set->last_common_modseq;
+       importer->last_common_pvt_modseq = set->last_common_pvt_modseq;
        importer->last_common_uid_found =
-               last_common_uid != 0 || last_common_modseq != 0;
-       importer->remote_uid_next = remote_uid_next;
-       importer->remote_first_recent_uid = remote_first_recent_uid;
-       importer->remote_highest_modseq = remote_highest_modseq;
-       importer->remote_highest_pvt_modseq = remote_highest_pvt_modseq;
-       importer->sync_since_timestamp = sync_since_timestamp;
-       importer->sync_until_timestamp = sync_until_timestamp;
-       importer->sync_max_size = sync_max_size;
+               set->last_common_uid != 0 || set->last_common_modseq != 0;
+       importer->remote_uid_next = set->remote_uid_next;
+       importer->remote_first_recent_uid = set->remote_first_recent_uid;
+       importer->remote_highest_modseq = set->remote_highest_modseq;
+       importer->remote_highest_pvt_modseq = set->remote_highest_pvt_modseq;
+       importer->sync_since_timestamp = set->sync_since_timestamp;
+       importer->sync_until_timestamp = set->sync_until_timestamp;
+       importer->sync_max_size = set->sync_max_size;
        importer->stateful_import = importer->last_common_uid_found;
-       importer->hashed_headers = hashed_headers;
+       importer->hashed_headers = set->hashed_headers;
 
        if (sync_flag != NULL) {
                if (sync_flag[0] == '-') {
@@ -262,9 +247,9 @@ dsync_mailbox_import_init(struct mailbox *box,
                else
                        importer->sync_keyword = p_strdup(pool, sync_flag);
        }
-       importer->commit_msgs_interval = commit_msgs_interval;
+       importer->commit_msgs_interval = set->commit_msgs_interval;
        importer->transaction_flags = MAILBOX_TRANSACTION_FLAG_SYNC;
-       if ((flags & DSYNC_MAILBOX_IMPORT_FLAG_NO_NOTIFY) != 0)
+       if ((set->flags & DSYNC_MAILBOX_IMPORT_FLAG_NO_NOTIFY) != 0)
                importer->transaction_flags |= MAILBOX_TRANSACTION_FLAG_NO_NOTIFY;
 
        hash_table_create(&importer->import_guids, pool, 0, str_hash, strcmp);
@@ -277,23 +262,23 @@ dsync_mailbox_import_init(struct mailbox *box,
 
        dsync_mailbox_import_transaction_begin(importer);
 
-       if ((flags & DSYNC_MAILBOX_IMPORT_FLAG_WANT_MAIL_REQUESTS) != 0) {
+       if ((set->flags & DSYNC_MAILBOX_IMPORT_FLAG_WANT_MAIL_REQUESTS) != 0) {
                i_array_init(&importer->mail_requests, 128);
                importer->want_mail_requests = TRUE;
        }
        importer->master_brain =
-               (flags & DSYNC_MAILBOX_IMPORT_FLAG_MASTER_BRAIN) != 0;
+               (set->flags & DSYNC_MAILBOX_IMPORT_FLAG_MASTER_BRAIN) != 0;
        importer->revert_local_changes =
-               (flags & DSYNC_MAILBOX_IMPORT_FLAG_REVERT_LOCAL_CHANGES) != 0;
+               (set->flags & DSYNC_MAILBOX_IMPORT_FLAG_REVERT_LOCAL_CHANGES) != 0;
        importer->mails_have_guids =
-               (flags & DSYNC_MAILBOX_IMPORT_FLAG_MAILS_HAVE_GUIDS) != 0;
+               (set->flags & DSYNC_MAILBOX_IMPORT_FLAG_MAILS_HAVE_GUIDS) != 0;
        importer->mails_use_guid128 =
-               (flags & DSYNC_MAILBOX_IMPORT_FLAG_MAILS_USE_GUID128) != 0;
-       importer->hdr_hash_version = hdr_hash_version;
+               (set->flags & DSYNC_MAILBOX_IMPORT_FLAG_MAILS_USE_GUID128) != 0;
+       importer->hdr_hash_version = set->hdr_hash_version;
        importer->empty_hdr_workaround =
-               (flags & DSYNC_MAILBOX_IMPORT_FLAG_EMPTY_HDR_WORKAROUND) != 0;
+               (set->flags & DSYNC_MAILBOX_IMPORT_FLAG_EMPTY_HDR_WORKAROUND) != 0;
        importer->no_header_hashes =
-               (flags & DSYNC_MAILBOX_IMPORT_FLAG_NO_HEADER_HASHES) != 0;
+               (set->flags & DSYNC_MAILBOX_IMPORT_FLAG_NO_HEADER_HASHES) != 0;
        mailbox_get_open_status(importer->box, STATUS_UIDNEXT |
                                STATUS_HIGHESTMODSEQ | STATUS_HIGHESTPVTMODSEQ,
                                &status);
@@ -306,20 +291,20 @@ dsync_mailbox_import_init(struct mailbox *box,
 
        if (!importer->stateful_import)
                ;
-       else if (importer->local_uid_next <= last_common_uid) {
+       else if (importer->local_uid_next <= set->last_common_uid) {
                dsync_import_unexpected_state(importer, t_strdup_printf(
                        "local UIDNEXT %u <= last common UID %u",
-                       importer->local_uid_next, last_common_uid));
-       } else if (importer->local_initial_highestmodseq < last_common_modseq) {
+                       importer->local_uid_next, set->last_common_uid));
+       } else if (importer->local_initial_highestmodseq < set->last_common_modseq) {
                dsync_import_unexpected_state(importer, t_strdup_printf(
                        "local HIGHESTMODSEQ %"PRIu64" < last common HIGHESTMODSEQ %"PRIu64,
                        importer->local_initial_highestmodseq,
-                       last_common_modseq));
-       } else if (importer->local_initial_highestpvtmodseq < last_common_pvt_modseq) {
+                       set->last_common_modseq));
+       } else if (importer->local_initial_highestpvtmodseq < set->last_common_pvt_modseq) {
                dsync_import_unexpected_state(importer, t_strdup_printf(
                        "local HIGHESTMODSEQ %"PRIu64" < last common HIGHESTMODSEQ %"PRIu64,
                        importer->local_initial_highestpvtmodseq,
-                       last_common_pvt_modseq));
+                       set->last_common_pvt_modseq));
        }
 
        importer->local_changes = dsync_transaction_log_scan_get_hash(log_scan);
index 65a3070f3a287576e93ed243345a82990f1c75eb..7741c95415fa423876737be202cf4105247e0c0d 100644 (file)
@@ -20,26 +20,30 @@ struct dsync_mail;
 struct dsync_mail_change;
 struct dsync_transaction_log_scan;
 
+struct dsync_mailbox_import_settings {
+       struct mailbox *virtual_all_box;
+       uint32_t last_common_uid;
+       uint64_t last_common_modseq;
+       uint64_t last_common_pvt_modseq;
+       uint32_t remote_uid_next;
+       uint32_t remote_first_recent_uid;
+       uint64_t remote_highest_modseq;
+       uint64_t remote_highest_pvt_modseq;
+       time_t sync_since_timestamp;
+       time_t sync_until_timestamp;
+       uoff_t sync_max_size;
+       const char *sync_flag;
+       unsigned int commit_msgs_interval;
+       enum dsync_mailbox_import_flags flags;
+       unsigned int hdr_hash_version;
+       const char *const *hashed_headers;
+       struct event *parent_event;
+};
+
 struct dsync_mailbox_importer *
 dsync_mailbox_import_init(struct mailbox *box,
-                         struct mailbox *virtual_all_box,
                          struct dsync_transaction_log_scan *log_scan,
-                         uint32_t last_common_uid,
-                         uint64_t last_common_modseq,
-                         uint64_t last_common_pvt_modseq,
-                         uint32_t remote_uid_next,
-                         uint32_t remote_first_recent_uid,
-                         uint64_t remote_highest_modseq,
-                         uint64_t remote_highest_pvt_modseq,
-                         time_t sync_since_timestamp,
-                         time_t sync_until_timestamp,
-                         uoff_t sync_max_size,
-                         const char *sync_flag,
-                         unsigned int commit_msgs_interval,
-                         enum dsync_mailbox_import_flags flags,
-                         unsigned int hdr_hash_version,
-                         const char *const *hashed_headers,
-                         struct event *event);
+                         const struct dsync_mailbox_import_settings *set);
 int dsync_mailbox_import_attribute(struct dsync_mailbox_importer *importer,
                                   const struct dsync_mailbox_attribute *attr);
 int dsync_mailbox_import_change(struct dsync_mailbox_importer *importer,