durusmail: quixote-users: Session persistence for Quixote 2.0
Session persistence for Quixote 2.0
2005-05-26
2005-05-27
2005-05-27
2005-05-27
2005-05-27
2005-05-27
2005-05-27
2005-05-27
2005-05-28
2005-05-29
2005-05-29
2005-05-29
2005-05-28
2005-05-28
2005-05-29
2005-05-29
Sessions in mod_python (was [Quixote-users] Session persistence...
2005-05-29
Session persistence for Quixote 2.0
Titus Brown
2005-05-28
-> >- Locking is a general problem; perhaps hooks belongs in the
->
-> I'm not sure the .lock() and .unlock() methods will gain anything.  There's
-> two kinds of locking: thread locking and file locking.  fcntl file locking
-> requires knowledge of  the file descriptor (file.fileno() on an open file).
-> Who knows what Windows and Mac file locking might require.  Thread locking
-> requires a pre-existing mutex.  You can't allocate it in .lock() except in
-> the cheesy "if not hasattr(self, 'mutex')" way of initializing.  So already
-> we see cases where:
-> - .lock() is called too early -- before the file is open.
-> - .lock()/.unlock() require arguments specific to the implementation.
-> - You may need to set a mutex attribute in .__init__().
-> - The locking/unlocking code is often one-liners; it would look better
-> inlined in such short methods.
-> - The try/finally blocks are a drag for implementations that don't use
-> locking, they
->  sometimes take more lines of code than the rest of the method!
->
-> I'm tempted to say get rid of .lock/.unlock and instead put a warning in
-> the docstring if the class is not thread/multiprocess safe.  We can also
-> offer subclasses with locking (ThreadedDurusSessionStore in the example).
-> Attached are some ideas.  The module is unfinished so don't try to run it
-> as-is.

I agree with removing the lock/unlock, for now.  It should be fairly
easy for anyone interested in specific situations to add the code in,
and we can provide some threadsafe/multiprocess implementations.

What do you think about having two additional functions on the session
store: "is_threadsafe" and "is_multiprocess_safe", or some such?
Probably overkill...

--titus
reply