- 15 Apr, 2002 3 commits
-
-
Jeremy Hylton authored
Also, reformat a test in testTransaction.
-
Jeremy Hylton authored
constructor, since it is ignored and there is no current plan to support two caches with almost-but-not-quite-the-same arguments. This change has effects in many files. The Connection and DB don't pass this argument and don't bother setting it explicitly when it is reset via DB APIs like setCacheDeactivateAfter(). XXX These APIs remain, since existing code may depend on them, but they have no effect. New policy in cPersistence.c: A Persistent object can't have its _p_jar set or deleted once it is in a cache. Persistent already implemented this policy for _p_oid; it seems safer to do the same for the jar. Add ringlen() method to cache objects (implemented as cc_ringlen). This returns the length of the doubly linked list of non-ghost objects. Same as len(cache.lru_items()), but more efficient. Only used for testing at the moment. In ring_corrupt(), don't raise a new exception if one has already been set. The old behavior masked useful information about the original error / traceback.
-
Chris Withers authored
-
- 13 Apr, 2002 1 commit
-
-
Jeremy Hylton authored
-
- 12 Apr, 2002 4 commits
-
-
Jeremy Hylton authored
Implement behavior for minimize() and full_sweep() as discussed on zodb-dev. minimize() ghostifies all unmodified objects. full_sweep() with age==0 is the same as minimize(), otherwise it's the same as incrgc(). Reformat and/or reindent lots of code. Use PyObject_Compare() instead of PyObject_Cmp() because it has a simpler return value. Fix a few more PyDict_SetItem() and PyDict_DelItem() calls to make correct check for error return.
-
Jeremy Hylton authored
Break up the logic into a bunch of helper methods: _commit_objects() _commit_subtrans() _finish_one() _finish_rest() and possibly _commit_error() As a result of the changes, the high-level logic of a commit fits into 28 lines inside a try/finally. There are lots of details hidden in the methods, but the names capture the high-level behavior of the helpers.
-
Jeremy Hylton authored
This fixes the transient failure in testExceptionInSubAbortSub() and is presumed to be correct, too. The old code had the comment: # This should never fail but did not to guarantee that it never failed. I'm assuming that the write fix is to log the error and ignore it, because that's what the call to tpc_abort() immediately above does. XXX commit() is a really long method. It would be nice to break it up into easier-to-understand chunks.
-
Jeremy Hylton authored
including some use of assert/fail methods instead of assert stmt.
-
- 05 Apr, 2002 1 commit
-
-
Jeremy Hylton authored
The rationale is that this is an internal detail of the cache implementation called by Per_dealloc(). It's nice to make it fast, and it's good to prevent it from being called with anything other than an about-to-be-freed object. As a result of it being in the C API, omit tests of refcounts. We would have been in Per_dealloc() otherwise. Initialize the percachdel slot of cPersistenceAPIstruct to NULL in cPersistence. In cPickleCache, import the CObject and fill in the struct. Also, reformat many of the comments so that all the text starts to the right of the /*. Fiddle the text of the placeholder comment. I think I understand it now :-). Add an XXX comment about the "old" cache API e.g. fullsweep and reallyfullsweep. Fix cc_get(). object_from_oid() doesn't ever set an exception. Remove a Py_FatalError() check from the end of a module init function. We don't do that anymore.
-
- 04 Apr, 2002 3 commits
-
-
Jeremy Hylton authored
I expect this code will become ZEO 1.1.
-
Barry Warsaw authored
description fields, which are assigned to attributes on the Transaction object.
-
Barry Warsaw authored
takes an exception object as its first argument, and the return value should be a -1 instead of NULL (this function's signature has an int return). I'm surprised no one else's build caught this compiler warning.
-
- 03 Apr, 2002 5 commits
-
-
Shane Hathaway authored
Merged shane-better-tracebacks-branch. The changes are explained in http://dev.zope.org/Wikis/DevSite/Proposals/BetterTracebacks
-
Jeremy Hylton authored
(Thanks for the comments, Toby!)
-
Toby Dickenson authored
-
Toby Dickenson authored
-
Jeremy Hylton authored
Add check that argument to cc_ass_sub() is a string. The cache maps oids to objects, and oids must be strings for now. Re-indent a bunch of code. Replace an XXX comment about v->oid with a comment explaining why getattr is necessary.
-
- 02 Apr, 2002 10 commits
-
-
Jeremy Hylton authored
on ->cache and references to its members. Quite a bit of reformatting and unless-undoing. Add whitespace between 'if' and '('.
-
Jeremy Hylton authored
ring_home and use it explicitly. Remove now unused KEEP_THIS_ONE_AROUND_FOR_A_WHILE() macro.
-
Barry Warsaw authored
check_ring() rename to ring_corrupt() since that matches the return semantics a bit better. scan_gc_items(): Get rid of the placeholder, which just seemed like a confusing way to stash here->next until after the PyObject_SetAttr() call.
-
Barry Warsaw authored
UPDATE_STATE_IF_NECESSARY: Un-macroize this. Renamed to function unghostify() and changed (slightly) the return semantics. ghostify(): Don't use the NON_GHOST_COUNT macro. Add some comments. Per_setstate(), Per__getstate__(), Per_getattr(), _setattro(): Use unghostify() instead of UPDATE_STATE_IF_NECESSARY.
-
Jeremy Hylton authored
-
Guido van Rossum authored
-
Guido van Rossum authored
did you use?
-
Toby Dickenson authored
-
Jeremy Hylton authored
A few substantive changes: Split internals of cc_ass_sub() into two smaller function cc_add_item() and cc_del_item(), removing several levels of indentation in the process. Fix incorrect check for return value from PyDict_SetItem().
-
Jeremy Hylton authored
-
- 01 Apr, 2002 2 commits
-
-
Jeremy Hylton authored
Remove use of staticforward. Avoid forward reference to Cctype by defining newccobject after type struct.
-
Jeremy Hylton authored
Define the contents of ccobject_head_struct via CACHE_HEAD macro. Don't rely on two different files to define a struct with the same layout by convention. Remove many levels of parentheses from the HOME and NON_GHOST_COUNT macros. Replace KEEP_THIS_ONE_AROUND_FOR_A_WHILE() macro with a call to the accessed() function. (Who comes up with these names :-). Remove include of string.h in cPersistence.c. Expand cPersistent_HEAD macro so that it has one line for each attribute! Use typedef to define PerCache as "struct ccobject_head_struct" and use this for the entry cache slot in cPersistent_HEAD instead of PyObject *. In cPickleCache.c, reflow a bunch of long lines, add some whitespace, and an XXX comment explaining that I don't understand a different comment.
-
- 30 Mar, 2002 2 commits
-
-
Jeremy Hylton authored
These tests verify that transactional undo works with abortVersion and commitVersion, even in the face of a pack that invalidates the file position contained in the transaction record.
-
Jeremy Hylton authored
Use the file position stored in the transaction_id whenever possible. It is possible when _check_txn_pos() returns true; i.e. when the file position does point to the transaction record header. Remove ostloc and here arguments to _txn_undo_write(), as they can be computed after the call. Omit redundant tests in _txn_undo_write(). All the paths that lead here verify that the file position is valid. Remove some attribute lookup optimizations.
-
- 29 Mar, 2002 9 commits
-
-
Jeremy Hylton authored
transactionalUndo() does argument checking and locking. It calls _transactional_undo(), which finds the right transaction record. It calls _txn_undo_write(), which writes the data records. Add a summary comment above undoLog() that explains how the transaction_id is created and used.
-
Jeremy Hylton authored
It makes more sense in this order, because the comments in undoLog() help to explain what transactionalUndo() is doing.
-
Jeremy Hylton authored
-
Jeremy Hylton authored
appears to be broken.
-
Shane Hathaway authored
undo to continue to work, and the IDs have to be base64 encoded to work on HTML forms. In future, non-transactional undo may be removed and the HTML forms might be updated to perform the encoding of transaction IDs.
-
Barry Warsaw authored
that environment, it is possible that all the data in the replicas recoverable through the public api are identical, while the actual on-disc representation differs. This bug can be boiled down to doing the following in "standard" ZODB: 1. undoLog() 2. pack() 3. transactionalUndo() Previously, undoLog() encoded the file position in the 'id' key of the undo record, but of course the pack() breaks that file position. We fix this by encoding the oid of an object touched in the transaction instead. That way, transactionalUndo() can start at the current revision of the object, and scan back until it can find a transaction with a matching id to the one we're undoing. This approach breaks when the transaction we're undoing doesn't touch any objects, e.g. is an abortVersion() or commitVersion(). By edict, that's a non-requirement for now. We could fix that by doing a more expensive binary search for the matching transaction. WIBNI we had an index from tids to file positions? :)
-
Barry Warsaw authored
really testing what we're interested in (they were testing the equality of the exact layout of the undoInfo() -- not interesting).
-
Barry Warsaw authored
suspicion that FileStorage (and an FS-backed ZEO) fails a transactional undo after a pack, but Berkeley storage passes.
-
Jeremy Hylton authored
Two problems: A revid doesn't have the right type. But even if we decoded the revid using TimeStamp(revid).timeTime(), it would be the wrong time. We want to pack to the current time to delete older revisions. I believe the test case tried to keep one revision available so that it could be packed. The new test doesn't do that, so it will fail even after we fix FileStorage. I think the right answer is to call time.time() after the second commit *and* make sure that there is at least a one second delay between the two stores.
-