1
0
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:
Peter Rajnoha 2012-03-14 15:51:51 +00:00
parent 88bba90e6e
commit 93945bb616
5 changed files with 15 additions and 0 deletions

View File

@ -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).

View File

@ -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;

View File

@ -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;

View File

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

View File

@ -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