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>
This commit is contained in:
parent
250cdb3005
commit
cb6837d036
@ -303,10 +303,10 @@ AC_ARG_ENABLE([debug],
|
||||
[Enable debug build options.]))
|
||||
if test "x$enable_debug" = "xyes"; then
|
||||
BUILD_DEBUG=yes
|
||||
CFLAGS="${CFLAGS} -g -O0 -DDEBUG"
|
||||
CFLAGS="${CFLAGS} -g -rdynamic -O0 -DDEBUG"
|
||||
else
|
||||
BUILD_DEBUG=no
|
||||
CFLAGS="${CFLAGS} -g"
|
||||
CFLAGS="${CFLAGS} -g -rdynamic"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([privport_tracking],
|
||||
|
@ -184,7 +184,7 @@ glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
glusterfs_autoscale_threads (glusterfs_ctx_t *ctx, int incr)
|
||||
{
|
||||
struct event_pool *pool = ctx->event_pool;
|
||||
|
@ -120,6 +120,8 @@ int glusterfs_volume_top_write_perf (uint32_t blk_size, uint32_t blk_count,
|
||||
int glusterfs_volume_top_read_perf (uint32_t blk_size, uint32_t blk_count,
|
||||
char *brick_path, double *throughput,
|
||||
double *time);
|
||||
void
|
||||
glusterfs_autoscale_threads (glusterfs_ctx_t *ctx, int incr);
|
||||
|
||||
extern glusterfs_ctx_t *glusterfsd_ctx;
|
||||
#endif /* __GLUSTERFSD_H__ */
|
||||
|
@ -15,7 +15,7 @@ AM_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src \
|
||||
-I$(top_srcdir)/rpc/xdr/src -I$(top_builddir)/rpc/xdr/src \
|
||||
-I$(top_srcdir)/rpc/rpc-lib/src
|
||||
|
||||
AM_CFLAGS = -fno-strict-aliasing -Wall $(GF_CFLAGS)
|
||||
AM_CFLAGS = -fno-strict-aliasing -Wall $(GF_CFLAGS) -I$(top_srcdir)/glusterfsd/src
|
||||
|
||||
CLEANFILES =
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user