[Nbd] [PATCH] nbd-client: try harder to reconnect in persist mode
- To: nbd-general@lists.sourceforge.net
- Subject: [Nbd] [PATCH] nbd-client: try harder to reconnect in persist mode
- From: "Dmitry V. Levin" <ldv@...1147...>
- Date: Fri, 22 Jun 2012 01:00:28 +0400
- Message-id: <20120621210028.GB25989@...1147...>
When nbd-client in persist mode is trying to reconnect because of
nbd-server restart, it is highly probable that nbd-server will not be
ready to serve a reconnection request in time causing nbd-client to exit
with "connection refused" diagnostics. This change makes nbd-client in
persist mode retry its reconnection attempts until succeeded.
Signed-off-by: Dmitry V. Levin <ldv@...1147...>
---
nbd-client.c | 21 ++++++++++++++++-----
1 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/nbd-client.c b/nbd-client.c
index 5526db0..5cc1262 100644
--- a/nbd-client.c
+++ b/nbd-client.c
@@ -95,7 +95,7 @@ int opennet(char *name, char* portstr, int sdp) {
if(e != 0) {
fprintf(stderr, "getaddrinfo failed: %s\n", gai_strerror(e));
freeaddrinfo(ai);
- exit(EXIT_FAILURE);
+ return -1;
}
if(sdp) {
@@ -119,8 +119,10 @@ int opennet(char *name, char* portstr, int sdp) {
break; /* success */
}
- if (rp == NULL)
- err("Socket failed: %m");
+ if (rp == NULL) {
+ err_nonfatal("Socket failed: %m");
+ return -1;
+ }
setmysockopt(sock);
@@ -568,6 +570,8 @@ int main(int argc, char *argv[]) {
}
sock = opennet(hostname, port, sdp);
+ if (sock < 0)
+ exit(EXIT_FAILURE);
negotiate(sock, &size64, &flags, name, needed_flags, cflags, opts);
@@ -640,10 +644,17 @@ int main(int argc, char *argv[]) {
u64 new_size;
u32 new_flags;
- fprintf(stderr, " Reconnecting\n");
close(sock); close(nbd);
- sock = opennet(hostname, port, sdp);
+ for (;;) {
+ fprintf(stderr, " Reconnecting\n");
+ sock = opennet(hostname, port, sdp);
+ if (sock >= 0)
+ break;
+ sleep (1);
+ }
nbd = open(nbddev, O_RDWR);
+ if (nbd < 0)
+ err("Cannot open NBD: %m");
negotiate(sock, &new_size, &new_flags, name, needed_flags, cflags, opts);
if (size64 != new_size) {
err("Size of the device changed. Bye");
--
ldv
Reply to: