Fix bugs exposed by unit testing. Note that this version of the
storage has a failing abortVersion(), so it's mostly a checkpoint. Not yet tested: commitVersion(), transactionalUndo(), undoLog(). Not yet implemented: history(), pack() Specific changes: - Table txnOids renamed to txnoids everywhere. - Define a module global `zero' constant and use (via global) where ever appropriate (should be named ZERO but that's ugly). - _finish(): Only boost the refcount of objects referenced by the pickle when we've actually got a new pickle. Also, add a note about the currentVersions table, which will contain multiple copies of vid/oid records. It's easier to weed them out later than to weed them out here. One of the places you need to weed them all out is at the end of this method, in the `delete-a-version' branch. - abortVersion(): Record oids found by scanning the currentVersions table in a set, to account for the possible multiple vid/oid records. Fix some typos. When calling write_nonversion_object() on the CommitLog, the prevrevid ought to be the revid of the current object revision, for undo purposes. - load(): Where we previously had a comment that asked whether we should assert that the version is empty (after we've checked everything else), now we really check that and raise a VersionError if not. - loadSerial(): Fix a typo. - store(): Inside the old-revision-id-is-true test, if the old vid is not zero and it is equal to the new vid, then the non-version revision of the object is the old non-version revision (added the else: clause). - transactionalUndo(): Implemented but not yet tested. - undo(): Removed. - versionEmpty(): Semantics are to return true if an unknown version is given. As an extra bonus, if version is empty (i.e. the non-version) check the serials table.
Showing
Please register or sign in to comment