| Summary: | Double Init of eclipse required to load a new revision of plugin | ||
|---|---|---|---|
| Product: | [Eclipse Project] Equinox | Reporter: | Emmanuel Wurth <WURTHEMM> |
| Component: | Incubator | Assignee: | Thomas Watson <tjwatson> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | ||
| Version: | 3.0 | ||
| Target Milestone: | 3.0 M9 | ||
| Hardware: | PC | ||
| OS: | Windows XP | ||
| Whiteboard: | |||
|
Description
Emmanuel Wurth
suspect this is an update issue. Jeff, this looks like a runtime issue: Because the old plugin (1.0.0) is not removed after manually installing the newer version (1.0.1), update configurator will just detect the new plugin, install it and call refreshPackages(). The expected behavior is that the runtime will now manage various plugin version as needed (allowing multiple versions when plugins are only contributing libraries, etc.). The interesting thing is that the runtime does just that, but on the second invocation only, when update configurator is not even involved (because that invocation runs with cached bundles). The problem here is that refreshPackages will only refresh the bundles that are passed, plus any other bundles that depend on the bundles passed. In this case update.configurator is installing the new version of the bundle and passing that bundle to be refreshed. No other bundles depend on this bundle so it is the only bundle refreshed. Since another version of the bundle is installed and resolved in the system the Framework will not allow the new bundle to be resolved unless the old version of the bundle is refreshed as well. Jeff, we had discussed adding bundles with the same symbolic name to the graph of bundles to be refreshed if one of the bundles in the graph is a singleton bundle. This would take care of this situation because when update.configurator installs/refreshes version 1.1.0 of the rdj bundle then version 1.0.0 of the rdj bundle would also get pulled into the graph of bundles to be refreshed. This would force the correct version of the bundle to be picked after the initial call to refresh. As we discussed this may limit the control a management agent has over the set of bundles that is refreshed, but this would not be a violation of the OSGi spec since it states that an acceptable implementation of refreshPackages is to restart the Framework (which is a bit more drastic!!) Will try to get the suggested fix in for M9. Fix is in HEAD. |