[Zope-Checkins] CVS: ZODB3/BDBStorage/tests -
test_autopack.py:1.11.2.2
Jeremy Hylton
jeremy at zope.com
Wed Sep 10 13:32:49 EDT 2003
Update of /cvs-repository/ZODB3/BDBStorage/tests
In directory cvs.zope.org:/tmp/cvs-serv11973/BDBStorage/tests
Modified Files:
Tag: ZODB3-3_2-branch
test_autopack.py
Log Message:
Remove RaceCondtion tests on Barry's instructions:
Those tests (and the supporting code) should be removed. They
can't possibly pass given the 3.1 code. Make it look like 3.1. :)
=== ZODB3/BDBStorage/tests/test_autopack.py 1.11.2.1 => 1.11.2.2 ===
--- ZODB3/BDBStorage/tests/test_autopack.py:1.11.2.1 Tue Sep 9 18:35:37 2003
+++ ZODB3/BDBStorage/tests/test_autopack.py Wed Sep 10 12:32:48 2003
@@ -271,126 +271,6 @@
-class RaceConditionBase(BerkeleyTestBase):
- def setUp(self):
- BerkeleyTestBase.setUp(self)
- self._cv = threading.Condition()
- self._storage.cv = self._cv
-
- def tearDown(self):
- # clean up any outstanding transactions
- get_transaction().abort()
- BerkeleyTestBase.tearDown(self)
-
- def _getPackThread(self, storage):
- raise NotImplementedError
-
- def testRaceCondition(self):
- unless = self.failUnless
- storage = self._storage
- db = DB(storage)
- conn = db.open()
- root = conn.root()
- # Start by storing a root reachable object.
- obj1 = C()
- obj1.value = 888
- root.obj1 = obj1
- txn = get_transaction()
- txn.note('root -> obj1')
- txn.commit()
- # Now, start a transaction, store an object, but don't yet complete
- # the transaction. This will ensure that the second object has a tid
- # < packtime, but it won't be root reachable yet.
- obj2 = C()
- t = Transaction()
- storage.tpc_begin(t)
- obj2sn = storage.store('\0'*7 + '\2', ZERO, zodb_pickle(obj2), '', t)
- # Now, acquire the condvar lock and start a thread that will do a
- # pack, up to the _sweep call. Wait for the _mark() call to
- # complete.
- now = time.time()
- while now == time.time():
- time.sleep(0.1)
- self._cv.acquire()
- packthread = self._getPackThread(storage)
- packthread.start()
- self._cv.wait()
- # Now that the _mark() has finished, complete the transaction, which
- # links the object to root.
- root.obj2 = obj2
- rootsn = storage.getSerial(ZERO)
- rootsn = storage.store(ZERO, rootsn, zodb_pickle(root), '', t)
- storage.tpc_vote(t)
- storage.tpc_finish(t)
- # And notify the pack thread that it can do the sweep and collect
- self._cv.notify()
- self._cv.wait()
- # We're done with the condvar and the thread
- self._cv.release()
- packthread.join()
- # Now make sure that all the interesting objects are still available
- rootsn = storage.getSerial(ZERO)
- obj1sn = storage.getSerial('\0'*7 + '\1')
- obj2sn = storage.getSerial('\0'*7 + '\2')
- # obj1 revision was written before the second revision of the root
- unless(obj1sn < rootsn)
- unless(rootsn == obj2sn)
- unless(obj1sn < obj2sn)
-
- def testEarlierRaceCondition(self):
- unless = self.failUnless
- storage = self._storage
- db = DB(storage)
- conn = db.open()
- root = conn.root()
- # Start by storing a root reachable object.
- obj1 = C()
- obj1.value = 888
- root.obj1 = obj1
- txn = get_transaction()
- txn.note('root -> obj1')
- txn.commit()
- # Now, start a transaction, store an object, but don't yet complete
- # the transaction. This will ensure that the second object has a tid
- # < packtime, but it won't be root reachable yet.
- obj2 = C()
- t = Transaction()
- storage.tpc_begin(t)
- # Now, acquire the condvar lock and start a thread that will do a
- # pack, up to the _sweep call. Wait for the _mark() call to
- # complete.
- now = time.time()
- while now == time.time():
- time.sleep(0.1)
- self._cv.acquire()
- packthread = self._getPackThread(storage)
- packthread.start()
- self._cv.wait()
- obj2sn = storage.store('\0'*7 + '\2', ZERO, zodb_pickle(obj2), '', t)
- # Now that the _mark() has finished, complete the transaction, which
- # links the object to root.
- root.obj2 = obj2
- rootsn = storage.getSerial(ZERO)
- rootsn = storage.store(ZERO, rootsn, zodb_pickle(root), '', t)
- storage.tpc_vote(t)
- storage.tpc_finish(t)
- # And notify the pack thread that it can do the sweep and collect
- self._cv.notify()
- self._cv.wait()
- # We're done with the condvar and the thread
- self._cv.release()
- packthread.join()
- # Now make sure that all the interesting objects are still available
- rootsn = storage.getSerial(ZERO)
- obj1sn = storage.getSerial('\0'*7 + '\1')
- obj2sn = storage.getSerial('\0'*7 + '\2')
- # obj1 revision was written before the second revision of the root
- unless(obj1sn < rootsn)
- unless(rootsn == obj2sn)
- unless(obj1sn < obj2sn)
-
-
-
# Subclass which does ugly things to _dopack so we can actually test the race
# condition. We need to store a new object in the database between the
# _mark() call and the _sweep() call.
@@ -524,13 +404,6 @@
self._storage.pack(time.time(), referencesf)
-class TestMinimalClassicPackRaceCondition(RaceConditionBase):
- ConcreteStorage = SynchronizedMinimalStorage
-
- def _getPackThread(self, storage):
- return MinimalPackThread(storage)
-
-
def test_suite():
suite = unittest.TestSuite()
@@ -539,8 +412,6 @@
suite.addTest(unittest.makeSuite(TestAutopack))
suite.addTest(unittest.makeSuite(TestAutomaticClassicPack))
suite.addTest(unittest.makeSuite(TestMinimalPack))
- suite.addTest(unittest.makeSuite(TestFullClassicPackRaceCondition))
- suite.addTest(unittest.makeSuite(TestMinimalClassicPackRaceCondition))
return suite
More information about the Zope-Checkins
mailing list