diff options
| -rwxr-xr-x | tests/bugs/bug-877992.t | 61 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 13 | 
2 files changed, 65 insertions, 9 deletions
diff --git a/tests/bugs/bug-877992.t b/tests/bugs/bug-877992.t new file mode 100755 index 00000000000..932ecc77b86 --- /dev/null +++ b/tests/bugs/bug-877992.t @@ -0,0 +1,61 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc + +cleanup; + + +## Start and create a volume +TEST glusterd -LDEBUG +TEST pidof glusterd + + +function volinfo_field() +{ +    local vol=$1; +    local field=$2; + +    $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; +} + + +function hooks_prep () +{ +    local event=$1 +    touch /tmp/pre.out /tmp/post.out +    touch /var/lib/glusterd/hooks/1/"$event"/pre/Spre.sh +    touch /var/lib/glusterd/hooks/1/"$event"/post/Spost.sh + +    printf "#! /bin/bash\necho "$event"Pre > /tmp/pre.out\n" > /var/lib/glusterd/hooks/1/"$event"/pre/Spre.sh +    printf "#! /bin/bash\necho "$event"Post > /tmp/post.out\n" > /var/lib/glusterd/hooks/1/"$event"/post/Spost.sh +    chmod a+x /var/lib/glusterd/hooks/1/"$event"/pre/Spre.sh +    chmod a+x /var/lib/glusterd/hooks/1/"$event"/post/Spost.sh +} + +function hooks_cleanup () +{ +    local event=$1 +    rm /tmp/pre.out /tmp/post.out +    rm /var/lib/glusterd/hooks/1/"$event"/pre/Spre.sh +    rm /var/lib/glusterd/hooks/1/"$event"/post/Spost.sh +} + +## Verify volume is created and its hooks script ran +hooks_prep 'create' +TEST $CLI volume create $V0 $H0:$B0/${V0}1; +EXPECT "$V0" volinfo_field $V0 'Volume Name'; +EXPECT 'Created' volinfo_field $V0 'Status'; +EXPECT 'createPre' cat /tmp/pre.out; +EXPECT 'createPost' cat /tmp/post.out; +hooks_cleanup 'create' + + +## Start volume and verify that its hooks script ran +hooks_prep 'start' +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; +EXPECT 'startPre' cat /tmp/pre.out; +EXPECT 'startPost' cat /tmp/post.out; +hooks_cleanup 'start' + +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 48ae5b660db..b38b7ff5a59 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -2889,7 +2889,6 @@ glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx)                  goto out;          } -        glusterd_op_commit_hook (op, op_dict, GD_COMMIT_HOOK_PRE);          ret = glusterd_op_commit_perform (op, dict, &op_errstr, NULL); //rsp_dict invalid for source          if (ret) {                  gf_log (THIS->name, GF_LOG_ERROR, "Commit failed"); @@ -2897,7 +2896,6 @@ glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx)                  goto out;          } -        glusterd_op_commit_hook (op, op_dict, GD_COMMIT_HOOK_POST);          list_for_each_entry (peerinfo, &priv->peers, uuid_list) {                  GF_ASSERT (peerinfo); @@ -3337,7 +3335,6 @@ glusterd_op_ac_commit_op (glusterd_op_sm_event_t *event, void *ctx)          if (NULL == rsp_dict)                  return -1; -        glusterd_op_commit_hook (req_ctx->op, dict, GD_COMMIT_HOOK_PRE);          if (GD_OP_CLEARLOCKS_VOLUME == req_ctx->op) {                  /*clear locks should be run only on @@ -3349,13 +3346,8 @@ glusterd_op_ac_commit_op (glusterd_op_sm_event_t *event, void *ctx)                                                       &op_errstr, rsp_dict);          } -        if (status) { +        if (status)                  gf_log (THIS->name, GF_LOG_ERROR, "Commit failed: %d", status); -        } else { -                /* On successful commit */ -                glusterd_op_commit_hook (req_ctx->op, dict, -                                         GD_COMMIT_HOOK_POST); -        }          ret = glusterd_op_commit_send_resp (req_ctx->req, req_ctx->op,                                              status, op_errstr, rsp_dict); @@ -3528,6 +3520,7 @@ glusterd_op_commit_perform (glusterd_op_t op, dict_t *dict, char **op_errstr,  {          int ret = -1; +        glusterd_op_commit_hook (op, dict, GD_COMMIT_HOOK_PRE);          switch (op) {                  case GD_OP_CREATE_VOLUME:                          ret = glusterd_op_create_volume (dict, op_errstr); @@ -3617,6 +3610,8 @@ glusterd_op_commit_perform (glusterd_op_t op, dict_t *dict, char **op_errstr,                          break;          } +        if (ret == 0) +            glusterd_op_commit_hook (op, dict, GD_COMMIT_HOOK_POST);          gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);          return ret;  | 
