]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Error handling fixes.
authorTimo Sirainen <tss@iki.fi>
Mon, 9 Aug 2010 18:59:19 +0000 (19:59 +0100)
committerTimo Sirainen <tss@iki.fi>
Mon, 9 Aug 2010 18:59:19 +0000 (19:59 +0100)
Mainly fixes quota of quota error while saving.

src/dsync/dsync-brain.c
src/dsync/dsync-proxy-server.c
src/dsync/dsync-worker.c

index b15305bf13d88187b6747fd76ffde1233183ee39..8c41d46966c35608a368784dd0857938fc958136 100644 (file)
@@ -879,6 +879,11 @@ void dsync_brain_sync_all(struct dsync_brain *brain)
        while (brain->state != DSYNC_STATE_SYNC_END) {
                old_state = brain->state;
                dsync_brain_sync(brain);
+
+               if (dsync_worker_has_failed(brain->src_worker) ||
+                   dsync_worker_has_failed(brain->dest_worker))
+                       break;
+
                i_assert(brain->state != old_state);
        }
 }
index dd98ad5d67a67ebb5588208f5bf90e523973183f..d51bd50a46d7800017a3d1ab08a4b579afda6946 100644 (file)
@@ -52,8 +52,10 @@ static int proxy_server_run_cmd(struct dsync_proxy_server *server)
 
        if ((ret = server->cur_cmd->func(server, server->cur_args)) == 0)
                return 0;
-       if (ret < 0)
+       if (ret < 0) {
                i_error("command %s failed", server->cur_cmd->name);
+               return -1;
+       }
 
        server->cur_cmd = NULL;
        server->cur_args = NULL;
index ff5ab50538a8cd8a9a92d7f5d6eed3601b05cb71..035924e246401b184c2185982a2f0b31260f75a3 100644 (file)
@@ -228,7 +228,9 @@ void dsync_worker_msg_save(struct dsync_worker *worker,
                           void *context)
 {
        if (!worker->readonly) {
-               if (!worker->failed) T_BEGIN {
+               if (worker->failed)
+                       callback(context);
+               else T_BEGIN {
                        worker->v.msg_save(worker, msg, data,
                                           callback, context);
                } T_END;