Thomas Watson created FELIX-4182:
------------------------------------
Summary: Issues with package space consistency check
Key: FELIX-4182
URL: https://issues.apache.org/jira/browse/FELIX-4182
Project: Felix
Issue Type: Bug
Components: Resolver
Environment: All
Reporter: Thomas Watson
There are two issues here. I could separate this into two reports but I need
them both fixed at the same time and will be providing a patch shortly that
addresses both of the following issues:
1) ResolverImpl.resolve(ResolveContext) fails hard if a consistent class space
cannot be found for all optional resources being resolved. It would be nice of
the resolve process could eliminate some optional resources that are the
'roots' that caused the inconsistent class space and try again.
2) There is a case where a false positive inconsistency is reported for
require-bundle and split packages. Here is the scenario
Bundle uses.a
Export-Package:
uses1; uses:="uses2"; A="split"; mandatory:="A",
uses2; A="split"; mandatory:="A"
Bundle uses.b
Export-Package:
uses1; uses:="uses2"; B="split"; mandatory:="B",
uses2; B="split"; mandatory:="B"
Bundle uses.d
Require-Bundle: uses.a, uses.b
In this scenario, if an attempt is made to resolve uses.d then
checkDynamicPackageSpaceConsistency method will detect that uses2 is
inconsistent for resource uses.d because it gets it from two different sources
uses.a and uses.b. You get something like the following error message:
Uses constraint violation. Unable to resolve resource uses.d [osgi.identity;
osgi.identity="uses.d"; type="osgi.bundle"; version:Version="1.0.0"] because it
is exposed to package 'uses2' from resources uses.a [osgi.identity;
osgi.identity="uses.a"; type="osgi.bundle"; version:Version="1.0.0"] and uses.b
[osgi.identity; osgi.identity="uses.b"; type="osgi.bundle";
version:Version="1.0.0"] via two dependency chains.
Chain 1:
uses.d [osgi.identity; osgi.identity="uses.d"; type="osgi.bundle";
version:Version="1.0.0"]
require: (osgi.wiring.bundle=uses.a)
|
provide: osgi.wiring.bundle: uses.a
uses.a [osgi.identity; osgi.identity="uses.a"; type="osgi.bundle";
version:Version="1.0.0"]
Chain 2:
uses.d [osgi.identity; osgi.identity="uses.d"; type="osgi.bundle";
version:Version="1.0.0"]
require: (osgi.wiring.bundle=uses.b)
|
provide: osgi.wiring.bundle: uses.b
uses.b [osgi.identity; osgi.identity="uses.b"; type="osgi.bundle";
version:Version="1.0.0"]
The issue is in the check for isCompatible. This method attempts to address
split packages, but only for the provider of the split package, it does not
aggregate the split sources for clients using require-bundle to gather all the
sources of the split package.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira