Compare commits
8 Commits
rawhide
...
private-rj
Author | SHA1 | Date |
---|---|---|
Richard W.M. Jones | a198e2ba8e | |
Richard W.M. Jones | 2392cf7819 | |
Richard W.M. Jones | a34c9b9cfd | |
Richard W.M. Jones | 8651382d3e | |
Richard W.M. Jones | cdfa595f38 | |
Richard W.M. Jones | ecfbffdc9e | |
Richard W.M. Jones | 35146e9a69 | |
Richard W.M. Jones | 4b95b33cb8 |
|
@ -0,0 +1,30 @@
|
|||
From d6cbd130101add28431bd6e67aa2ea0430a9234e Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Wed, 11 Sep 2019 22:25:57 +0100
|
||||
Subject: [PATCH 1/3] nbdsh: Fix behaviour of globals.
|
||||
|
||||
https://stackoverflow.com/a/11754346
|
||||
---
|
||||
python/nbdsh.py | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/python/nbdsh.py b/python/nbdsh.py
|
||||
index bb0db64..553e632 100644
|
||||
--- a/python/nbdsh.py
|
||||
+++ b/python/nbdsh.py
|
||||
@@ -57,8 +57,10 @@ help (nbd) # Display documentation
|
||||
if not args.command:
|
||||
code.interact (banner = banner, local = locals(), exitmsg = '')
|
||||
else:
|
||||
+ # https://stackoverflow.com/a/11754346
|
||||
+ d = dict (locals(), **globals())
|
||||
for c in args.command:
|
||||
if c != '-':
|
||||
- exec (c)
|
||||
+ exec (c, d, d)
|
||||
else:
|
||||
- exec (sys.stdin.read ())
|
||||
+ exec (sys.stdin.read (), d, d)
|
||||
--
|
||||
2.23.0
|
||||
|
|
@ -0,0 +1,83 @@
|
|||
From d2d3940a65dab60a2caeaf824eaff12fcc85e1f0 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 12 Sep 2019 10:28:19 +0100
|
||||
Subject: [PATCH 2/3] nbd_connect_tcp: Try to return errno from underlying
|
||||
connect(2) call.
|
||||
|
||||
When we make a TCP connection we have to make multiple underlying
|
||||
connect(2) calls, once for each address returned by getaddrinfo.
|
||||
Unfortunately this meant that we lost the errno from any of these
|
||||
calls:
|
||||
|
||||
$ nbdsh -c 'h.connect_tcp ("localhost", "nbd")'
|
||||
nbd.Error: nbd_connect_tcp: connect: localhost:nbd: could not connect to remote host
|
||||
|
||||
This commit saves the errno from the first failed connect(2):
|
||||
|
||||
$ ./run nbdsh -c 'h.connect_tcp ("localhost", "nbd")'
|
||||
nbd.Error: nbd_connect_tcp: connect: localhost:nbd: could not connect to remote host: Connection refused (ECONNREFUSED)
|
||||
---
|
||||
generator/states-connect.c | 12 ++++++++++--
|
||||
lib/internal.h | 1 +
|
||||
2 files changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/generator/states-connect.c b/generator/states-connect.c
|
||||
index 9e2e1d4..e9b3582 100644
|
||||
--- a/generator/states-connect.c
|
||||
+++ b/generator/states-connect.c
|
||||
@@ -128,6 +128,8 @@ disable_nagle (int sock)
|
||||
h->result = NULL;
|
||||
}
|
||||
|
||||
+ h->connect_errno = 0;
|
||||
+
|
||||
memset (&h->hints, 0, sizeof h->hints);
|
||||
h->hints.ai_family = AF_UNSPEC;
|
||||
h->hints.ai_socktype = SOCK_STREAM;
|
||||
@@ -160,7 +162,8 @@ disable_nagle (int sock)
|
||||
* Save errno from most recent connect(2) call. XXX
|
||||
*/
|
||||
SET_NEXT_STATE (%^START);
|
||||
- set_error (0, "connect: %s:%s: could not connect to remote host",
|
||||
+ set_error (h->connect_errno,
|
||||
+ "connect: %s:%s: could not connect to remote host",
|
||||
h->hostname, h->port);
|
||||
return -1;
|
||||
}
|
||||
@@ -182,6 +185,8 @@ disable_nagle (int sock)
|
||||
|
||||
if (connect (fd, h->rp->ai_addr, h->rp->ai_addrlen) == -1) {
|
||||
if (errno != EINPROGRESS) {
|
||||
+ if (h->connect_errno == 0)
|
||||
+ h->connect_errno = errno;
|
||||
SET_NEXT_STATE (%NEXT_ADDRESS);
|
||||
return 0;
|
||||
}
|
||||
@@ -203,8 +208,11 @@ disable_nagle (int sock)
|
||||
/* This checks the status of the original connect call. */
|
||||
if (status == 0)
|
||||
SET_NEXT_STATE (%^MAGIC.START);
|
||||
- else
|
||||
+ else {
|
||||
+ if (h->connect_errno == 0)
|
||||
+ h->connect_errno = status;
|
||||
SET_NEXT_STATE (%NEXT_ADDRESS);
|
||||
+ }
|
||||
return 0;
|
||||
|
||||
CONNECT_TCP.NEXT_ADDRESS:
|
||||
diff --git a/lib/internal.h b/lib/internal.h
|
||||
index a48edff..ccaca32 100644
|
||||
--- a/lib/internal.h
|
||||
+++ b/lib/internal.h
|
||||
@@ -188,6 +188,7 @@ struct nbd_handle {
|
||||
char *hostname, *port;
|
||||
struct addrinfo hints;
|
||||
struct addrinfo *result, *rp;
|
||||
+ int connect_errno;
|
||||
|
||||
/* When sending metadata contexts, this is used. */
|
||||
size_t querynum;
|
||||
--
|
||||
2.23.0
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
From b23b5b32250e5a03e4cc38ccf973e25e63ccc6d9 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Thu, 12 Sep 2019 10:38:48 +0100
|
||||
Subject: [PATCH 3/3] interop: Retry TCP connections to qemu-nbd.
|
||||
|
||||
The test interop-qemu-nbd-tls-certs frequently fails on slow (32 bit)
|
||||
machines in Fedora Koji. (Is crypto slow on these already overloaded
|
||||
machines?)
|
||||
|
||||
As we cannot wait for a signal when qemu-nbd is ready start serving,
|
||||
we have to use a sleep. The current sleep is 5 seconds, which is not
|
||||
long enough. Making the sleep longer would work but is inconsiderate
|
||||
for people using faster machines. Therefore replace this with a retry
|
||||
loop with exponential backoff.
|
||||
|
||||
I tested this with a simple wrapper around qemu-nbd which did:
|
||||
|
||||
sleep 5; exec /usr/bin/qemu-nbd "$@"
|
||||
---
|
||||
interop/interop.c | 19 +++++++++++++------
|
||||
1 file changed, 13 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/interop/interop.c b/interop/interop.c
|
||||
index 662d871..a3ab39b 100644
|
||||
--- a/interop/interop.c
|
||||
+++ b/interop/interop.c
|
||||
@@ -28,6 +28,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
+#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <libnbd.h>
|
||||
@@ -44,6 +45,7 @@ main (int argc, char *argv[])
|
||||
int port;
|
||||
char port_str[16];
|
||||
pid_t pid = -1;
|
||||
+ int retry;
|
||||
#endif
|
||||
int64_t actual_size;
|
||||
char buf[512];
|
||||
@@ -114,14 +116,19 @@ main (int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Unfortunately there's no good way to wait for qemu-nbd to start
|
||||
- * serving, so ...
|
||||
+ * serving, so we need to retry here.
|
||||
*/
|
||||
- sleep (5);
|
||||
-
|
||||
- if (nbd_connect_tcp (nbd, "localhost", port_str) == -1) {
|
||||
- fprintf (stderr, "%s\n", nbd_get_error ());
|
||||
- goto out;
|
||||
+ for (retry = 0; retry < 5; ++retry) {
|
||||
+ sleep (1 << retry);
|
||||
+ if (nbd_connect_tcp (nbd, "localhost", port_str) == -1) {
|
||||
+ fprintf (stderr, "%s\n", nbd_get_error ());
|
||||
+ if (nbd_get_errno () != ECONNREFUSED)
|
||||
+ goto out;
|
||||
+ }
|
||||
+ else break;
|
||||
}
|
||||
+ if (retry == 5)
|
||||
+ goto out;
|
||||
|
||||
#else /* !SERVE_OVER_TCP */
|
||||
|
||||
--
|
||||
2.23.0
|
||||
|
25
libnbd.spec
25
libnbd.spec
|
@ -5,11 +5,11 @@
|
|||
%global patches_touch_autotools %{nil}
|
||||
|
||||
# The source directory.
|
||||
%global source_directory 0.x-unstable-api
|
||||
%global source_directory 1.0-stable
|
||||
|
||||
Name: libnbd
|
||||
Version: 1.0.0
|
||||
Release: 1%{?dist}
|
||||
Version: 1.0.1
|
||||
Release: 2%{?dist}
|
||||
Summary: NBD client library in userspace
|
||||
|
||||
License: LGPLv2+
|
||||
|
@ -22,6 +22,11 @@ Source1: http://libguestfs.org/download/libnbd/%{source_directory}/%{name
|
|||
# https://pgp.key-server.io/pks/lookup?search=rjones%40redhat.com&fingerprint=on&op=vindex
|
||||
Source2: libguestfs.keyring
|
||||
|
||||
# Upstream patch to fix nbdsh.
|
||||
Patch0001: 0001-nbdsh-Fix-behaviour-of-globals.patch
|
||||
Patch0002: 0002-nbd_connect_tcp-Try-to-return-errno-from-underlying-.patch
|
||||
Patch0003: 0003-interop-Retry-TCP-connections-to-qemu-nbd.patch
|
||||
|
||||
%if 0%{patches_touch_autotools}
|
||||
BuildRequires: autoconf, automake, libtool
|
||||
%endif
|
||||
|
@ -48,15 +53,18 @@ BuildRequires: glib2-devel
|
|||
|
||||
# Only for running the test suite.
|
||||
BuildRequires: gnutls-utils
|
||||
%if 0%{?fedora} >= 31
|
||||
%ifnarch %{ix86}
|
||||
BuildRequires: nbdkit
|
||||
%endif
|
||||
%if 0%{?fedora} >= 31
|
||||
BuildRequires: nbdkit-memory-plugin
|
||||
BuildRequires: nbdkit-null-plugin
|
||||
BuildRequires: nbdkit-pattern-plugin
|
||||
BuildRequires: nbdkit-sh-plugin
|
||||
%endif
|
||||
BuildRequires: nbd
|
||||
%ifnarch %{ix86}
|
||||
BuildRequires: qemu-img
|
||||
%endif
|
||||
BuildRequires: gcc-c++
|
||||
|
||||
|
||||
|
@ -219,6 +227,13 @@ make %{?_smp_mflags} check || {
|
|||
|
||||
|
||||
%changelog
|
||||
* Thu Sep 12 2019 Richard W.M. Jones <rjones@redhat.com> - 1.1.1-2
|
||||
- Add upstream patch to fix nbdsh (for nbdkit tests).
|
||||
- Fix interop tests on slow machines.
|
||||
|
||||
* Sun Sep 08 2019 Richard W.M. Jones <rjones@redhat.com> - 1.0.1-1
|
||||
- New stable version 1.0.1.
|
||||
|
||||
* Wed Aug 28 2019 Richard W.M. Jones <rjones@redhat.com> - 1.0.0-1
|
||||
- New upstream version 1.0.0.
|
||||
|
||||
|
|
4
sources
4
sources
|
@ -1,2 +1,2 @@
|
|||
SHA512 (libnbd-1.0.0.tar.gz) = 9d9a60d172b9a0dff0d882db72be7243b6fccceb76d240bc385a55ea2358e317a6792288d443ee068d6c894dc0d80f1a900c8ac7f681babcde98c1b7caf9e61a
|
||||
SHA512 (libnbd-1.0.0.tar.gz.sig) = 982f723233951bac6f24b0c3a9a2a60379ff1a35bb37058259164666a4e9511634653c2c8f5bed32fc8d4c23083144a9ed73cae159e948e66f52a43734246f8d
|
||||
SHA512 (libnbd-1.0.1.tar.gz) = 76437cdd05ed0755ff4db055947565197a8e2626d139ee01153f4b370396cffce5233fb1ccc79072e074ba0a0f70768903fd29462dfe2655d34ae191271f7951
|
||||
SHA512 (libnbd-1.0.1.tar.gz.sig) = 424c865ace483b3d466882d5fbe069973be361786c6d5bafdc295fa98f39558c8d18abbd3f2a18380ba53482c5308d6da691f5bdceaaedc2cbfa89602342660d
|
||||
|
|
Loading…
Reference in New Issue