1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-01-18 10:04:20 +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:
Peter Rajnoha 2012-03-14 15:51:51 +00:00
parent 682be508c6
commit 23a88f868d
5 changed files with 15 additions and 0 deletions

View File

@ -1,5 +1,6 @@
Version 1.02.75 - 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. 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). Make the time window for reading fifo longer 5sec (1.02.73).

View File

@ -56,6 +56,7 @@
# define OOM_SCORE_ADJ_MIN (-1000) # define OOM_SCORE_ADJ_MIN (-1000)
/* Systemd on-demand activation support */ /* 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_PID_ENV_VAR_NAME "LISTEN_PID"
# define SD_LISTEN_FDS_ENV_VAR_NAME "LISTEN_FDS" # define SD_LISTEN_FDS_ENV_VAR_NAME "LISTEN_FDS"
# define SD_LISTEN_FDS_START 3 # define SD_LISTEN_FDS_START 3
@ -1698,6 +1699,10 @@ static int _systemd_handover(struct dm_event_fifos *fifos)
memset(fifos, 0, sizeof(*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! */ /* LISTEN_PID must be equal to our PID! */
if (!(e = getenv(SD_LISTEN_PID_ENV_VAR_NAME))) if (!(e = getenv(SD_LISTEN_PID_ENV_VAR_NAME)))
goto out; goto out;
@ -1729,6 +1734,7 @@ static int _systemd_handover(struct dm_event_fifos *fifos)
} }
out: out:
unsetenv(SD_ACTIVATION_ENV_VAR_NAME);
unsetenv(SD_LISTEN_PID_ENV_VAR_NAME); unsetenv(SD_LISTEN_PID_ENV_VAR_NAME);
unsetenv(SD_LISTEN_FDS_ENV_VAR_NAME); unsetenv(SD_LISTEN_FDS_ENV_VAR_NAME);
return r; return r;

View File

@ -69,6 +69,7 @@ static void _exit_handler(int sig __attribute__((unused)))
# define OOM_SCORE_ADJ_MIN (-1000) # define OOM_SCORE_ADJ_MIN (-1000)
/* Systemd on-demand activation support */ /* 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_PID_ENV_VAR_NAME "LISTEN_PID"
# define SD_LISTEN_FDS_ENV_VAR_NAME "LISTEN_FDS" # define SD_LISTEN_FDS_ENV_VAR_NAME "LISTEN_FDS"
# define SD_LISTEN_FDS_START 3 # 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; unsigned long env_pid, env_listen_fds;
int r = 0; 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! */ /* LISTEN_PID must be equal to our PID! */
if (!(e = getenv(SD_LISTEN_PID_ENV_VAR_NAME))) if (!(e = getenv(SD_LISTEN_PID_ENV_VAR_NAME)))
goto out; goto out;
@ -188,6 +193,7 @@ static int _systemd_handover(struct daemon_state *ds)
ds->socket_fd = SD_FD_SOCKET_SERVER; ds->socket_fd = SD_FD_SOCKET_SERVER;
out: out:
unsetenv(SD_ACTIVATION_ENV_VAR_NAME);
unsetenv(SD_LISTEN_PID_ENV_VAR_NAME); unsetenv(SD_LISTEN_PID_ENV_VAR_NAME);
unsetenv(SD_LISTEN_FDS_ENV_VAR_NAME); unsetenv(SD_LISTEN_FDS_ENV_VAR_NAME);
return r; return r;

View File

@ -9,6 +9,7 @@ DefaultDependencies=no
Type=forking Type=forking
ExecStart=@sbindir@/dmeventd ExecStart=@sbindir@/dmeventd
ExecReload=@sbindir@/dmeventd -R ExecReload=@sbindir@/dmeventd -R
Environment=SD_ACTIVATION=1
PIDFile=@DMEVENTD_PIDFILE@ PIDFile=@DMEVENTD_PIDFILE@
OOMScoreAdjust=-1000 OOMScoreAdjust=-1000

View File

@ -11,6 +11,7 @@ NonBlocking=true
ExecStart=@sbindir@/lvmetad ExecStart=@sbindir@/lvmetad
ExecStartPost=@sbindir@/vgscan ExecStartPost=@sbindir@/vgscan
ExecReload=@sbindir@/lvmetad -R ExecReload=@sbindir@/lvmetad -R
Environment=SD_ACTIVATION=1
Restart=on-abort Restart=on-abort
PIDFile=@DEFAULT_RUN_DIR@/lvmetad.pid PIDFile=@DEFAULT_RUN_DIR@/lvmetad.pid