Issue 3892 again. The bsddb3 replication test still fails randomly.

Since this module is unmaintained in the library and gone in py3k,
this patch skips the remainder of the replication test if a
second timeout occurs, as it randomly does.  This should improve buildbot
stability.
This commit is contained in:
R. David Murray 2010-03-01 19:14:16 +00:00
parent 7512a9068d
commit 343facabf1
1 changed files with 20 additions and 18 deletions

View File

@ -119,24 +119,18 @@ class DBReplicationManager(unittest.TestCase):
timeout = time.time()+60
while (time.time()<timeout) and not (self.confirmed_master and self.client_startupdone) :
time.sleep(0.02)
# this fails on Windows as self.client_startupdone never gets set
# to True - see bug 3892. BUT - even though this assertion
# fails on Windows the rest of the test passes - so to prove
# that we let the rest of the test run. Sadly we can't
# make use of raising TestSkipped() here (unittest still
# reports it as an error), so we yell to stderr.
import sys
if sys.platform=="win32":
print >> sys.stderr, \
"XXX - windows bsddb replication fails on windows and is skipped"
print >> sys.stderr, "XXX - Please see issue #3892"
# It also fails irregularly on other platforms, and again the
# rest of the tests pass. Since bsddb support is unmaintained, and
# is gone in py3k, we just emit a warning instead of a test failure
# so as to improve buildbot stability.
elif time.time()>timeout:
print >> sys.stderr, \
"XXX - timeout before startup confirmed, see issue #3892."
# self.client_startupdone does not always get set to True within
# the timeout. On windows this may be a deep issue, on other
# platforms it is likely just a timing issue, especially on slow
# virthost buildbots (see issue 3892 for more). Even though
# the timeout triggers, the rest of this test method usually passes
# (but not all of it always, see below). So we just note the
# timeout on stderr and keep soldering on.
if time.time()>timeout:
import sys
print >> sys.stderr, ("XXX: timeout happened before"
"startup was confirmed - see issue 3892")
startup_timeout = True
d = self.dbenvMaster.repmgr_site_list()
self.assertEquals(len(d), 1)
@ -194,6 +188,14 @@ class DBReplicationManager(unittest.TestCase):
txn.commit()
if v is None :
time.sleep(0.02)
# If startup did not happen before the timeout above, then this test
# sometimes fails. This happens randomly, which causes buildbot
# instability, but all the other bsddb tests pass. Since bsddb3 in the
# stdlib is currently not getting active maintenance, and is gone in
# py3k, we just skip the end of the test in that case.
if time.time()>=timeout and startup_timeout:
self.skipTest("replication test skipped due to random failure, "
"see issue 3892")
self.assertTrue(time.time()<timeout)
self.assertEquals("123", v)