diff options
Diffstat (limited to 'glusterfsd/src/glusterfsd-mgmt.c')
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 36 | 
1 files changed, 26 insertions, 10 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 8089e5804..cd72d32ca 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -45,6 +45,7 @@ int glusterfs_mgmt_pmap_signin (glusterfs_ctx_t *ctx);  int glusterfs_volfile_fetch (glusterfs_ctx_t *ctx);  int glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp);  int glusterfs_graph_unknown_options (glusterfs_graph_t *graph); +int emancipate(glusterfs_ctx_t *ctx, int ret);  int  mgmt_cbk_spec (struct rpc_clnt *rpc, void *mydata, void *data) @@ -1531,7 +1532,7 @@ mgmt_getspec_cbk (struct rpc_req *req, struct iovec *iov, int count,          if (-1 == rsp.op_ret) {                  gf_log (frame->this->name, GF_LOG_ERROR,                          "failed to get the 'volume file' from server"); -                ret = -1; +                ret = rsp.op_errno;                  goto out;          } @@ -1597,6 +1598,8 @@ out:          free (rsp.spec); +        emancipate (ctx, ret); +          if (ret && ctx && !ctx->active) {                  /* Do it only for the first time */                  /* Failed to get the volume file, something wrong, @@ -1754,6 +1757,8 @@ mgmt_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,          cmd_args_t      *cmd_args = NULL;          glusterfs_ctx_t *ctx = NULL;          int              ret = 0; +        int need_term = 0; +        int emval = 0;          this = mydata;          ctx = this->ctx; @@ -1768,30 +1773,41 @@ mgmt_rpc_notify (struct rpc_clnt *rpc, void *mydata, rpc_clnt_event_t event,                          gf_log ("glusterfsd-mgmt", GF_LOG_INFO,                                  "%d connect attempts left",                                  cmd_args->max_connect_attempts); -                        if (0 >= cmd_args->max_connect_attempts) -                                cleanup_and_exit (1); +                        if (0 >= cmd_args->max_connect_attempts) { +                                need_term = 1; +                                emval = ENOTCONN; +                        }                  }                  break;          case RPC_CLNT_CONNECT:                  rpc_clnt_set_connected (&((struct rpc_clnt*)ctx->mgmt)->conn);                  ret = glusterfs_volfile_fetch (ctx); -                if (ret && ctx && (ctx->active == NULL)) { -                        /* Do it only for the first time */ -                        /* Exit the process.. there is some wrong options */ -                        gf_log ("mgmt", GF_LOG_ERROR, -                                "failed to fetch volume file (key:%s)", -                                ctx->cmd_args.volfile_id); -                        cleanup_and_exit (0); +                if (ret) { +                        emval = ret; +                        if (!ctx->active) { +                                need_term = 1; +                                gf_log ("glusterfsd-mgmt", GF_LOG_ERROR, +                                        "failed to fetch volume file (key:%s)", +                                        ctx->cmd_args.volfile_id); +                                break; + +                        }                  }                  if (is_mgmt_rpc_reconnect)                          glusterfs_mgmt_pmap_signin (ctx); +                  break;          default:                  break;          } +        if (need_term) { +                emancipate (ctx, emval); +                cleanup_and_exit (1); +        } +          return 0;  }  | 
