Gitweb: http://git.fedorahosted.org/git/dlm.git?p=dlm.git;a=commitdiff;h=bc70e884fdf... Commit: bc70e884fdfdbed3cf51091f506be415716982da Parent: 3ee4f78d0039e1dc67382cfc4a2ada0ae2c1851f Author: David Teigland teigland@redhat.com AuthorDate: Wed Oct 5 15:33:02 2011 -0500 Committer: David Teigland teigland@redhat.com CommitterDate: Wed Oct 5 16:27:47 2011 -0500
dlm_controld: clean up default defines and their usage
Signed-off-by: David Teigland teigland@redhat.com --- dlm_controld/config.c | 8 ++-- dlm_controld/dlm_daemon.h | 35 ++++++++++++-------- dlm_controld/logging.c | 3 +- dlm_controld/main.c | 76 +++++++++++++++++++++++++++++++------------- 4 files changed, 80 insertions(+), 42 deletions(-)
diff --git a/dlm_controld/config.c b/dlm_controld/config.c index 40b0c87..6c94fca 100644 --- a/dlm_controld/config.c +++ b/dlm_controld/config.c @@ -46,18 +46,18 @@ void setup_config(int update) xmlNode *root; xmlChar *str;
- if (!path_exists(DLM_CONFIG_FILE)) + if (!path_exists(CONF_FILE_PATH)) return;
- doc = xmlParseFile(DLM_CONFIG_FILE); + doc = xmlParseFile(CONF_FILE_PATH); if (!doc) { - log_error("xml parse error %d %s", errno, DLM_CONFIG_FILE); + log_error("xml parse error %d %s", errno, CONF_FILE_PATH); return; }
root = xmlDocGetRootElement(doc); if (!root) { - log_error("xml root error %d %s", errno, DLM_CONFIG_FILE); + log_error("xml root error %d %s", errno, CONF_FILE_PATH); xmlFreeDoc(doc); return; } diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h index 9627118..9c180d7 100644 --- a/dlm_controld/dlm_daemon.h +++ b/dlm_controld/dlm_daemon.h @@ -43,20 +43,27 @@ #include "rbtree.h" #include "linux_endian.h"
-/* TODO: cleanup */ -#define CLUSTERVARLIB "/var/lib/cluster" -#define CLUSTERVARRUN "/var/run/cluster" -#define LOGDIR "/var/log/cluster" -#define SYSLOGFACILITY LOG_LOCAL4 -#define SYSLOGLEVEL LOG_INFO -#define LOCKFILE_NAME CLUSTERVARRUN "/dlm_controld.pid" -#define DAEMON_NAME "dlm_controld" -#define DEFAULT_LOG_MODE LOG_MODE_OUTPUT_FILE|LOG_MODE_OUTPUT_SYSLOG -#define DEFAULT_SYSLOG_FACILITY SYSLOGFACILITY -#define DEFAULT_SYSLOG_PRIORITY SYSLOGLEVEL -#define DEFAULT_LOGFILE_PRIORITY LOG_INFO /* ? */ -#define DEFAULT_LOGFILE LOGDIR "/" DAEMON_NAME ".log" -#define DLM_CONFIG_FILE "/etc/dlm.conf" +/* TODO: get CONFDIR, LOGDIR, RUNDIR from build */ + +#define RUNDIR "/var/run/cluster" +#define LOGDIR "/var/log/cluster" +#define CONFDIR "/etc" + +#define RUN_FILE_NAME "dlm_controld.pid" +#define LOG_FILE_NAME "dlm_controld.log" +#define CONF_FILE_NAME "dlm.conf" + +#define RUN_FILE_PATH RUNDIR "/" RUN_FILE_NAME +#define LOG_FILE_PATH LOGDIR "/" LOG_FILE_NAME +#define CONF_FILE_PATH CONFDIR "/" CONF_FILE_NAME + +#define DEFAULT_LOG_MODE LOG_MODE_OUTPUT_FILE | LOG_MODE_OUTPUT_SYSLOG +#define DEFAULT_SYSLOG_FACILITY LOG_LOCAL4 +#define DEFAULT_SYSLOG_PRIORITY LOG_INFO +#define DEFAULT_LOGFILE_PRIORITY LOG_INFO +#define DEFAULT_LOGFILE LOG_FILE_PATH + +#define DAEMON_NAME "dlm_controld"
/* DLM_LOCKSPACE_LEN: maximum lockspace name length, from linux/dlmconstants.h. diff --git a/dlm_controld/logging.c b/dlm_controld/logging.c index e6e82b7..cb3c7fb 100644 --- a/dlm_controld/logging.c +++ b/dlm_controld/logging.c @@ -30,7 +30,8 @@ void init_logging(void)
void setup_logging(void) { - /* TODO */ + + /* TODO: look for settings for each of these in dlm.conf */ /* ccs_read_logging(ccs_handle, DAEMON_NAME, &cfgd_debug_logfile, &log_mode, diff --git a/dlm_controld/main.c b/dlm_controld/main.c index 0fa10fb..2be088a 100644 --- a/dlm_controld/main.c +++ b/dlm_controld/main.c @@ -989,20 +989,29 @@ static void loop(void) log_error("abandoned lockspace %s", ls->name); }
-static void lockfile(void) +static int lockfile(const char *dir, const char *name) { - int fd, error; + char path[PATH_MAX]; + char buf[16]; struct flock lock; - char buf[33]; + mode_t old_umask; + int fd, rv;
- memset(buf, 0, 33); + old_umask = umask(0022); + rv = mkdir(dir, 0777); + if (rv < 0 && errno != EEXIST) { + umask(old_umask); + return rv; + } + umask(old_umask);
- fd = open(LOCKFILE_NAME, O_CREAT|O_WRONLY, - S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); + snprintf(path, PATH_MAX, "%s/%s", dir, name); + + fd = open(path, O_CREAT|O_WRONLY|O_CLOEXEC, 0666); if (fd < 0) { - fprintf(stderr, "cannot open/create lock file %s\n", - LOCKFILE_NAME); - exit(EXIT_FAILURE); + log_error("lockfile open error %s: %s", + path, strerror(errno)); + return -1; }
lock.l_type = F_WRLCK; @@ -1010,25 +1019,43 @@ static void lockfile(void) lock.l_whence = SEEK_SET; lock.l_len = 0;
- error = fcntl(fd, F_SETLK, &lock); - if (error) { - fprintf(stderr, "dlm_controld is already running\n"); - exit(EXIT_FAILURE); + rv = fcntl(fd, F_SETLK, &lock); + if (rv < 0) { + log_error("lockfile setlk error %s: %s", + path, strerror(errno)); + goto fail; }
- error = ftruncate(fd, 0); - if (error) { - fprintf(stderr, "cannot clear lock file %s\n", LOCKFILE_NAME); - exit(EXIT_FAILURE); + rv = ftruncate(fd, 0); + if (rv < 0) { + log_error("lockfile truncate error %s: %s", + path, strerror(errno)); + goto fail; }
- sprintf(buf, "%d\n", getpid()); + memset(buf, 0, sizeof(buf)); + snprintf(buf, sizeof(buf), "%d\n", getpid());
- error = write(fd, buf, strlen(buf)); - if (error <= 0) { - fprintf(stderr, "cannot write lock file %s\n", LOCKFILE_NAME); - exit(EXIT_FAILURE); + rv = write(fd, buf, strlen(buf)); + if (rv <= 0) { + log_error("lockfile write error %s: %s", + path, strerror(errno)); + goto fail; } + + return fd; + fail: + close(fd); + return -1; +} + +static void unlink_lockfile(int fd, const char *dir, const char *name) +{ + char path[PATH_MAX]; + + snprintf(path, PATH_MAX, "%s/%s", dir, name); + unlink(path); + close(fd); }
static void print_usage(void) @@ -1200,6 +1227,8 @@ static void set_scheduler(void)
int main(int argc, char **argv) { + int fd; + INIT_LIST_HEAD(&lockspaces); INIT_LIST_HEAD(&fs_register_list);
@@ -1211,7 +1240,7 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } } - lockfile(); + fd = lockfile(RUNDIR, RUN_FILE_NAME); init_logging(); log_level(NULL, LOG_INFO, "dlm_controld %s started", RELEASE_VERSION); signal(SIGTERM, sigterm_handler); @@ -1219,6 +1248,7 @@ int main(int argc, char **argv)
loop();
+ unlink_lockfile(fd, RUNDIR, RUN_FILE_NAME); return 0; }
cluster-commits@lists.stg.fedorahosted.org