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

Hitoshi Mitake mitake.hitoshi at gmail.com
Wed Jul 31 11:25:45 CEST 2013


At Wed, 31 Jul 2013 17:21:04 +0800,
Liu Yuan wrote:
> 
> 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'


Sorry for that. This compile error comes from that the 4th patch
depends on 2nd one. I'll send the fixed series later..

Thanks,
Hitoshi



More information about the sheepdog mailing list