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

Bug 340356

Summary: import wizard locks ui thread for a long time
Product: z_Archived Reporter: Igor Fedorenko <igor>
Component: m2eAssignee: Matthew Piggott <matthew>
Status: CLOSED INVALID QA Contact:
Severity: normal    
Priority: P3 CC: matthew, pascal, robert.munteanu
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Bug Depends on: 341121    
Bug Blocks:    

Description Igor Fedorenko CLA 2011-03-17 14:08:22 EDT
Steps to reproduce 

* start fresh/clean java epp  20110317-0706 3.7M7 distro (currently available from http://build.eclipse.org/technology/epp/epp_build/indigo/download/20110317-0706/)
* open maven import wizard and point at local maven 3.0.3 checkout
* go to the second page to see additional software proposed for installation
* finish the wizard

Problem: UI is completely blocked for a few minutes. Operating system (linux in my case) marks eclipse as not responding.

Eventually, P2 install dialog does show up and it is possible to complete the installation and project import.

Here is the stacktrace of the UI thread while it is in the locked state



"main" prio=10 tid=0x000000004150f000 nid=0x1737 waiting on condition [0x00007f37c8aed000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
	at java.lang.Thread.sleep(Native Method)
	at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:925)
	at org.eclipse.equinox.internal.p2.transport.ecf.FileReader.readInto(FileReader.java:296)
	at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:80)
	at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:130)
	at org.eclipse.equinox.internal.p2.repository.CacheManager.updateCache(CacheManager.java:333)
	at org.eclipse.equinox.internal.p2.repository.CacheManager.createCache(CacheManager.java:205)
	at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.getLocalFile(SimpleMetadataRepositoryFactory.java:66)
	at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:88)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57)
	at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:747)
	at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:652)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92)
	at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository.addChild(CompositeMetadataRepository.java:153)
	at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository.<init>(CompositeMetadataRepository.java:106)
	at org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepositoryFactory.load(CompositeMetadataRepositoryFactory.java:122)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57)
	at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:747)
	at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:652)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92)
	at org.eclipse.equinox.p2.engine.ProvisioningContext.loadMetadataRepository(ProvisioningContext.java:211)
	at org.eclipse.equinox.p2.engine.ProvisioningContext.getLoadedMetadataRepositories(ProvisioningContext.java:194)
	at org.eclipse.equinox.p2.engine.ProvisioningContext.getMetadata(ProvisioningContext.java:275)
	at org.eclipse.equinox.internal.p2.director.SimplePlanner.gatherAvailableInstallableUnits(SimplePlanner.java:258)
	at org.eclipse.equinox.internal.p2.director.SimplePlanner.getSolutionFor(SimplePlanner.java:318)
	at org.eclipse.equinox.internal.p2.director.SimplePlanner.getProvisioningPlan(SimplePlanner.java:376)
	at org.eclipse.equinox.internal.p2.operations.PlannerResolutionJob.runModal(PlannerResolutionJob.java:76)
	at org.eclipse.equinox.p2.operations.ProfileChangeOperation.resolveModal(ProfileChangeOperation.java:115)
	at org.eclipse.equinox.internal.p2.ui.dialogs.ResolutionResultsWizardPage.<init>(ResolutionResultsWizardPage.java:57)
	at org.eclipse.equinox.internal.p2.ui.dialogs.SizeComputingWizardPage.<init>(SizeComputingWizardPage.java:43)
	at org.eclipse.equinox.internal.p2.ui.dialogs.InstallWizardPage.<init>(InstallWizardPage.java:21)
	at org.eclipse.equinox.internal.p2.ui.dialogs.PreselectedIUInstallWizard.createResolutionPage(PreselectedIUInstallWizard.java:49)
	at org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard.addPages(ProvisioningOperationWizard.java:75)
	at org.eclipse.equinox.internal.p2.ui.dialogs.WizardWithLicenses.addPages(WizardWithLicenses.java:34)
	at org.eclipse.jface.wizard.WizardDialog.createContents(WizardDialog.java:603)
	at org.eclipse.jface.window.Window.create(Window.java:431)
	at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1089)
	at org.eclipse.m2e.internal.discovery.wizards.MavenDiscoveryUi.openInstallWizard(MavenDiscoveryUi.java:80)
	at org.eclipse.m2e.internal.discovery.MavenDiscoveryService.implement(MavenDiscoveryService.java:310)
	at org.eclipse.m2e.core.ui.internal.wizards.MavenImportWizard.performFinish(MavenImportWizard.java:150)
	at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:811)
	at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:430)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3549)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3170)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.ui.internal.handlers.WizardHandler$Import.executeHandler(WizardHandler.java:150)
	at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:277)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
	at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
	at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:157)
	at org.eclipse.ui.internal.actions.CommandAction.run(CommandAction.java:171)
	at org.eclipse.ui.actions.ImportResourcesAction.run(ImportResourcesAction.java:97)
	at org.eclipse.ui.actions.BaseSelectionListenerAction.runWithEvent(BaseSelectionListenerAction.java:168)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3549)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3170)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2697)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2661)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2495)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	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:344)
	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:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Comment 1 Matthew Piggott CLA 2011-03-17 14:21:08 EDT
I believe the problem is that the p2 UI needs to resolve the job we give it, before it can open the wizard (otherwise it doesn't know which page to show initially).  For a brand new workspace it must be much worse because the repositories aren't cached, and big repositories like Indigo or Helios are enabled.  

I'm not certain what we could do other than to resolve the job back in our wizard context again.
Comment 2 Igor Fedorenko CLA 2011-03-17 14:35:07 EDT
At very least we need to open a bug against p2 so that they manage ui thread properly
Comment 3 Matthew Piggott CLA 2011-03-17 16:23:17 EDT
I've written a patch to fix this in p2, just testing and I will open a bug there and link it.
Comment 4 Igor Fedorenko CLA 2013-09-28 23:19:07 EDT
closing old/stale bugreports
Comment 5 Denis Roy CLA 2021-04-19 13:22:07 EDT
Moved to https://github.com/eclipse-m2e/m2e-core/issues/