[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 01/15] xenstore: add support for a retry open limit on xenstored
On Tue, 2014-04-29 at 18:11 -0700, Luis R. Rodriguez wrote: > From: "Luis R. Rodriguez" <mcgrof@xxxxxxxx> > > This adds support for a customizable retry limit on trying to open > the xenstored unix domain socket, each retry is separated by 1 second. > This should allow us to simplify both our LSB init scripts. For systemd > we'll use socket activation. > > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> > Cc: Jan RÄkorajski <baggins@xxxxxxxxxxxxx> > Cc: M A Young <m.a.young@xxxxxxxxxxxx> > Cc: Jacek Konieczny <jajcus@xxxxxxxxxx> > Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx > Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxx> > --- > docs/man/xenstore.pod.1 | 7 ++++++- > tools/xenstore/xenstore_client.c | 40 > +++++++++++++++++++++++++++++----------- > 2 files changed, 35 insertions(+), 12 deletions(-) > > diff --git a/docs/man/xenstore.pod.1 b/docs/man/xenstore.pod.1 > index 7417289..9647143 100644 > --- a/docs/man/xenstore.pod.1 > +++ b/docs/man/xenstore.pod.1 > @@ -4,12 +4,17 @@ xenstore - interact with Xenstore > > =head1 SYNOPSIS > > -B<xenstore> I<CMD> ... > +B<xenstore> I<CMD> I[ --retries <num_open_retries> ] ... I think "--retries <N>" is sufficient and less likely to push things up to >80 columns. (Same in the errx output which is in main()) > > =head1 DESCRIPTION > A set of utilities for interacting with Xenstore. I think a bit more formatting can be applied here. + =head2 COMMON OPTIONS + =over + =item B<--retries <N>> > +All xenstore-* commands support the --retries long option which > +can be used to try to opening the unix domain socket a certain > +number of retries before giving up. Each new try occurs every > +second. "Retry opening the Unix domain socket once a second for I<N> attempts." + =back + =head2 COMMANDS + =over (some playing with it in real life might be required). > [...] > @@ -493,9 +494,9 @@ static enum mode lookup_mode(const char *m) > int > main(int argc, char **argv) > { > - struct xs_handle *xsh; > + struct xs_handle *xsh = NULL; > xs_transaction_t xth = XBT_NULL; > - int ret = 0, socket = 0; > + int ret = 0, socket = 0, retries = 1; > int prefix = 0; > int tidy = 0; > int upto = 0; > @@ -535,6 +536,7 @@ main(int argc, char **argv) > {"upto", 0, 0, 'u'}, /* MODE_chmod */ > {"recurse", 0, 0, 'r'}, /* MODE_chmod */ > {"number", 1, 0, 'n'}, /* MODE_watch */ > + {"retries", 1, 0, 0 }, /* index 8 - MODE_* */ The usual way to deal with the lack of a short character is to use a small non-zero integer unique to each long opt here and to switch on it. So: #define OPT_RETRIES 1 ... {"retries", 1, 0, OPT_RETRIES }, ... > switch (c) { case OPT_RETIRES: retires = atoi(...) etc. > @@ -632,8 +643,15 @@ main(int argc, char **argv) > max_width = ws.ws_col - 2; > } > > - xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : 0); > - if (xsh == NULL) err(1, "xs_open"); > + while (retries--) { > + xsh = xs_open(socket ? XS_OPEN_SOCKETONLY : 0); > + if (xsh) > + break; > + if (retries) > + sleep(1); I think a do {} while() would remove the need for the if(retries) (IOW sleep unconditionally, I don't think we need to worry unduly about an extra 1s sleep after the last attempt) > + } > + if (!xsh) > + err(1, "xs_open"); > > again: > if (transaction) { _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |