diff options
| author | Csaba Henk <csaba@gluster.com> | 2011-04-14 16:35:02 +0000 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2011-04-15 00:31:13 -0700 | 
| commit | 0c77e6f156e57717f9cd3feb35d589e36dcb831f (patch) | |
| tree | 141beef92eec3bb03b27000fbac2cd6f86079d40 | |
| parent | 0dfe24fc9fc8bf92044fa59e27f61169dfdcd5bc (diff) | |
glusterd/volgen: partially revert 50ab0ad4
Moving the adjustment of marker's timestamp file to generation
phase was not correct, as generation should be side effect free.
Moved it back to the point where volfiles are written.
Signed-off-by: Csaba Henk <csaba@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 2529 (Starting Gsync  causes ENOTCONN to glusterfs client)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2529
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 133 | 
1 files changed, 53 insertions, 80 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index fd3b4792c77..1cea50bda2b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -1181,83 +1181,7 @@ server_spec_option_handler (glusterfs_graph_t *graph,          return ret;  } -static void -get_vol_tstamp_file (char *filename, glusterd_volinfo_t *volinfo) -{ -        glusterd_conf_t *priv  = NULL; - -        priv = THIS->private; - -        GLUSTERD_GET_VOLUME_DIR (filename, volinfo, priv); -        strncat (filename, "/marker.tstamp", -                 PATH_MAX - strlen(filename) - 1); -} - -static int32_t -glusterd_gsync_option_set (glusterd_volinfo_t *volinfo, -                           xlator_t *xl, dict_t *set_dict) -{ -        int32_t        ret                   = -1; -        char          *gsync_val             = NULL; -        gf_boolean_t   gsync                 = _gf_false; -        char           volume_id [64]        = {0, }; -        char           tstamp_file[PATH_MAX] = {0,}; - -        GF_VALIDATE_OR_GOTO ("glusterd", volinfo, out); -        GF_VALIDATE_OR_GOTO ("glusterd", xl, out); -        GF_VALIDATE_OR_GOTO ("glusterd", set_dict, out); - -        ret = volgen_dict_get (set_dict, VKEY_MARKER_XTIME, -                               &gsync_val); -        if (ret) -                return -1; - -        if (gsync_val) -                ret = gf_string2boolean (gsync_val, &gsync); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, -                        "value for marker-gsync option is junk"); -                return -1; -        } -        get_vol_tstamp_file (tstamp_file, volinfo); -        if (gsync == _gf_false) { -                ret = unlink (tstamp_file); -                if (ret == -1 && errno == ENOENT) -                        ret = 0; -                if (ret == -1) { -                        gf_log ("", GF_LOG_ERROR, "failed to unlink %s (%s)", -                                tstamp_file, strerror (errno)); -                        return -1; -                } -                goto out; -        } - -        ret = open (tstamp_file, O_WRONLY|O_CREAT|O_EXCL, 0644); -        if (ret == -1 && errno == EEXIST) { -                gf_log ("", GF_LOG_DEBUG, "timestamp file exist"); -                ret = -2; -        } -        if (ret == -1) { -                gf_log ("", GF_LOG_WARNING, "failed to create %s (%s)", -                        tstamp_file, strerror (errno)); -                return -1; -        } -        if (ret >= 0) -                close (ret); - -        uuid_unparse (volinfo->volume_id, volume_id); -        ret = xlator_set_option (xl, "volume-uuid", volume_id); -        if (ret) -                return -1; - -        ret = xlator_set_option (xl, "timestamp-file", tstamp_file); -        if (ret) -                return -1; - -        ret = 0; -out: -        return ret; -} +static void get_vol_tstamp_file (char *filename, glusterd_volinfo_t *volinfo);  static int  server_graph_builder (glusterfs_graph_t *graph, glusterd_volinfo_t *volinfo, @@ -1270,6 +1194,8 @@ server_graph_builder (glusterfs_graph_t *graph, glusterd_volinfo_t *volinfo,          xlator_t *txl = NULL;          xlator_t *rbxl = NULL;          char      transt[16] = {0,}; +        char      volume_id[64] = {0,}; +        char      tstamp_file[PATH_MAX] = {0,};          int       ret = 0;          path = param; @@ -1326,9 +1252,13 @@ server_graph_builder (glusterfs_graph_t *graph, glusterd_volinfo_t *volinfo,          xl = volgen_graph_add (graph, "features/marker", volname);          if (!xl)                  return -1; - -        ret = glusterd_gsync_option_set (volinfo, xl, set_dict); -        if (ret < 0) +        uuid_unparse (volinfo->volume_id, volume_id); +        ret = xlator_set_option (xl, "volume-uuid", volume_id); +        if (ret) +                return -1; +        get_vol_tstamp_file (tstamp_file, volinfo); +        ret = xlator_set_option (xl, "timestamp-file", tstamp_file); +        if (ret)                  return -1;          xl = volgen_graph_add_as (graph, "debug/io-stats", path); @@ -1885,12 +1815,55 @@ glusterd_generate_brick_volfile (glusterd_volinfo_t *volinfo,          return ret;  } +static void +get_vol_tstamp_file (char *filename, glusterd_volinfo_t *volinfo) +{ +        glusterd_conf_t *priv  = NULL; + +        priv = THIS->private; + +        GLUSTERD_GET_VOLUME_DIR (filename, volinfo, priv); +        strncat (filename, "/marker.tstamp", +                 PATH_MAX - strlen(filename) - 1); +} +  static int  generate_brick_volfiles (glusterd_volinfo_t *volinfo)  {          glusterd_brickinfo_t    *brickinfo = NULL; +        char                     tstamp_file[PATH_MAX] = {0,};          int                      ret = -1; +        ret = glusterd_volinfo_get_boolean (volinfo, VKEY_MARKER_XTIME); +        if (ret == -1) +                return -1; + +        get_vol_tstamp_file (tstamp_file, volinfo); + +        if (ret) { +                ret = open (tstamp_file, O_WRONLY|O_CREAT|O_EXCL, 0644); +                if (ret == -1 && errno == EEXIST) { +                        gf_log ("", GF_LOG_DEBUG, "timestamp file exist"); +                        ret = -2; +                } +                if (ret == -1) { +                        gf_log ("", GF_LOG_ERROR, "failed to create %s (%s)", +                                tstamp_file, strerror (errno)); +                        return -1; +                } +                if (ret >= 0) +                        close (ret); +        } else { +                ret = unlink (tstamp_file); +                if (ret == -1 && errno == ENOENT) +                        ret = 0; +                if (ret == -1) { +                        gf_log ("", GF_LOG_ERROR, "failed to unlink %s (%s)", +                                tstamp_file, strerror (errno)); +                        return -1; +                } +        } +          list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {                  gf_log ("", GF_LOG_DEBUG,                          "Found a brick - %s:%s", brickinfo->hostname,  | 
