Description
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.