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

Improve memory consumption during resolution

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • 4.1.2, 4.0.10, 4.2.0.M1
    • 4.2.0.M1
    • karaf
    • 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

            gnodet Guillaume Nodet
            nite Robert Varga
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: