1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-03-10 16:58:47 +03:00

CLVMD support for LVM_CLVMD_BINARY and LVM_BINARY

Read 2 environmental vars to learn about overide position for
CLVMD and LVM binaries.

We support LVM_BINARY in other script - and this way we could easily
test restart in our test-suite.
This commit is contained in:
Zdenek Kabelac 2011-09-24 20:50:35 +00:00
parent a039e204e7
commit d2c116058e
7 changed files with 43 additions and 13 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.89 - Version 2.02.89 -
================================== ==================================
Support env vars LVM_CLVMD_BINARY and LVM_BINARY in clvmd.
Fix restart of clvmd (preserve exlusive locks). (2.02.64) Fix restart of clvmd (preserve exlusive locks). (2.02.64)
Add 'Volume Type' lv_attr characters for RAID and RAID_IMAGE. Add 'Volume Type' lv_attr characters for RAID and RAID_IMAGE.
Add activation/retry_deactivation to lvm.conf to retry deactivation of an LV. Add activation/retry_deactivation to lvm.conf to retry deactivation of an LV.

10
configure vendored
View File

@ -626,6 +626,7 @@ OCF
MIRRORS MIRRORS
LVM_RELEASE_DATE LVM_RELEASE_DATE
LVM_RELEASE LVM_RELEASE
LVM_PATH
LVM_PATCHLEVEL LVM_PATCHLEVEL
LVM_MINOR LVM_MINOR
LVM_MAJOR LVM_MAJOR
@ -664,6 +665,7 @@ DEBUG
COPTIMISE_FLAG COPTIMISE_FLAG
CONFDIR CONFDIR
CMDLIB CMDLIB
CLVMD_PATH
CLVMD_CMANAGERS CLVMD_CMANAGERS
CLVMD CLVMD
CLUSTER CLUSTER
@ -9913,18 +9915,20 @@ fi
lvm_exec_prefix=$exec_prefix lvm_exec_prefix=$exec_prefix
test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$prefix test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$prefix
test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$ac_default_prefix test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$ac_default_prefix
LVM_PATH="$lvm_exec_prefix/sbin/lvm"
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
#define LVM_PATH "$lvm_exec_prefix/sbin/lvm" #define LVM_PATH "$LVM_PATH"
_ACEOF _ACEOF
if test "$CLVMD" != none; then if test "$CLVMD" != none; then
clvmd_prefix=$ac_default_prefix clvmd_prefix=$ac_default_prefix
CLVMD_PATH="$clvmd_prefix/sbin/clvmd"
test "$prefix" != NONE && clvmd_prefix=$prefix test "$prefix" != NONE && clvmd_prefix=$prefix
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
#define CLVMD_PATH "$clvmd_prefix/sbin/clvmd" #define CLVMD_PATH "$CLVMD_PATH"
_ACEOF _ACEOF
fi fi
@ -10202,6 +10206,8 @@ LVM_LIBAPI=`echo "$VER" | $AWK -F '[()]' '{print $2}'`

View File

@ -1180,13 +1180,14 @@ fi
lvm_exec_prefix=$exec_prefix lvm_exec_prefix=$exec_prefix
test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$prefix test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$prefix
test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$ac_default_prefix test "$lvm_exec_prefix" = NONE && lvm_exec_prefix=$ac_default_prefix
AC_DEFINE_UNQUOTED(LVM_PATH, ["$lvm_exec_prefix/sbin/lvm"], [Path to lvm binary.]) LVM_PATH="$lvm_exec_prefix/sbin/lvm"
AC_DEFINE_UNQUOTED(LVM_PATH, ["$LVM_PATH"], [Path to lvm binary.])
if test "$CLVMD" != none; then if test "$CLVMD" != none; then
clvmd_prefix=$ac_default_prefix clvmd_prefix=$ac_default_prefix
CLVMD_PATH="$clvmd_prefix/sbin/clvmd"
test "$prefix" != NONE && clvmd_prefix=$prefix test "$prefix" != NONE && clvmd_prefix=$prefix
AC_DEFINE_UNQUOTED(CLVMD_PATH, ["$clvmd_prefix/sbin/clvmd"], AC_DEFINE_UNQUOTED(CLVMD_PATH, ["$CLVMD_PATH"], [Path to clvmd binary.])
[Path to clvmd binary.])
fi fi
################################################################################ ################################################################################
@ -1309,6 +1310,7 @@ AC_SUBST(CLDWHOLEARCHIVE)
AC_SUBST(CLUSTER) AC_SUBST(CLUSTER)
AC_SUBST(CLVMD) AC_SUBST(CLVMD)
AC_SUBST(CLVMD_CMANAGERS) AC_SUBST(CLVMD_CMANAGERS)
AC_SUBST(CLVMD_PATH)
AC_SUBST(CMAN_CFLAGS) AC_SUBST(CMAN_CFLAGS)
AC_SUBST(CMAN_LIBS) AC_SUBST(CMAN_LIBS)
AC_SUBST(CMDLIB) AC_SUBST(CMDLIB)
@ -1357,6 +1359,7 @@ AC_SUBST(LVM_LIBAPI)
AC_SUBST(LVM_MAJOR) AC_SUBST(LVM_MAJOR)
AC_SUBST(LVM_MINOR) AC_SUBST(LVM_MINOR)
AC_SUBST(LVM_PATCHLEVEL) AC_SUBST(LVM_PATCHLEVEL)
AC_SUBST(LVM_PATH)
AC_SUBST(LVM_RELEASE) AC_SUBST(LVM_RELEASE)
AC_SUBST(LVM_RELEASE_DATE) AC_SUBST(LVM_RELEASE_DATE)
AC_SUBST(MIRRORS) AC_SUBST(MIRRORS)

