durusmail: durus-users: My wish-list for Durus 3.6 (20060922)
My wish-list for Durus 3.6 (20060922)
2006-09-22
2006-09-22
2006-09-22
2006-09-26
2006-09-26
2006-09-26
2006-09-27
2006-09-29
2006-09-29
My wish-list for Durus 3.6 (20060922)
Jesus Cea
2006-09-22
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Provisional listing. To be updated in the future.

As ever, I'm ready to help to implement this, if you ask.


1. Be able to play with threads in the same "safe" ways that Durus
pre-3.5. (would be nice if available in durus 3.5.1 :-)

2. Fully implement "self.storage.sync()" support in
serverstorage/filestorage. This implementation (currently partially
done) would allow:

- - Notify clients of objects garbage collected, to update their cache to
a) reclaim memory early and b) to avoid "resurrecting" a dead object
(for example, keeping (incorrectly) a nonpersistent reference around).

- - Several serverstorage instances in a multithread server could share a
single backend instance (if it is thread-safe). You could use a server
instance for client, for example, allowing multiple read requests in
parallel (if the backend allows). The syncronization point would be the
backend (inside the "begin" method), so commits would be serialized
correctly.

- - Be able to "replicate" a durus storage via the backend ability to
propagate changes to other (remote) processes. For example, BerkeleyDB
supports replication natively.

- - Be able to deploy durus "cache only" storageservers: the storage
backend would be a durus client of another "real" durus server. That
backend should be able to propagate invalidations upstream to its clients.

3. "connection.get()" does two database requests: one to get the object
type and to create the ghost object in cache, and other access to
actually populate the cache when the object is "touched". This is not
usually a problem because the only object requested two times is "root";
all the others are reachable from there, and when traversing links we
already know the next object type (in fact, that object would already be
a ghost).

Nevertheless I sometimes use "connection.get()" like a "weak reference"
between objects. That is, instead of keeping an object link, I keep an
object OID and then I try to access it just like a python weak
reference. This "weak reference" doesn't preclude the object of being
garbage collected, like usual "weak references". The usage case is the
same that python weak references: keeping references to objects without
precluding garbage collection.

I feel that needing two database accesses is an actual bug masked by
current durus usage profile, but revealed by my "weak ref" pattern.

6. (recovered from Durus 3.5 wish-list) BTree objects need a "changed"
method. I hate to do "a[b]=a[b]" to notify the persistence framework
about changes in "a[b]" when it is a non-persistent container. I've had
problems with some of my junior coders removing such a "redundant" code
because "it does nothing". Argggg!.

All other persistent containers have a "_p_note_change" method. Simetry
applies :-).

- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea@argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea@jabber.org         _/_/    _/_/          _/_/_/_/_/
                               _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iQCVAwUBRRQqGJlgi5GaxT1NAQIVxwP9EZQTCRCrN62sryuQ746a+2Aoi1WzWNNp
VgzTA5NbHWnld3SWmTpfcdzEMK/FPT+lPufM8Wk28cHZkpTESQ4XsWPXmaDgjhVb
xjWSMPf88bYJl/2ghPghlPQAkG5XKXqpkJp0um4QVyLW42nWApjaPG5SykvtRhbo
x74HgWrMEsw=
=9TOV
-----END PGP SIGNATURE-----
reply