All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: "Beraldo Leal" <bleal@redhat.com>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	qemu-devel@nongnu.org,
	"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
	"Cleber Rosa" <crosa@redhat.com>
Subject: Re: [PATCH] tests/avocado: Cancel BootLinux tests in case there is no free port
Date: Tue, 8 Mar 2022 20:13:44 +0100	[thread overview]
Message-ID: <7188b069-5a79-452a-ff1e-d6387771e137@redhat.com> (raw)
In-Reply-To: <YiZTggnk26UymcVY@redhat.com>

On 07/03/2022 19.48, Daniel P. Berrangé wrote:
> On Mon, Mar 07, 2022 at 07:31:50PM +0100, Thomas Huth wrote:
>> On 07/03/2022 13.50, Daniel P. Berrangé wrote:
>>> On Mon, Feb 28, 2022 at 12:43:25PM +0100, Thomas Huth wrote:
>>>> The BootLinux tests are currently failing with an ugly python
>>>> stack trace on my RHEL8 system since they cannot get a free port
>>>> (likely due to the firewall settings on my system). Let's properly
>>>> check the return value of find_free_port() instead and cancel the
>>>> test gracefully if it cannot get a free port.
>>>>
>>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>>> ---
>>>>    Unfortunately, it still takes > 70 seconds for each and every
>>>>    tests from tests/avocado/boot_linux.py to get canceled, so
>>>>    tests/avocado/boot_linux.py still renders "make check-avocado"
>>>>    for me pretty unusable... looking at the implementation of
>>>>    find_free_port() in Avocado, I wonder whether there isn't a
>>>>    better way to get a free port number in Python? Brute-forcing
>>>>    all ports between 1024 and 65536 seems just quite cumbersome
>>>>    to me...
>>>
>>> Even in the worst case of testing every single port,
>>> for INET and INET6 and for STREAM and DGRAM sockets,
>>> that find_free_port port completes in a couple of
>>> seconds.
>>
>> Weird, on my system, the test runs for 70 seconds, just to finally
>> discovered that there was no free port available.
> 
> Incidentally I'm really suprised you even hit the 'no free port'
> scenario. I've never seen that happen unless the machine was
> basically doomed due to something leaking open sockets by the
> 10's of 1000's.
> 
> You mention firewall settings above, but I don't think that's
> relevant. The find_free_port() call is with no args, so it
> gets set to 'address=localhost' which means is_port_free
> takes the bind() codepath. The firewall has no interaction
> with the bind() codepath in the kernel AFAIK.

Yes, I've now had another closer look, and indeed, the firewall is not the 
problem here - but is_port_free() seems to be very buggy. The problem is 
that I do not have any IPv6 address configured on my system, and in that 
case the current code fails.
See https://github.com/avocado-framework/avocado/issues/5273 ... I need this 
patch to fix it:

diff --git a/avocado/utils/network/ports.py b/avocado/utils/network/ports.py
--- a/avocado/utils/network/ports.py
+++ b/avocado/utils/network/ports.py
@@ -60,7 +60,7 @@ def is_port_free(port, address):
                      if localhost:
                          return False
                  sock.close()
-        return True
+                return True
      finally:
          if sock is not None:
              sock.close()

  Thomas



  reply	other threads:[~2022-03-08 19:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-28 11:43 [PATCH] tests/avocado: Cancel BootLinux tests in case there is no free port Thomas Huth
2022-03-07 12:31 ` Beraldo Leal
2022-03-07 12:50 ` Daniel P. Berrangé
2022-03-07 18:31   ` Thomas Huth
2022-03-07 18:48     ` Daniel P. Berrangé
2022-03-08 19:13       ` Thomas Huth [this message]
2022-03-10 15:28 ` Cleber Rosa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7188b069-5a79-452a-ff1e-d6387771e137@redhat.com \
    --to=thuth@redhat.com \
    --cc=berrange@redhat.com \
    --cc=bleal@redhat.com \
    --cc=crosa@redhat.com \
    --cc=f4bug@amsat.org \
    --cc=qemu-devel@nongnu.org \
    --cc=wainersm@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.