While hacking at Durus I accumulated a few fixes that shouldn't be too
controversial:
* fix typo in Connection.get_stored_pickle docstring
* fix copy & paste error in utils.u32 docstring
* eliminate hard-coded enum value in Cache.get_instance
There was another change I wanted to make, which was to derive a
specific WriteConflictError from ConflictError, and fix the
ConflictError docstring to not describe a write conflict. Applications
may want to distinguish between write and read conflicts, for example to
retry a different number of times for each. However, a few points where
conflict errors are currently raised threw me off. Perhaps these two
cases should just be an assert rather than raising an (already raised)
conflict, since they indicated a programming error:
== Connection.get_stored_pickle() ==
if oid in self.invalid_oids:
# someone is still trying to read after getting a conflict
raise ReadConflictError([oid])
== Connection.commit() ==
if self.invalid_oids:
# someone is trying to commit after a read or write conflict
raise ConflictError(list(self.invalid_oids))
--John
diff -urN Durus-3.5.orig/connection.py Durus-3.5/connection.py
--- Durus-3.5.orig/connection.py 2006-08-01 16:21:11.000000000 -0400
+++ Durus-3.5/connection.py 2006-10-01 22:09:16.000000000 -0400
@@ -5,7 +5,7 @@
from heapq import heappush, heappop
from durus.error import ConflictError, ReadConflictError, DurusKeyError
from durus.logger import log
-from durus.persistent import ConnectionBase
+from durus.persistent import ConnectionBase, GHOST
from durus.persistent_dict import PersistentDict
from durus.serialize import ObjectReader, ObjectWriter
from durus.serialize import split_oids, unpack_record, pack_record
@@ -96,7 +96,7 @@
def get_stored_pickle(self, oid):
"""(oid:str) -> str
Retrieve the pickle from storage. Will raise ReadConflictError if
- pickle the pickle is invalid.
+ the pickle is invalid.
"""
if oid in self.invalid_oids:
# someone is still trying to read after getting a conflict
@@ -346,7 +346,7 @@
obj = klass.__new__(klass)
obj._p_oid = oid
obj._p_connection = connection
- obj._p_status = -1 # obj._p_set_status_ghost()
+ obj._p_status = GHOST # obj._p_set_status_ghost()
objects[oid] = obj
return obj
diff -urN Durus-3.5.orig/utils.py Durus-3.5/utils.py
--- Durus-3.5.orig/utils.py 2006-05-11 08:45:36.000000000 -0400
+++ Durus-3.5/utils.py 2006-10-01 21:45:55.000000000 -0400
@@ -23,6 +23,6 @@
return struct.pack(">L", v)
def u32(v):
- """Unpack an 8-byte string into a 32-bit long integer."""
+ """Unpack an 4-byte string into a 32-bit long integer."""
return struct.unpack(">L", v)[0]