Commits

Anonymous committed 04590ec

Merged revisions 78558 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
r78558 | r.david.murray | 2010-03-01 14:14:16 -0500 (Mon, 01 Mar 2010) | 6 lines

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

Comments (0)

Files changed (1)

Lib/bsddb/test/test_replication.py

         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)
             txn.commit()
             if v==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)