[Chandler-dev] Problem with stamping and collection notifications/ kind watchers

Bryan Stearns stearns at osafoundation.org
Tue Jul 18 15:31:31 PDT 2006


Hi Travis,
It's not clear to me that you should be committing (or even annotating) 
while handling a notification from the repository. (I don't expect that 
the repository is designed to be reentrant at that level... I try to 
keep the things I do in notification handlers as simple as possible, for 
this reason as well as to avoid notification cascades.)

I'm not sure what you mean when you say "when new mail messages enter 
Chandler, I'd like to *annotate them and put them into a mail directory 
item...". It seems like if you're trying to do something to _all_ mail 
items, you might as well do it in MailMessageMixin's initialization 
code, which will run whenever a mail item is created or stamped, and 
give you a chance to mess with its state. (I don't know what 
'annotating' you're doing here, though - your situation may be more 
complex than I've guessed).

...Bryan

Travis wrote:
> Hi all,
>
> I've found something which seems like a bug in the interaction between 
> the notification framework and stamping.
>
> When new mail messages enter Chandler, I'd like to annotate them and 
> put them into a mail directory Item so they will be accessible to the 
> IMAP server. Currently, this works perfectly for all the entry cases 
> I've tested (the IMAP client, Item>New Item>Message, drag and drop 
> from Thunderbird/Mail.app/etc) except stamping. When a message is 
> stamped, a repository commit during the callback causes a very nasty 
> error (which I've reproduced at the bottom of this page).
>
> A bit more exploration led to the creation of a parcel which 
> illustrates this bug. It appears that the problem is indeed caused by 
> the commit during an onCollectionNotification or watchKind callback. 
> Removing the commit fixes the problem, and the test parcel is 
> sufficiently simple that it seems likely the bug is coming from code 
> already in Chandler's trunk.
>
> Grant did some exploring and found the following:
>
>> So, here's what's seems to be going on:
>>
>> The self.onCollectionNotification() callback that results from 
>> notificationQueueSubscribe() is always happening in the main thread. 
>> When you commit your changes (as you should), that causes a whole 
>> bunch of stuff to happen, including changes to CPIA blocks in the 
>> app. That eventually causes CPIA to get into a weird state; probably 
>> what's happening is the commit in the middle of the refresh exposes 
>> some dependency on the order of notification processing. 
>
>
>
> After discussing this with Grant, Andi, and Bryan, Grant recommended I 
> take this to the list.
>
> Does this seem like a bug to people who know more about these 
> mechanisms? Should I file a bug report? If yes, is there any 
> documentation on the right way to file one?
>
> Thanks very much
>
> -Travis
>
>
>
>
>
>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 640, in OnCommand
>    blockEvent = getattr (block, 'event', None)
> chandlerdb.item.ItemError.StaleItemError: <MailMessageButtonBlock 
> (stale): 818e89e4-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 640, in OnCommand
>    blockEvent = getattr (block, 'event', None)
> chandlerdb.item.ItemError.StaleItemError: <TaskStampBlock (stale): 
> 818eb662-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 640, in OnCommand
>    blockEvent = getattr (block, 'event', None)
> chandlerdb.item.ItemError.StaleItemError: <CalendarStampBlock (stale): 
> 818ed6d8-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 640, in OnCommand
>    blockEvent = getattr (block, 'event', None)
> chandlerdb.item.ItemError.StaleItemError: <PrivateSwitchButtonBlock 
> (stale): 818f1102-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 640, in OnCommand
>    blockEvent = getattr (block, 'event', None)
> chandlerdb.item.ItemError.StaleItemError: <ReadOnlyIconBlock (stale): 
> 818f4d20-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 655, in OnCommand
>    Block.post (blockEvent, arguments, block)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 183, in post
>    self.dispatchEvent (event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 1028, in dispatchEvent
>    bubbleUpCallMethod (blockOrWidget, methodName, event)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 935, in bubbleUpCallMethod
>    blockOrWidget = blockOrWidget.parentBlock
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
> Traceback (most recent call last):
>  File 
> "/Users/travis/dev/chandler/chandler/application/Application.py", line 
> 199, in OnClose
>    Block.finishEdits()
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 704, in finishEdits
>    saveValueMethod(onBlock)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/ControlBlocks.py", 
> line 1490, in saveValue
>    editor.EndControlEdit(self.item, self.attributeName, widget)
>  File 
> "/Users/travis/dev/chandler/chandler/parcels/osaf/framework/blocks/Block.py", 
> line 306, in getProxiedContents
>    return getProxiedItem(getattr(self, 'contents', None))
> chandlerdb.item.ItemError.StaleItemError: 
> <DetailSynchronizedAttributeEditorBlock (stale): 
> 81890f64-16a7-11db-a954-93550c3bde89>
>
> ------------------------------------------------------------------------
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "chandler-dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/chandler-dev
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/chandler-dev/attachments/20060718/db00cfa5/attachment.html


More information about the chandler-dev mailing list