Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 311367 - [ui] deal more gracefully with a null plan in a failed resolution
Summary: [ui] deal more gracefully with a null plan in a failed resolution
Status: RESOLVED FIXED
Alias: None
Product: Equinox
Classification: Eclipse Project
Component: p2 (show other bugs)
Version: 3.6   Edit
Hardware: Macintosh Mac OS X
: P3 normal (vote)
Target Milestone: 3.6 RC1   Edit
Assignee: Susan McCourt CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-05-03 08:45 EDT by Peter Nehrer CLA
Modified: 2010-05-06 17:30 EDT (History)
1 user (show)

See Also:
pascal: review+


Attachments
patch to PlannerResolutionJob (3.39 KB, patch)
2010-05-04 14:47 EDT, Susan McCourt CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Peter Nehrer CLA 2010-05-03 08:45:20 EDT
When I attempt to install from http://update.atlassian.com/atlassian-eclipse-plugin/weekly/e3.4/site.xml into the latest M7 build, I get an unexpected error dialog and a few entries in the log:

-- Error Details --
Date: Mon May 03 08:33:27 EDT 2010
Message: Unhandled event loop exception
Severity: Error
Product: Eclipse SDK 3.6.0.v201004291549 (org.eclipse.sdk.ide)
Plugin: org.eclipse.ui
Session Data:
eclipse.buildId=I20100429-1549
java.version=1.6.0_17
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments:  -keyring /Users/peter/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -keyring /Users/peter/.eclipse_keyring -showlocation


Exception Stack Trace:
org.eclipse.core.runtime.AssertionFailedException: null argument:
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
at org.eclipse.equinox.internal.p2.operations.PlanAnalyzer.computeResolutionResult(PlanAnalyzer.java:64)
at org.eclipse.equinox.internal.p2.operations.PlannerResolutionJob.getResolutionResult(PlannerResolutionJob.java:104)
at org.eclipse.equinox.p2.operations.ProfileChangeOperation.getResolutionResult(ProfileChangeOperation.java:216)
at org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard.getCurrentStatus(ProvisioningOperationWizard.java:232)
at org.eclipse.equinox.internal.p2.ui.dialogs.ResolutionStatusPage.updateStatus(ResolutionStatusPage.java:72)
at org.eclipse.equinox.internal.p2.ui.dialogs.SizeComputingWizardPage.updateStatus(SizeComputingWizardPage.java:119)
at org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard.planChanged(ProvisioningOperationWizard.java:170)
at org.eclipse.equinox.internal.p2.ui.dialogs.WizardWithLicenses.planChanged(WizardWithLicenses.java:67)
at org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard.recomputePlan(ProvisioningOperationWizard.java:217)
at org.eclipse.equinox.internal.p2.ui.dialogs.ProvisioningOperationWizard.getNextPage(ProvisioningOperationWizard.java:104)
at org.eclipse.equinox.internal.p2.ui.dialogs.WizardWithLicenses.getNextPage(WizardWithLicenses.java:58)
at org.eclipse.jface.wizard.WizardPage.getNextPage(WizardPage.java:172)
at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:887)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:426)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3734)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1335)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1358)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1343)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1155)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3594)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3250)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.equinox.p2.ui.ProvisioningUI.openInstallWizard(ProvisioningUI.java:206)
at org.eclipse.equinox.internal.p2.ui.sdk.InstallNewSoftwareHandler.doExecute(InstallNewSoftwareHandler.java:31)
at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.doExecuteAndLoad(PreloadingRepositoryHandler.java:84)
at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.execute(PreloadingRepositoryHandler.java:41)
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.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820)
at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806)
at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3734)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1335)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1358)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1343)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1155)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3594)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3250)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2601)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2565)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2399)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:669)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:662)
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)


Preceding exception:

eclipse.buildId=I20100429-1549
java.version=1.6.0_17
java.vendor=Apple Inc.
BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US
Framework arguments:  -keyring /Users/peter/.eclipse_keyring -showlocation
Command-line arguments:  -os macosx -ws cocoa -arch x86_64 -keyring /Users/peter/.eclipse_keyring -showlocation


Error
Mon May 03 08:33:27 EDT 2010
Location must be absolute: %25update.label

java.lang.IllegalArgumentException: Location must be absolute: %25update.label
at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.checkValidLocation(AbstractRepositoryManager.java:703)
at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.contains(AbstractRepositoryManager.java:250)
at org.eclipse.equinox.p2.engine.ProvisioningContext.isEnabled(ProvisioningContext.java:231)
at org.eclipse.equinox.p2.engine.ProvisioningContext.loadMetadataRepository(ProvisioningContext.java:213)
at org.eclipse.equinox.p2.engine.ProvisioningContext.getLoadedMetadataRepositories(ProvisioningContext.java:179)
at org.eclipse.equinox.p2.engine.ProvisioningContext.getMetadata(ProvisioningContext.java:255)
at org.eclipse.equinox.internal.p2.director.SimplePlanner.gatherAvailableInstallableUnits(SimplePlanner.java:256)
at org.eclipse.equinox.internal.p2.director.SimplePlanner.getSolutionFor(SimplePlanner.java:316)
at org.eclipse.equinox.internal.p2.director.SimplePlanner.getProvisioningPlan(SimplePlanner.java:372)
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.ProvisioningOperationWizard$1.run(ProvisioningOperationWizard.java:206)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)


I'm not sure if there something wrong with the update site (looks like valid old-style update site). This does not happen in M6.
Comment 1 Susan McCourt CLA 2010-05-03 11:41:05 EDT
The underlying problem is also described in bug 311338 (underlying error is the same).  Keeping this bug open and retitling to catch the error on the UI side a little earlier.  

It is indeed an "unexpected error" from the UI point of view, but we could detect this a little earlier with a better error than assertion failed.

(Note to self:  check for null plan in PlannerResolutionJob.getResolutionResult())
Comment 2 Susan McCourt CLA 2010-05-04 14:47:31 EDT
Created attachment 167014 [details]
patch to PlannerResolutionJob

This patch ensures that if there is a null plan at the time a resolution result is requested, that a proper status is returned.

The patch can be tested by trying to install anything from
http://download.eclipse.org/releases/staging

(without the patch for bug 311338 loaded).

Before the patch, you get the IAE in the error dialog (that is bug 311338). 
The problem on the UI side is that the wizard still has the next button enabled and pushing the next button gives you an assertion error in the log.  The wizard at that point is broken unless you select something new.

After the patch, you still get the IAE in the error dialog, but now the next button is disabled as it would be for any failed resolution, and the error message shows as:

Your original request has been modified.
  Unexpected Error.  Could not process the request. Check the error log for details.
Comment 3 Susan McCourt CLA 2010-05-04 14:48:56 EDT
Pascal, can you please review this patch?
Note that you have to test it *without* the patch for bug 311338 loaded.
This patch ensures that if any other runtime exceptions were to occur during planning, that the wizard catches the null plan and reports the status back to the user rather than being broken.
Comment 4 Pascal Rapicault CLA 2010-05-06 14:37:36 EDT
Patch released.