Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 908002 Details for
Bug 1108525
Fix corosync behavior when disk is full
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Introduce get_run_dir function
tmp.PApf4Dt57R (text/plain), 7.30 KB, created by
Jan Friesse
on 2014-06-12 08:03:09 UTC
(
hide
)
Description:
Introduce get_run_dir function
Filename:
MIME Type:
Creator:
Jan Friesse
Created:
2014-06-12 08:03:09 UTC
Size:
7.30 KB
patch
obsolete
>From d310b251c3ba5e92c7ca1b8f6f8197d71141a8d6 Mon Sep 17 00:00:00 2001 >From: Jan Friesse <jfriesse@redhat.com> >Date: Thu, 29 May 2014 17:32:27 +0200 >Subject: [PATCH] Introduce get_run_dir function > >Run dir (LOCALSTATEDIR/lib/corosync) was hardcoded thru whole codebase. >Totemsrp was trying to create and chdir into it, but also >takes into account environment variable COROSYNC_RUN_DIR creating >inconsistency. > >get_run_dir correctly returns COROSYNC_RUN_DIR (when set) or >LOCALSTATEDIR/lib/corosync. This is now used by all functions instead of >hardcoded string. > >All occurrences of mkdir/chdir are removed from totemsrp and chdir is >now called in main function. Mkdir call is completely removed, because >it was not used anyway (check in main.c was called before totemsrp init, >so mkdir was never called) and also make install and/or package system >should take care of creating this directory with correct >permissions/context. > >Signed-off-by: Jan Friesse <jfriesse@redhat.com> >Reviewed-by: Christine Caulfield <ccaulfie@redhat.com> >--- > exec/main.c | 23 +++++++++++++++-------- > exec/totemsrp.c | 26 +++----------------------- > exec/util.c | 21 +++++++++++++++++++++ > exec/util.h | 5 +++++ > exec/votequorum.c | 3 ++- > 5 files changed, 46 insertions(+), 32 deletions(-) > >diff --git a/exec/main.c b/exec/main.c >index 8cf551e..d630058 100644 >--- a/exec/main.c >+++ b/exec/main.c >@@ -193,6 +193,7 @@ void corosync_state_dump (void) > static void corosync_blackbox_write_to_file (void) > { > char fname[PATH_MAX]; >+ char fdata_fname[PATH_MAX]; > char time_str[PATH_MAX]; > struct tm cur_time_tm; > time_t cur_time_t; >@@ -203,17 +204,18 @@ static void corosync_blackbox_write_to_file (void) > > strftime(time_str, PATH_MAX, "%Y-%m-%dT%H:%M:%S", &cur_time_tm); > snprintf(fname, PATH_MAX, "%s/fdata-%s-%lld", >- LOCALSTATEDIR "/lib/corosync", >+ get_run_dir(), > time_str, > (long long int)getpid()); > > if ((res = qb_log_blackbox_write_to_file(fname)) < 0) { > LOGSYS_PERROR(-res, LOGSYS_LEVEL_ERROR, "Can't store blackbox file"); > } >- unlink(LOCALSTATEDIR "/lib/corosync/fdata"); >- if (symlink(fname, LOCALSTATEDIR "/lib/corosync/fdata") == -1) { >+ snprintf(fdata_fname, sizeof(fdata_fname), "%s/fdata", get_run_dir()); >+ unlink(fdata_fname); >+ if (symlink(fname, fdata_fname) == -1) { > log_printf(LOGSYS_LEVEL_ERROR, "Can't create symlink to '%s' for corosync blackbox file '%s'", >- fname, LOCALSTATEDIR "/lib/corosync/fdata"); >+ fname, fdata_fname); > } > } > >@@ -1085,7 +1087,6 @@ int main (int argc, char **argv, char **envp) > int res, ch; > int background, setprio; > struct stat stat_out; >- char corosync_lib_dir[PATH_MAX]; > enum e_corosync_done flock_err; > uint64_t totem_config_warnings; > struct scheduler_pause_timeout_data scheduler_pause_timeout_data; >@@ -1181,10 +1182,16 @@ int main (int argc, char **argv, char **envp) > /* > * Make sure required directory is present > */ >- sprintf (corosync_lib_dir, "%s/lib/corosync", LOCALSTATEDIR); >- res = stat (corosync_lib_dir, &stat_out); >+ res = stat (get_run_dir(), &stat_out); > if ((res == -1) || (res == 0 && !S_ISDIR(stat_out.st_mode))) { >- log_printf (LOGSYS_LEVEL_ERROR, "Required directory not present %s. Please create it.", corosync_lib_dir); >+ log_printf (LOGSYS_LEVEL_ERROR, "Required directory not present %s. Please create it.", get_run_dir()); >+ corosync_exit_error (COROSYNC_DONE_DIR_NOT_PRESENT); >+ } >+ >+ res = chdir(get_run_dir()); >+ if (res == -1) { >+ log_printf (LOGSYS_LEVEL_ERROR, "Cannot chdir to run directory %s. " >+ "Please make sure it has correct context and rights.", get_run_dir()); > corosync_exit_error (COROSYNC_DONE_DIR_NOT_PRESENT); > } > >diff --git a/exec/totemsrp.c b/exec/totemsrp.c >index 5f5b7be..dc6b209 100644 >--- a/exec/totemsrp.c >+++ b/exec/totemsrp.c >@@ -91,6 +91,7 @@ > #include "totemnet.h" > > #include "cs_queue.h" >+#include "util.h" > > #define LOCALHOST_IP inet_addr("127.0.0.1") > #define QUEUE_RTR_ITEMS_SIZE_MAX 16384 /* allow 16384 retransmit items */ >@@ -680,8 +681,6 @@ struct message_handlers totemsrp_message_handlers = { > } > }; > >-static const char *rundir = NULL; >- > #define log_printf(level, format, args...) \ > do { \ > instance->totemsrp_log_printf ( \ >@@ -843,28 +842,12 @@ int totemsrp_initialize ( > int waiting_trans_ack)) > { > struct totemsrp_instance *instance; >- unsigned int res; > > instance = malloc (sizeof (struct totemsrp_instance)); > if (instance == NULL) { > goto error_exit; > } > >- rundir = getenv ("COROSYNC_RUN_DIR"); >- if (rundir == NULL) { >- rundir = LOCALSTATEDIR "/lib/corosync"; >- } >- >- res = mkdir (rundir, 0700); >- if (res == -1 && errno != EEXIST) { >- goto error_destroy; >- } >- >- res = chdir (rundir); >- if (res == -1) { >- goto error_destroy; >- } >- > totemsrp_instance_initialize (instance); > > instance->totemsrp_waiting_trans_ack_cb_fn = waiting_trans_ack_cb_fn; >@@ -1033,9 +1016,6 @@ int totemsrp_initialize ( > *srp_context = instance; > return (0); > >-error_destroy: >- free (instance); >- > error_exit: > return (-1); > } >@@ -3321,7 +3301,7 @@ static void memb_ring_id_create_or_load ( > char filename[PATH_MAX]; > > snprintf (filename, sizeof(filename), "%s/ringid_%s", >- rundir, totemip_print (&instance->my_id.addr[0])); >+ get_run_dir(), totemip_print (&instance->my_id.addr[0])); > fd = open (filename, O_RDONLY, 0700); > /* > * If file can be opened and read, read the ring id >@@ -3366,7 +3346,7 @@ static void memb_ring_id_set_and_store ( > memcpy (&instance->my_ring_id, ring_id, sizeof (struct memb_ring_id)); > > snprintf (filename, sizeof(filename), "%s/ringid_%s", >- rundir, totemip_print (&instance->my_id.addr[0])); >+ get_run_dir(), totemip_print (&instance->my_id.addr[0])); > > fd = open (filename, O_WRONLY, 0777); > if (fd == -1) { >diff --git a/exec/util.c b/exec/util.c >index 343759d..c7d561e 100644 >--- a/exec/util.c >+++ b/exec/util.c >@@ -170,3 +170,24 @@ int cs_name_tisEqual (cs_name_t *str1, char *str2) { > return 0; > } > } >+ >+const char *get_run_dir(void) >+{ >+ static char path[PATH_MAX] = {'\0'}; >+ char *env_run_dir; >+ int res; >+ >+ if (path[0] == '\0') { >+ env_run_dir = getenv("COROSYNC_RUN_DIR"); >+ >+ if (env_run_dir != NULL && env_run_dir[0] != '\0') { >+ res = snprintf(path, PATH_MAX, "%s", getenv("COROSYNC_RUN_DIR")); >+ } else { >+ res = snprintf(path, PATH_MAX, "%s/%s", LOCALSTATEDIR, "lib/corosync"); >+ } >+ >+ assert(res < PATH_MAX); >+ } >+ >+ return (path); >+} >diff --git a/exec/util.h b/exec/util.h >index 58f804b..63caf74 100644 >--- a/exec/util.h >+++ b/exec/util.h >@@ -79,4 +79,9 @@ extern int cs_name_tisEqual (cs_name_t *str1, char *str2); > const char * short_service_name_get(uint32_t service_id, > char *buf, size_t buf_size); > >+/* >+ * Return run directory (ether COROSYNC_RUN_DIR env or LOCALSTATEDIR/lib/corosync) >+ */ >+const char *get_run_dir(void); >+ > #endif /* UTIL_H_DEFINED */ >diff --git a/exec/votequorum.c b/exec/votequorum.c >index 1e913eb..650e38e 100644 >--- a/exec/votequorum.c >+++ b/exec/votequorum.c >@@ -52,6 +52,7 @@ > #include <corosync/ipc_votequorum.h> > > #include "service.h" >+#include "util.h" > > LOGSYS_DECLARE_SUBSYS ("VOTEQ"); > >@@ -778,7 +779,7 @@ static int load_ev_tracking_barrier(void) > > ENTER(); > >- snprintf(filename, sizeof(filename) - 1, LOCALSTATEDIR "/lib/corosync/ev_tracking"); >+ snprintf(filename, sizeof(filename) - 1, "%s/ev_tracking", get_run_dir()); > > ev_tracking_fd = open(filename, O_RDWR, 0700); > if (ev_tracking_fd != -1) { >-- >1.7.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1108525
:
908000
|
908001
| 908002 |
908003