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

John Ross updated ARIES-1392:
-----------------------------
    Attachment: ManyFeaturesWithSharedBundlesTest.java

> 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
>         Attachments: ManyFeaturesWithSharedBundlesTest.java
>
>
> 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)

Reply via email to