- 07 Jan, 2005 1 commit
-
-
Tim Peters authored
Collector 1503: excessive logging. ClientStorage._wait_sync(): Don't log more than one "waiting for cache verification to finish" message per 5 minutes.
-
- 23 Dec, 2004 1 commit
-
-
Tim Peters authored
ClientCache.invalidate(): - This was written not to expect tid=None, which is what happens during cache verification, although it didn't catch the tid=None case and went on doing really strange things then. Rewrote so that tid=None means "forget everything I think I know about the oid". It was kind-of performing an invalidation wrt the in-memory data structures in this case, but leaving the invalidated data for oid looking as if it were still current on disk. That was accidental, depending on what various other parts of the code thought "None" meant (primarily, an end_tid of None is generally taken here to mean "the data is current"). - Also changed the "and we already have version data for oid" case to a "forget everything I think I know about the oid" case. The comments seemed to say that's what it thought it was doing, but the code actually left non-current revisions sitting around. I really don't want to spend time trying to figure out what versions are supposed to do in all cases here, and nuking everything in this case is an obviously *safe* thing to do. - Added more asserts, because the pre- and post-conditions here are delicate and non-obvious (indeed, that a new assert failed is how I stumbled into the invalidation problem to begin with). FileCache.remove(): Changed to remove the key from self.key2entry. While self.filemap keeps an in-memory map of the entire disk file, there's no need to keep info in key2entry for keys that no longer exist in the disk file. I'm not sure a visible bug followed from this (but not sure one didn't either!), but it at best wasted memory, and violated a documented invariant. ConnectionTests.py: New test checkVerificationInvalidationPersists(). Before the patch, this provokes a persistent ZEO cache into delivering stale object state. Of course the test passes after this patch. stats.py: Added a trace code meaning "invalidation hit, and the object state was discarded". This is what happens now for invalidations produced by verification. Because of MVCC, that's really not needed *except* for the invalidations produced by startup verification (invalidations normally just set a new ending tid on the validity range for what was current data; but validity-range info isn't available from verification invalidations).
-
- 22 Dec, 2004 1 commit
-
-
Tim Peters authored
Also split test checkRollover into two tests, checkDisconnectedCacheWorks (persistent ZEO cache large enough to satisfy all requests) and checkDisconnectedCacheFails (cache too small to satisfy all requests while disconnected).
-
- 21 Dec, 2004 5 commits
-
-
Tim Peters authored
Object.serialize_header(): Stopped stuffing the version string into this notion of "a header". Couldn't see any reason for it, and it was surprising. ClientCache.invalidate(): Added some asserts to clarify intended preconditions. Alas, my guess that it was intended that the passed-in tid always be greater than the current tid turned out to trigger errors. This gets complicated, and hasn't been resolved yet. The problem is that the passed-in tid can be (in fact, always is) None during cache verification. The code here *really* doesn't seem to be expecting that, and the on-disk cache file is clearly left in a wrong state (if we repopulated the cache from the disk file, the object would not look invalidated any more, it would look current). Dumped in a giant stack trace so I don't forget this; sent email to Jeremy asking if he recalls what the real intent was.
-
Tim Peters authored
- Object.fromFile(): renamed `header_only` arg to `skip_data`. Skipping the data is what it does, while there are at least 3 distinct notions of what "a header" means in this module. Object has two notions of "header" all by itself (& I'm still not sure why Object.serialize_header() considers the version string to be part of "the header"). - FileCache.__init__(): log a warning if reuse=True but the given file path doesn't exist. The code ignores `reuse` then (before, and now). Not sure that's the best thing to do.
-
Tim Peters authored
- Moved the logger object to module scope. There's virtually no logging of any kind done here, and I suspect that's partly because the logging object was clumsy to get at. - Figured out what the code actually does when the cache size asked for doesn't match the actual size of a pre-existing cache file. It apparently wanted to ignore the requested size then. It probably shouldn't, but leaving that for later. Still, it left its own idea of the file size out of synch with the actual file size, and that was a bug. For now, logged a warning when this happens, and changed the code to respect the actual file size.
-
Tim Peters authored
ClientCache: Removed the .tid attribute. It was never updated; the contained FileCache instance actually keeps track of the last tid. This had the happy side effect of fixing bugs in testSerialization: it was accessing .tid directly, and so was _always_ comparing None to None. Changing the test to use .getLastTid() instead means it's now testing what it always intended to test. FileCache: Removed some unused private attributes for tracking internal statistics.
-
Tim Peters authored
FileCache: removed the currentsize attribute. It was initialized to 0 but never updated. Some tests referenced it, but since it was always 0 those tests weren't getting any good from it. Don't recall (or never knew) what its intended purpose may have been. FileCache.remove(): Repaired major bug. This mistakenly stored the "this disk block is free now" status byte into the start of the serialized Object record's end_tid field (incorrect seek offset). The in-memory structures were correct then, but got out of synch with the disk file; the latter then still claimed to have info for a "live" object revision, but that revision was actually dead, and the info on disk had a corrupt end_tid value.
-
- 20 Dec, 2004 1 commit
-
-
Tim Peters authored
-
- 16 Nov, 2004 1 commit
-
-
Tim Peters authored
Collector 1581: fspack can blow up when .fs is corrupted Repaired three places where fspack referenced an undefined global while *trying* to raise CorruptedError. Added new checkCorruptionInPack() test to verify the correct exception gets raised.
-
- 11 Nov, 2004 5 commits
-
-
Tim Peters authored
type_and_adr(): Display the oid too.
-
Tim Peters authored
When the ConflictError constructor is passed a pickle, extract the module and class names without loading the pickle. A ZEO server doesn't necessarily have the implementation code for application classes, and when that's so the attempt to raise ConflictError was itself dying with an ImportError.
-
Tim Peters authored
-
Tim Peters authored
-
Tim Peters authored
Try to make more sense of the ZODB pickle format "docs".
-
- 06 Nov, 2004 1 commit
-
-
Tim Peters authored
-
- 05 Nov, 2004 1 commit
-
-
Tim Peters authored
-
- 26 Oct, 2004 1 commit
-
-
Tim Peters authored
Document _p_invalidate().
-
- 18 Oct, 2004 1 commit
-
-
Dmitry Vasiliev authored
-
- 15 Oct, 2004 2 commits
-
-
Dmitry Vasiliev authored
-
Dmitry Vasiliev authored
Now use ZODB.utils.z64 instead of '\0\0\0\0\0\0\0\0' where appropriate.
-
- 14 Oct, 2004 2 commits
-
-
Tim Peters authored
Connection.root(): Repair error in docstring.
-
Tim Peters authored
Remove duplicate declaration and definition of py___getstate__.
-
- 08 Oct, 2004 2 commits
-
-
Tim Peters authored
Duplicate import removed.
-
Tim Peters authored
See Collector #1350. ghostify() and unghostify() detect one form of thread insanity now. In a debug build, they abort the process if it happens. In a release build, unghostify() raises SystemError, and ghostify() ignores it (ghostify() can't raise an exception).
-
- 05 Oct, 2004 1 commit
-
-
Tim Peters authored
before I went on vacation a couple weeks ago.
-
- 04 Oct, 2004 1 commit
-
-
Tim Peters authored
This rehabilitates the good part of Andreas's change; adds news; adds comments; and adds more comments about the sequence of undocumented cPickle gimmicks this relies on.
-
- 30 Sep, 2004 2 commits
-
-
Tim Peters authored
Collector #1517: History tab for ZPT does not work FileStorage.history() was reading the user, description, and extension fields out of the object pickle, due to starting the read at a wrong location.
-
Tim Peters authored
Restore the Connection._opened attribute, actually used by DB.connectionDebugInfo().
-
- 29 Sep, 2004 2 commits
-
-
Tim Peters authored
Typo repair.
-
Tim Peters authored
os.listdir() now prints errors on stdout
-
- 27 Sep, 2004 1 commit
-
-
Tim Peters authored
When raising DeprecationWarning, point the warning machinery at the caller, not at Transaction.begin() itself. As is (voice of experience <wink>), these warnings are darned near useless to track down code that needs to be changed on Zope trunk. With the change, the warnings point directly at the deprecated uses.
-
- 23 Sep, 2004 1 commit
-
-
Fred Drake authored
-
- 17 Sep, 2004 4 commits
-
-
Tim Peters authored
Rev 26842 changed cache-size parameters to type byte-size. That's a good change, but it was checked in from a wrong place (from the Zope trunk's copy of ZODB). Since we want Zope 2.8 to be usable with ZODB 3.3 too, I need to slam this change into 3.3 now. Alas, I don't understand how ZODB+ZEO got stitched into the Zope trunk (I do understand how it got stitched into the Zope3 trunk, and into the X3 branch), and it looks like that was left in a poor state.
-
Tim Peters authored
-
Tim Peters authored
So that if Zope X3-3.0 final is released while I'm on vacation, it will have the right ZODB stuff in it (although I still need to stitch this in to the Zope 3 and X3 trees).
-
Tim Peters authored
This confirms that 3.3 didn't have the 3.2.4c1 bug wherein an explict transaction abort() failed to clear Connections' memory of ReadConflictErrors.
-
- 14 Sep, 2004 3 commits
-
-
Tim Peters authored
be. Besides "the usual" release fiddling, repaired many out-of-date pieces of the ZODB programming guide; I'm sure many remain, though.
-
Tim Peters authored
transaction when a commit() fails. One test here provoked a failing commit(), which caused a later test to fail. Repaired by simply abort()'ing the failed transaction.
-
Tim Peters authored
-