1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Add -f (don't fork) option to clvmd and fix clvmd -d<num> description.

This commit is contained in:
Milan Broz 2011-01-17 23:13:14 +00:00
parent 4299c31d26
commit 92e6277c28
5 changed files with 59 additions and 41 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.82 - Version 2.02.82 -
=================================== ===================================
Add -f (don't fork) option to clvmd and fix clvmd -d<num> description.
Version 2.02.81 - 17th January 2011 Version 2.02.81 - 17th January 2011
=================================== ===================================

View File

@ -63,7 +63,6 @@
#include <sys/utsname.h> #include <sys/utsname.h>
extern debug_t debug;
extern struct cluster_ops *clops; extern struct cluster_ops *clops;
static int restart_clvmd(void); static int restart_clvmd(void);
@ -144,7 +143,7 @@ int do_command(struct local_client *client, struct clvm_header *msg, int msglen,
break; break;
case CLVMD_CMD_SET_DEBUG: case CLVMD_CMD_SET_DEBUG:
debug = args[0]; clvmd_set_debug(args[0]);
break; break;
case CLVMD_CMD_RESTART: case CLVMD_CMD_RESTART:
@ -310,19 +309,16 @@ int do_post_command(struct local_client *client)
client->bits.localsock.private = 0; client->bits.localsock.private = 0;
break; break;
case CLVMD_CMD_LOCK_VG:
case CLVMD_CMD_VG_BACKUP:
case CLVMD_CMD_SYNC_NAMES:
case CLVMD_CMD_LOCK_QUERY:
/* Nothing to do here */
break;
case CLVMD_CMD_LOCK_LV: case CLVMD_CMD_LOCK_LV:
lock_cmd = args[0]; lock_cmd = args[0];
lock_flags = args[1]; lock_flags = args[1];
lockname = &args[2]; lockname = &args[2];
status = post_lock_lv(lock_cmd, lock_flags, lockname); status = post_lock_lv(lock_cmd, lock_flags, lockname);
break; break;
default:
/* Nothing to do here */
break;
} }
return status; return status;
} }
@ -381,9 +377,9 @@ static int restart_clvmd(void)
goto_out; goto_out;
/* Propogate debug options */ /* Propogate debug options */
if (debug) { if (clvmd_get_debug()) {
if (!(debug_arg = malloc(16)) || if (!(debug_arg = malloc(16)) ||
dm_snprintf(debug_arg, 16, "-d%d", (int)debug) < 0) dm_snprintf(debug_arg, 16, "-d%d", (int)clvmd_get_debug()) < 0)
goto_out; goto_out;
argv[argc++] = debug_arg; argv[argc++] = debug_arg;
} }

View File

