diff options
| author | Mohit Agrawal <moagrawa@redhat.com> | 2017-05-25 21:43:42 +0530 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-05-31 20:43:53 +0000 | 
| commit | dba55ae364a2772904bb68a6bd0ea87289ee1470 (patch) | |
| tree | e8a7cf51bd45464cd26f9c4270787ffc50228854 /xlators/features/bit-rot | |
| parent | de92c363c95d16966dbcc9d8763fd4448dd84d13 (diff) | |
glusterfs: Not able to mount running volume after enable brick mux and stopped any volume
Problem: After enabled brick mux if any volume has down and then try ot run mount
         with running volume , mount command is hung.
Solution: After enable brick mux server has shared one data structure server_conf
          for all associated subvolumes.After down any subvolume in some
          ungraceful manner (remove brick directory) posix xlator sends
          GF_EVENT_CHILD_DOWN event to parent xlatros and server notify
          updates the child_up to false in server_conf.When client is trying
          to communicate with server through mount it checks conf->child_up
          and it is FALSE so it throws message "translator are not yet ready".
          From this patch updated structure server_conf to save child_up status
          for xlator wise. Another improtant correction from this patch is
          cleanup threads from server side xlators after stop the volume.
BUG: 1453977
Change-Id: Ic54da3f01881b7c9429ce92cc569236eb1d43e0d
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Reviewed-on: https://review.gluster.org/17356
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Diffstat (limited to 'xlators/features/bit-rot')
| -rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub.c | 31 | 
1 files changed, 31 insertions, 0 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c index 895e7690a5e..b8a34422522 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c @@ -10,6 +10,7 @@  #include <ctype.h>  #include <sys/uio.h> +#include <signal.h>  #include "glusterfs.h"  #include "xlator.h" @@ -212,6 +213,35 @@ out:          return ret;  } + +int +notify (xlator_t *this, int event, void *data, ...) +{ +        br_stub_private_t *priv = NULL; + +        if (!this) +                return 0; + +        priv = this->private; +        if (!priv) +                return 0; + +        switch (event) { +        case GF_EVENT_CLEANUP: +                if (priv->signth) { +                        (void) gf_thread_cleanup_xint (priv->signth); +                        priv->signth = 0; +                } +                if (priv->container.thread) { +                        (void) gf_thread_cleanup_xint (priv->container.thread); +                        priv->container.thread = 0; +                } +                break; +        } +        default_notify (this, event, data); +        return 0; +} +  void  fini (xlator_t *this)  { @@ -832,6 +862,7 @@ br_stub_signth (void *arg)          THIS = this;          while (1) { +                  pthread_mutex_lock (&priv->lock);                  {                          while (list_empty (&priv->squeue))  | 
