> 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? 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