Changed the copyright to be open source!
Added an extra argument to SimpleDB.MultipleRevision.transaction_info to limit info to transactions written since a given time, which should be the time of the last pack. Undoing a transaction that was written before the last pack will cause objects to be lost from the database.
Unfortunately, it is up to the application to keep track of pack times.
PickleJar now has a (crude) hook to deal with problems in importing classes during unpickling. Simply add a method to BoboPOS.PickleJar.PickleJar::
def Broken(self, oid, (module_name, class_name)): ... Construct a Persistent object, given the module and class names .... theObject._p_jar=self theObject._p_oid=oid return theObject
Typically, the method is added not by modifying the source, but by doing surgery on the class at run time.
To support this hook, classes are now pickled a bit differently.
Changed file import so 'seek; is no longer used. This allows
any object with a read
method to be used as an import source.
Source files used tabs and spaces for indentation. All tabs have now been removed.
Changes to volatile attributes, which are attributes with
names beginning with _v_
were causing unneeded database
updates.
Changes made in custom __setstate__ methods caused objects to be incorrectly registered with the transaction manager.
PickleJar PickleCache objects lacked a __len__ method and had an ineffective minimize method.
Changed garbage collection phase of SimpleDB.MultipleRevision.pack to skip over dangling object references that are caused by undoing transactions that were written before a pack.
Changed added logic to check for and skip over dangling object references that are caused by undoing transactions that were written before a pack.
PickleDictionary changes were not being properly registered with the transaction manager.
Fixed bug in importing modules using built-in __import__.
Added b
flags in various open calls to make everything
work correctly on Windows.
Fixed bug that caused incompatability between BoboPOS and ExtensionClass.
This is a bug fix release. The module, PickleCache, failed to import getrefcount from sys. I'm surprized this wasn'tt seen earler.
This release has a number of important features, including:
A more robust file format that provides direct support for grouping database records into transactions and for storing transaction meta-data,
A platform independent file format, with automatic conversion from the current platform-dependent format,
cPickle support,
Instances of classes that do not define __getinitargs__
no
longer have their constructors called when they are loaded from
the database.
When loading objects with persistent subobjects, BoboPOS no longer has to read the subobject data records to create ghosts. This should significantly speed loading objects with many subobjects. (This feature doesn't take effect until to record for the container object is rewritten.)
The PersistentMapping class has been moved to a separate module,
Methods to store index files that speed startup.
and many other features that have accumulated in over a year of usage.
Bugs fixed since the alpha release:
Circular data structures caused infinite loops. This was due to a bug in clearing change flags that might also have led to spurious database growth in some cases.
A miss-spelling of __getinitargs__ caused classes that used getinitargs to be loaded incorrectly.
Logic to handle non-threaded environments was flawed in a way that caused garbage collection to fail and be skipped while packing. With this fix, packing should be much more affective.
A bug was fixed in handling circular data structures when exporting objects from a database.
A new method, objectReferencesIn, was added to SimpleDB.MultipleRevision to find all of the (ids of) objects referenced in a database record.