[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