Commit Graph

33 Commits

Author SHA1 Message Date
Alex Young
5794913fdf Delete the MS_FINALISE mirror state
It's not being used for anything.
2012-07-15 18:40:50 +01:00
Alex Young
2ea5a2e38a Unlink the control socket on clean shutdown
Previously, the behaviour was to unlink any control socket sat where we
wanted to open ours.  This would make us lose control of running servers
if we happened to collide accidentally.  With this patch, the new
process will abort() if there is a control socket squatting on the
path we want, and unlink it when it closes.

This means that an unclean shutdown will leave a dangling, unattached
control socket which will block a restart, but that's a better option
than intentionally cutting off running servers.
2012-07-13 14:09:52 +01:00
Alex Young
2f24d02a8f Remove unused variables
use_connect_from in control_mirror() and success in mode_serve() are no
longer used.
2012-07-13 09:34:18 +01:00
Alex Young
f3f017a87d Free all possibly held mutexes in error handlers
Now that we have 3 mutexes lying around, it's important that we check
and free these if necessary if error() is called in any thread that can
hold them.  To do this, we now have flexthread.c, which defines a
flexthread_mutex struct.  This is a wrapper around a pthread_mutex_t and
a pthread_t.  The idea is that in the error handler, the thread can
check whether it holds the mutex and can free it if and only if it does.
This is important because pthread fast mutexes can be freed by *any*
thread, not just the thread which holds them.

Note: it is only ever safe for a thread to check if it holds the mutex
itself.  It is *never* safe to check if another thread holds a mutex
without first locking that mutex, which makes the whole operation rather
pointless.
2012-07-11 09:43:16 +01:00
Alex Young
4de4cee3d0 Test for acl rejection 2012-06-28 13:29:22 +01:00
Alex Young
94b4fa887c Add mboxes 2012-06-27 15:45:33 +01:00
Alex Young
2078d17053 connect failure scenarios 2012-06-22 10:05:41 +01:00
Alex Young
e21beb1866 Add the REQUEST_ENTRUST nbd request type 2012-06-21 17:12:06 +01:00
Alex Young
a3dc670939 Squash valgrind errors by making sure client threads get joined on termination 2012-06-21 17:11:12 +01:00
Alex Young
50b0db7bf6 Reject mirroring if the remote size doesn't match the local size 2012-06-13 15:51:37 +01:00
Alex Young
c9ece5a63f Tidy mirror_runner somewhat 2012-06-13 15:45:59 +01:00
Alex Young
7d1c15b07a 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.
2012-06-13 13:44:21 +01:00
Alex Young
b986f6b63e Take _GNU_SOURCE out of source and put it in CFLAGS 2012-06-13 09:59:08 +01:00
Alex Young
c7525f87dc Removed proxying completely and fixed the pthread_join bug revealed in the process 2012-06-12 15:08:07 +01:00
Alex Young
2a71b4e7a4 Fix broken error checking around pthread functions 2012-06-11 16:08:19 +01:00
Alex Young
710d8254d4 Make sure all ifs are braced 2012-06-11 14:34:17 +01:00
Alex Young
25fc0969cf Make the compiler stricter and tidy up code to make the subsequent errors and warnings go away 2012-06-11 13:57:03 +01:00
Matthew Bloch
e8b5fae7ab Merge, just renaming old error macros. 2012-06-09 02:37:23 +01:00
Matthew Bloch
b546539ab8 Rewrote error & log functions to be more general, use longjmp to get out of
trouble and into predictable cleanup functions (one for each of serve,
client & control contexts).  We use 'fatal' to mean 'kill the thread' and
'error' to mean 'don't kill the thread', assuming some recovery action,
except I don't use error anywhere yet.
2012-06-09 02:25:12 +01:00
Alex Young
f7e1a098b1 Move updating the acl object into serve.c
* * *
Replacing the server acl sends an acl_updated signal
2012-06-08 10:32:33 +01:00
Alex Young
2d9d00b636 Pull ACLs into their own struct 2012-06-07 17:47:43 +01:00
Alex Young
e8b47d5855 Remove the accept lock as being unneeded 2012-06-06 14:07:55 +01:00
Alex Young
1fc76ad77f Merge 2012-06-06 13:44:49 +01:00
Alex Young
16001eb9eb Move checking for a closed client out of server_lock_io and into client_serve_request 2012-06-06 13:44:38 +01:00
Alex Young
339e766339 Use self_pipe for close_signal 2012-06-06 12:41:03 +01:00
nick
14c9468b68 Automated merge with ssh://dev/flexnbd-c 2012-06-06 12:35:18 +01:00
nick
7544a59da1 mirror: Add --bind to our mirror mode.
Mirroring doesn't actually work yet, of course.
2012-06-06 12:35:01 +01:00
Alex Young
a80c5ce6b5 Moved sockaddr_address_data to serve.c and renamed params.h to serve.h 2012-06-06 10:45:07 +01:00
Alex Young
cc97dd4842 Rename control to control_fd and struct mode_serve_params to struct server 2012-06-06 10:35:50 +01:00
nick
8a2fd06c31 flexnbd: Add --bind to flexnbd read and flexnbd write 2012-06-06 09:55:08 +01:00
mbloch
c6dd4fbd89 Merge 2012-05-30 20:14:14 +01:00
Alex Young
0102217019 Merge 2012-05-30 15:39:55 +01:00
Alex Young
7832958522 Rearranged the project to have src/ and build/ directories
This simplifies keeping everything clean.
2012-05-30 09:51:20 +01:00