Mercurial > dovecot > core-2.2
changeset 16396:2d6a3035a6f7
dsync: Small code cleanup.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 26 May 2013 21:20:47 +0300 |
parents | e0f7eb1c8e42 |
children | 0b02dc66e9f1 |
files | src/doveadm/dsync/doveadm-dsync.c src/doveadm/dsync/dsync-brain.c src/doveadm/dsync/dsync-brain.h |
diffstat | 3 files changed, 44 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/dsync/doveadm-dsync.c Sun May 26 21:07:09 2013 +0300 +++ b/src/doveadm/dsync/doveadm-dsync.c Sun May 26 21:20:47 2013 +0300 @@ -486,16 +486,22 @@ struct dsync_cmd_context *ctx = (struct dsync_cmd_context *)_ctx; struct dsync_ibc *ibc, *ibc2 = NULL; struct dsync_brain *brain; - struct mail_namespace *sync_ns = NULL; + struct dsync_brain_settings set; enum dsync_brain_flags brain_flags; bool remote_errors_logged = FALSE; int status = 0, ret = 0; + memset(&set, 0, sizeof(set)); + set.sync_box = ctx->mailbox; + memcpy(set.sync_box_guid, ctx->mailbox_guid, sizeof(set.sync_box_guid)); + set.lock_timeout_secs = ctx->lock_timeout; + set.state = ctx->state_input; + user->dsyncing = TRUE; if (ctx->namespace_prefix != NULL) { - sync_ns = mail_namespace_find(user->namespaces, - ctx->namespace_prefix); + set.sync_ns = mail_namespace_find(user->namespaces, + ctx->namespace_prefix); } if (ctx->run_type == DSYNC_RUN_TYPE_LOCAL) @@ -524,12 +530,9 @@ brain_flags |= DSYNC_BRAIN_FLAG_NO_MAIL_SYNC; if (doveadm_debug) brain_flags |= DSYNC_BRAIN_FLAG_DEBUG; - brain = dsync_brain_master_init(user, ibc, sync_ns, ctx->mailbox, - ctx->mailbox_guid, - ctx->sync_type, brain_flags, - ctx->lock_timeout, - ctx->state_input == NULL ? "" : - ctx->state_input); + + brain = dsync_brain_master_init(user, ibc, ctx->sync_type, + brain_flags, &set); if (ctx->run_type == DSYNC_RUN_TYPE_LOCAL) { if (cmd_dsync_run_local(ctx, user, brain, ibc2) < 0)
--- a/src/doveadm/dsync/dsync-brain.c Sun May 26 21:07:09 2013 +0300 +++ b/src/doveadm/dsync/dsync-brain.c Sun May 26 21:20:47 2013 +0300 @@ -86,32 +86,32 @@ struct dsync_brain * dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc, - struct mail_namespace *sync_ns, const char *sync_box, - const guid_128_t sync_box_guid, enum dsync_brain_sync_type sync_type, - enum dsync_brain_flags flags, unsigned int lock_timeout, - const char *state) + enum dsync_brain_flags flags, + const struct dsync_brain_settings *set) { struct dsync_ibc_settings ibc_set; struct dsync_brain *brain; const char *error; i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_UNKNOWN); - i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_STATE || *state != '\0'); + i_assert(sync_type != DSYNC_BRAIN_SYNC_TYPE_STATE || + (set->state != NULL && *set->state != '\0')); brain = dsync_brain_common_init(user, ibc); brain->sync_type = sync_type; - if (sync_ns != NULL) - brain->sync_ns = sync_ns; - brain->sync_box = p_strdup(brain->pool, sync_box); - memcpy(brain->sync_box_guid, sync_box_guid, sizeof(brain->sync_box_guid)); - brain->lock_timeout = lock_timeout; + if (set->sync_ns != NULL) + brain->sync_ns = set->sync_ns; + brain->sync_box = p_strdup(brain->pool, set->sync_box); + memcpy(brain->sync_box_guid, set->sync_box_guid, + sizeof(brain->sync_box_guid)); + brain->lock_timeout = set->lock_timeout_secs; brain->master_brain = TRUE; dsync_brain_set_flags(brain, flags); if (sync_type == DSYNC_BRAIN_SYNC_TYPE_STATE && dsync_mailbox_states_import(brain->mailbox_states, - brain->pool, state, &error) < 0) { + brain->pool, set->state, &error) < 0) { hash_table_clear(brain->mailbox_states, FALSE); i_error("Saved sync state is invalid, " "falling back to full sync: %s", error); @@ -121,12 +121,13 @@ memset(&ibc_set, 0, sizeof(ibc_set)); ibc_set.hostname = my_hostdomain(); - ibc_set.sync_ns_prefix = sync_ns == NULL ? NULL : sync_ns->prefix; - ibc_set.sync_box = sync_box; - memcpy(ibc_set.sync_box_guid, sync_box_guid, + ibc_set.sync_ns_prefix = set->sync_ns == NULL ? NULL : + set->sync_ns->prefix; + ibc_set.sync_box = set->sync_box; + memcpy(ibc_set.sync_box_guid, set->sync_box_guid, sizeof(ibc_set.sync_box_guid)); ibc_set.sync_type = sync_type; - ibc_set.lock_timeout = lock_timeout; + ibc_set.lock_timeout = set->lock_timeout_secs; /* reverse the backup direction for the slave */ ibc_set.brain_flags = flags & ~(DSYNC_BRAIN_FLAG_BACKUP_SEND | DSYNC_BRAIN_FLAG_BACKUP_RECV);
--- a/src/doveadm/dsync/dsync-brain.h Sun May 26 21:07:09 2013 +0300 +++ b/src/doveadm/dsync/dsync-brain.h Sun May 26 21:20:47 2013 +0300 @@ -30,13 +30,25 @@ DSYNC_BRAIN_SYNC_TYPE_STATE }; +struct dsync_brain_settings { + /* Sync only this namespace */ + struct mail_namespace *sync_ns; + /* Sync only this mailbox name */ + const char *sync_box; + /* Sync only this mailbox GUID */ + guid_128_t sync_box_guid; + + /* If non-zero, use dsync lock file for this user */ + unsigned int lock_timeout_secs; + /* Input state for DSYNC_BRAIN_SYNC_TYPE_STATE */ + const char *state; +}; + struct dsync_brain * dsync_brain_master_init(struct mail_user *user, struct dsync_ibc *ibc, - struct mail_namespace *sync_ns, const char *sync_box, - const guid_128_t sync_box_guid, enum dsync_brain_sync_type sync_type, - enum dsync_brain_flags flags, unsigned int lock_timeout, - const char *state); + enum dsync_brain_flags flags, + const struct dsync_brain_settings *set); struct dsync_brain * dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc); /* Returns 0 if everything was successful, -1 if syncing failed in some way */