summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--glusterfsd/src/glusterfsd.c28
-rw-r--r--glusterfsd/src/glusterfsd.h1
-rw-r--r--libglusterfs/src/glusterfs.h1
-rwxr-xr-xtests/bugs/fuse/bug-858215.t2
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c34
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.h14
-rwxr-xr-xxlators/mount/fuse/utils/mount.glusterfs.in7
7 files changed, 72 insertions, 15 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c
index dd89c47ff43..3f546816892 100644
--- a/glusterfsd/src/glusterfsd.c
+++ b/glusterfsd/src/glusterfsd.c
@@ -241,6 +241,8 @@ static struct argp_option gf_options[] = {
" [default: \"yes\"]"},
{"secure-mgmt", ARGP_SECURE_MGMT_KEY, "BOOL", OPTION_ARG_OPTIONAL,
"Override default for secure (SSL) management connections"},
+ {"event-history", ARGP_FUSE_EVENT_HISTORY_KEY, "BOOL",
+ OPTION_ARG_OPTIONAL, "disable/enable fuse event-history"},
{0, 0, 0, 0, "Miscellaneous Options:"},
{0, }
};
@@ -551,6 +553,15 @@ set_fuse_mount_options (glusterfs_ctx_t *ctx, dict_t *options)
goto err;
}
}
+ if (cmd_args->event_history) {
+ ret = dict_set_str (options, "event-history",
+ cmd_args->event_history);
+ if (ret < 0) {
+ gf_msg ("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4,
+ "event-history");
+ goto err;
+ }
+ }
ret = 0;
err:
return ret;
@@ -1272,6 +1283,23 @@ no_oom_api:
argp_failure (state, -1, 0,
"unknown secure-mgmt setting \"%s\"", arg);
break;
+ case ARGP_FUSE_EVENT_HISTORY_KEY:
+ if (!arg)
+ arg = "no";
+
+ if (gf_string2boolean (arg, &b) == 0) {
+ if (b) {
+ cmd_args->event_history = "yes";
+ } else {
+ cmd_args->event_history = "no";
+ }
+
+ break;
+ }
+
+ argp_failure (state, -1, 0,
+ "unknown event-history setting \"%s\"", arg);
+ break;
}
return 0;
diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h
index 6a30ee9e3f7..3ed4790fa62 100644
--- a/glusterfsd/src/glusterfsd.h
+++ b/glusterfsd/src/glusterfsd.h
@@ -96,6 +96,7 @@ enum argp_option_keys {
#ifdef GF_LINUX_HOST_OS
ARGP_OOM_SCORE_ADJ_KEY = 176,
#endif
+ ARGP_FUSE_EVENT_HISTORY_KEY = 177,
};
struct _gfd_vol_top_priv_t {
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h
index 0a3891b5f8b..3c4013bd98c 100644
--- a/libglusterfs/src/glusterfs.h
+++ b/libglusterfs/src/glusterfs.h
@@ -404,6 +404,7 @@ struct _cmd_args {
#ifdef GF_LINUX_HOST_OS
char *oom_score_adj;
#endif
+ char *event_history;
};
typedef struct _cmd_args cmd_args_t;
diff --git a/tests/bugs/fuse/bug-858215.t b/tests/bugs/fuse/bug-858215.t
index c8613efb72e..5ed53ec95ff 100755
--- a/tests/bugs/fuse/bug-858215.t
+++ b/tests/bugs/fuse/bug-858215.t
@@ -32,7 +32,7 @@ TEST $CLI volume start $V0;
EXPECT 'Started' volinfo_field $V0 'Status';
## Mount FUSE with caching disabled
-TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $M0;
+TEST glusterfs --entry-timeout=0 --attribute-timeout=0 --event-history=on -s $H0 --volfile-id $V0 $M0;
## Test for checking whether the fops have been saved in the event-history
TEST ! stat $M0/newfile;
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 2a23a85bd68..0f672286c06 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -5153,10 +5153,15 @@ fuse_priv_dump (xlator_t *this)
int
fuse_history_dump (xlator_t *this)
{
- int ret = -1;
- char key_prefix[GF_DUMP_MAX_BUF_LEN] = {0,};
+ int ret = -1;
+ char key_prefix[GF_DUMP_MAX_BUF_LEN] = {0,};
+ fuse_private_t *priv = this->private;
GF_VALIDATE_OR_GOTO ("fuse", this, out);
+
+ if (!priv->event_history)
+ goto out;
+
GF_VALIDATE_OR_GOTO (this->name, this->history, out);
gf_proc_dump_build_key (key_prefix, "xlator.mount.fuse",
@@ -5644,6 +5649,9 @@ init (xlator_t *this_xl)
}
}
+ GF_OPTION_INIT("event-history", priv->event_history, bool,
+ cleanup_exit);
+
/* user has set only background-qlen, not congestion-threshold,
use the fuse kernel driver formula to set congestion. ie, 75% */
if (dict_get (this_xl->options, "background-qlen") &&
@@ -5714,14 +5722,16 @@ init (xlator_t *this_xl)
if (priv->fd == -1)
goto cleanup_exit;
- event = eh_new (FUSE_EVENT_HISTORY_SIZE, _gf_false, NULL);
- if (!event) {
- gf_log (this_xl->name, GF_LOG_ERROR,
- "could not create a new event history");
- goto cleanup_exit;
- }
+ if (priv->event_history) {
+ event = eh_new (FUSE_EVENT_HISTORY_SIZE, _gf_false, NULL);
+ if (!event) {
+ gf_log (this_xl->name, GF_LOG_ERROR,
+ "could not create a new event history");
+ goto cleanup_exit;
+ }
- this_xl->history = event;
+ this_xl->history = event;
+ }
pthread_mutex_init (&priv->fuse_dump_mutex, NULL);
pthread_cond_init (&priv->sync_cond, NULL);
@@ -5913,5 +5923,11 @@ struct volume_options options[] = {
.type = GF_OPTION_TYPE_BOOL,
.default_value = "false"
},
+ { .key = {"event-history"},
+ .type = GF_OPTION_TYPE_BOOL,
+ .default_value = "false",
+ .description = "This option can be used to enable or disable fuse "
+ "event history.",
+ },
{ .key = {NULL} },
};
diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h
index e4075c83f2c..85e9ebc795d 100644
--- a/xlators/mount/fuse/src/fuse-bridge.h
+++ b/xlators/mount/fuse/src/fuse-bridge.h
@@ -134,6 +134,8 @@ struct fuse_private {
/* Enable or disable capability support */
gf_boolean_t capability;
+ /* Enable or disable event history */
+ gf_boolean_t event_history;
};
typedef struct fuse_private fuse_private_t;
@@ -277,7 +279,8 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
#define fuse_log_eh_fop(this, state, frame, op_ret, op_errno) \
do { \
- if (this->history) { \
+ fuse_private_t *priv = this->private; \
+ if (this->history && priv->event_history) { \
if (state->fd) \
gf_log_eh ("op_ret: %d, op_errno: %d, " \
"%"PRIu64", %s () => %p, gfid: %s", \
@@ -297,10 +300,11 @@ typedef struct fuse_graph_switch_args fuse_graph_switch_args_t;
} \
} while(0)
-#define fuse_log_eh(this, args...) \
- do { \
- if (this->history) \
- gf_log_eh(args); \
+#define fuse_log_eh(this, args...) \
+ do { \
+ fuse_private_t *priv = this->private; \
+ if (this->history && priv->event_history) \
+ gf_log_eh(args); \
} while (0)
static inline xlator_t *
diff --git a/xlators/mount/fuse/utils/mount.glusterfs.in b/xlators/mount/fuse/utils/mount.glusterfs.in
index 6c4cdfed062..3c68eee0c70 100755
--- a/xlators/mount/fuse/utils/mount.glusterfs.in
+++ b/xlators/mount/fuse/utils/mount.glusterfs.in
@@ -202,6 +202,10 @@ start_glusterfs ()
cmd_line=$(echo "$cmd_line --use-readdirp=$use_readdirp");
fi
+ if [ -n "$event_history" ]; then
+ cmd_line=$(echo "$cmd_line --event-history=$event_history");
+ fi
+
if [ -n "$volume_name" ]; then
cmd_line=$(echo "$cmd_line --volume-name=$volume_name");
fi
@@ -460,6 +464,9 @@ with_options()
"use-readdirp")
use_readdirp=$value
;;
+ "event-history")
+ event_history=$value
+ ;;
"no-root-squash")
if [ $value = "yes" ] ||
[ $value = "on" ] ||