summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt
diff options
context:
space:
mode:
authorJeff Darcy <jdarcy@fb.com>2017-08-31 12:33:59 -0700
committerJeff Darcy <jdarcy@fb.com>2017-08-31 12:33:59 -0700
commited23e379ee397b3fed479c15b7551d2dbba9a05f (patch)
treefe9bc23b851e0ee5502a48f1362b3ef9b10052f3 /xlators/mgmt
parentf2d57485d57e14a064c9ca6e83fe6c92131a8e37 (diff)
parentd174f021a4e0667e60ce6abc038106ad9b74dc74 (diff)
Merge remote-tracking branch 'origin/release-3.8' into release-3.8-fb
Change-Id: Ie35cd1c8c7808949ddf79b3189f1f8bf0ff70ed8
Diffstat (limited to 'xlators/mgmt')
-rw-r--r--xlators/mgmt/glusterd/src/Makefile.am2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-quota.c49
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c7
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c29
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-ops.c24
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.c6
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h24
7 files changed, 72 insertions, 69 deletions
diff --git a/xlators/mgmt/glusterd/src/Makefile.am b/xlators/mgmt/glusterd/src/Makefile.am
index f938aaf9436..d20fcefd97d 100644
--- a/xlators/mgmt/glusterd/src/Makefile.am
+++ b/xlators/mgmt/glusterd/src/Makefile.am
@@ -46,7 +46,7 @@ AM_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src \
-I$(CONTRIBDIR)/mount \
-I$(CONTRIBDIR)/userspace-rcu \
-DSBIN_DIR=\"$(sbindir)\" -DDATADIR=\"$(localstatedir)\" \
- -DGSYNCD_PREFIX=\"$(libexecdir)/glusterfs\" \
+ -DGSYNCD_PREFIX=\"$(GLUSTERFS_LIBEXECDIR)\" \
-DCONFDIR=\"$(sysconfdir)/ganesha\" \
-DGANESHA_PREFIX=\"$(libexecdir)/ganesha\" \
-DSYNCDAEMON_COMPILE=$(SYNCDAEMON_COMPILE) $(XML_CPPFLAGS)
diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c
index 08fc74f396b..0f973520e58 100644
--- a/xlators/mgmt/glusterd/src/glusterd-quota.c
+++ b/xlators/mgmt/glusterd/src/glusterd-quota.c
@@ -702,11 +702,6 @@ glusterd_quota_disable (glusterd_volinfo_t *volinfo, char **op_errstr,
}
}
- //Remove aux mount of the volume on every node in the cluster
- ret = glusterd_remove_auxiliary_mount (volinfo->volname);
- if (ret)
- goto out;
-
*crawl = _gf_true;
(void) glusterd_clean_up_quota_store (volinfo);
@@ -736,7 +731,7 @@ glusterd_set_quota_limit (char *volname, char *path, char *hard_limit,
priv = this->private;
GF_ASSERT (priv);
- GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (abspath, volname, path);
+ GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (abspath, volname, path);
ret = gf_lstat_dir (abspath, NULL);
if (ret) {
gf_asprintf (op_errstr, "Failed to find the directory %s. "
@@ -1361,7 +1356,7 @@ glusterd_remove_quota_limit (char *volname, char *path, char **op_errstr,
priv = this->private;
GF_ASSERT (priv);
- GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (abspath, volname, path);
+ GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (abspath, volname, path);
ret = gf_lstat_dir (abspath, NULL);
if (ret) {
gf_asprintf (op_errstr, "Failed to find the directory %s. "
@@ -1692,6 +1687,16 @@ glusterd_op_quota (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
ret = 0;
out:
+ if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE ||
+ type == GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS ||
+ type == GF_QUOTA_OPTION_TYPE_REMOVE ||
+ type == GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS) {
+ /* During a list operation we need the aux mount to be
+ * accessible until the listing is done at the cli
+ */
+ glusterd_remove_auxiliary_mount (volinfo->volname);
+ }
+
return ret;
}
@@ -1850,7 +1855,7 @@ out:
}
static int
-glusterd_create_quota_auxiliary_mount (xlator_t *this, char *volname)
+glusterd_create_quota_auxiliary_mount (xlator_t *this, char *volname, int type)
{
int ret = -1;
int retry = 0;
@@ -1861,28 +1866,30 @@ glusterd_create_quota_auxiliary_mount (xlator_t *this, char *volname)
char *volfileserver = NULL;
glusterd_conf_t *priv = NULL;
struct stat buf = {0,};
+ FILE *file = NULL;
GF_VALIDATE_OR_GOTO ("glusterd", this, out);
priv = this->private;
GF_VALIDATE_OR_GOTO (this->name, priv, out);
- GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile_path, volname);
- if (gf_is_service_running (pidfile_path, NULL)) {
- gf_msg_debug (this->name, 0, "Aux mount of volume %s is running"
- " already", volname);
- ret = 0;
- goto out;
+ if (type == GF_QUOTA_OPTION_TYPE_LIST ||
+ type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) {
+ GLUSTERFS_GET_QUOTA_LIST_MOUNT_PIDFILE (pidfile_path, volname);
+ GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, "/");
+ } else {
+ GLUSTERFS_GET_QUOTA_LIMIT_MOUNT_PIDFILE (pidfile_path, volname);
+ GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (mountdir, volname, "/");
}
- if (glusterd_is_fuse_available () == _gf_false) {
- gf_msg (this->name, GF_LOG_ERROR, 0,
- GD_MSG_MOUNT_REQ_FAIL, "Fuse unavailable");
- ret = -1;
- goto out;
+ file = fopen (pidfile_path, "r");
+ if (file) {
+ /* Previous command did not clean up pid file.
+ * remove aux mount if it exists*/
+ gf_umount_lazy (this->name, mountdir, 1);
+ fclose(file);
}
- GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volname, "/");
ret = sys_mkdir (mountdir, 0777);
if (ret && errno != EEXIST) {
gf_msg (this->name, GF_LOG_ERROR, errno,
@@ -2036,7 +2043,7 @@ glusterd_op_stage_quota (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
*/
if (is_origin_glusterd (dict)) {
ret = glusterd_create_quota_auxiliary_mount (this,
- volname);
+ volname, type);
if (ret) {
*op_errstr = gf_strdup ("Failed to start aux "
"mount");
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c
index 36adb7fbfd8..49051182345 100644
--- a/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c
@@ -3500,6 +3500,7 @@ glusterd_get_geo_rep_session (char *slave_key, char *origin_volname,
char *slave)
{
int32_t ret = -1;
+ int32_t len = 0;
char *token = NULL;
char *tok = NULL;
char *temp = NULL;
@@ -3568,8 +3569,10 @@ glusterd_get_geo_rep_session (char *slave_key, char *origin_volname,
* 'root@' */
ip_temp = gf_strdup (ip);
tok = strtok_r (ip_temp, "@", &save_ptr);
- if (tok && !strcmp (tok, "root"))
- ip_i = ip + 5;
+ len = strlen(tok);
+ tok = strtok_r (NULL, "@", &save_ptr);
+ if (tok != NULL)
+ ip_i = ip + len + 1;
ret = snprintf (session, PATH_MAX, "%s_%s_%s",
origin_volname, ip_i, slave_temp);
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index cc4f69f3526..e303937579e 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -5013,7 +5013,7 @@ _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data)
glusterd_conf_t *priv = NULL;
gf_boolean_t is_template_in_use = _gf_false;
gf_boolean_t is_paused = _gf_false;
- char *key1 = NULL;
+ char key1[1024] = {0,};
xlator_t *this1 = NULL;
this1 = THIS;
@@ -5108,9 +5108,8 @@ _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data)
goto out;
}
- /* Move the pointer two characters ahead to surpass '//' */
- if ((key1 = strchr (slave, '/')))
- key1 = key1 + 2;
+ /* Form key1 which is "<user@><slave_host>::<slavevol>" */
+ snprintf (key1, sizeof (key1), "%s::%s", slave_url, slave_vol);
/* Looks for the last status, to find if the session was running
* when the node went down. If the session was just created or
@@ -5390,6 +5389,7 @@ static struct fs_info {
{ "ext3", "tune2fs", "-l", "Inode size:", "e2fsprogs" },
{ "ext4", "tune2fs", "-l", "Inode size:", "e2fsprogs" },
{ "btrfs", NULL, NULL, NULL, NULL },
+ { "zfs", NULL, NULL, NULL, NULL },
{ NULL, NULL, NULL, NULL, NULL}
};
@@ -5434,6 +5434,16 @@ glusterd_add_inode_size_to_dict (dict_t *dict, int count)
for (fs = glusterd_fs ; fs->fs_type_name; fs++) {
if (strcmp (fs_name, fs->fs_type_name) == 0) {
+ if (!fs->fs_tool_name) {
+ /* dynamic inodes */
+ gf_msg (THIS->name, GF_LOG_INFO, 0,
+ GD_MSG_INODE_SIZE_GET_FAIL, "the "
+ "brick on %s (%s) uses dynamic inode "
+ "sizes", device, fs_name);
+ cur_word = "N/A";
+ goto cached;
+ }
+
snprintf (fs_tool_name, sizeof (fs_tool_name),
"/usr/sbin/%s", fs->fs_tool_name);
if (sys_access (fs_tool_name, R_OK|X_OK) == 0)
@@ -10565,21 +10575,12 @@ glusterd_remove_auxiliary_mount (char *volname)
{
int ret = -1;
char mountdir[PATH_MAX] = {0,};
- char pidfile[PATH_MAX] = {0,};
xlator_t *this = NULL;
this = THIS;
GF_ASSERT (this);
- GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile, volname);
-
- if (!gf_is_service_running (pidfile, NULL)) {
- gf_msg_debug (this->name, 0, "Aux mount of volume %s "
- "absent, hence returning", volname);
- return 0;
- }
-
- GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volname, "/");
+ GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (mountdir, volname, "/");
ret = gf_umount_lazy (this->name, mountdir, 1);
if (ret) {
gf_msg (this->name, GF_LOG_ERROR, errno,
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
index 61c79655ccf..8f2a23a898a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
@@ -2677,8 +2677,6 @@ glusterd_stop_volume (glusterd_volinfo_t *volinfo)
{
int ret = -1;
glusterd_brickinfo_t *brickinfo = NULL;
- char mountdir[PATH_MAX] = {0,};
- char pidfile[PATH_MAX] = {0,};
xlator_t *this = NULL;
glusterd_svc_t *svc = NULL;
@@ -2707,24 +2705,6 @@ glusterd_stop_volume (glusterd_volinfo_t *volinfo)
goto out;
}
- /* If quota auxiliary mount is present, unmount it */
- GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile, volinfo->volname);
-
- if (!gf_is_service_running (pidfile, NULL)) {
- gf_msg_debug (this->name, 0, "Aux mount of volume %s "
- "absent", volinfo->volname);
- } else {
- GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volinfo->volname,
- "/");
-
- ret = gf_umount_lazy (this->name, mountdir, 0);
- if (ret)
- gf_msg (this->name, GF_LOG_ERROR, errno,
- GD_MSG_UNOUNT_FAILED,
- "umount on %s failed",
- mountdir);
- }
-
if (!volinfo->is_snap_volume) {
svc = &(volinfo->snapd.svc);
ret = svc->manager (svc, volinfo, PROC_START_NO_WAIT);
@@ -2809,10 +2789,6 @@ glusterd_op_delete_volume (dict_t *dict)
goto out;
}
- ret = glusterd_remove_auxiliary_mount (volname);
- if (ret)
- goto out;
-
ret = glusterd_delete_volume (volinfo);
out:
gf_msg_debug (this->name, 0, "returning %d", ret);
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c
index 26cd0fc4f25..c2272558939 100644
--- a/xlators/mgmt/glusterd/src/glusterd.c
+++ b/xlators/mgmt/glusterd/src/glusterd.c
@@ -244,7 +244,8 @@ glusterd_fetchspec_notify (xlator_t *this)
list_for_each_entry (trans, &priv->xprt_list, list) {
rpcsvc_callback_submit (priv->rpc, trans,
&glusterd_cbk_prog,
- GF_CBK_FETCHSPEC, NULL, 0);
+ GF_CBK_FETCHSPEC, NULL, 0,
+ NULL);
}
}
pthread_mutex_unlock (&priv->xprt_lock);
@@ -280,7 +281,8 @@ glusterd_fetchsnap_notify (xlator_t *this)
list_for_each_entry (trans, &priv->xprt_list, list) {
rpcsvc_callback_submit (priv->rpc, trans,
&glusterd_cbk_prog,
- GF_CBK_GET_SNAPS, NULL, 0);
+ GF_CBK_GET_SNAPS, NULL, 0,
+ NULL);
}
}
pthread_mutex_unlock (&priv->xprt_lock);
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 4795f958038..7c59d5501a9 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -597,9 +597,15 @@ typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
#define GLUSTERD_GET_QUOTAD_DIR(path, priv) \
snprintf (path, PATH_MAX, "%s/quotad", priv->workdir);
-#define GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH(abspath, volname, path) \
- snprintf (abspath, sizeof (abspath)-1, \
- DEFAULT_VAR_RUN_DIRECTORY"/%s%s", volname, path);
+#define GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH(abspath, volname, path) do { \
+ snprintf (abspath, sizeof (abspath)-1, \
+ DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_limit%s", volname, path);\
+ } while (0)
+
+#define GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(abspath, volname, path) do { \
+ snprintf (abspath, sizeof (abspath)-1, \
+ DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_list%s", volname, path);\
+ } while (0)
#define GLUSTERD_GET_TMP_PATH(abspath, path) do { \
snprintf (abspath, sizeof (abspath)-1, \
@@ -688,11 +694,19 @@ typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
uuid_utoa(MY_UUID)); \
} while (0)
-#define GLUSTERFS_GET_AUX_MOUNT_PIDFILE(pidfile, volname) { \
+#define GLUSTERFS_GET_QUOTA_LIMIT_MOUNT_PIDFILE(pidfile, volname) { \
snprintf (pidfile, PATH_MAX-1, \
- DEFAULT_VAR_RUN_DIRECTORY"/%s.pid", volname); \
+ DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_limit.pid", \
+ volname); \
}
+#define GLUSTERFS_GET_QUOTA_LIST_MOUNT_PIDFILE(pidfile, volname) { \
+ snprintf (pidfile, PATH_MAX-1, \
+ DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_list.pid", \
+ volname); \
+ }
+
+
#define GLUSTERD_GET_UUID_NOHYPHEN(ret_string, uuid) do { \
char *snap_volname_ptr = ret_string; \
char *snap_volid_ptr = uuid_utoa(uuid); \