durusmail: durus-users: RELEASED: Durus 3.4
RELEASED: Durus 3.4
2006-05-12
RELEASED: Durus 3.4
David Binger
2006-05-12
The MEMS Exchange released version 3.4 of Durus, available at
http://www.mems-exchange.org/software/durus/ .

Here are the notes from the CHANGES.txt file:

     * Refine the conflict avoidance and cache aging behavior.  Now
conflicts
       don't occur unless there is an invalid object for which this
Connection
       has actually accessed an attribute since the last call to
commit() or
       abort().  The Connection saves a "sync_count" on every commit
() or abort().
       On every access to (an ordinary) attribute of a Persistent
instance,
       the _p_touched is set to be the Connection's sync_count.
       To make this possible without any significant performance
penalty,
       the _p_connection and other '_p_' attributes are moved from
       Persistent to PersistentBase and implemented in C.
       Also, a ConnectionBase class is implemented in C so that the
       sync_count, which is needed so frequently, can be accessed
directly
       in the C implementation of PersistentBase.

       Since we now know which instances have actually been accessed
since the
       last commit() or abort(), the Connection no longer need to
maintain the
       set of loaded_oids.  The cache manager can use the _p_touched to
       distinguish less recently used instances.

       The Cache class has a new ghost_fraction attribute.  The value of
       this attribute defaults to 0.5 and can be any number between 0
and 1.
       Higher values make the cache more aggressive about ghosting
objects
       as it tries to reduce the cache size.

       The Cache "held" attribute is removed, along with the hold()
method.

     * Added a history.py module that defines HistoryConnection, a
Connection
       subclass that supports time-travel in a read-only FileStorage
file.
       The class provides next() and previous() methods for stepping
       among the stored transactions.  It also provides next_instance
(obj)
       and previous_instance(obj) for moving to to a transaction where
       obj has a state that is different from the current state.
       Note that packing a FileStorage consolidates the transactions, so
       the HistoryConnection can only move among the transactions since
       the last pack.

     * Make the durus client run in a __console__ module.  This makes it
       behave a little more like the regular Python interpreter.

     * Add support for running the durus client/server connections
through
       unix domain sockets.  The ClientStorage and StorageServer
constructors
       accept an "address" keyword argument.  If the address value
can be
       a (host, port) tuple or else a string giving a path use for the
       unix domain socket.  The separate "host" and "port" keyword
parameters
       are still supported, but they may be removed in future
releases.  If your
       code calls these constructors, please change it to use the
"address"
       keyword.

     * Change the recv() function used in the client/server to read
in chunks
       of at most 1 million bytes.  This avoids a malloc error
observed when
       running test/stress.py on an OS X machine with python 2.4.2.

     * Make the durus server a little tougher.  If it gets an unknown
command,
       it now logs the error and closes the connection instead of
crashing.

     * Add Storage.pack() and Storage.get_size().


reply