[Chandler-dev] Help needed to fix triage perf test failure

Bryan Stearns stearns at osafoundation.org
Wed Apr 25 14:10:19 PDT 2007


Andi,

It looks like we're firing an item notification while indexing (and 
observers) are deferred - this is bad, because UI is likely to 
inadvertently access things by indexes that might be invalid.

Do we need "with watchersDeferred():"?

...Bryan

Grant Baillie wrote:
>
> On 25 Apr, 2007, at 10:54, Heikki Toivonen wrote:
>
>> The performance Tinderboxes are experiencing failure fairly regularly
>> with the triage test. Grant and I have been unable to reproduce the
>> error. If anyone is able to reproduce this, please let me know.
>
> After discussion with stearns (and RobinD) on IRC today, it transpires 
> that wx is eating the exception. With that knowledge, it was easy to 
> get the additional frames in the trace (below) ...
>
> A question for Reid: Near the bottom, why is the MultiStateButton 
> calling Update()? Shouldn't it be doing Refresh(), instead of causing 
> the whole UI to redraw at an inopportune moment?
>
> --Grant
>
>   /Users/grant/src/chandler/Chandler.py(159)<module>()
> -> sys.exit(main())
>   /Users/grant/src/chandler/Chandler.py(76)main()
> -> return realMain()
>   /Users/grant/src/chandler/Chandler.py(70)realMain()
> -> app.MainLoop()
>   
> /Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(7822)MainLoop() 
>
> -> wx.PyApp.MainLoop(self)
>   
> /Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(7157)MainLoop() 
>
> -> return _core_.PyApp_MainLoop(*args, **kwargs)
>   
> /Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(14128)<lambda>() 
>
> -> lambda event: event.callable(*event.args, **event.kw) )
>   
> /Users/grant/src/chandler/parcels/osaf/framework/scripting/__init__.py(84)run_startup_script() 
>
> -> run_startup_script_with_symbols(builtIns=builtIns, *args, **kwds)
>   
> /Users/grant/src/chandler/parcels/osaf/framework/scripting/script.py(277)run_startup_script_with_symbols() 
>
> -> builtIns=builtIns)
>   
> /Users/grant/src/chandler/parcels/osaf/framework/scripting/script.py(184)run_script_with_symbols() 
>
> -> exec scriptCode in builtIns
>   
> /Users/grant/src/chandler/tools/QATestScripts/Performance/PerfLargeDataTriage.py(66)<module>() 
>
> -> User.emulate_click(dashboardWidget, triageColMiddle, 
> (row*rowHeight) + rowMiddle)
>   
> /Users/grant/src/chandler/parcels/osaf/framework/scripting/User.py(216)emulate_click() 
>
> -> widget.ProcessEvent(mouseUp)
>   
> /Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(3761)ProcessEvent() 
>
> -> return _core_.EvtHandler_ProcessEvent(*args, **kwargs)
>   
> /Users/grant/src/chandler/parcels/osaf/framework/blocks/Table.py(438)OnMouseEvents() 
>
> -> wantsCapture = callHandler(oldCell, oldCell == cell, "old")
>   
> /Users/grant/src/chandler/parcels/osaf/framework/blocks/Table.py(420)callHandler() 
>
> -> wantsCapture = handler(event)
>   
> /Users/grant/src/chandler/parcels/osaf/framework/attributeEditors/AttributeEditors.py(1340)OnMouseChange() 
>
> -> advanceStateMethod(item, attributeName)
>   
> /Users/grant/src/chandler/parcels/osaf/views/main/summaryblocks.py(213)advanceState() 
>
> -> item.setTriageStatus(newValue, pin=True)
>   
> /Users/grant/src/chandler/parcels/osaf/pim/triage.py(184)setTriageStatus() 
>
> -> self.__setTriageAttributes(newStatus, when, False, True)
>   
> /Users/grant/src/chandler/parcels/osaf/pim/triage.py(218)__setTriageAttributes() 
>
> -> setattr(self, tsAttr, newStatus)
>   
> /Users/grant/src/chandler/repository/item/Item.py(314)setAttributeValue()
> -> self.setDirty(dirty, name, _attrDict, _noFireChanges)
>   
> /Users/grant/src/chandler/repository/persistence/RepositoryView.py(1675)__call__() 
>
> -> getattr(self.view[self.watchingItem], self.methodName)(op, uItem, 
> names)
>   
> /Users/grant/src/chandler/parcels/osaf/framework/blocks/Block.py(575)onWatchNotification() 
>
> -> block.onItemNotification('itemChange', (op, uuid, attrs))
>   
> /Users/grant/src/chandler/parcels/osaf/views/detail/detail.py(348)onItemNotification() 
>
> -> self.synchronizeWidget()
>   
> /Users/grant/src/chandler/parcels/osaf/views/detail/detail.py(474)synchronizeWidget() 
>
> -> self.setState()
>   
> /Users/grant/src/chandler/parcels/osaf/views/detail/detail.py(480)setState() 
>
> -> self.widget.SetState("%s.%s" % (self.icon, item.triageStatus))
>   /Users/grant/src/chandler/util/MultiStateButton.py(272)SetState()
> -> self.Update()
>   
> /Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(9536)Update() 
>
> -> return _core_.Window_Update(*args, **kwargs)
> > 
> /Users/grant/src/chandler/parcels/osaf/framework/blocks/Table.py(107)GetValue()->None 
>
> -> import pdb; pdb.set_trace()
>
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "chandler-dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/chandler-dev



More information about the chandler-dev mailing list