[Checkins] SVN: relstorage/trunk/relstorage/adapters/packundo.py More efficient set operations

Shane Hathaway shane at hathawaymix.org
Wed Feb 2 09:44:20 EST 2011


Log message for revision 120051:
  More efficient set operations
  

Changed:
  U   relstorage/trunk/relstorage/adapters/packundo.py

-=-
Modified: relstorage/trunk/relstorage/adapters/packundo.py
===================================================================
--- relstorage/trunk/relstorage/adapters/packundo.py	2011-02-02 14:30:46 UTC (rev 120050)
+++ relstorage/trunk/relstorage/adapters/packundo.py	2011-02-02 14:44:19 UTC (rev 120051)
@@ -115,22 +115,20 @@
         # Traverse the object graph.  Add all of the reachable OIDs
         # to keep_set.
         log.info("pre_pack: traversing the object graph.")
-        added_oids = IISet()
-        added_oids.update(keep_set)
+        parents = IISet()
+        parents.update(keep_set)
         pass_num = 0
-        while added_oids:
+        while parents:
             pass_num += 1
-            to_visit = added_oids
-            added_oids = IISet()
-            for from_oid in to_visit:
-                to_oids = all_refs.get(from_oid)
+            children = IISet()
+            for parent in parents:
+                to_oids = all_refs.get(parent)
                 if to_oids:
-                    to_add = difference(to_oids, keep_set)
-                    if to_add:
-                        keep_set.update(to_add)
-                        added_oids.update(to_add)
+                    children.update(to_oids)
+            parents = difference(children, keep_set)
+            keep_set.update(parents)
             log.info("pre_pack: found %d more referenced object(s) in "
-                "pass %d", len(added_oids), pass_num)
+                "pass %d", len(parents), pass_num)
 
         # Set pack_object.keep for all OIDs in keep_set.
         del all_refs  # Free some RAM



More information about the checkins mailing list