summaryrefslogtreecommitdiffstats
path: root/xlators/storage/posix/src/posix-helpers.c
diff options
context:
space:
mode:
authorAtin Mukherjee <amukherj@redhat.com>2017-05-14 12:34:15 +0530
committerJeff Darcy <jeff@pl.atyp.us>2017-05-15 12:15:02 +0000
commitcb6837d03658c1005475d4040fa95504b3fd84d0 (patch)
tree840588d8bea8fe456c8729b03a3b2ca2ef551d21 /xlators/storage/posix/src/posix-helpers.c
parent250cdb3005691b809cee5f30846c459408a6fea9 (diff)
brick mux: Detach brick on posix health check failure
With brick mux enabled, we'd need to detach a particular brick if the underlying backend has gone bad. This patch addresses the same. Change-Id: Icfd469c7407cd2d21d02e4906375ec770afeacc3 BUG: 1450630 Signed-off-by: Atin Mukherjee <amukherj@redhat.com> Reviewed-on: https://review.gluster.org/17287 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Diffstat (limited to 'xlators/storage/posix/src/posix-helpers.c')
-rw-r--r--xlators/storage/posix/src/posix-helpers.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c
index eed63744d20..b38c3659fea 100644
--- a/xlators/storage/posix/src/posix-helpers.c
+++ b/xlators/storage/posix/src/posix-helpers.c
@@ -51,6 +51,7 @@
#include "hashfn.h"
#include "glusterfs-acl.h"
#include "events.h"
+#include "glusterfsd.h"
#include <sys/types.h>
char *marker_xattrs[] = {"trusted.glusterfs.quota.*",
@@ -1830,9 +1831,11 @@ posix_health_check_thread_proc (void *data)
struct posix_private *priv = NULL;
uint32_t interval = 0;
int ret = -1;
- xlator_t *top = NULL;
- xlator_list_t **trav_p = NULL;
- int count = 0;
+ xlator_t *top = NULL;
+ xlator_t *victim = NULL;
+ xlator_list_t **trav_p = NULL;
+ int count = 0;
+ gf_boolean_t victim_found = _gf_false;
this = data;
priv = this->private;
@@ -1907,6 +1910,22 @@ abort:
if (ret == 0)
kill (getpid(), SIGKILL);
+ } else {
+ for (trav_p = &top->children; *trav_p;
+ trav_p = &(*trav_p)->next) {
+ victim = (*trav_p)->xlator;
+ if (victim &&
+ strcmp (victim->name, priv->base_path) == 0) {
+ victim_found = _gf_true;
+ break;
+ }
+ }
+ if (victim_found) {
+ top->notify (top, GF_EVENT_TRANSPORT_CLEANUP, victim);
+ glusterfs_mgmt_pmap_signout (glusterfsd_ctx,
+ priv->base_path);
+ glusterfs_autoscale_threads (THIS->ctx, -1);
+ }
}
return NULL;