[sheepdog] [PATCH v6 4/4] shepherd: a new cluster manager specialized for sheepdog

Hitoshi Mitake h.mitake at gmail.com
Fri Jan 18 04:30:45 CET 2013


At Thu, 17 Jan 2013 17:57:21 +0800,
Liu Yuan wrote:
> 
> On 01/17/2013 10:25 AM, Hitoshi Mitake wrote:
> >  sheep/cluster/shepherd.c |  704 ++++++++++++++++++++++++++++++++++++
> >  shepherd/Makefile.am     |   44 +++
> >  shepherd/shepherd.c      |  883 ++++++++++++++++++++++++++++++++++++++++++++++
> 
> Please separate cluster driver and sph daemon as two patches.

OK, I'll separate them in v7.

> 
> > +enum sph_msg_type {
> > +	_SPH_MSG_PADDING = 0,	/* for making first member 1 */
> > +	SPH_MSG_JOIN,
> 
> simply assign SPH_MSG_JOIN = 1
> 
> > +	SPH_MSG_JOIN_REPLY,
> > +	SPH_MSG_JOIN_RETRY,
> > +
> > +	SPH_MSG_NEW_NODE,
> > +	SPH_MSG_NEW_NODE_REPLY,
> > +	SPH_MSG_NEW_NODE_FINISH,
> > +
> > +	SPH_MSG_NOTIFY,
> > +	SPH_MSG_NOTIFY_FORWARD,
> > +
> > +	SPH_MSG_BLOCK,
> > +	SPH_MSG_BLOCK_FORWARD,
> > +
> > +	SPH_MSG_LEAVE,
> > +	SPH_MSG_LEAVE_FORWARD,
> > +
> > +	SPH_MSG_MASTER_ELECTION,
> > +
> > +	NR_SPH_MSG,		/* this must be last one */
> 
> Seems that NR_SPH_MSG isn't used at all. If no outside user, I'd suggest
> remove it.

Yes, NR_SPH_MSG is obsolete. I'll clean the enum based on your comment.

> 
> > +	iov[0].iov_base = &msg;
> > +	iov[0].iov_len = sizeof(msg);
> > +
> > +	msg_join = xzalloc(msg_join_len);
> > +	msg_join->node = this_node;
> > +	memcpy(msg_join->opaque, kept_opaque, kept_opaque_len);
> > +
> > +	iov[1].iov_base = msg_join;
> > +	iov[1].iov_len = msg_join_len;
> 
> I see a lot of iov handling code, I think you'd better add some iov
> helpers to reduce the duplicate code. Also, as a general rule, if we
> have one function larger than *60 lines*, we'd rethink the structure and
> see if we can refactor it into several smaller (possible inline)
> functions that do better self-description.

OK, I'll prepare helpers in lib/.

> 
> On 01/17/2013 10:25 AM, Hitoshi Mitake wrote:> +static void
> init_addr_port(const char *s, struct sockaddr_in *addr)
> > +{
> > +	/* format: <address>[:<port>] */
> > +	char *sep, *copied, *p;
> > +	uint8_t tmp_addr[16];
> > +	bool addr_only = false;
> > +
> > +	copied = strdup(s);
> > +	if (!copied)
> > +		panic("strdup() failed: %m");
> > +
> > +	sep = strchr(copied, ':');
> > +	if (!sep) {
> > +		addr_only = true;
> > +		goto addr_trans;
> > +	}
> 
> I think strtok will make the parsing easier.

Thanks, I'll use strtok() for init_addr_port().

> 
> On 01/17/2013 10:25 AM, Hitoshi Mitake wrote:> +static void
> init_msg_handlers(void)
> > +{
> > +	int i;
> > +
> > +	for (i = 0; i < ARRAY_SIZE(msg_handlers); i++) {
> > +		if (msg_handlers[i])
> > +			continue;
> > +
> > +		msg_handlers[i] = msg_invalid;
> > +	}
> > +}
> 
> Do we really need this? Simply ignore the invalid message won't cause
> trouble? I think you can re-structure enum sph_msg_type and put those
> that have handlers at the front. Then we don't need install msg_invalid
> handlers for invalid message.

OK, I'll remove init_msg_handlers() completely by reordering the enum.

> 
> > +	vprintf(SDOG_INFO, "received op: %s\n", sph_msg_to_str(rcv.type));
> > +
> 
> If you use SDOG_INFO intensively, I'd suggest add a new helper iprintf().

I agree with your opinion, we need a new helper. But, I think the name
iprintf is not good.
How about this naming scheme:
sd_printf(): for SDOG_INFO
sd_dprintf(): for SDOG_DEBUG
sd_eprintf(): for SDOG_ERROR
sd_vprintf(): takes one argument for forwarding to the first argument
of log_write()

The names dprintf and vprintf are provided by glibc, so we have to
clean them. If it is a good timing, I'll do that.

> 
> Also, any functions that calls printf should be prefixed as 'sph_' to
> distinguish it from normal sheep functions.

Like zk_ prefix in zookeeper.c? What is the purpose of this naming
convention? These functions are declared as static, so I think we
don't have to care about their names for distinguishing from sheep
functions. For cscope?

> 
> printf helpers will print function name, so you don't need to embed
> function name in those helpers.

Ah, yes, I'll remove the needless fucntion names.

Thanks for your detailed review,
Hitoshi



More information about the sheepdog mailing list