summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCsaba Henk <csaba@gluster.com>2011-04-14 16:35:02 +0000
committerAnand Avati <avati@gluster.com>2011-04-15 00:31:13 -0700
commit0c77e6f156e57717f9cd3feb35d589e36dcb831f (patch)
tree141beef92eec3bb03b27000fbac2cd6f86079d40
parent0dfe24fc9fc8bf92044fa59e27f61169dfdcd5bc (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.c133
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,