felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas Watson (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FELIX-3522) Regression related to uses clause with multiple package providers
Date Wed, 06 Jun 2012 13:11:23 GMT

    [ https://issues.apache.org/jira/browse/FELIX-3522?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13290132#comment-13290132
] 

Thomas Watson commented on FELIX-3522:
--------------------------------------

I have tried to reproduce the ResolutionException using the bundle meta-data outlined in the
testcase with my own ResolverContext implementation and I don't see how to reproduce it. 
I think Richard's comment about ResolverContext returning package capabilities which have
been substituted with a package requirement wire is key.  My ResolveContext neglected to filter
out substituted package capabilities, but in my case I always sorted the "api" bundle's capability
first since it was the first bundle installed (with the lowest bundle id) and the javax.servlet
package is exported at the same version from the two bundles involved in the testcase.

But even when I forced the sort order to reverse the capabilities (so the substituted one
came first) I could not reproduce the ResolutionException you mention in this issue report.
 Instead I ran into an interesting issue in the resolver where it does not detect a class
space consistency correctly and allows a wire to be formed to the substituted export.  This
is because the resolver implementation looks for the "root" sources for a package capability,
but in this case it finds none, because the export should have been substituted.  The end
result is that we have an empty set of sources X which is compared to another set of one source
Y and the check for consistency just sees if (X.isSubset(Y) || Y.isSubset(X))  and obviously
an empty set is a subset of all other sets so the check passes.  This is not necessarily a
resolver bug since the resolver was given invalid input from ResolveContext.findProviders.
 But we should probably check the spec to see if it makes it clear that the resolve context
must filter substituted package exports in ResolveContext.findProviders.  It certainly slipped
my mind when I implemented my ResolveContext.

None of this really explains why Thomas D. is seeing this issue.  Thomas would you have a
chance to debug this and help shed some light on the issue?
                
> Regression related to uses clause with multiple package providers
> -----------------------------------------------------------------
>
>                 Key: FELIX-3522
>                 URL: https://issues.apache.org/jira/browse/FELIX-3522
>             Project: Felix
>          Issue Type: Bug
>          Components: Resolver
>            Reporter: Thomas Diesler
>         Attachments: test.log
>
>
> For this test
> https://github.com/tdiesler/jbosgi-resolver/blob/3.0/felix/src/test/java/org/jboss/test/osgi/resolver/UsesDirectiveResolverTest.java
> I get
> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.116 sec <<<
FAILURE!
> testMultipleProviders(org.jboss.test.osgi.resolver.UsesDirectiveResolverTest)  Time elapsed:
0.096 sec  <<< ERROR!
> org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve
resource war.extender.jar [AbstractResource[war.extender.jar:0.0.0]] because it is exposed
to package 'javax.servlet' from resources javax.servlet.api [AbstractResource[javax.servlet.api:0.0.0]]
and http.service.provider [AbstractResource[http.service.provider:0.0.0]] via two dependency
chains.
> Chain 1:
>   war.extender.jar [AbstractResource[war.extender.jar:0.0.0]]
>     import: null
>      |
>     export: osgi.wiring.package=javax.servlet
>   javax.servlet.api [AbstractResource[javax.servlet.api:0.0.0]]
> Chain 2:
>   war.extender.jar [AbstractResource[war.extender.jar:0.0.0]]
>     import: null
>      |
>     export: osgi.wiring.package=org.ops4j.pax.web.service; uses:=javax.servlet
>     export: osgi.wiring.package=javax.servlet
>   http.service.provider [AbstractResource[http.service.provider:0.0.0]]
> 	at org.apache.felix.resolver.ResolverImpl.checkPackageSpaceConsistency(ResolverImpl.java:1134)
> 	at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:197)
> 	at org.jboss.osgi.resolver.felix.StatelessResolver.resolve(StatelessResolver.java:57)
> 	at org.jboss.test.osgi.resolver.UsesDirectiveResolverTest.testMultipleProviders(UsesDirectiveResolverTest.java:158)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

       

Mime
View raw message