summaryrefslogtreecommitdiffstats
path: root/glusterfsd/src/glusterfsd-mgmt.c
diff options
context:
space:
mode:
authorSanju Rakonde <srakonde@redhat.com>2018-03-29 10:48:32 +0000
committerAtin Mukherjee <amukherj@redhat.com>2018-03-29 14:58:27 +0000
commit3f9851db49ca6ac7a969817964a6ad216b10fd6f (patch)
tree3cb12c5ad1a0501d3b2133c2d37dde5065b1c43e /glusterfsd/src/glusterfsd-mgmt.c
parentc87bd439ef12adc70dc580e75304121c3cd38e9a (diff)
Revert "glusterd: handling brick termination in brick-mux"
This reverts commit a60fc2ddc03134fb23c5ed5c0bcb195e1649416b. This commit was causing multiple tests to time out when brick multiplexing is enabled. With further debugging, it's found that even though the volume stop transaction is converted into mgmt_v3 to allow the remote nodes to follow the synctask framework to process the command, there are other callers of glusterd_brick_stop () which are not synctask based. Change-Id: I7aee687abc6bfeaa70c7447031f55ed4ccd64693 updates: bz#1545048
Diffstat (limited to 'glusterfsd/src/glusterfsd-mgmt.c')
-rw-r--r--glusterfsd/src/glusterfsd-mgmt.c33
1 files changed, 11 insertions, 22 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c
index c4df275077f..d2b39494e51 100644
--- a/glusterfsd/src/glusterfsd-mgmt.c
+++ b/glusterfsd/src/glusterfsd-mgmt.c
@@ -159,31 +159,21 @@ out:
}
int
-glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret,
- gf_boolean_t last_brick)
+glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret)
{
gd1_mgmt_brick_op_rsp rsp = {0,};
dict_t *dict = NULL;
- int ret = -1;
+ int ret = 0;
rsp.op_ret = op_ret;
rsp.op_errno = 0;
rsp.op_errstr = "";
dict = dict_new ();
- if (dict) {
- /* Setting the last_brick_terminated key in dictionary is
- * required to for standalone gf_attach utility to work.
- * gf_attach utility will receive this dictionary and kill
- * the process.
- */
- if (last_brick) {
- ret = dict_set_int32 (dict, "last_brick_terminated",
- getpid());
- }
+ if (dict)
ret = dict_allocate_and_serialize (dict, &rsp.output.output_val,
&rsp.output.output_len);
- }
+
if (ret == 0)
ret = glusterfs_submit_reply (req, &rsp, NULL, 0, NULL,
@@ -272,7 +262,6 @@ glusterfs_handle_terminate (rpcsvc_request_t *req)
xlator_t *victim = NULL;
xlator_list_t **trav_p = NULL;
gf_boolean_t lockflag = _gf_false;
- gf_boolean_t last_brick = _gf_false;
ret = xdr_to_generic (req->msg[0], &xlator_req,
(xdrproc_t)xdr_gd1_mgmt_brick_op_req);
@@ -305,16 +294,17 @@ glusterfs_handle_terminate (rpcsvc_request_t *req)
* make sure it's down and if it's already down that's
* good enough.
*/
- glusterfs_terminate_response_send (req, 0, last_brick);
+ glusterfs_terminate_response_send (req, 0);
goto err;
}
+ glusterfs_terminate_response_send (req, 0);
if ((trav_p == &top->children) && !(*trav_p)->next) {
- last_brick = _gf_true;
- glusterfs_terminate_response_send (req, 0, last_brick);
- gf_log (THIS->name, GF_LOG_INFO, "This is last brick of process."
- "glusterD will kill the process and takes care of "
- "removal of entries from port map register");
+ gf_log (THIS->name, GF_LOG_INFO,
+ "terminating after loss of last child %s",
+ xlator_req.name);
+ rpc_clnt_mgmt_pmap_signout (glusterfsd_ctx, xlator_req.name);
+ kill (getpid(), SIGTERM);
} else {
/*
* This is terribly unsafe without quiescing or shutting
@@ -323,7 +313,6 @@ glusterfs_handle_terminate (rpcsvc_request_t *req)
*
* TBD: finish implementing this "detach" code properly
*/
- glusterfs_terminate_response_send (req, 0, last_brick);
UNLOCK (&ctx->volfile_lock);
lockflag = _gf_true;
gf_log (THIS->name, GF_LOG_INFO, "detaching not-only"