mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
virnetdaemon: Introduce virNetDaemonQuitExecRestart
Recent changes which meant to fix daemon shutdown broke the exec-restart capability of virtlogd and virtlockd, since the code actually closed all the sockets and shut down all the internals. Add virNetDaemonQuitExecRestart, which requests a shutdown of the process, but keeps all the services open and registered since they are preserved across the restart. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
76f3b2988b
commit
c363f03e6d
@ -85,6 +85,7 @@ virNetDaemonNew;
|
|||||||
virNetDaemonNewPostExecRestart;
|
virNetDaemonNewPostExecRestart;
|
||||||
virNetDaemonPreExecRestart;
|
virNetDaemonPreExecRestart;
|
||||||
virNetDaemonQuit;
|
virNetDaemonQuit;
|
||||||
|
virNetDaemonQuitExecRestart;
|
||||||
virNetDaemonRemoveShutdownInhibition;
|
virNetDaemonRemoveShutdownInhibition;
|
||||||
virNetDaemonRun;
|
virNetDaemonRun;
|
||||||
virNetDaemonSetShutdownCallbacks;
|
virNetDaemonSetShutdownCallbacks;
|
||||||
|
@ -76,6 +76,7 @@ struct _virNetDaemon {
|
|||||||
bool quit;
|
bool quit;
|
||||||
bool finished;
|
bool finished;
|
||||||
bool graceful;
|
bool graceful;
|
||||||
|
bool execRestart;
|
||||||
|
|
||||||
unsigned int autoShutdownTimeout;
|
unsigned int autoShutdownTimeout;
|
||||||
size_t autoShutdownInhibitions;
|
size_t autoShutdownInhibitions;
|
||||||
@ -857,6 +858,10 @@ virNetDaemonRun(virNetDaemonPtr dmn)
|
|||||||
|
|
||||||
virHashForEach(dmn->servers, daemonServerProcessClients, NULL);
|
virHashForEach(dmn->servers, daemonServerProcessClients, NULL);
|
||||||
|
|
||||||
|
/* don't shutdown services when performing an exec-restart */
|
||||||
|
if (dmn->quit && dmn->execRestart)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
if (dmn->quit && dmn->finishTimer == -1) {
|
if (dmn->quit && dmn->finishTimer == -1) {
|
||||||
virHashForEach(dmn->servers, daemonServerClose, NULL);
|
virHashForEach(dmn->servers, daemonServerClose, NULL);
|
||||||
if (dmn->shutdownPrepareCb && dmn->shutdownPrepareCb() < 0)
|
if (dmn->shutdownPrepareCb && dmn->shutdownPrepareCb() < 0)
|
||||||
@ -912,6 +917,20 @@ virNetDaemonQuit(virNetDaemonPtr dmn)
|
|||||||
virObjectUnlock(dmn);
|
virObjectUnlock(dmn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
virNetDaemonQuitExecRestart(virNetDaemon *dmn)
|
||||||
|
{
|
||||||
|
virObjectLock(dmn);
|
||||||
|
|
||||||
|
VIR_DEBUG("Exec-restart requested %p", dmn);
|
||||||
|
dmn->quit = true;
|
||||||
|
dmn->execRestart = true;
|
||||||
|
|
||||||
|
virObjectUnlock(dmn);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
daemonServerClose(void *payload,
|
daemonServerClose(void *payload,
|
||||||
const char *key G_GNUC_UNUSED,
|
const char *key G_GNUC_UNUSED,
|
||||||
|
@ -75,6 +75,7 @@ void virNetDaemonSetStateStopWorkerThread(virNetDaemonPtr dmn,
|
|||||||
void virNetDaemonRun(virNetDaemonPtr dmn);
|
void virNetDaemonRun(virNetDaemonPtr dmn);
|
||||||
|
|
||||||
void virNetDaemonQuit(virNetDaemonPtr dmn);
|
void virNetDaemonQuit(virNetDaemonPtr dmn);
|
||||||
|
void virNetDaemonQuitExecRestart(virNetDaemon *dmn);
|
||||||
|
|
||||||
bool virNetDaemonHasClients(virNetDaemonPtr dmn);
|
bool virNetDaemonHasClients(virNetDaemonPtr dmn);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user