Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 193878

Summary: [performance] "delete tasks" action runs in UI thread
Product: z_Archived Reporter: Eugene Kuleshov <ekuleshov>
Component: MylynAssignee: Project Inbox <mylyn-triaged>
Status: CLOSED MOVED QA Contact:
Severity: major    
Priority: P1 CC: robert.elves, terry.hon
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:

Description Eugene Kuleshov CLA 2007-06-22 01:41:36 EDT
"delete tasks" action runs in UI thread and it also seems like not grouping notification events. I deleted few thousands tasks from archive category (trying to figure out why bugzilla query sync don't pickup bugs) and Workbench got frozen for few minutes and after that it wasn't reacting on any async events for over 10 minutes.

Here is a piece of stack trace for the deletion itself

"main" prio=6 tid=0x00296000 nid=0xcc8 runnable [0x0090e000..0x0090fe5c]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.mylyn.internal.tasks.core.ScheduledTaskContainer.addTask(ScheduledTaskContainer.java:104)
        at org.eclipse.mylyn.tasks.ui.TaskListManager.parseFutureReminders(TaskListManager.java:339)
        at org.eclipse.mylyn.tasks.ui.TaskListManager.parseTaskActivityInteractionHistory(TaskListManager.java:269)
        at org.eclipse.mylyn.tasks.ui.TaskListManager.resetAndRollOver(TaskListManager.java:1071)
        at org.eclipse.mylyn.tasks.ui.TaskListManager$2.containersChanged(TaskListManager.java:215)
        at org.eclipse.mylyn.tasks.core.TaskList.deleteTask(TaskList.java:278)
        at org.eclipse.mylyn.internal.tasks.ui.actions.DeleteAction.run(DeleteAction.java:78)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
        at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:545)
        at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
        at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:504)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:443)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1169)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1144)
Comment 1 Mik Kersten CLA 2008-04-10 20:13:46 EDT
Rob: it might be OK to do this in the UI thread as long as the IO is not heavy.  The problem here is the resetAndRollOver(..) calls.
Comment 2 Steffen Pingel CLA 2008-04-10 20:54:20 EDT
For Mylyn 3.0 this will probably need to move into a job due to potential locking of the task list and deletion of task data which causes I/O and may block.
Comment 3 Steffen Pingel CLA 2010-07-22 19:01:12 EDT
This can also cause a refresh storm as every deleted element is refreshed separately:

"main" prio=10 tid=0x09049400 nid=0xece runnable [0xf6a28000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.swt.internal.gtk.OS._g_list_nth_data(Native Method)
	at org.eclipse.swt.internal.gtk.OS.g_list_nth_data(OS.java:2463)
	at org.eclipse.swt.widgets.Tree.getSelection(Tree.java:1730)
	at org.eclipse.jface.viewers.TreeViewer.getSelection(TreeViewer.java:256)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getSelection(AbstractTreeViewer.java:2888)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1418)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:403)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1383)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1512)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:548)
	at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1213)
	at org.eclipse.mylyn.internal.tasks.ui.views.TaskListView$TaskListRefreshJob.doRefresh(TaskListView.java:228)
	at org.eclipse.mylyn.internal.provisional.commons.ui.DelayedRefreshJob.runInUIThread(DelayedRefreshJob.java:96)
	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
	- locked <0xba86fcc8> (a org.eclipse.swt.widgets.RunnableLock)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3527)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3174)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Comment 4 Eclipse Webmaster CLA 2022-11-15 11:45:08 EST
Mylyn has been restructured, and our issue tracking has moved to GitHub [1].

We are closing ~14K Bugzilla issues to give the new team a fresh start. If you feel that this issue is still relevant, please create a new one on GitHub.

[1] https://github.com/orgs/eclipse-mylyn