summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCsaba Henk <csaba@gluster.com>2011-04-03 15:44:17 +0000
committerVijay Bellur <vijay@dev.gluster.com>2011-04-04 08:02:30 -0700
commitf338193a707ae5b6b5ab6f820bea32612c4311bb (patch)
tree940842ac59eeb180f892ac8d379219b994b83a11
parent01b3dff29adee2041b0ef1b374eda8c88fb07678 (diff)
syncdaemon: refine intermal configuration of gsyncdv3.2.0qa7
Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 2561 (gsyncd command's must be preconfigured) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2561
-rw-r--r--cli/src/cli-rpc-ops.c63
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.c95
2 files changed, 121 insertions, 37 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index 110962c..c358192 100644
--- a/cli/src/cli-rpc-ops.c
+++ b/cli/src/cli-rpc-ops.c
@@ -26,6 +26,7 @@
#ifndef GSYNC_CONF
#define GSYNC_CONF "gsync/gsyncd.conf"
#endif
+#define DEFAULT_LOG_FILE_DIRECTORY DATADIR "/log/glusterfs"
#include "cli.h"
#include "compat-errno.h"
@@ -2609,7 +2610,7 @@ gf_cli3_1_gsync_get_param_file (char *prmfile, const char *ext, char *master, ch
char buff[PATH_MAX] = {0, };
char cmd[PATH_MAX] = {0, };
char *ptr = NULL;
- char pidfolder[PATH_MAX] = {0, };
+ char prmfolder[PATH_MAX] = {0, };
char *dotp = NULL;
int ret = 0;
@@ -2637,7 +2638,7 @@ gf_cli3_1_gsync_get_param_file (char *prmfile, const char *ext, char *master, ch
ptr = fgets(buff, sizeof(buff), in);
if (ptr) {
buff[strlen(buff)-1]='\0'; //strip off \n
- snprintf (pidfolder, PATH_MAX, "%s/gsync/%s", gl_workdir, buff);
+ snprintf (prmfolder, PATH_MAX, "%s/gsync/%s", gl_workdir, buff);
} else {
ret = -1;
goto out;
@@ -2648,7 +2649,7 @@ gf_cli3_1_gsync_get_param_file (char *prmfile, const char *ext, char *master, ch
ptr = fgets(buff, sizeof(buff), in);
if (ptr) {
buff[strlen(buff)-1]='\0'; //strip off \n
- snprintf (prmfile, PATH_MAX, "%s/%s.pid", pidfolder, buff);
+ snprintf (prmfile, PATH_MAX, "%s/%s.%s", prmfolder, buff, ext);
}
out:
@@ -2704,7 +2705,7 @@ gf_cli3_1_start_gsync (char *master, char *slave, char *gl_workdir)
if (ret == -1) {
ret = -1;
gf_log ("", GF_LOG_WARNING, "failed to construct the "
- "prmfile string");
+ "pidfile string");
goto out;
}
@@ -2766,6 +2767,60 @@ gf_cli3_1_start_gsync (char *master, char *slave, char *gl_workdir)
goto out;
}
+ ret = gf_cli3_1_gsync_get_param_file (prmfile, "log", master,
+ slave, DEFAULT_LOG_FILE_DIRECTORY);
+ if (ret == -1) {
+ gf_log ("", GF_LOG_WARNING, "failed to construct the "
+ "logfile string");
+ goto out;
+ }
+ /* XXX "mkdir -p": eventually this should be made into a library routine */
+ tslash = strrchr(prmfile, '/');
+ if (tslash) {
+ char *slash = prmfile;
+ struct stat st = {0,};
+
+ *tslash = '\0';
+ if (*slash == '/')
+ slash++;
+ while (slash) {
+ slash = strchr (slash, '/');
+ if (slash)
+ *slash = '\0';
+ ret = mkdir (prmfile, 0777);
+ if (ret == -1 && errno != EEXIST) {
+ gf_log ("", GF_LOG_DEBUG, "mkdir failed (%s)",
+ strerror (errno));
+ goto out;
+ }
+ if (slash) {
+ *slash = '/';
+ slash++;
+ }
+ }
+ ret = stat (prmfile, &st);
+ if (ret == -1 || !S_ISDIR (st.st_mode)) {
+ ret = -1;
+ gf_log ("", GF_LOG_DEBUG, "mkdir failed (%s)",
+ strerror (errno));
+ goto out;
+ }
+ *tslash = '/';
+ }
+
+ ret = snprintf (cmd, PATH_MAX, GSYNCD_PREFIX "/gsyncd -c %s/%s %s %s"
+ " --config-set log-file %s", gl_workdir,
+ GSYNC_CONF, master, slave, prmfile);
+ if (ret >= PATH_MAX)
+ ret = -1;
+ if (ret != -1)
+ ret = system (cmd) ? -1 : 0;
+ if (ret == -1) {
+ gf_log ("", GF_LOG_WARNING, "failed to set status file "
+ "for %s %s", master, slave);
+ goto out;
+ }
+
memset (cmd, 0, sizeof (cmd));
ret = snprintf (cmd, PATH_MAX, GSYNCD_PREFIX "/gsyncd --monitor -c %s/%s %s %s"
, gl_workdir, GSYNC_CONF, master, slave);
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c
index 004973a..b4df630 100644
--- a/xlators/mgmt/glusterd/src/glusterd.c
+++ b/xlators/mgmt/glusterd/src/glusterd.c
@@ -229,6 +229,66 @@ out:
return ret;
}
+static int
+configure_syncaemon (xlator_t *this, const char *workdir)
+{
+ int ret = 0;
+#if SYNCDAEMON_COMPILE
+ char voldir[PATH_MAX] = {0,};
+ char cmd[4096] = {0,};
+ int blen = 0;
+
+ snprintf (voldir, PATH_MAX, "%s/gsync", workdir);
+ ret = mkdir (voldir, 0777);
+ if ((-1 == ret) && (errno != EEXIST)) {
+ gf_log (this->name, GF_LOG_CRITICAL,
+ "Unable to create gsync directory %s (%s)",
+ voldir, strerror (errno));
+ return -1;
+ }
+
+ blen = snprintf (cmd, PATH_MAX, GSYNCD_PREFIX"/gsyncd -c %s/"GSYNC_CONF
+ " --config-set-rx ", workdir);
+
+ /* remote-gsyncd */
+ strcpy (cmd + blen,
+ "remote-gsyncd "
+ "'"GSYNCD_PREFIX"/gsyncd --gluster-command "GFS_PREFIX"/sbin/glusterfs' "
+ ". .");
+ ret = system (cmd);
+ if (ret)
+ goto out;
+
+ strcpy (cmd + blen,
+ "remote-gsyncd /usr/local/libexec/glusterfs/gsyncd . ^ssh:");
+ ret = system (cmd);
+ if (ret)
+ goto out;
+
+ /* gluster-command */
+ /* XXX $sbindir should be used (throughout the codebase) */
+ strcpy (cmd + blen,
+ "gluster-command "GFS_PREFIX"/sbin/glusterfs . .");
+ ret = system (cmd);
+ if (ret)
+ goto out;
+
+ /* ssh-command */
+ strcpy (cmd + blen,
+ "ssh-command 'ssh -oPasswordAuthentication=no' . .");
+ ret = system (cmd);
+ if (ret)
+ goto out;
+
+ out:
+#else
+ (void)this;
+ (void)workdir;
+#endif
+ return ret ? -1 : 0;
+}
+
+
/*
* init - called during glusterd initialization
*
@@ -247,7 +307,6 @@ init (xlator_t *this)
char dirname [PATH_MAX];
char cmd_log_filename [PATH_MAX] = {0,};
int first_time = 0;
- char cmd [PATH_MAX] = {0,};
dir_data = dict_get (this->options, "working-directory");
@@ -338,41 +397,11 @@ init (xlator_t *this)
" ,errno = %d", voldir, errno);
exit (1);
}
-#if (SYNCDAEMON_COMPILE)
- snprintf (voldir, PATH_MAX, "%s/gsync", dirname);
- ret = mkdir (voldir, 0777);
- if ((-1 == ret) && (errno != EEXIST)) {
- gf_log (this->name, GF_LOG_CRITICAL,
- "Unable to create gsync directory %s"
- " ,errno = %d", voldir, errno);
- exit (1);
- }
-
- ret = snprintf (cmd, PATH_MAX, GSYNCD_PREFIX "/gsyncd -c %s/%s "
- " --config-set-rx remote-gsyncd %s/gsyncd . ."
- , dirname, GSYNC_CONF, GSYNCD_PREFIX);
- if (ret <= 0) {
- ret = -1;
- goto out;
- }
-
- ret = system (cmd);
- if (ret == -1)
- goto out;
- ret = snprintf (cmd, 1024, GSYNCD_PREFIX "/gsyncd -c %s/%s "
- " --config-set-rx remote-gsyncd"
- " /usr/local/libexec/glusterfs/gsyncd . ^ssh:"
- , dirname, GSYNC_CONF);
- if (ret <= 0) {
- ret = -1;
+ ret = configure_syncaemon (this, dirname);
+ if (ret)
goto out;
- }
- ret = system (cmd);
- if (ret == -1)
- goto out;
-#endif
ret = glusterd_rpcsvc_options_build (this->options);
if (ret)
goto out;