[sheepdog] [PATCH v9 4/4] collie: check an error during issuing request correctly

Liu Yuan namei.unix at gmail.com
Wed Jul 31 11:21:04 CEST 2013


On Wed, Jul 31, 2013 at 06:12:23PM +0900, Hitoshi Mitake wrote:
> At Wed, 31 Jul 2013 17:09:10 +0800,
> Liu Yuan wrote:
> > 
> > On Wed, Jul 31, 2013 at 05:59:50PM +0900, Hitoshi Mitake wrote:
> > > 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.
> > 
> > After apply 1-3, I get compile error.
> 
> On my environment, compile produces no error. Can I see your error
> messages?

Making all in lib
make[1]: Entering directory `/home/yliu/sheepdog/lib'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/yliu/sheepdog/lib'
Making all in collie
make[1]: Entering directory `/home/yliu/sheepdog/collie'
  CC     common.o
common.c: In function ‘collie_exec_req’:
common.c:196:9: error: ‘rsp’ undeclared (first use in this function)
common.c:196:9: note: each undeclared identifier is reported only once for each function it appears in
common.c:177:6: warning: variable ‘ret’ set but not used [-Wunused-but-set-variable]
common.c:197:1: warning: control reaches end of non-void function [-Wreturn-type]
make[1]: *** [common.o] Error 1
make[1]: Leaving directory `/home/yliu/sheepdog/collie'

Thanks
Yuan



More information about the sheepdog mailing list