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

Bug 140371

Summary: Update manager blocks UI in search results page when expanding tree nodes
Product: [Eclipse Project] Platform Reporter: Michael Scharf <eclipse>
Component: Update (deprecated - use Eclipse>Equinox>p2)Assignee: Platform-Update-Inbox <platform-update-inbox>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: P3 CC: francois, panagiotis.korros, pombredanne
Version: 3.2   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Michael Scharf CLA 2006-05-05 11:07:14 EDT
I am trying to install callisto using the update manager of 3.2RC2. On the Update Search results page, when I try to expand the nodes, it takes quite some time to do so (1-15 sec per node). And even worse, while doing so, the UI is blocked. (see the stack-trace). Also doing "select required", it blocks for many seconds with a similar stack trace (ending in a HTTPUrlConnection and socked reads). I think, doing a HTTP connection from within the main (UI) thread is a very bad idea, because it can block unpredictably long.

"main" prio=7 tid=0x00034e78 nid=0x142c runnable [7d000..7fc3c]
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:220)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
        - locked <0x103080f8> (a java.io.BufferedInputStream)
        at sun.net.www.MeteredStream.read(MeteredStream.java:106)
        - locked <0x10309060> (a sun.net.www.MeteredStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:111)
        at java.io.FilterInputStream.read(FilterInputStream.java:111)
        at org.eclipse.update.internal.core.connection.HttpResponse$MonitoringInputStream.read(HttpResponse.java:92)
        at java.io.FilterInputStream.read(FilterInputStream.java:90)
        at org.eclipse.update.internal.core.connection.HttpResponse$MonitoringInputStream.read(HttpResponse.java:83)
        at org.eclipse.update.internal.core.UpdateManagerUtils.copy(UpdateManagerUtils.java:926)
        at org.eclipse.update.core.FeatureContentProvider.asLocalReference(FeatureContentProvider.java:292)
        - locked <0x10300488> (a java.lang.String)
        at org.eclipse.update.internal.core.FeaturePackagedContentProvider.getFeatureEntryArchiveReferences(FeaturePackagedContentProvider.java:153)
        at org.eclipse.update.internal.core.FeaturePackagedContentProvider.getFeatureManifestReference(FeaturePackagedContentProvider.java:79)
        at org.eclipse.update.internal.core.FeaturePackagedFactory.createFeature(FeaturePackagedFactory.java:39)
        at org.eclipse.update.core.Site.createFeature(Site.java:527)
        at org.eclipse.update.core.FeatureReference.createFeature(FeatureReference.java:122)
        at org.eclipse.update.core.FeatureReference.getFeature(FeatureReference.java:110)
        at org.eclipse.update.core.FeatureReference.getFeature(FeatureReference.java:97)
        at org.eclipse.update.core.IncludedFeatureReference.getFeature(IncludedFeatureReference.java:145)
        at org.eclipse.update.internal.operations.OperationValidator.computeFeatureSubtree(OperationValidator.java:522)
        at org.eclipse.update.internal.ui.wizards.ReviewPage.isFeatureProblematic(ReviewPage.java:1529)
        at org.eclipse.update.internal.ui.wizards.ReviewPage.access$4(ReviewPage.java:1513)
        at org.eclipse.update.internal.ui.wizards.ReviewPage$TreeLabelProvider.getImage(ReviewPage.java:263)
        at org.eclipse.jface.viewers.StructuredViewer.buildLabel(StructuredViewer.java:2097)
        at org.eclipse.jface.viewers.TreeViewer.doUpdateItem(TreeViewer.java:253)
        at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:89)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:843)
        at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:149)
        at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:834)
        at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:465)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:843)
        at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:149)
        at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:1949)
        at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:738)
        at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:716)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
        at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:690)
        at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:872)
        at org.eclipse.update.internal.ui.wizards.ContainerCheckedTreeViewer.createChildren(ContainerCheckedTreeViewer.java:204)
        at org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:1234)
        at org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractTreeViewer.java:1246)
        at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:181)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:925)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:949)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:934)
        at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:6217)
        at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3794)
        at org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1166)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:3298)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
        at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
        at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1842)
        at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1292)
        at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:5137)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:3279)
        at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:4734)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
        at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
        at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1923)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
        at org.eclipse.jface.window.Window.open(Window.java:796)
        at org.eclipse.update.internal.ui.wizards.ResizableInstallWizardDialog.open(ResizableInstallWizardDialog.java:59)
        at org.eclipse.update.internal.ui.wizards.InstallWizardOperation$UpdateJobChangeListener.openInstallWizard2(InstallWizardOperation.java:100)
        at org.eclipse.update.internal.ui.wizards.InstallWizardOperation$UpdateJobChangeListener.access$0(InstallWizardOperation.java:85)
        at org.eclipse.update.internal.ui.wizards.InstallWizardOperation$3.run(InstallWizardOperation.java:77)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
        at org.eclipse.update.internal.ui.wizards.InstallWizardOperation$2.run(InstallWizardOperation.java:75)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        - locked <0x14b055f8> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3325)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2971)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
        at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
        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:324)
        at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
        at org.eclipse.core.launcher.Main.run(Main.java:977)
        at org.eclipse.core.launcher.Main.main(Main.java:952)

"VM Thread" prio=5 tid=0x00318698 nid=0x1214 runnable

