[pypy-commit] stmgc c7-refactor: comments for test_random

Remi Meier noreply at buildbot.pypy.org
Wed Feb 19 16:05:13 CET 2014


Author: Remi Meier
Branch: c7-refactor
Changeset: r786:8d4439fd0ad6
Date: 2014-02-19 16:05 +0100
http://bitbucket.org/pypy/stmgc/changeset/8d4439fd0ad6/

Log:	comments for test_random

diff --git a/c7/test/test_random.py b/c7/test/test_random.py
--- a/c7/test/test_random.py
+++ b/c7/test/test_random.py
@@ -12,6 +12,8 @@
         print >> sys.stderr, cmd
         exec cmd in globals(), self.content
 
+        
+
 _root_numbering = 0
 is_ref_type_map = {}
 def get_new_root_name(is_ref_type):
@@ -24,6 +26,8 @@
 
 _global_time = 0
 def contention_management(our_trs, other_trs, wait=False, objs_in_conflict=None):
+    """exact copy of logic in contention.c"""
+    
     if other_trs.start_time < our_trs.start_time:
         pass
     else:
@@ -37,7 +41,10 @@
         
 
 class TransactionState(object):
-    """maintains read/write sets"""
+    """State of a transaction running in a thread,
+    e.g. maintains read/write sets. The state will be
+    discarded on abort or pushed to other threads"""
+    
     def __init__(self, start_time):
         self.read_set = set()
         self.write_set = set()
@@ -83,7 +90,9 @@
         
 
 class ThreadState(object):
-    """maintains state for one thread """
+    """Maintains state for one thread. Mostly manages things
+    to be kept between transactions (e.g. saved roots) and
+    handles discarding/reseting states on transaction abort"""
     
     def __init__(self, num, global_state):
         self.num = num
@@ -167,6 +176,10 @@
 
         
 class GlobalState(object):
+    """Maintains the global view (in a TransactionState) on
+    objects and threads. It also handles checking for conflicts
+    between threads and pushing state to other threads"""
+    
     def __init__(self, ex, rnd):
         self.ex = ex
         self.rnd = rnd
@@ -374,10 +387,28 @@
         global_state.committed_transaction_state.read_set = set()
 
         # random steps:
+        possible_actions = [
+                OpAllocate,
+                OpAllocateRef,
+                OpWrite,
+                OpWrite,
+                OpWrite,
+                OpWrite,
+                OpRead,
+                OpRead,
+                OpRead,
+                OpRead,
+                OpRead,
+                OpRead,
+                OpCommitTransaction,
+                OpAbortTransaction,
+                OpForgetRoot,
+            ]
         remaining_steps = 200
         while remaining_steps > 0:
             remaining_steps -= 1
 
+            # make sure we are in a transaction:
             n_thread = rnd.randrange(0, N_THREADS)
             if n_thread != curr_thread.num:
                 ex.do('#')
@@ -386,25 +417,12 @@
             if curr_thread.transaction_state is None:
                 OpStartTransaction().do(ex, global_state, curr_thread)
 
-            action = rnd.choice([
-                OpAllocate,
-                OpAllocateRef,
-                OpWrite,
-                OpWrite,
-                OpWrite,
-                OpWrite,
-                OpRead,
-                OpRead,
-                OpRead,
-                OpRead,
-                OpRead,
-                OpRead,
-                OpCommitTransaction,
-                OpAbortTransaction,
-                OpForgetRoot,
-            ])
+            # do something random
+            action = rnd.choice(possible_actions)
             action().do(ex, global_state, curr_thread)
 
+        # to make sure we don't have aborts in the test's teardown method,
+        # we will simply stop all running transactions
         for ts in global_state.thread_states:
             if ts.transaction_state is not None:
                 if curr_thread != ts:
@@ -420,7 +438,7 @@
     def _make_fun(seed):
         def test_fun(self):
             self.test_fixed_16_bytes_objects(seed)
-        test_fun.__name__ = 'test_fixed_16_bytes_objects_%d' % seed
+        test_fun.__name__ = 'test_random_%d' % seed
         return test_fun
 
     for _seed in range(5000, 5100):


More information about the pypy-commit mailing list