diff options
Diffstat (limited to 'cli/src/cli-rpc-ops.c')
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 63 | 
1 files changed, 59 insertions, 4 deletions
| diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 110962c6c29..c358192d2fa 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); | 
