You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "John Ross (JIRA)" <ji...@apache.org> on 2015/09/02 17:21:45 UTC

[jira] [Updated] (ARIES-1392) Provide a more efficient implementation of a system repository.

     [ https://issues.apache.org/jira/browse/ARIES-1392?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

John Ross updated ARIES-1392:
-----------------------------
    Labels: performance  (was: )

> Provide a more efficient implementation of a system repository.
> ---------------------------------------------------------------
>
>                 Key: ARIES-1392
>                 URL: https://issues.apache.org/jira/browse/ARIES-1392
>             Project: Aries
>          Issue Type: Improvement
>          Components: Subsystem
>    Affects Versions: subsystem-2.0.2
>            Reporter: John Ross
>            Assignee: John Ross
>              Labels: performance
>
> 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 (http://felix.apache.org/) project.
> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java?view=log
> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/capabilityset/CapabilitySet.java?view=log
> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java?view=log
> http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/StringComparator.java?view=log
> 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.
> Baseline
> 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
> 25859.2
> 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
> 11726.8
> A 54.7% improvement.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)