[ZODB-Dev] [Enhancement Proposal] Memory size limited Cache
Jim Fulton
jim at zope.com
Mon Oct 9 13:37:12 EDT 2006
Dieter Maurer wrote:
> Jim Fulton wrote at 2006-10-6 17:04 -0400:
...
>> Or consider object activation and deactivation. If a ghost is
>> shared among multiple threads, then __setstate__ could
>> be called from separate threads.
>
> But, why should this be a problem? They would install the same
> state.
Because __setstate__ is written assuming that no other thread is
calling it. Threaded programming is tricky. Code designed for a
threaded environment has to take the possibility of of multiple
simultaneous calls into account. Traditionally, persistent object
implementors haven't had to do that.
>> And of course, there's the possibility that buggy software
>> might try to mutate the objects. How would you prevent it?
>
> The special read-only connection with shared cache would raise
> an exception instead of joining the transaction.
That's too late.
> Of course, other threads might already have been affected
> (e.g. in the example above of modifying non-persistent data).
> But, bugs can have nasty effects....
ZODB applications count on isolation. IMO, it isn't acceptable
to give up on the isolation guarantee.
>> You couldn't wait until commit if there was the possibility that
>> other threads might see the errant changes.
>
> In most cases (when an attribute of a persistent object is changed),
> we could be able to detect the forbidden modification
> before it happens:
>
> The modification goes through "Persistent.__setattr__"
> which informs the associated connection which joins the transaction.
> Thus, if the connection does not want that its objects are changed,
> it raises an exception instead of joining the transaction.
Good point. That helps.
What if the exception is swallowed? What would you do? Reload the state?
Maybe this could be made to work. I don't know.
> This fails for:
>
> * volatile attributes -- I have no easy solution
Conceivably the persistence machinery could disallow
assignments to _v_ attrs.
...
My intuition is still that sharing objects between threads will
introduce a host of subtle bugs.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the ZODB-Dev
mailing list