diff options
author | N Balachandran <nbalacha@redhat.com> | 2019-07-25 11:51:32 +0530 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2019-08-14 03:21:30 +0000 |
commit | 6ef9ffea7fee43ea6f59c8c36fd183f90e9c26f8 (patch) | |
tree | c73a7e68188ecf463fc58e5843e2a860909a8675 /xlators/mgmt/glusterd/src/glusterd.c | |
parent | 089e53c7f1c32644ce2b37830b678b4c0c7071fc (diff) |
glusterd: create separate logdirs for cluster.rc instances
Create a separate logdir for each host instance created by
cluster.rc. This makes it easier to determine the files
belonging to a particular instance.
Change-Id: Ic8321f83f98995412b7d5f095b3d3f0391767a8b
Fixes: bz#1733042
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 175 |
1 files changed, 109 insertions, 66 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index 39f46a2e832..7da16ea0bac 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -555,7 +555,9 @@ glusterd_crt_georep_folders(char *georepdir, glusterd_conf_t *conf) char *greplg_s = NULL; struct group *gr = NULL; int ret = 0; + int gr_ret = 0; int32_t len = 0; + char logdir[PATH_MAX] = {0}; GF_ASSERT(georepdir); GF_ASSERT(conf); @@ -580,77 +582,91 @@ glusterd_crt_georep_folders(char *georepdir, glusterd_conf_t *conf) goto out; } - if (SLEN(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP) >= PATH_MAX) { + ret = dict_get_str(THIS->options, GEOREP "-log-group", &greplg_s); + if (ret) + ret = 0; + else { + gr = getgrnam(greplg_s); + if (!gr) { + gf_msg("glusterd", GF_LOG_CRITICAL, 0, GD_MSG_LOGGROUP_INVALID, + "group " GEOREP "-log-group %s does not exist", greplg_s); + gr_ret = -1; + } + } + if ((strlen(conf->logdir) + 2 + SLEN(GEOREP)) >= PATH_MAX) { ret = -1; gf_msg("glusterd", GF_LOG_CRITICAL, 0, GD_MSG_DIRPATH_TOO_LONG, - "directory path " DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP - " is longer than PATH_MAX"); + "directory path %s/" GEOREP " is longer than PATH_MAX", + conf->logdir); + goto out; + } + len = snprintf(logdir, PATH_MAX, "%s/" GEOREP, conf->logdir); + if ((len < 0) || (len >= PATH_MAX)) { + ret = -1; goto out; } - ret = mkdir_p(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP, 0755, _gf_true); + ret = mkdir_p(logdir, 0755, _gf_true); if (-1 == ret) { gf_msg("glusterd", GF_LOG_CRITICAL, errno, GD_MSG_CREATE_DIR_FAILED, "Unable to create " GEOREP " log directory"); goto out; } + if (gr) { + gr_ret = group_write_allow(logdir, gr->gr_gid); + } - /* Slave log file directory */ - if (SLEN(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP "-slaves") >= PATH_MAX) { + if ((strlen(conf->logdir) + 2 + SLEN(GEOREP "-slaves")) >= PATH_MAX) { ret = -1; gf_msg("glusterd", GF_LOG_CRITICAL, 0, GD_MSG_DIRPATH_TOO_LONG, - "directory path " DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP + "directory path %s/" GEOREP "-slaves" - " is longer than PATH_MAX"); + " is longer than PATH_MAX", + conf->logdir); + goto out; + } + len = snprintf(logdir, PATH_MAX, "%s/" GEOREP "-slaves", conf->logdir); + if ((len < 0) || (len >= PATH_MAX)) { + ret = -1; goto out; } - ret = mkdir_p(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP "-slaves", 0755, - _gf_true); + ret = mkdir_p(logdir, 0755, _gf_true); if (-1 == ret) { gf_msg("glusterd", GF_LOG_CRITICAL, errno, GD_MSG_CREATE_DIR_FAILED, "Unable to create " GEOREP " slave log directory"); goto out; } + if (gr && !gr_ret) { + gr_ret = group_write_allow(logdir, gr->gr_gid); + } /* MountBroker log file directory */ - if (SLEN(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP "-slaves/mbr") >= PATH_MAX) { + if ((strlen(conf->logdir) + 2 + SLEN(GEOREP "-slaves/mbr")) >= PATH_MAX) { ret = -1; gf_msg("glusterd", GF_LOG_CRITICAL, 0, GD_MSG_DIRPATH_TOO_LONG, - "directory path " DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP + "directory path %s/" GEOREP "-slaves/mbr" - " is longer than PATH_MAX"); + " is longer than PATH_MAX", + conf->logdir); + goto out; + } + + len = snprintf(logdir, PATH_MAX, "%s/" GEOREP "-slaves/mbr", conf->logdir); + if ((len < 0) || (len >= PATH_MAX)) { + ret = -1; goto out; } - ret = mkdir_p(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP "-slaves/mbr", 0755, - _gf_true); + + ret = mkdir_p(logdir, 0755, _gf_true); if (-1 == ret) { gf_msg("glusterd", GF_LOG_CRITICAL, errno, GD_MSG_CREATE_DIR_FAILED, "Unable to create " GEOREP " mountbroker slave log directory"); goto out; } - - ret = dict_get_str(THIS->options, GEOREP "-log-group", &greplg_s); - if (ret) - ret = 0; - else { - gr = getgrnam(greplg_s); - if (!gr) { - gf_msg("glusterd", GF_LOG_CRITICAL, 0, GD_MSG_LOGGROUP_INVALID, - "group " GEOREP "-log-group %s does not exist", greplg_s); - ret = -1; - goto out; - } - - ret = group_write_allow(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP, - gr->gr_gid); - if (ret == 0) - ret = group_write_allow( - DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP "-slaves", gr->gr_gid); - if (ret == 0) - ret = group_write_allow(DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP - "-slaves/mbr", - gr->gr_gid); + if (gr && !gr_ret) { + gr_ret = group_write_allow(logdir, gr->gr_gid); } - + if (gr_ret) + ret = gr_ret; out: gf_msg_debug("glusterd", 0, "Returning %d", ret); return ret; @@ -814,18 +830,19 @@ configure_syncdaemon(glusterd_conf_t *conf) /* log-file */ runinit_gsyncd_setrx(&runner, conf); - runner_add_args(&runner, "log-file", - DEFAULT_LOG_FILE_DIRECTORY "/" GEOREP - "/${mastervol}/${eSlave}.log", - ".", ".", NULL); + runner_add_arg(&runner, "log-file"); + runner_argprintf(&runner, "%s/" GEOREP "/${mastervol}/${eSlave}.log", + conf->logdir); + runner_add_args(&runner, ".", ".", NULL); RUN_GSYNCD_CMD; /* gluster-log-file */ runinit_gsyncd_setrx(&runner, conf); - runner_add_args(&runner, "gluster-log-file", - DEFAULT_LOG_FILE_DIRECTORY - "/" GEOREP "/${mastervol}/${eSlave}${local_id}.gluster.log", - ".", ".", NULL); + runner_add_arg(&runner, "gluster-log-file"); + runner_argprintf( + &runner, "%s/" GEOREP "/${mastervol}/${eSlave}${local_id}.gluster.log", + conf->logdir); + runner_add_args(&runner, ".", ".", NULL); RUN_GSYNCD_CMD; /* ignore-deletes */ @@ -867,33 +884,36 @@ configure_syncdaemon(glusterd_conf_t *conf) /* log-file */ runinit_gsyncd_setrx(&runner, conf); - runner_add_args( - &runner, "log-file", - DEFAULT_LOG_FILE_DIRECTORY - "/" GEOREP + runner_add_arg(&runner, "log-file"); + runner_argprintf( + &runner, + "%s/" GEOREP "-slaves/${session_owner}:${local_node}${local_id}.${slavevol}.log", - ".", NULL); + conf->logdir); + runner_add_args(&runner, ".", ".", NULL); RUN_GSYNCD_CMD; /* MountBroker log-file */ runinit_gsyncd_setrx(&runner, conf); - runner_add_args( - &runner, "log-file-mbr", - DEFAULT_LOG_FILE_DIRECTORY - "/" GEOREP + runner_add_arg(&runner, "log-file-mbr"); + runner_argprintf( + &runner, + "%s/" GEOREP "-slaves/mbr/${session_owner}:${local_node}${local_id}.${slavevol}.log", - ".", NULL); + conf->logdir); + runner_add_args(&runner, ".", ".", NULL); RUN_GSYNCD_CMD; /* gluster-log-file */ runinit_gsyncd_setrx(&runner, conf); - runner_add_args( - &runner, "gluster-log-file", - DEFAULT_LOG_FILE_DIRECTORY - "/" GEOREP + runner_add_arg(&runner, "gluster-log-file"); + runner_argprintf( + &runner, + "%s/" GEOREP "-slaves/" "${session_owner}:${local_node}${local_id}.${slavevol}.gluster.log", - ".", NULL); + conf->logdir); + runner_add_args(&runner, ".", ".", NULL); RUN_GSYNCD_CMD; out: @@ -1052,7 +1072,7 @@ _install_mount_spec(dict_t *opts, char *key, data_t *value, void *data) } else user = label; - rv = make_georep_mountspec(mspec, volname, user); + rv = make_georep_mountspec(mspec, volname, user, priv->logdir); GF_FREE(volname); if (rv != 0) @@ -1373,6 +1393,9 @@ init(xlator_t *this) char rundir[PATH_MAX] = { 0, }; + char logdir[VALID_GLUSTERD_PATHMAX] = { + 0, + }; char cmd_log_filename[PATH_MAX] = { 0, }; @@ -1421,6 +1444,25 @@ init(xlator_t *this) if (len < 0 || len >= PATH_MAX) exit(2); + dir_data = dict_get(this->options, "cluster-test-mode"); + if (!dir_data) { + /* Use default working dir */ + len = snprintf(logdir, PATH_MAX, "%s", DEFAULT_LOG_FILE_DIRECTORY); + } else { + len = snprintf(logdir, PATH_MAX, "%s", dir_data->data); + gf_msg(this->name, GF_LOG_INFO, 0, GD_MSG_CLUSTER_RC_ENABLE, + "cluster-test-mode is enabled logdir is %s", dir_data->data); + } + if (len < 0 || len >= PATH_MAX) + exit(2); + + ret = mkdir_p(logdir, 0777, _gf_true); + if ((ret == -1) && (EEXIST != errno)) { + gf_msg(THIS->name, GF_LOG_ERROR, errno, GD_MSG_CREATE_DIR_FAILED, + "Unable to create log dir %s", logdir); + exit(1); + } + dir_data = dict_get(this->options, "working-directory"); if (!dir_data) { @@ -1535,8 +1577,7 @@ init(xlator_t *this) exit(1); } - snprintf(cmd_log_filename, PATH_MAX, "%s/cmd_history.log", - DEFAULT_LOG_FILE_DIRECTORY); + snprintf(cmd_log_filename, PATH_MAX, "%s/cmd_history.log", logdir); ret = gf_cmd_log_init(cmd_log_filename); if (ret == -1) { @@ -1606,8 +1647,7 @@ init(xlator_t *this) exit(1); } - len = snprintf(storedir, sizeof(storedir), "%s/bricks", - DEFAULT_LOG_FILE_DIRECTORY); + len = snprintf(storedir, sizeof(storedir), "%s/bricks", logdir); if ((len < 0) || (len >= sizeof(storedir))) { exit(1); } @@ -1822,6 +1862,9 @@ init(xlator_t *this) /* coverity[BUFFER_SIZE_WARNING] */ (void)strncpy(conf->rundir, rundir, sizeof(conf->rundir)); + /* coverity[BUFFER_SIZE_WARNING] */ + (void)strncpy(conf->logdir, logdir, sizeof(conf->logdir)); + synclock_init(&conf->big_lock, SYNC_LOCK_RECURSIVE); pthread_mutex_init(&conf->xprt_lock, NULL); INIT_LIST_HEAD(&conf->xprt_list); |