Fix two bugs in mirroring.

First, Leaving off the source address caused a segfault in the
command-sending process because there was no NULL check on the ARGV
entry.

Second, while the migration thread sent a signal to the server to close
on successful completion, it didn't wait until the close actually
happened before releasing the IO lock.  This meant that any client
thread waiting on that IO lock could have a read or a write queued up
which could succeed despite the server shutdown.  This would have meant
dataloss as the guest would see a successful write to the wrong instance
of the file.  This patch adds a noddy serve_wait_for_close() function
which the mirror_runner calls to ensure that any clients will reject
operations they're waiting to complete.

This patch also adds a simple scenario test for migration, and fixes
TempFileWriter#read_original.
This commit is contained in:
Alex Young
2012-06-13 13:44:21 +01:00
parent b986f6b63e
commit 7d1c15b07a
7 changed files with 139 additions and 21 deletions

View File

@@ -559,6 +559,15 @@ void serve_signal_close( struct server * serve )
self_pipe_signal( serve->close_signal );
}
/* Block until the server closes the server_fd.
*/
void serve_wait_for_close( struct server * serve )
{
while( !fd_is_closed( serve->server_fd ) ){
usleep(10000);
}
}
/** Closes sockets, frees memory and waits for all client threads to finish */
void serve_cleanup(struct server* params,