mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-24 14:50:34 +03:00
lvmetad: fix timeout on shutdown
When lvmetad is going to be shutdown - there were 2 issue: If there was endless stream of command contacting lvmetad - the process would never finish - so now when we recieved SIGTERM - we are no longer accepting new connections and we just wait till the existing ones are finished. 2nd. issue is that actually when we are waiting for finish of all client threads - we basically want an usleep() and check if all threads are already finished - proper solution would be to singal from a thread there is some work to do for master thread - but that would be a bigger change and since lvmetad is no longer developed - keep the change minimal and just use pselect() as our '1sec.' sleeping call once we are in 'shutdown' mode. Reported-by: wangjufeng@huawei.com
This commit is contained in:
parent
5d6bf1efb2
commit
61358d92cb
@ -1,5 +1,6 @@
|
||||
Version 2.02.187 -
|
||||
===================================
|
||||
Fix lvmetad shutdown and avoid lenghty timeouts when rebooting system.
|
||||
Prevent creating VGs with PVs with different logical block sizes.
|
||||
Pvmove runs in exlusively activating mode for exclusively active LVs.
|
||||
Activate thin-pool layered volume as 'read-only' device.
|
||||
|
@ -89,6 +89,13 @@ static int _is_idle(daemon_state s)
|
||||
|
||||
static struct timespec *_get_timeout(daemon_state s)
|
||||
{
|
||||
static struct timespec _tm = { 0 };
|
||||
|
||||
if (_shutdown_requested) {
|
||||
_tm.tv_sec = 1;
|
||||
return &_tm;
|
||||
}
|
||||
|
||||
return s.idle ? s.idle->ptimeout : NULL;
|
||||
}
|
||||
|
||||
@ -506,7 +513,7 @@ static int _handle_connect(daemon_state s)
|
||||
socklen_t sl = sizeof(sockaddr);
|
||||
|
||||
client.socket_fd = accept(s.socket_fd, (struct sockaddr *) &sockaddr, &sl);
|
||||
if (client.socket_fd < 0) {
|
||||
if (client.socket_fd < 0 || _shutdown_requested) {
|
||||
if (errno != EAGAIN || !_shutdown_requested)
|
||||
ERROR(&s, "Failed to accept connection: %s.", strerror(errno));
|
||||
return 0;
|
||||
@ -672,7 +679,7 @@ void daemon_start(daemon_state s)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (FD_ISSET(s.socket_fd, &in)) {
|
||||
if (!_shutdown_requested && FD_ISSET(s.socket_fd, &in)) {
|
||||
timeout_count = 0;
|
||||
_handle_connect(s);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user