[Checkins] SVN: relstorage/trunk/relstorage/ Added test coverage of the pack-duty-cycle functionality.

Shane Hathaway shane at hathawaymix.org
Mon Jan 26 19:48:25 EST 2009


Log message for revision 95059:
  Added test coverage of the pack-duty-cycle functionality.
  

Changed:
  U   relstorage/trunk/relstorage/adapters/common.py
  U   relstorage/trunk/relstorage/relstorage.py
  U   relstorage/trunk/relstorage/tests/reltestbase.py

-=-
Modified: relstorage/trunk/relstorage/adapters/common.py
===================================================================
--- relstorage/trunk/relstorage/adapters/common.py	2009-01-27 00:14:01 UTC (rev 95058)
+++ relstorage/trunk/relstorage/adapters/common.py	2009-01-27 00:48:24 UTC (rev 95059)
@@ -747,7 +747,7 @@
         pass
 
 
-    def pack(self, pack_tid, options):
+    def pack(self, pack_tid, options, sleep=time.sleep):
         """Pack.  Requires the information provided by pre_pack."""
 
         # Read committed mode is sufficient.
@@ -797,7 +797,7 @@
                             if delay > 0:
                                 log.debug('pack: sleeping %.4g second(s)',
                                     delay)
-                                time.sleep(delay)
+                                sleep(delay)
                         self._hold_commit_lock(cursor)
                         start = time.time()
 

Modified: relstorage/trunk/relstorage/relstorage.py
===================================================================
--- relstorage/trunk/relstorage/relstorage.py	2009-01-27 00:14:01 UTC (rev 95058)
+++ relstorage/trunk/relstorage/relstorage.py	2009-01-27 00:48:24 UTC (rev 95059)
@@ -829,7 +829,7 @@
             self._lock_release()
 
 
-    def pack(self, t, referencesf):
+    def pack(self, t, referencesf, sleep=time.sleep):
         if self._is_read_only:
             raise POSException.ReadOnlyError()
 
@@ -876,7 +876,7 @@
                     log.info("pack: dry run complete")
                 else:
                     # Now pack.
-                    adapter.pack(tid_int, self._options)
+                    adapter.pack(tid_int, self._options, sleep=sleep)
                     self._after_pack()
             finally:
                 adapter.release_pack_lock(lock_cursor)

Modified: relstorage/trunk/relstorage/tests/reltestbase.py
===================================================================
--- relstorage/trunk/relstorage/tests/reltestbase.py	2009-01-27 00:14:01 UTC (rev 95058)
+++ relstorage/trunk/relstorage/tests/reltestbase.py	2009-01-27 00:48:24 UTC (rev 95059)
@@ -544,6 +544,27 @@
 
         finally:
             db.close()
+
+    def checkPackDutyCycle(self):
+        # Exercise the code in the pack algorithm that releases the
+        # commit lock for a time to allow concurrent transactions to commit.
+        self._storage._options.pack_batch_timeout = 0  # pause after every txn
+
+        slept = []
+        def sim_sleep(seconds):
+            slept.append(seconds)
+
+        db = DB(self._storage)
+        try:
+            # Pack
+            now = packtime = time.time()
+            while packtime <= now:
+                packtime = time.time()
+            self._storage.pack(packtime, referencesf, sleep=sim_sleep)
+
+            self.assertEquals(len(slept), 1)
+        finally:
+            db.close()
         
 
 



More information about the Checkins mailing list