[ https://issues.apache.org/jira/browse/KARAF-5395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16185345#comment-16185345 ]
Guillaume Nodet commented on KARAF-5395: ---------------------------------------- You could try the following patch to minimize some of the problems raised in the odl issue. {code} diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java index c5240096af..738304ec38 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java @@ -357,7 +357,7 @@ public final class ResourceBuilder { String multiple = clause.dirs.get("multiple"); String avail = clause.dirs.get("availability"); String filter = (String) clause.attrs.get("filter"); - Map<String, String> dirs = new LinkedHashMap<>(); + Map<String, String> dirs = new LinkedHashMap<>(2); dirs.put(ServiceNamespace.REQUIREMENT_EFFECTIVE_DIRECTIVE, ServiceNamespace.EFFECTIVE_ACTIVE); if ("optional".equals(avail)) { dirs.put(ServiceNamespace.REQUIREMENT_RESOLUTION_DIRECTIVE, ServiceNamespace.RESOLUTION_OPTIONAL); @@ -1196,8 +1196,8 @@ public final class ResourceBuilder { static class ParsedHeaderClause { public final List<String> paths = new ArrayList<>(); - public final Map<String, String> dirs = new LinkedHashMap<>(); - public final Map<String, Object> attrs = new LinkedHashMap<>(); - public final Map<String, String> types = new LinkedHashMap<>(); + public final Map<String, String> dirs = new LinkedHashMap<>(1); + public final Map<String, Object> attrs = new LinkedHashMap<>(1); + public final Map<String, String> types = new LinkedHashMap<>(1); } } {code} > 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)