Skip to content

Instantly share code, notes, and snippets.

@vshankar
Created August 30, 2011 10:17
Show Gist options
  • Save vshankar/1180603 to your computer and use it in GitHub Desktop.
Save vshankar/1180603 to your computer and use it in GitHub Desktop.
Hadoop Mountbroker Patch
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h
index 51d9d88..c7d784c 100644
--- a/libglusterfs/src/common-utils.h
+++ b/libglusterfs/src/common-utils.h
@@ -69,6 +69,7 @@ void trap (void);
#define GF_UNIT_PB_STRING "PB"
#define GEOREP "geo-replication"
+#define GHADOOP "glusterfs-hadoop"
enum _gf_boolean
{
diff --git a/xlators/mgmt/glusterd/src/glusterd-mountbroker.c b/xlators/mgmt/glusterd/src/glusterd-mountbroker.c
index 03767ee..6d388d6 100644
--- a/xlators/mgmt/glusterd/src/glusterd-mountbroker.c
+++ b/xlators/mgmt/glusterd/src/glusterd-mountbroker.c
@@ -277,6 +277,18 @@ const char *georep_mnt_desc_template =
"log-level=* "
")";
+
+const char *hadoop_mnt_desc_template =
+ "SUP("
+ "volfile-server=%s "
+ "volfile-id=%s "
+ "user-map-root=%s "
+ ")"
+ "SUB+("
+ "log-file="DEFAULT_LOG_FILE_DIRECTORY"/"GHADOOP"*/* "
+ "log-level=* "
+ ")";
+
int
make_georep_mountspec (gf_mount_spec_t *mspec, const char *volname,
char *user)
@@ -292,6 +304,21 @@ make_georep_mountspec (gf_mount_spec_t *mspec, const char *volname,
return parse_mount_pattern_desc (mspec, georep_mnt_desc);
}
+int
+make_ghadoop_mountspec (gf_mount_spec_t *mspec, const char *volname,
+ char *user, char *server)
+{
+ char *hadoop_mnt_desc = NULL;
+ int ret = 0;
+
+ ret = gf_asprintf (&hadoop_mnt_desc, hadoop_mnt_desc_template,
+ server, volname, user);
+ if (ret == -1)
+ return ret;
+
+ return parse_mount_pattern_desc (mspec, hadoop_mnt_desc);
+}
+
static gf_boolean_t
match_comp (char *str, char *patcomp)
{
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c
index a98f83c..a8c18a8 100644
--- a/xlators/mgmt/glusterd/src/glusterd.c
+++ b/xlators/mgmt/glusterd/src/glusterd.c
@@ -593,23 +593,32 @@ check_prepare_mountbroker_root (char *mountbroker_root)
static void
_install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)
{
- glusterd_conf_t *priv = THIS->private;
- char *label = NULL;
- gf_boolean_t georep = _gf_false;
- char *pdesc = value->data;
- char *volname = NULL;
- int *ret = data;
- int rv = 0;
- gf_mount_spec_t *mspec = NULL;
- char *user = NULL;
+ glusterd_conf_t *priv = THIS->private;
+ char *label = NULL;
+ gf_boolean_t georep = _gf_false;
+ gf_boolean_t ghadoop = _gf_false;
+ char *pdesc = value->data;
+ char *volname = NULL;
+ int *ret = data;
+ int rv = 0;
+ gf_mount_spec_t *mspec = NULL;
+ char *user = NULL;
+ char *volfile_server = NULL;
if (*ret == -1)
return;
label = strtail (key, "mountbroker.");
+
+ /* check for presence of geo-rep label */
if (!label) {
- georep = _gf_true;
label = strtail (key, "mountbroker-"GEOREP".");
+ if (label)
+ georep = _gf_true;
+
+ label = strtail (key, "mountbroker-"GHADOOP".");
+ if (label)
+ ghadoop = _gf_true;
}
if (!label)
@@ -620,7 +629,7 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)
goto err;
mspec->label = label;
- if (georep) {
+ if (georep || ghadoop) {
volname = gf_strdup (pdesc);
if (!volname)
goto err;
@@ -630,7 +639,20 @@ _install_mount_spec (dict_t *opts, char *key, data_t *value, void *data)
user++;
} else
user = label;
- rv = make_georep_mountspec (mspec, volname, user);
+
+ if (georep)
+ rv = make_georep_mountspec (mspec, volname, user);
+
+ if (ghadoop) {
+ volfile_server = strchr (user, ':');
+ if (volfile_server)
+ *volfile_server++ = '\0';
+ else
+ volfile_server = "localhost";
+
+ rv = make_ghadoop_mountspec (mspec, volname, user, volfile_server);
+ }
+
GF_FREE (volname);
if (rv != 0)
goto err;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment