• Jason Madden's avatar
    patch time.time in historical_connections to avoid windows failures; fix race... · 6b707535
    Jason Madden authored
    patch time.time in historical_connections to avoid windows failures; fix race condition in pool.availableGC
    
    * patch time.time in historical_connections to avoid windows failures.
    
    * Also use a mock version of datetime.datetime.utcnow.
    
    We can't patch the method in-place because it's an extension type.
    
    * synchronize sleep with time
    
    * increment by less than the pool timeout to avoid a race condition.
    
    * Avoid mutating the dict as we iter over it.
    
    Seen in Python 3.4 tests:
    
    File "/home/travis/build/zopefoundation/ZODB/src/ZODB/historical_connections.txt", line 263, in historical_connections.txt
    Failed example:
        conn = db.open()
    Exception raised:
        Traceback (most recent call last):
          File "/opt/python/3.4.2/lib/python3.4/doctest.py", line 1324, in __run
            compileflags, 1), test.globs)
          File "<doctest historical_connections.txt[0]>", line 1, in <module>
            conn = db.open()
          File "/home/travis/build/zopefoundation/ZODB/src/ZODB/DB.py", line 761, in open
            self.historical_pool.availableGC()
          File "/home/travis/build/zopefoundation/ZODB/src/ZODB/DB.py", line 277, in availableGC
            for key, pool in self.pools.items():
        RuntimeError: dictionary changed size during iteration
    6b707535
historical_connections.txt 10.2 KB