mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Use SD_ACTIVATION env. var. in systemd units to better detect systemd in use.
LISTEN_PID and LISTEN_FDS environment variables are defined only during systemd "start" action. But we still need to know whether we're activated during "reload" action as well - we use the reload action to call "dmeventd -R"/"lvmetad -R" for statefull daemon restart. We can't use normal "restart" as that is simply composed of "stop" and "start" and we would lose any state the daemon has.
This commit is contained in:
parent
88bba90e6e
commit
93945bb616
@ -1,5 +1,6 @@
|
||||
Version 1.02.75 -
|
||||
================================
|
||||
Use SD_ACTIVATION env. var. in systemd units to better detect systemd in use.
|
||||
Do not run a new dmeventd instance on restart if there's no existing one.
|
||||
Make the time window for reading fifo longer 5sec (1.02.73).
|
||||
|
||||
|
@ -56,6 +56,7 @@
|
||||
# define OOM_SCORE_ADJ_MIN (-1000)
|
||||
|
||||
/* Systemd on-demand activation support */
|
||||
# define SD_ACTIVATION_ENV_VAR_NAME "SD_ACTIVATION"
|
||||
# define SD_LISTEN_PID_ENV_VAR_NAME "LISTEN_PID"
|
||||
# define SD_LISTEN_FDS_ENV_VAR_NAME "LISTEN_FDS"
|
||||
# define SD_LISTEN_FDS_START 3
|
||||
@ -1698,6 +1699,10 @@ static int _systemd_handover(struct dm_event_fifos *fifos)
|
||||
|
||||
memset(fifos, 0, sizeof(*fifos));
|
||||
|
||||
/* SD_ACTIVATION must be set! */
|
||||
if (!(e = getenv(SD_ACTIVATION_ENV_VAR_NAME)) || strcmp(e, "1"))
|
||||
goto out;
|
||||
|
||||
/* LISTEN_PID must be equal to our PID! */
|
||||
if (!(e = getenv(SD_LISTEN_PID_ENV_VAR_NAME)))
|
||||
goto out;
|
||||
@ -1729,6 +1734,7 @@ static int _systemd_handover(struct dm_event_fifos *fifos)
|
||||
}
|
||||
|
||||
out:
|
||||
unsetenv(SD_ACTIVATION_ENV_VAR_NAME);
|
||||
unsetenv(SD_LISTEN_PID_ENV_VAR_NAME);
|
||||
unsetenv(SD_LISTEN_FDS_ENV_VAR_NAME);
|
||||
return r;
|
||||
|
@ -69,6 +69,7 @@ static void _exit_handler(int sig __attribute__((unused)))
|
||||
# define OOM_SCORE_ADJ_MIN (-1000)
|
||||
|
||||
/* Systemd on-demand activation support */
|
||||
# define SD_ACTIVATION_ENV_VAR_NAME "SD_ACTIVATION"
|
||||
# define SD_LISTEN_PID_ENV_VAR_NAME "LISTEN_PID"
|
||||
# define SD_LISTEN_FDS_ENV_VAR_NAME "LISTEN_FDS"
|
||||
# define SD_LISTEN_FDS_START 3
|
||||
@ -164,6 +165,10 @@ static int _systemd_handover(struct daemon_state *ds)
|
||||
unsigned long env_pid, env_listen_fds;
|
||||
int r = 0;
|
||||
|
||||
/* SD_ACTIVATION must be set! */
|
||||
if (!(e = getenv(SD_ACTIVATION_ENV_VAR_NAME)) || strcmp(e, "1"))
|
||||
goto out;
|
||||
|
||||
/* LISTEN_PID must be equal to our PID! */
|
||||
if (!(e = getenv(SD_LISTEN_PID_ENV_VAR_NAME)))
|
||||
goto out;
|
||||
@ -188,6 +193,7 @@ static int _systemd_handover(struct daemon_state *ds)
|
||||
ds->socket_fd = SD_FD_SOCKET_SERVER;
|
||||
|
||||
out:
|
||||
unsetenv(SD_ACTIVATION_ENV_VAR_NAME);
|
||||
unsetenv(SD_LISTEN_PID_ENV_VAR_NAME);
|
||||
unsetenv(SD_LISTEN_FDS_ENV_VAR_NAME);
|
||||
return r;
|
||||
|
@ -9,6 +9,7 @@ DefaultDependencies=no
|
||||
Type=forking
|
||||
ExecStart=@sbindir@/dmeventd
|
||||
ExecReload=@sbindir@/dmeventd -R
|
||||
Environment=SD_ACTIVATION=1
|
||||
PIDFile=@DMEVENTD_PIDFILE@
|
||||
OOMScoreAdjust=-1000
|
||||
|
||||
|
@ -11,6 +11,7 @@ NonBlocking=true
|
||||
ExecStart=@sbindir@/lvmetad
|
||||
ExecStartPost=@sbindir@/vgscan
|
||||
ExecReload=@sbindir@/lvmetad -R
|
||||
Environment=SD_ACTIVATION=1
|
||||
Restart=on-abort
|
||||
PIDFile=@DEFAULT_RUN_DIR@/lvmetad.pid
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user