summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-hooks.h20
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c12
2 files changed, 32 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-hooks.h b/xlators/mgmt/glusterd/src/glusterd-hooks.h
index 120fd5a4..e717395b 100644
--- a/xlators/mgmt/glusterd/src/glusterd-hooks.h
+++ b/xlators/mgmt/glusterd/src/glusterd-hooks.h
@@ -25,12 +25,16 @@
#include "config.h"
#endif
+#include <fnmatch.h>
+
#define GLUSTERD_GET_HOOKS_DIR(path, version, priv) \
snprintf (path, PATH_MAX, "%s/hooks/%d", priv->workdir,\
version);
#define GLUSTERD_HOOK_VER 1
+#define GD_HOOKS_SPECIFIC_KEY "user.*"
+
typedef enum glusterd_commit_hook_type {
GD_COMMIT_HOOK_NONE = 0,
GD_COMMIT_HOOK_PRE,
@@ -55,6 +59,22 @@ typedef struct hooks_stub {
} glusterd_hooks_stub_t;
+static inline gf_boolean_t
+is_key_glusterd_hooks_friendly (xlator_t *this, char *volname, char *key)
+{
+ gf_boolean_t is_friendly = _gf_false;
+
+ /* This is very specific to hooks friendly behavior */
+ if (fnmatch (GD_HOOKS_SPECIFIC_KEY, key, FNM_NOESCAPE) == 0) {
+ gf_log (this->name, GF_LOG_DEBUG,
+ "user configured key (%s) sent on volume %s",
+ key, volname);
+ is_friendly = _gf_true;
+ }
+
+ return is_friendly;
+}
+
int
glusterd_hooks_create_hooks_directory (char *basedir);
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index f727a76e..9b635f02 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -415,6 +415,12 @@ glusterd_op_stage_set_volume (dict_t *dict, char **op_errstr)
ret = 0;
goto out;
}
+
+ if (is_key_glusterd_hooks_friendly (this, volname, key)) {
+ ret = 0;
+ goto out;
+ }
+
exists = glusterd_check_option_exists (key, &key_fixed);
if (exists == -1) {
ret = -1;
@@ -1106,6 +1112,12 @@ glusterd_op_set_volume (dict_t *dict)
&volinfo->memory_accounting);
goto out;
}
+
+ if (is_key_glusterd_hooks_friendly (this, volname, key)) {
+ ret = 0;
+ goto out;
+ }
+
ret = glusterd_check_option_exists (key, &key_fixed);
GF_ASSERT (ret);
if (ret == -1) {