diff options
| author | Jeff Darcy <jdarcy@fb.com> | 2017-08-31 12:33:59 -0700 |
|---|---|---|
| committer | Jeff Darcy <jdarcy@fb.com> | 2017-08-31 12:33:59 -0700 |
| commit | ed23e379ee397b3fed479c15b7551d2dbba9a05f (patch) | |
| tree | fe9bc23b851e0ee5502a48f1362b3ef9b10052f3 /xlators/mgmt/glusterd/src | |
| parent | f2d57485d57e14a064c9ca6e83fe6c92131a8e37 (diff) | |
| parent | d174f021a4e0667e60ce6abc038106ad9b74dc74 (diff) | |
Merge remote-tracking branch 'origin/release-3.8' into release-3.8-fb
Change-Id: Ie35cd1c8c7808949ddf79b3189f1f8bf0ff70ed8
Diffstat (limited to 'xlators/mgmt/glusterd/src')
| -rw-r--r-- | xlators/mgmt/glusterd/src/Makefile.am | 2 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quota.c | 49 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot-utils.c | 7 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 29 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 24 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 6 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 24 |
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); \ |
