[ZODB-Dev] [Enhancement Proposal] Garanteed lifetime for volatile variables

Jim Fulton jim at zope.com
Fri Oct 6 16:02:17 EDT 2006


Dieter Maurer wrote:
> Jim Fulton wrote at 2006-10-6 15:08 -0400:
>> ...
>>>> You could implement your sticky attribute at the application level:
>>>>
>>>>
>>>>     def _p_deactivate(self):
>>>>         if getattr(self, '_p_sticky', False):
>>>>            return
>>>>         Persistent._p_deactivate(self)
>>>>
>>>> You could provide any policy you want, without making the policy part
>>>> of ZODB.
>>> But, such an object would never again be deactivated (unless
>>> "_p_sticky" is reset). In my proposal, such objects may be
>>> invalidated at transaction boundaries.
>>>
>>> This may not be a big problem, as there are probably not too many
>>> objects that have "_p_sticky" defined permanently
>>> ("Shared.DC.ZRDB.Connection" and
>>> "Products.CMFCore.Skinnable.ObjectManager" would be examples).
>> Good point.  I left off that you could register a callback on transaction
>> commit to clear the sticky flag.
> 
> Not a nice perspective -- for too reasons:
> 
>   *  When would I register the callback?

When you set the volatile data that needed to be sticky.

>      Sure, the callback should not need to look at all objects in
>      the cache to find the sticky ones.
> 
>      This means, the callback would need to be registered for
>      each object potentially relevant at transaction boundary time.

Yes, any object that needed to be sticky would need to have a callback
registered.

>      In principle, all objects in the cache can be relevant...

All objects are sticky?

>   *  The examples above have their "_p_sticky" defined at
>      class level -- as they make vital use of volatile attributes
>      and need a garanteed lifetime for them until transaction boundary.

Hm, so stickyness is a property of the class?  Why store _p_sticky on
the instance then?

>      This means we need an additional callback activated after
>      the cache garbage collection to get rid of the instance
>      level "_p_sticky" again.

I don't really follow this. I'm not sure I need to.

I have a feeling that there's some deeper issue lurking here.
I'll have to think about this some more.

Some observations:

- This isn't unique to _v_ attributes.  An object could
   have other non-persistent data that is precious.

- I wonder if an argument could be made than we shouldn't
   implicitly deactivate an object that has been accessed in a
   a transaction while the transaction is still running.

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