[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