On Wed, Feb 15, 2017 at 8:12 PM, Augie Fackler <r...@durin42.com> wrote:
>
>> On Feb 9, 2017, at 8:59 AM, Jun Wu <qu...@fb.com> wrote:
>>
>> # HG changeset patch
>> # User Jun Wu <qu...@fb.com>
>> # Date 1486648674 28800
>> #      Thu Feb 09 05:57:54 2017 -0800
>> # Node ID 93e23f7b87a4ab456053b6ba573615be16c6c4b0
>> # Parent  a68510b69f413545722c086eaeb840dd5e8305b4
>> # Available At https://bitbucket.org/quark-zju/hg-draft
>> #              hg pull https://bitbucket.org/quark-zju/hg-draft -r 
>> 93e23f7b87a4
>> runtests: check ports on IPv6 address
>
> This has made test-bundle2-remote-changegroup.t flaky when run in parallel 
> with other tests. I was able to bisect with this:
>
> cd tests && python run-tests.py -j 100 --runs-per-test 400 
> test-bundle2-remote-changegroup.t
>
> fails in about 70 out of the 400 runs. I also see it periodically when 
> running the tests with -j120 on gcc112 from the gcc compile farm, which is a 
> POWER8 machine with 160 hardware threads. I suspect you can reproduce it with 
> a lower -j if you run the test enough times, but I’m up later than I should 
> be already, so I didn’t bother logging in to a smaller linux machine to 
> confirm.
>
> Can you take a look?

Heh, I reported the flakiness on #mercurial earlier today. That's why
Jun sent a series of patches maybe 2 hours ago that you then queued.
Have you tested with those patches applied? I have not had time to
look at his patches, but maybe he should have explained their
motivation better if this is indeed the same problem that I reported.

>
> Thanks!
> Augie
>
>> Previously, checkportisavailable only checks ports on the IPv4 address. This
>> patch makes it check IPv6 as well. It'll be useful if "localhost" does not
>> have an IPv4 address, or its IPv4 address does not exist somehow.
>>
>> diff --git a/tests/run-tests.py b/tests/run-tests.py
>> --- a/tests/run-tests.py
>> +++ b/tests/run-tests.py
>> @@ -115,13 +115,17 @@ wifexited = getattr(os, "WIFEXITED", lam
>> def checkportisavailable(port):
>>     """return true if a port seems free to bind on localhost"""
>> -    try:
>> -        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>> -        s.bind(('localhost', port))
>> -        s.close()
>> -        return True
>> -    except socket.error as exc:
>> -        if not exc.errno == errno.EADDRINUSE:
>> -            raise
>> -        return False
>> +    families = [getattr(socket, i, None)
>> +                for i in ('AF_INET', 'AF_INET6')
>> +                if getattr(socket, i, None) is not None]
>> +    for family in families:
>> +        try:
>> +            s = socket.socket(family, socket.SOCK_STREAM)
>> +            s.bind(('localhost', port))
>> +            s.close()
>> +            return True
>> +        except socket.error as exc:
>> +            if exc.errno not in (errno.EADDRINUSE, errno.EADDRNOTAVAIL):
>> +                raise
>> +    return False
>>
>> closefds = os.name == 'posix'
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel@mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to