aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Ross (JIRA)" <>
Subject [jira] [Created] (ARIES-1392) Provide a more efficient implementation of a system repository.
Date Wed, 02 Sep 2015 15:20:46 GMT
John Ross created ARIES-1392:

             Summary: Provide a more efficient implementation of a system repository.
                 Key: ARIES-1392
             Project: Aries
          Issue Type: Improvement
          Components: Subsystem
    Affects Versions: subsystem-2.0.2
            Reporter: John Ross
            Assignee: John Ross

While running the same test case developed as part of ARIES-1357, profiling continually showed
a bottleneck surrounding the system repository. A more efficient implementation has been provided
using code copied over from the Apache Felix ( project.

These classes were copied to the org.apache.aries.subsystem.core.capabilityset package with
some modifications. A new repository implementation called CapabilitySetRepository was created
using these classes from the Felix project. This repository will index the standard namespaces
along with their associated namespace attributes. It will also create additional capability
sets as necessary when encountering custom namespaces.

The system repository now delegates to CapabilitySetRepository. In addition, the system repository
now tracks both bundles and subsystem services. Capabilities are added to the repository as
they appear and removed when they go away. Bundle revisions are wrapped with BundleRevisionResource
in order to account for service capabilities.

Other changes resulting from this optimization are listed below. They were necessary and appropriate
because either (a) BundleRevisionResource became part of the normal flow when delivered from
the system repository, or (b) computing service capabilities for the system repository requires
searching for blueprint.xml files in the bundle which causes the framework to attempt a resolution.

(1) BundleResourceInstaller must now check for BundleRevisionResource in addition to BundleRevision
when installing a bundle.
(2) BundleRevisionResource now provides access to the wrapped BundleRevision.
(3) ResolveContext must now check for BundleRevisionResource in addition to BundleResource
when identifying the region of an already installed resource.
(4) SubsystemResolverHook will now prevent bundles not referenced by any subsystems from resolving.
A non-referenced bundle is one that is being installed as part of a subsystem installation
before it has been added as a reference.
(5) Utils now includes BundleRevisionResource, in addition to BasicSubsystem and BundleRevision,
as a shared resource, which is essentially any resource that has already been installed and
being referenced by a new subsystem.
(6) RootSubsystemTest was modified to allow for the RESOLVED state when ensuring the bundle
has not been started. Frameworks are allowed to attempt to resolve bundles as needed, and
subsystems no longer prevent resolution after entering the installed state, which is the case
in this test.

As part of future work, some of the other internal repository implementations, such as ContentRepository,
LocalRepository, and PreferredProviderRepository, should be modified to use CapabilitySetRepository
as well.

The measurements used the same test scenario being developed as part of ARIES-1357. The time
it took to install 50 features was measured. Each feature consists of 10 bundles plus one
application. All features share the same 10 bundles. Each bundle exports 5 unique packages.
Each application consists of 10 unique bundles. The bundles import packages offered by the
containing feature.


Average time across 1 trials: 25843.0 ms
Average time across 1 trials: 25824.0 ms
Average time across 1 trials: 25767.0 ms
Average time across 1 trials: 26043.0 ms
Average time across 1 trials: 25819.0 ms


New System Repository

Average time across 1 trials: 12260.0 ms
Average time across 1 trials: 11658.0 ms
Average time across 1 trials: 11602.0 ms
Average time across 1 trials: 11485.0 ms
Average time across 1 trials: 11629.0 ms


A 54.7% improvement.

This message was sent by Atlassian JIRA

View raw message