diff options
| -rw-r--r-- | configure.ac | 2 | ||||
| -rw-r--r-- | xlators/features/marker/utils/Makefile.am | 6 | ||||
| -rwxr-xr-x | xlators/features/marker/utils/gsyncd.in | 55 | ||||
| -rw-r--r-- | xlators/features/marker/utils/src/Makefile.am | 20 | ||||
| -rw-r--r-- | xlators/features/marker/utils/src/gsyncd.c | 131 | 
5 files changed, 153 insertions, 61 deletions
diff --git a/configure.ac b/configure.ac index d8840a436de..2a34a61aff8 100644 --- a/configure.ac +++ b/configure.ac @@ -109,7 +109,7 @@ AC_CONFIG_FILES([Makefile                  xlators/features/marker/Makefile                  xlators/features/marker/src/Makefile                  xlators/features/marker/utils/Makefile -                xlators/features/marker/utils/gsyncd +                xlators/features/marker/utils/src/Makefile                  xlators/features/marker/utils/syncdaemon/Makefile  		xlators/features/read-only/Makefile  		xlators/features/read-only/src/Makefile diff --git a/xlators/features/marker/utils/Makefile.am b/xlators/features/marker/utils/Makefile.am index 84e926c00eb..556951d9fb7 100644 --- a/xlators/features/marker/utils/Makefile.am +++ b/xlators/features/marker/utils/Makefile.am @@ -1,7 +1,3 @@ -SUBDIRS = syncdaemon - -gsyncddir = $(libexecdir)/glusterfs - -gsyncd_SCRIPTS = gsyncd +SUBDIRS = syncdaemon src  CLEANFILES = diff --git a/xlators/features/marker/utils/gsyncd.in b/xlators/features/marker/utils/gsyncd.in deleted file mode 100755 index b517b341f96..00000000000 --- a/xlators/features/marker/utils/gsyncd.in +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh - -prefix="@prefix@" -exec_prefix="@exec_prefix@" -libexecdir=`eval echo "@libexecdir@"` -sbindir=`eval echo "@sbindir@"` - -gluster="$sbindir"/gluster - -# glusterd service autodetection - -config_wanted=1 -if [ "$_GLUSTERD_CALLED_" = 1 ]; then -    # OK, we know glusterd called us, no need to look for further config -    config_wanted=0 -    # ... altough this conclusion should not inherit to our children -    unset _GLUSTERD_CALLED_ -else -    # look for a -c option -- if present, we are already configured. - -    for a in "$@"; do -        # -c found, see if it has an argument -        if [ "$one_more_arg" = 1 ]; then -            if echo "$a" | grep -qv ^-; then -                config_wanted=0 -                break -            fi -            one_more_arg=0 -        fi - -        if [ "$a" = -c ] || [ "$a" = --config-file ]; then -            one_more_arg=1 -            continue -        fi - -        if echo $a | grep -qE '^(-c.|--config-file=)'; then -            config_wanted=0; -            break -        fi -    done - -fi - -if [ $config_wanted = 1 ]; then -    wd="`${gluster} --log-file=/dev/stderr system:: getwd`" -    if [ $? -eq 0 ]; then -        config_file="$wd/geo-replication/gsyncd.conf" -    fi -fi - -if [ -z "$config_file" ]; then -    exec @PYTHON@ "$libexecdir"/glusterfs/python/syncdaemon/gsyncd.py "$@" -else -    exec @PYTHON@ "$libexecdir"/glusterfs/python/syncdaemon/gsyncd.py -c "$config_file" "$@" -fi diff --git a/xlators/features/marker/utils/src/Makefile.am b/xlators/features/marker/utils/src/Makefile.am new file mode 100644 index 00000000000..74e2b3ef516 --- /dev/null +++ b/xlators/features/marker/utils/src/Makefile.am @@ -0,0 +1,20 @@ +gsyncddir = $(libexecdir)/glusterfs + +gsyncd_PROGRAMS = gsyncd + +gsyncd_SOURCES = gsyncd.c + +gsyncd_LDADD = $(top_builddir)/libglusterfs/src/libglusterfs.la + +gsyncd_LDFLAGS = $(GF_LDFLAGS) $(GF_GLUSTERFS_LDFLAGS) + +AM_CFLAGS = -fPIC -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D$(GF_HOST_OS)\ +	-I$(top_srcdir)/libglusterfs/src\ +	-DGSYNCD_PREFIX=\"$(libexecdir)/glusterfs\"\ +	-DSBIN_DIR=\"$(sbindir)\" -DPYTHON=\"$(PYTHON)\" + + +CLEANFILES = + +$(top_builddir)/libglusterfs/src/libglusterfs.la: +	$(MAKE) -C $(top_builddir)/libglusterfs/src/ all diff --git a/xlators/features/marker/utils/src/gsyncd.c b/xlators/features/marker/utils/src/gsyncd.c new file mode 100644 index 00000000000..ec1d3a65a98 --- /dev/null +++ b/xlators/features/marker/utils/src/gsyncd.c @@ -0,0 +1,131 @@ +/* +  Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> +  This file is part of GlusterFS. + +  GlusterFS is free software; you can redistribute it and/or modify +  it under the terms of the GNU General Public License as published +  by the Free Software Foundation; either version 3 of the License, +  or (at your option) any later version. + +  GlusterFS is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +  General Public License for more details. + +  You should have received a copy of the GNU General Public License +  along with this program.  If not, see +  <http://www.gnu.org/licenses/>. +*/ + + +#ifndef _CONFIG_H +#define _CONFIG_H +#include "config.h" +#endif + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> + +#include "common-utils.h" +#include "run.h" + +#define _GLUSTERD_CALLED_ "_GLUSTERD_CALLED_" +#define GSYNCD_CONF "geo-replication/gsyncd.conf" + +static int +config_wanted (int argc, char **argv) +{ +        char *evas = NULL; +        char *oa = NULL; +        int i      = 0; +        int one_more_arg = 0; + +        evas = getenv (_GLUSTERD_CALLED_); +        if (evas && strcmp (evas, "1") == 0) { +                /* OK, we know glusterd called us, no need to look for further config +                 * ... altough this conclusion should not inherit to our children +                 */ +                unsetenv (_GLUSTERD_CALLED_); +                return 0; +        } + +        for (i = 1; i < argc; i++) { +                /* -c found, see if it has an argument */ +                if (one_more_arg) { +                        if (argv[i][0] != '-') +                                return 0; +                        one_more_arg = 0; +                } + +                if ((strcmp (argv[i], "-c") && strcmp (argv[i], "--config-file")) == 0) { +                        one_more_arg = 1; +                        continue; +                } + +                oa = strtail (argv[i], "-c"); +                if (oa && !*oa) +                        oa = NULL; +                if (!oa) +                        oa = strtail (argv[i], "--config-file="); +                if (oa) +                        return 0; +        } + +        return 1; +} + +int +main(int argc, char **argv) +{ +        char config_file[PATH_MAX] = {0,}; +        size_t gluster_workdir_len = 0; +        runner_t runner            = {0,}; +        int i                      = 0; +        int j                      = 0; +        char *nargv[argc + 4]; + +        if (config_wanted (argc, argv)) { +                runinit (&runner); +                runner_add_args (&runner, SBIN_DIR"/gluster", +                                 "--log-file=/dev/stderr", "system::", "getwd", +                                 NULL); +                runner_redir (&runner, STDOUT_FILENO, RUN_PIPE); +                if (runner_start (&runner) == 0 && +                    fgets (config_file, PATH_MAX, +                           runner_chio (&runner, STDOUT_FILENO)) != NULL && +                    config_file[strlen (config_file) - 1] == '\n' && +                    runner_end (&runner) == 0) +                        gluster_workdir_len = strlen (config_file) - 1; + +                if (gluster_workdir_len) { +                        if (gluster_workdir_len + 1 + strlen (GSYNCD_CONF) + 1 > +                            PATH_MAX) +                                goto error; +                        config_file[gluster_workdir_len] = '/'; +                        strcat (config_file, GSYNCD_CONF); +                } else +                        config_file[0] = '\0'; +        } + +        j = 0; +        nargv[j++] = PYTHON; +        nargv[j++] = GSYNCD_PREFIX"/python/syncdaemon/gsyncd.py"; +        if (config_file[0]) { +                nargv[j++] = "-c"; +                nargv[j++] = config_file; +        } +        for (i = 1; i < argc; i++) +                nargv[j++] = argv[i]; +        nargv[j++] = NULL; + +        execvp (PYTHON, nargv); + +        fprintf (stderr, "exec of "PYTHON" failed\n"); +        return 127; + + error: +        fprintf (stderr, "gsyncd initializaion failed\n"); +        return 1; +}  | 
