[ https://issues.apache.org/jira/browse/FELIX-4182?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thomas Watson closed FELIX-4182. -------------------------------- Thanks! > 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 > Affects Versions: resolver-1.0.0 > Environment: All > Reporter: Thomas Watson > Fix For: resolver-1.2.0 > > Attachments: org.apache.felix.resolver.patch > > > 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 was sent by Atlassian JIRA (v6.2#6252)