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

Guillaume Nodet commented on KARAF-5395:
----------------------------------------

I do understand the problem, but again, I don't really see any way to fix it.  
We need to have two different Resource instances if the same bundle is 
referenced in 2 different features.  Keep in mind that even a single feature 
can be installed multiple times.
For example, look at the result of the following commands:
{code}
feature:install --region root/spring1 spring
feature:install --region root/spring2 spring
{code}
It will install the spring feature twice in two different regions that can't 
see each other.

The PR you raised has been committed to master, with my above patch, so 
hopefully this will lower the memory requirements a bit.  I'd strongly advise 
to find a way to reuse your features instead of inlining all the bundles for 
each feature.  It should be possible, even if the features are auto-generated.

> ResourceImpl/RequirementImpl/CapabilityImpl do not correctly implement their 
> OSGi interface contracts
> -----------------------------------------------------------------------------------------------------
>
>                 Key: KARAF-5395
>                 URL: https://issues.apache.org/jira/browse/KARAF-5395
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-feature
>    Affects Versions: 4.2.0, 4.1.2, 4.0.10
>            Reporter: Robert Varga
>            Assignee: Guillaume Nodet
>            Priority: Critical
>
> This is a follow-up of downstream issue tracked at 
> https://bugs.opendaylight.org/show_bug.cgi?id=9218.
> OpenDaylight uses auto-generated features, which may end up packaging a 
> bundle multiple times in separate features -- which can be regarded as a bug, 
> but it certainly is counter-intuitive.
> Using a simple test case of wanting to install all features at the same time 
> triggers huge memory usage spike in Felix Resolver.
> Since ResourceImpl does not explictly override hashCode()/equals() according 
> to org.osgi.resource.Resource interface contract, every resource declaration 
> in a feature is treated as unique -- disregarding the fact that multiple 
> bundle declarations are actually pointing to the same bundle.
> This cascades to both RequirementImpl and CapabilityImpl, hence each such 
> duplicate bundle is added to the set of Requirements to be resolved and its 
> capabilities are added to potential candidates -- leading to Felix Resolver 
> having a large problem space (what to resolve) and also having a large 
> solution space (how to resolve) -- leading to polynomial explosion in CPU and 
> memory requirements.
> The amount of memory consumed by OpenDaylight Nitrogen RC3 has been observed 
> at 1.2GB, e.g. with a heap smaller than that, the container runs into OOM 
> during feature:install before actual installation starts.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to