@ -81,7 +81,8 @@ struct lvm_startup_params {
char **argv; char **argv;
}; };
debug_t debug; static debug_t debug = DEBUG_OFF;
static int foreground_mode = 0;
static pthread_t lvm_thread; static pthread_t lvm_thread;
static pthread_mutex_t lvm_thread_mutex; static pthread_mutex_t lvm_thread_mutex;
static pthread_cond_t lvm_thread_cond; static pthread_cond_t lvm_thread_cond;
@ -145,12 +146,11 @@ static if_type_t get_cluster_type(void);
static void usage(const char *prog, FILE *file) static void usage(const char *prog, FILE *file)
{ {
fprintf(file, "Usage:\n" fprintf(file, "Usage: %s [options]\n"
"%s [Vhd]\n\n"
" -V Show version of clvmd\n" " -V Show version of clvmd\n"
" -h Show this help information\n" " -h Show this help information\n"
" -d Set debug level\n" " -d[n] Set debug logging (0:none, 1:stderr (implies -f option), 2:syslog)\n"
" If starting clvmd then don't fork, run in the foreground\n" " -f Don't fork, run in the foreground\n"
" -R Tell all running clvmds in the cluster to reload their device cache\n" " -R Tell all running clvmds in the cluster to reload their device cache\n"
" -S Restart clvmd, preserving exclusive locks\n" " -S Restart clvmd, preserving exclusive locks\n"
" -C Sets debug level (from -d) on all clvmd instances clusterwide\n" " -C Sets debug level (from -d) on all clvmd instances clusterwide\n"
@ -209,14 +209,15 @@ void debuglog(const char *fmt, ...)
va_list ap; va_list ap;
static int syslog_init = 0; static int syslog_init = 0;
if (debug == DEBUG_STDERR) { switch (clvmd_get_debug()) {
case DEBUG_STDERR:
va_start(ap,fmt); va_start(ap,fmt);
time(&P); time(&P);
fprintf(stderr, "CLVMD[%x]: %.15s ", (int)pthread_self(), ctime(&P)+4 ); fprintf(stderr, "CLVMD[%x]: %.15s ", (int)pthread_self(), ctime(&P)+4 );
vfprintf(stderr, fmt, ap); vfprintf(stderr, fmt, ap);
va_end(ap); va_end(ap);
} break;
if (debug == DEBUG_SYSLOG) { case DEBUG_SYSLOG:
if (!syslog_init) { if (!syslog_init) {
openlog("clvmd", LOG_PID, LOG_DAEMON); openlog("clvmd", LOG_PID, LOG_DAEMON);
syslog_init = 1; syslog_init = 1;
@ -225,9 +226,28 @@ void debuglog(const char *fmt, ...)
va_start(ap,fmt); va_start(ap,fmt);
vsyslog(LOG_DEBUG, fmt, ap); vsyslog(LOG_DEBUG, fmt, ap);
va_end(ap); va_end(ap);
break;
case DEBUG_OFF:
break;
} }
} }
void clvmd_set_debug(debug_t new_debug)
{
if (!foreground_mode && new_debug == DEBUG_STDERR)
new_debug = DEBUG_SYSLOG;
if (new_debug > DEBUG_SYSLOG)
new_debug = DEBUG_SYSLOG;
debug = new_debug;
}
debug_t clvmd_get_debug(void)
{
return debug;
}
static const char *decode_cmd(unsigned char cmdl) static const char *decode_cmd(unsigned char cmdl)
{ {
static char buf[128]; static char buf[128];
@ -322,13 +342,14 @@ int main(int argc, char *argv[])
sigset_t ss; sigset_t ss;
int using_gulm = 0; int using_gulm = 0;
int debug_opt = 0; int debug_opt = 0;
debug_t debug_arg = DEBUG_OFF;
int clusterwide_opt = 0; int clusterwide_opt = 0;
mode_t old_mask; mode_t old_mask;
/* Deal with command-line arguments */ /* Deal with command-line arguments */
opterr = 0; opterr = 0;
optind = 0; optind = 0;
while ((opt = getopt(argc, argv, "?vVhd::t:RST:CI:E:")) != EOF) { while ((opt = getopt(argc, argv, "?vVhfd::t:RST:CI:E:")) != EOF) {
switch (opt) { switch (opt) {
case 'h': case 'h':
usage(argv[0], stdout); usage(argv[0], stdout);
@ -352,12 +373,14 @@ int main(int argc, char *argv[])
case 'd': case 'd':
debug_opt = 1; debug_opt = 1;
if (optarg) debug_arg = optarg ? atoi(optarg) : DEBUG_STDERR;
debug = atoi(optarg); if (debug_arg == DEBUG_STDERR)
else foreground_mode = 1;
debug = DEBUG_STDERR;
break; break;
case 'f':
foreground_mode = 1;
break;
case 't': case 't':
cmd_timeout = atoi(optarg); cmd_timeout = atoi(optarg);
if (!cmd_timeout) { if (!cmd_timeout) {
@ -391,15 +414,6 @@ int main(int argc, char *argv[])
check_permissions(); check_permissions();
/* Setting debug options on an existing clvmd */
if (debug_opt && !check_local_clvmd()) {
/* Sending to stderr makes no sense for a detached daemon */
if (debug == DEBUG_STDERR)
debug = DEBUG_SYSLOG;
return debug_clvmd(debug, clusterwide_opt)==1?0:1;
}
/* /*
* Switch to C locale to avoid reading large locale-archive file * Switch to C locale to avoid reading large locale-archive file
* used by some glibc (on some distributions it takes over 100MB). * used by some glibc (on some distributions it takes over 100MB).
@ -408,10 +422,15 @@ int main(int argc, char *argv[])
if (setenv("LANG", "C", 1)) if (setenv("LANG", "C", 1))
perror("Cannot set LANG to C"); perror("Cannot set LANG to C");
/* Setting debug options on an existing clvmd */
if (debug_opt && !check_local_clvmd())
return debug_clvmd(debug_arg, clusterwide_opt)==1?0:1;
clvmd_set_debug(debug_opt);
/* Fork into the background (unless requested not to) */ /* Fork into the background (unless requested not to) */
if (debug != DEBUG_STDERR) { if (!foreground_mode)
be_daemon(start_timeout); be_daemon(start_timeout);
}
dm_prepare_selinux_context(DEFAULT_RUN_DIR, S_IFDIR); dm_prepare_selinux_context(DEFAULT_RUN_DIR, S_IFDIR);
old_mask = umask(0077); old_mask = umask(0077);

View File

@ -117,6 +117,9 @@ extern void process_message(struct local_client *client, const char *buf,
extern void debuglog(const char *fmt, ... ) extern void debuglog(const char *fmt, ... )
__attribute__ ((format(printf, 1, 2))); __attribute__ ((format(printf, 1, 2)));
void clvmd_set_debug(debug_t new_de);
debug_t clvmd_get_debug(void);
int sync_lock(const char *resource, int mode, int flags, int *lockid); int sync_lock(const char *resource, int mode, int flags, int *lockid);
int sync_unlock(const char *resource, int lockid); int sync_unlock(const char *resource, int lockid);

View File

@ -3,7 +3,7 @@
clvmd \- cluster LVM daemon clvmd \- cluster LVM daemon
.SH SYNOPSIS .SH SYNOPSIS
.B clvmd .B clvmd
[\-d [<value>]] [\-C] [\-h] [\-d[<value>]] [\-C] [\-h]
[\-R] [\-R]
[\-S] [\-S]
[\-t <timeout>] [\-t <timeout>]
@ -15,19 +15,18 @@ It must be running on all nodes in the cluster and will give an error
if a node in the cluster does not have this daemon running. if a node in the cluster does not have this daemon running.
.SH OPTIONS .SH OPTIONS
.TP .TP
.I \-d [<value>] .I \-d[<value>]
Enable debug logging. Value can be 0, 1 or 2. Enable debug logging. Value can be 0, 1 or 2.
.br .br
0 disables debug logging in a running clvmd 0 disables debug logging
.br .br
1 sends debug logs to stderr (clvmd will not fork in this case) 1 sends debug logs to stderr (implies -f option)
.br .br
2 sends debug logs to syslog 2 sends debug logs to syslog
.br .br
If If
.B -d .B -d
is specified without a value then 1 is assumed if you are starting a is specified without a value then 1 is assumed.
new clvmd, 2 if you are enabling debug in a running clvmd.
.TP .TP
.I \-C .I \-C
Only valid if Only valid if