"VM Periodic Task Thread" prio=10 tid=0x0031cce8 nid=0x1258 waiting on condition
"Suspend Checker Thread" prio=10 tid=0x00319b80 nid=0xbc0 runnable
Comment 1 Dejan Glozic CLA 2006-05-05 11:25:05 EDT
Michael, are you making digests for callisto? We put digest support exactly to avoid this problem, so unless you do, there is nothing we can do at this point. Digests dramatically cut on the need to make multiple URL connections while browsing or validating selections.
Comment 2 Michael Scharf CLA 2006-05-05 12:19:08 EDT
Dejan, what do you mean "making digets for callisto"? I simply used the update sine to install callisto.
Comment 3 Dejan Glozic CLA 2006-05-05 13:01:53 EDT
Sorry, I didn't check the domain and confused you with somebody from the Callisto team.

We have a new site enhancement utility that can produce a single site digest file that Update downloads instead of downloading all the features individually just for browsing and validation checking. Once the Callisto site is digest-enabled, browsing will become much faster.
Comment 4 Branko Tripkovic CLA 2006-06-23 00:59:25 EDT

*** This bug has been marked as a duplicate of 144876 ***
Comment 5 Panagiotis Korros CLA 2006-08-16 18:07:07 EDT
I am stil having this issue with Eclipse 3.2.0 and 3.2.1 M20060802-0800 when I try to install new features from the WTP update site. In my configuration, over a slow connection, this takes 3-4 minutes.

Stack trace: 
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(Unknown Source)
java.io.BufferedInputStream.fill(Unknown Source)
java.io.BufferedInputStream.read1(Unknown Source)
java.io.BufferedInputStream.read(Unknown Source)
sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
java.net.HttpURLConnection.getResponseCode(Unknown Source)
org.eclipse.update.internal.core.connection.HttpResponse.getStatusCode(HttpResponse.java:189)
org.eclipse.update.internal.core.UpdateManagerUtils.checkConnectionResult(UpdateManagerUtils.java:554)
org.eclipse.update.core.ContentReference.getInputStream(ContentReference.java:153)
org.eclipse.update.core.FeatureContentProvider.asLocalReference(FeatureContentProvider.java:268)
org.eclipse.update.internal.core.FeaturePackagedContentProvider.getFeatureEntryArchiveReferences(FeaturePackagedContentProvider.java:157)
org.eclipse.update.internal.core.FeaturePackagedContentProvider.getFeatureManifestReference(FeaturePackagedContentProvider.java:83)
org.eclipse.update.internal.core.FeaturePackagedFactory.createFeature(FeaturePackagedFactory.java:39)
org.eclipse.update.core.Site.createFeature(Site.java:527)
org.eclipse.update.core.FeatureReference.createFeature(FeatureReference.java:122)
org.eclipse.update.core.FeatureReference.getFeature(FeatureReference.java:110)
org.eclipse.update.core.FeatureReference.getFeature(FeatureReference.java:97)
org.eclipse.update.core.IncludedFeatureReference.getFeature(IncludedFeatureReference.java:145)
org.eclipse.update.internal.operations.UpdateUtils.getIncludedFeature(UpdateUtils.java:678)
org.eclipse.update.internal.operations.OperationValidator.computeFeatureSubtree(OperationValidator.java:522)
org.eclipse.update.internal.operations.OperationValidator.computeFeatureSubtree(OperationValidator.java:524)
org.eclipse.update.internal.ui.wizards.ReviewPage.isFeatureProblematic(ReviewPage.java:1637)
org.eclipse.update.internal.ui.wizards.ReviewPage.access$4(ReviewPage.java:1621)
org.eclipse.update.internal.ui.wizards.ReviewPage$TreeLabelProvider.getImage(ReviewPage.java:266)
org.eclipse.jface.viewers.StructuredViewer.buildLabel(StructuredViewer.java:2103)
org.eclipse.jface.viewers.TreeViewer.doUpdateItem(TreeViewer.java:258)
org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:95)
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
org.eclipse.core.runtime.Platform.run(Platform.java:843)
org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:149)
org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:849)
org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:465)
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
org.eclipse.core.runtime.Platform.run(Platform.java:843)
org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:44)
org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:149)
org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:1955)
org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:753)
org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:731)
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:705)
org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:892)
org.eclipse.update.internal.ui.wizards.ContainerCheckedTreeViewer.createChildren(ContainerCheckedTreeViewer.java:204)
org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:1251)
org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractTreeViewer.java:1263)
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:181)
org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:6254)
org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3794)
org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:1166)
org.eclipse.swt.widgets.Control.windowProc(Control.java:3298)
org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1842)
org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1319)
org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:5171)
org.eclipse.swt.widgets.Control.windowProc(Control.java:3279)
org.eclipse.swt.widgets.Tree.windowProc(Tree.java:4768)
org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1923)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
org.eclipse.jface.window.Window.open(Window.java:796)
org.eclipse.update.internal.ui.wizards.ResizableInstallWizardDialog.open(ResizableInstallWizardDialog.java:59)
org.eclipse.update.internal.ui.wizards.InstallWizardOperation$UpdateJobChangeListener.openInstallWizard2(InstallWizardOperation.java:100)
org.eclipse.update.internal.ui.wizards.InstallWizardOperation$UpdateJobChangeListener.access$0(InstallWizardOperation.java:85)
org.eclipse.update.internal.ui.wizards.InstallWizardOperation$3.run(InstallWizardOperation.java:77)
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
org.eclipse.update.internal.ui.wizards.InstallWizardOperation$2.run(InstallWizardOperation.java:75)
org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3325)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2971)
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
org.eclipse.core.launcher.Main.basicRun(Main.java:280)
org.eclipse.core.launcher.Main.run(Main.java:977)
org.eclipse.core.launcher.Main.main(Main.java:952)