|
Peter Rajnoha |
785220 |
diff --git a/WHATS_NEW b/WHATS_NEW
|
|
Peter Rajnoha |
785220 |
index 5887ec7..d0e0cd4 100644
|
|
Peter Rajnoha |
785220 |
--- a/WHATS_NEW
|
|
Peter Rajnoha |
785220 |
+++ b/WHATS_NEW
|
|
Peter Rajnoha |
785220 |
@@ -1,5 +1,6 @@
|
|
Peter Rajnoha |
785220 |
Version 2.02.99 -
|
|
Peter Rajnoha |
785220 |
===================================
|
|
Peter Rajnoha |
785220 |
+ Initialize lvmetad lazily to avoid early socket access on config overrides.
|
|
Peter Rajnoha |
785220 |
Hardcode use_lvmetad=0 if cluster locking used and issue a warning msg.
|
|
Peter Rajnoha |
785220 |
|
|
Peter Rajnoha |
785220 |
Version 2.02.98 - 15th October 2012
|
|
Peter Rajnoha |
785220 |
diff --git a/lib/cache/lvmetad.c b/lib/cache/lvmetad.c
|
|
Peter Rajnoha |
785220 |
index 6a374ac..72e07fd 100644
|
|
Peter Rajnoha |
785220 |
--- a/lib/cache/lvmetad.c
|
|
Peter Rajnoha |
785220 |
+++ b/lib/cache/lvmetad.c
|
|
Peter Rajnoha |
785220 |
@@ -33,7 +33,8 @@ static struct cmd_context *_lvmetad_cmd = NULL;
|
|
Peter Rajnoha |
785220 |
|
|
Peter Rajnoha |
785220 |
void lvmetad_disconnect(void)
|
|
Peter Rajnoha |
785220 |
{
|
|
Peter Rajnoha |
785220 |
- daemon_close(_lvmetad);
|
|
Peter Rajnoha |
785220 |
+ if (_lvmetad_connected)
|
|
Peter Rajnoha |
785220 |
+ daemon_close(_lvmetad);
|
|
Peter Rajnoha |
785220 |
_lvmetad_connected = 0;
|
|
Peter Rajnoha |
785220 |
_lvmetad_cmd = NULL;
|
|
Peter Rajnoha |
785220 |
}
|
|
Peter Rajnoha |
785220 |
@@ -41,19 +42,25 @@ void lvmetad_disconnect(void)
|
|
Peter Rajnoha |
785220 |
void lvmetad_init(struct cmd_context *cmd)
|
|
Peter Rajnoha |
785220 |
{
|
|
Peter Rajnoha |
785220 |
if (!_lvmetad_use && !access(LVMETAD_PIDFILE, F_OK))
|
|
Peter Rajnoha |
785220 |
- log_warn("WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!");
|
|
Peter Rajnoha |
785220 |
+ log_warn("WARNING: lvmetad is running but disabled."
|
|
Peter Rajnoha |
785220 |
+ " Restart lvmetad before enabling it!");
|
|
Peter Rajnoha |
785220 |
+ _lvmetad_cmd = cmd;
|
|
Peter Rajnoha |
785220 |
+}
|
|
Peter Rajnoha |
785220 |
+
|
|
Peter Rajnoha |
785220 |
+static void _lvmetad_connect()
|
|
Peter Rajnoha |
785220 |
+{
|
|
Peter Rajnoha |
785220 |
if (_lvmetad_use && _lvmetad_socket && !_lvmetad_connected) {
|
|
Peter Rajnoha |
785220 |
assert(_lvmetad_socket);
|
|
Peter Rajnoha |
785220 |
_lvmetad = lvmetad_open(_lvmetad_socket);
|
|
Peter Rajnoha |
785220 |
- if (_lvmetad.socket_fd >= 0 && !_lvmetad.error) {
|
|
Peter Rajnoha |
785220 |
+ if (_lvmetad.socket_fd >= 0 && !_lvmetad.error)
|
|
Peter Rajnoha |
785220 |
_lvmetad_connected = 1;
|
|
Peter Rajnoha |
785220 |
- _lvmetad_cmd = cmd;
|
|
Peter Rajnoha |
785220 |
- }
|
|
Peter Rajnoha |
785220 |
}
|
|
Peter Rajnoha |
785220 |
}
|
|
Peter Rajnoha |
785220 |
|
|
Peter Rajnoha |
785220 |
void lvmetad_warning(void)
|
|
Peter Rajnoha |
785220 |
{
|
|
Peter Rajnoha |
785220 |
+ if (!_lvmetad_connected)
|
|
Peter Rajnoha |
785220 |
+ _lvmetad_connect();
|
|
Peter Rajnoha |
785220 |
if (_lvmetad_use && (_lvmetad.socket_fd < 0 || _lvmetad.error))
|
|
Peter Rajnoha |
785220 |
log_warn("WARNING: Failed to connect to lvmetad: %s. Falling back to internal scanning.",
|
|
Peter Rajnoha |
785220 |
strerror(_lvmetad.error));
|
|
Peter Rajnoha |
785220 |
@@ -61,7 +68,11 @@ void lvmetad_warning(void)
|
|
Peter Rajnoha |
785220 |
|
|
Peter Rajnoha |
785220 |
int lvmetad_active(void)
|
|
Peter Rajnoha |
785220 |
{
|
|
Peter Rajnoha |
785220 |
- return _lvmetad_use && _lvmetad_connected;
|
|
Peter Rajnoha |
785220 |
+ if (!_lvmetad_use)
|
|
Peter Rajnoha |
785220 |
+ return 0;
|
|
Peter Rajnoha |
785220 |
+ if (!_lvmetad_connected)
|
|
Peter Rajnoha |
785220 |
+ _lvmetad_connect();
|
|
Peter Rajnoha |
785220 |
+ return _lvmetad_connected;
|
|
Peter Rajnoha |
785220 |
}
|
|
Peter Rajnoha |
785220 |
|
|
Peter Rajnoha |
785220 |
void lvmetad_set_active(int active)
|
|
Peter Rajnoha |
785220 |
@@ -873,6 +884,11 @@ int lvmetad_pvscan_all_devs(struct cmd_context *cmd, activation_handler handler)
|
|
Peter Rajnoha |
785220 |
char *future_token;
|
|
Peter Rajnoha |
785220 |
int was_silent;
|
|
Peter Rajnoha |
785220 |
|
|
Peter Rajnoha |
785220 |
+ if (!lvmetad_active()) {
|
|
Peter Rajnoha |
785220 |
+ log_error("Cannot proceed since lvmetad is not active.");
|
|
Peter Rajnoha |
785220 |
+ return 0;
|
|
Peter Rajnoha |
785220 |
+ }
|
|
Peter Rajnoha |
785220 |
+
|
|
Peter Rajnoha |
785220 |
if (!(iter = dev_iter_create(cmd->lvmetad_filter, 1))) {
|
|
Peter Rajnoha |
785220 |
log_error("dev_iter creation failed");
|
|
Peter Rajnoha |
785220 |
return 0;
|
|
Peter Rajnoha |
785220 |
diff --git a/test/shell/lvmetad-override.sh b/test/shell/lvmetad-override.sh
|
|
Peter Rajnoha |
785220 |
new file mode 100644
|
|
Peter Rajnoha |
785220 |
index 0000000..3fb281a
|
|
Peter Rajnoha |
785220 |
--- /dev/null
|
|
Peter Rajnoha |
785220 |
+++ b/test/shell/lvmetad-override.sh
|
|
Peter Rajnoha |
785220 |
@@ -0,0 +1,25 @@
|
|
Peter Rajnoha |
785220 |
+#!/bin/sh
|
|
Peter Rajnoha |
785220 |
+# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
|
|
Peter Rajnoha |
785220 |
+#
|
|
Peter Rajnoha |
785220 |
+# This copyrighted material is made available to anyone wishing to use,
|
|
Peter Rajnoha |
785220 |
+# modify, copy, or redistribute it subject to the terms and conditions
|
|
Peter Rajnoha |
785220 |
+# of the GNU General Public License v.2.
|
|
Peter Rajnoha |
785220 |
+#
|
|
Peter Rajnoha |
785220 |
+# You should have received a copy of the GNU General Public License
|
|
Peter Rajnoha |
785220 |
+# along with this program; if not, write to the Free Software Foundation,
|
|
Peter Rajnoha |
785220 |
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
Peter Rajnoha |
785220 |
+
|
|
Peter Rajnoha |
785220 |
+. lib/test
|
|
Peter Rajnoha |
785220 |
+
|
|
Peter Rajnoha |
785220 |
+test -e LOCAL_LVMETAD || skip
|
|
Peter Rajnoha |
785220 |
+aux prepare_pvs 2
|
|
Peter Rajnoha |
785220 |
+
|
|
Peter Rajnoha |
785220 |
+vgcreate $vg1 $dev1 $dev2
|
|
Peter Rajnoha |
785220 |
+lvchange -ay $vg1 2>&1 | not grep "Failed to connect"
|
|
Peter Rajnoha |
785220 |
+kill $(cat LOCAL_LVMETAD)
|
|
Peter Rajnoha |
785220 |
+lvchange -ay $vg1 2>&1 | grep "Failed to connect"
|
|
Peter Rajnoha |
785220 |
+lvchange -ay $vg1 --sysinit 2>&1 | not grep "Failed to connect"
|
|
Peter Rajnoha |
785220 |
+lvchange -ay $vg1 --config 'global { use_lvmetad = 0 }' 2>&1 | not grep "Failed to connect"
|
|
Peter Rajnoha |
785220 |
+aux lvmconf "global/use_lvmetad = 0"
|
|
Peter Rajnoha |
785220 |
+lvchange -ay $vg1 --config 'global { use_lvmetad = 1 }' 2>&1 | grep "Failed to connect"
|
|
Peter Rajnoha |
785220 |
+
|