1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-02-24 17:57:48 +03:00

Let running clvmd process time to reexec.

Because execve stops the command loop,
we never receive response (only socket close) for clvmd -S,
so waiting for response here makes no sense.

But if the calling process (clvmd -S)  exits too early, connection
is closed from client side, clvmd takes this as an error and
never run restart code.

Ugly hack(TM).
This commit is contained in:
Milan Broz 2010-06-21 10:45:15 +00:00
parent 566515c095
commit aec39dcc34
2 changed files with 16 additions and 2 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.68 -
===============================
Add workaround for clvmd -S (socket closed too early and server drops the command).
Use early udev synchronisation and update of dev nodes for clustered mirrors.
Unneeded kdev_t.h reference causing harm for cmirrord on some archs.
Add man pages for lvmconf and unsupported lvmsadc and lvmsar tools.

View File

@ -327,8 +327,21 @@ int refresh_clvmd(int all_nodes)
int restart_clvmd(int all_nodes)
{
int dummy;
return _cluster_request(CLVMD_CMD_RESTART, all_nodes?"*":".", NULL, 0, NULL, &dummy, 1);
int dummy, status;
status = _cluster_request(CLVMD_CMD_RESTART, all_nodes?"*":".", NULL, 0, NULL, &dummy, 1);
/*
* FIXME: we cannot receive response, clvmd re-exec before it.
* but also should not close socket too early (the whole rq is dropped then).
* FIXME: This should be handled this way:
* - client waits for RESTART ack (and socket close)
* - server restarts
* - client checks that server is ready again (VERSION command?)
*/
usleep(500000);
return status;
}
int debug_clvmd(int level, int clusterwide)