diff options
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-hooks.h | 20 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 12 | 
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 120fd5a4781..e717395be40 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 b21ecf72fde..fedb9458882 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -456,6 +456,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; @@ -1377,6 +1383,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) {  | 
