Uploaded image for project: 'Karaf'
  1. Karaf
  2. KARAF-5395

Improve memory consumption during resolution

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 4.1.2, 4.0.10, 4.2.0.M1
    • Fix Version/s: 4.2.0.M1
    • Component/s: karaf
    • Labels:
      None

      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.

        Attachments

          Activity

            People

            • Assignee:
              gnt Guillaume Nodet
              Reporter:
              nite Robert Varga
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: