[Checkins] SVN: ZODB/branches/jim-3.8-connection/src/ZEO/tests/invalidations_while_connecting.test Added a lock to allow the main thread to pause the database-update

Jim Fulton jim at zope.com
Fri Jul 11 09:46:23 EDT 2008


Log message for revision 88255:
  Added a lock to allow the main thread to pause the database-update
  thread while checking consistency accross clients to avoid spurious
  test failures.
  

Changed:
  U   ZODB/branches/jim-3.8-connection/src/ZEO/tests/invalidations_while_connecting.test

-=-
Modified: ZODB/branches/jim-3.8-connection/src/ZEO/tests/invalidations_while_connecting.test
===================================================================
--- ZODB/branches/jim-3.8-connection/src/ZEO/tests/invalidations_while_connecting.test	2008-07-11 13:40:30 UTC (rev 88254)
+++ ZODB/branches/jim-3.8-connection/src/ZEO/tests/invalidations_while_connecting.test	2008-07-11 13:46:22 UTC (rev 88255)
@@ -26,7 +26,8 @@
     >>> import ZEO.ClientStorage, ZODB.tests.MinPO, transaction
     >>> db = ZODB.DB(ZEO.ClientStorage.ClientStorage(addr, client='x'))
     >>> conn = db.open()
-    >>> for i in range(1000):
+    >>> nobs = 1000
+    >>> for i in range(nobs):
     ...     conn.root()[i] = ZODB.tests.MinPO.MinPO(0)
     >>> transaction.commit()
 
@@ -37,18 +38,25 @@
 - starting a second client that writes objects more or less
   constantly,
 
-    >>> import threading
+    >>> import random, threading
     >>> stop = False
     >>> db2 = ZODB.DB(ZEO.ClientStorage.ClientStorage(addr))
     >>> tm = transaction.TransactionManager()
     >>> conn2 = db2.open(transaction_manager=tm)
+    >>> random = random.Random(0)
+    >>> lock = threading.Lock()
     >>> def run():
     ...     while 1:
-    ...         for i in range(500):
-    ...             if stop:
-    ...                 return
+    ...         i = random.randint(0, nobs-1)
+    ...         if stop:
+    ...             return
+    ...         lock.acquire()
+    ...         try:
     ...             conn2.root()[i].value += 1
     ...             tm.commit()
+    ...         finally:
+    ...             lock.release()
+    ...             time.sleep(0)
     >>> thread = threading.Thread(target=run)
     >>> thread.start()
 
@@ -63,12 +71,16 @@
     >>> for c in range(10):
     ...    time.sleep(.1)
     ...    db = ZODB.DB(ZEO.ClientStorage.ClientStorage(addr, client='x'))
-    ...    time.sleep(.1)
-    ...    conn = db.open()
-    ...    for i in range(1000):
+    ...    _ = lock.acquire()
+    ...    try:
+    ...      time.sleep(.1)
+    ...      conn = db.open()
+    ...      for i in range(1000):
     ...        if conn.root()[i].value != conn2.root()[i].value:
     ...            print 'bad', c, i, conn.root()[i].value,
     ...            print  conn2.root()[i].value
+    ...    finally:
+    ...      _ = lock.release()
     ...    db.close()
 
     >>> stop = True



More information about the Checkins mailing list