View File

@ -366,6 +366,7 @@ static int restart_clvmd(void)
int argc = 0, max_locks = 0; int argc = 0, max_locks = 0;
struct dm_hash_node *hn = NULL; struct dm_hash_node *hn = NULL;
char debug_arg[16]; char debug_arg[16];
const char *clvmd = getenv("LVM_CLVMD_BINARY") ? : CLVMD_PATH;
DEBUGLOG("clvmd restart requested\n"); DEBUGLOG("clvmd restart requested\n");
@ -415,11 +416,11 @@ static int restart_clvmd(void)
argv[argc] = NULL; argv[argc] = NULL;
/* Exec new clvmd */ /* Exec new clvmd */
DEBUGLOG("--- Restarting %s ---\n", CLVMD_PATH); DEBUGLOG("--- Restarting %s ---\n", clvmd);
for (argc = 1; argv[argc]; argc++) DEBUGLOG("--- %d: %s\n", argc, argv[argc]); for (argc = 1; argv[argc]; argc++) DEBUGLOG("--- %d: %s\n", argc, argv[argc]);
/* NOTE: This will fail when downgrading! */ /* NOTE: This will fail when downgrading! */
execve(CLVMD_PATH, (char **)argv, NULL); execve(clvmd, (char **)argv, NULL);
out: out:
/* We failed */ /* We failed */
DEBUGLOG("Restart of clvmd failed.\n"); DEBUGLOG("Restart of clvmd failed.\n");

View File

@ -704,14 +704,21 @@ static int get_initial_state(struct dm_hash_table *excl_uuid)
char lv[64], vg[64], flags[25], vg_flags[25]; char lv[64], vg[64], flags[25], vg_flags[25];
char uuid[65]; char uuid[65];
char line[255]; char line[255];
FILE *lvs = char *lvs_cmd;
popen const char *lvm_binary = getenv("LVM_BINARY") ? : LVM_PATH;
(LVM_PATH " lvs --config 'log{command_names=0 prefix=\"\"}' --nolocking --noheadings -o vg_uuid,lv_uuid,lv_attr,vg_attr", FILE *lvs;
"r");
if (!lvs) if (dm_asprintf(&lvs_cmd, "%s lvs --config 'log{command_names=0 prefix=\"\"}' "
"--nolocking --noheadings -o vg_uuid,lv_uuid,lv_attr,vg_attr",
lvm_binary) < 0)
return 0; return 0;
/* FIXME: Maybe link and use liblvm2cmd directly instead of fork */
if (!(lvs = popen(lvs_cmd, "r"))) {
dm_free(lvs_cmd);
return 0;
}
while (fgets(line, sizeof(line), lvs)) { while (fgets(line, sizeof(line), lvs)) {
if (sscanf(line, "%s %s %s %s\n", vg, lv, flags, vg_flags) == 4) { if (sscanf(line, "%s %s %s %s\n", vg, lv, flags, vg_flags) == 4) {
@ -749,6 +756,8 @@ static int get_initial_state(struct dm_hash_table *excl_uuid)
if (fclose(lvs)) if (fclose(lvs))
DEBUGLOG("lvs fclose failed: %s\n", strerror(errno)); DEBUGLOG("lvs fclose failed: %s\n", strerror(errno));
dm_free(lvs_cmd);
return 1; return 1;
} }

View File

@ -73,7 +73,7 @@ $(MAN5) $(MAN8) $(MAN8DM) $(MAN8CLUSTER): Makefile
%: %.in %: %.in
@case "$@" in \ @case "$@" in \
*/*) ;; \ */*) ;; \
*) echo "Creating $@" ; $(SED) -e "s+#VERSION#+$(LVM_VERSION)+;s+#DEFAULT_SYS_DIR#+$(DEFAULT_SYS_DIR)+;s+#DEFAULT_ARCHIVE_DIR#+$(DEFAULT_ARCHIVE_DIR)+;s+#DEFAULT_BACKUP_DIR#+$(DEFAULT_BACKUP_DIR)+;s+#DEFAULT_CACHE_DIR#+$(DEFAULT_CACHE_DIR)+;s+#DEFAULT_LOCK_DIR#+$(DEFAULT_LOCK_DIR)+" $< > $@ ;; \ *) echo "Creating $@" ; $(SED) -e "s+#VERSION#+$(LVM_VERSION)+;s+#DEFAULT_SYS_DIR#+$(DEFAULT_SYS_DIR)+;s+#DEFAULT_ARCHIVE_DIR#+$(DEFAULT_ARCHIVE_DIR)+;s+#DEFAULT_BACKUP_DIR#+$(DEFAULT_BACKUP_DIR)+;s+#DEFAULT_CACHE_DIR#+$(DEFAULT_CACHE_DIR)+;s+#DEFAULT_LOCK_DIR#+$(DEFAULT_LOCK_DIR)+;s+#CLVMD_PATH#+@CLVMD_PATH@+;s+#LVM_PATH#+@LVM_PATH@+;" $< > $@ ;; \
esac esac
install_man5: $(MAN5) install_man5: $(MAN5)

View File

@ -95,5 +95,15 @@ manually specify this option to override the search.
.TP .TP
.I \-V .I \-V
Display the version of the cluster LVM daemon. Display the version of the cluster LVM daemon.
.SH ENVIRONMENT VARIABLES
.TP
.B LVM_CLVMD_BINARY
The CLVMD binary to use when clmvd restart is requested.
Defaults to #CLVMD_PATH#.
.TP
.B LVM_BINARY
The LVM2 binary to use. Defaults to #LVM_PATH#.
.SH SEE ALSO .SH SEE ALSO
.BR lvm (8) .BR lvm (8)