]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm: dsync - Search exportable mails with SMALLER
authorAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 11 Nov 2025 08:16:09 +0000 (10:16 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Tue, 11 Nov 2025 10:46:09 +0000 (12:46 +0200)
This speeds up dsync with -I, especially over network connection.

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

index 3a17511a6df817a1f97a627b8fa05d02d82107e5..7c40af49f27d3332387ead64ee6055d4dc1895ca 100644 (file)
@@ -357,6 +357,7 @@ int dsync_brain_sync_mailbox_open(struct dsync_brain *brain,
                .hdr_hash_version = brain->hdr_hash_version,
                .sync_since_timestamp = brain->sync_since_timestamp,
                .sync_until_timestamp = brain->sync_until_timestamp,
+               .sync_max_size = brain->sync_max_size,
                .hashed_headers = brain->hashed_headers,
                .parent_event = brain->event,
        };
index 4d977515817d161dc822354bde00bb8866e5b6f7..34907fccebf050d693c83d68dbddea87fc1d8bcd 100644 (file)
@@ -59,6 +59,7 @@ struct dsync_mailbox_exporter {
 
        time_t sync_since_timestamp;
        time_t sync_until_timestamp;
+       uoff_t sync_max_size;
 
        const char *error;
        enum mail_error mail_error;
@@ -418,6 +419,12 @@ dsync_mailbox_export_search(struct dsync_mailbox_exporter *exporter)
                sarg->value.time = exporter->sync_until_timestamp;
        }
 
+       if (exporter->sync_max_size != 0) {
+               sarg = mail_search_build_add(search_args, SEARCH_SMALLER);
+               /* the limit is <= but search criteria is < */
+               sarg->value.size = exporter->sync_max_size + 1;
+       }
+
        exporter->trans = mailbox_transaction_begin(exporter->box,
                                                MAILBOX_TRANSACTION_FLAG_SYNC,
                                                __func__);
@@ -545,6 +552,7 @@ dsync_mailbox_export_init(struct mailbox *box,
        exporter->hashed_headers = set->hashed_headers;
        exporter->sync_since_timestamp = set->sync_since_timestamp;
        exporter->sync_until_timestamp = set->sync_until_timestamp;
+       exporter->sync_max_size = set->sync_max_size;
        exporter->event = event_create(set->parent_event);
 
        p_array_init(&exporter->requested_uids, pool, 16);
index 0a42f657c1e693af276e052cf0226fcaf8703bdd..ae4df9ea37da9cc812d14519ddee628e3e5ece96 100644 (file)
@@ -17,6 +17,7 @@ struct dsync_mailbox_export_settings {
        const char *const *hashed_headers;
        time_t sync_since_timestamp;
        time_t sync_until_timestamp;
+       uoff_t sync_max_size;
        struct event *parent_event;
 };