[
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)