[sheepdog] [PATCH v9 4/4] collie: check an error during issuing request correctly
Hitoshi Mitake
mitake.hitoshi at gmail.com
Wed Jul 31 10:59:50 CEST 2013
At Wed, 31 Jul 2013 16:53:20 +0800,
Liu Yuan wrote:
>
> On Wed, Jul 31, 2013 at 05:44:45PM +0900, Hitoshi Mitake wrote:
> > Current collie checks error during issuing request by a return value
> > of collie_exec_req(). But it doesn't work well because
> > collie_exec_req() returns result code of the request. The code doesn't
> > represent that the request itself succeeded or not.
> >
> > This patch lets collie_exec_req() return 0 or -1 for checking the
> > error which is caused during request issue. And also fixes invalid
> > error checking done in node_recovery().
> >
> > In addtion, the last return statement of collie_exec_req() is changed
> > like this: return ret ? -1 : 0; This ternay operator is required
> > because exec_req() returns 1 when it fails. Some part of collie check
> > an error of collie_exec_req() by if (ret < ), and other part check by
> > if (ret). The above ternay operator is for avoiding return 1 and let
> > these error handlers work correct.
> >
> > Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
> > ---
> > collie/common.c | 2 +-
> > collie/node.c | 3 +++
> > 2 files changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/collie/common.c b/collie/common.c
> > index 8c032ba..a480418 100644
> > --- a/collie/common.c
> > +++ b/collie/common.c
> > @@ -193,7 +193,7 @@ int collie_exec_req(const char *host, int port, struct sd_req *hdr, void *buf)
> >
> > sockfd_cache_put(&nid, sfd);
> >
> > - return rsp->result;
> > + return ret ? -1 : 0;
> > }
> >
> > /* Light request only contains header, without body content. */
> > diff --git a/collie/node.c b/collie/node.c
> > index 0cd7e7a..0339a45 100644
> > --- a/collie/node.c
> > +++ b/collie/node.c
> > @@ -138,6 +138,9 @@ static int node_recovery(int argc, char **argv)
> > sd_init_req(&req, SD_OP_STAT_RECOVERY);
> >
> > ret = collie_exec_req(host, sd_nodes[i].nid.port, &req, NULL);
> > + if (ret < 0)
> > + return EXIT_SYSFAIL;
> > +
> > if (ret == SD_RES_NODE_IN_RECOVERY) {
>
> rsp->result == SD_RES_NODE_IN_RECOVERY?
Thanks for your catching, I'll fix it later.
BTW, do you have any comments on 1 - 3rd patches of this series? If
these are ready for applying, I'd like to send fixed version of this
patch individually later.
Thanks,
Hitoshi
More information about the sheepdog
mailing list