felix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pde...@apache.org
Subject svn commit: r1679621 [2/3] - in /felix/sandbox/pderop/bndtools-FELIX-4866: ./ .recommenders/ .recommenders/caches/ .recommenders/index/ .recommenders/index/http___download_eclipse_org_recommenders_models_luna_/ .recommenders/repository/ .recommenders/r...
Date Fri, 15 May 2015 18:46:28 GMT
Added: felix/sandbox/pderop/bndtools-FELIX-4866/README
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/README?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/README (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/README Fri May 15 18:46:25 2015
@@ -0,0 +1,202 @@
+This is a loader inspired from the dependency manager benchmark tool and it seems to reproduce
+a concurrency issue in the framework. It requires Java8, latest released BndTools, and Eclipse Mars.
+
+Using Felix 5.0.0, or using Equinox 3.10.1, the tool runs and completes seamlessly.
+but using the latest Felix fwk from trunk that includes the FELIX-4866 patch, then the tool fails.
+and I have now four failing DM integration tests.
+
+What is doing this load test ?
+============================
+
+This loader creates a graph of service components that have dependencies between each other. For
+sake of simplicity, a simple scenario domain is used (actually, this example domain has been
+inspired from the "Java8 Lambdas" book, O'reilly) and we have the following kind of services: 
+
+- Artist service: An Artist is an individual or group of musicians, who creates some "Albums". One
+  Artist service depends on several Album services.
+
+- Album service: is a single release of musics, comprising several music Tracks. One Album depends
+  on several Track services. 
+
+- Track service: A piece of music.
+
+The scenario consists in starting/stopping 10000 times a bundle that will synchronously create the
+graph of components (7 by default). A scenario constroller monitors the number of created components 
+(Artists, Albums/Tracks) and when the number of expected components are created, then the controller
+stops the bundle. Finally, when the controller detects that all components are unregistered, the
+elapsed time is recorded in a list of time durations (in nano seconds).
+
+The same is done for another bundle that does exactly the same, but using concurrent component
+registration. But when registering components concurrently, this does not
+work with the latest framework. I have re-read the code of this tool and I'm not able to find a bug
+from my side, so I believe there is a regression somewhere in the framework.
+Also, 4 DependencyManager integration tests are now failing.
+
+At the end of the test (that is, when the bundle that creates the components has been
+started/stopped 100000 times), then the list of time durations is sorted: the first element of the
+list corresponds to the shortest elapsed time used by the bundle to create and destroy the
+components; and the last element in the list corresponds to the slowest elapsed time used to
+start/stop the tested bundle. The middle in the duration time list is the average. We display the
+first entry (fastest), the entry at 1/4 of the list, the middle of the list, the entry at 3/4 of the
+list, and the last entry (slowest time). We don't do an average, because usually, when running
+benchmark, some measurements don't reflect reality, especially, when there is a full GC or when the
+JVM is warming up. (we actually do the same as in Java Chronicle:
+https://github.com/peter-lawrey/Java-Chronicle).
+
+Bundle descriptions:
+===================
+
+- org.apache.felix.framework.loadtest.tracker: a test bundle that creates 7 components synchronously
+  when the bundle is started, and when it is stopped, then the components are unregistered.
+- org.apache.felix.framework.loadtest.tracker.parallel: same as before, but the components are
+  created concurrently. 
+- org.apache.felix.framework.loadtest.scenario: this bundle contains the component classes that are
+  part of the scenarion: we have an Artist service that depends on some Albums services, each Album
+  also depends on some music Track services. The components are bounded using a special "id" service
+  property. 
+- org.apache.felix.framework.loadtest.scenario.impl: the simple Artist/Albums/Track implementations.
+- org.apache.felix.framework.loadtest.controller: provides a ScenarioController service that is
+  injected in all Artist/Album/Track components. When an Artist, an Album, or a Track component is
+  started, it notifies the ScenerioController. Then when the controller detects that all components
+  are properly created, it then stops the bundle, which in turns unregisters all components.
+- org.apache.felix.framework.loadtest.controller.impl: this is the ScenarioController implementation.
+
+Pseudo API used to define service components:
+============================================
+
+Internally, basic Service Trackers are used to define dependencies between components.
+But we are using a light fluent api in order to describe component definitions, which is used to
+replace the DependencyManage API. Notice that DM is still used, but used to activate the controller
+bundle. but the Artist/Album/Track components are not defined using DM, and are defined using the
+fluent API, which is simply based on standard ServiceTracker.
+
+To create a component, a static "component" method of the
+"org.apache.felix.framework.loadtest.tracker.Component" class is used, and pass to it a java8 Supplier.
+object that will be used to instantiate the component implementation.  
+
+For example, to create an "Album" component, we are using the fluent API like this:
+
+import static org.apache.felix.framework.loadtest.tracker.Component.component;
+
+public class Activator implements BundleActivator {
+	@Override
+	public void start(BundleContext context) throws Exception {
+		Component<AlbumImpl> artist = component(context, () -> new AlbumImpl(context))
+		album.start();
+	}
+}
+
+Now, assuming that the Album component needs to be called in its start() callback when all required dependencies are available, and in its stop() callback
+when one of the required dependencies are lost, you can then define the start/stop lifecycle callbacks, like this:
+
+public class Activator implements BundleActivator {
+	@Override
+	public void start(BundleContext context) throws Exception {
+		Component<AlbumImpl> artist = component(context, () -> new AlbumImpl(context))
+		       .onStart(AlbumImpl::start)
+		       .onStop(AlbumImpl::stop);
+		artist.start();
+	}
+}
+
+Since an "Album" component depends on some musical "Track" components, you then configure the
+dependencies with the "dependsOn" method that takes as parameters the dependency type, the
+dependency filter, and a method reference to invoke on the AlbumImpl class in order to bind it to
+the injected Track component: 
+
+public class Activator implements BundleActivator {
+	@Override
+	public void start(BundleContext context) throws Exception {
+		Component<AlbumImpl> artist = component(context, () -> new AlbumImpl(context))
+		       .onStart(AlbumImpl::start)
+		       .onStop(AlbumImpl::stop)
+		       .dependsOn(Track.class, "(title=some title)", AlbumImpl::addTrack)
+		artist.start();
+	}
+}
+
+Finally, since the AlbumImpl provides the "Album" service interface, you use the "provides" method which takes are parameters
+the provided service, and a varargs list of service properties (which size must be even, like "property1", "value1", "property2", "value2", etc ...):
+
+public class Activator implements BundleActivator {
+	@Override
+	public void start(BundleContext context) throws Exception {
+		Component<AlbumImpl> artist = component(context, () -> new AlbumImpl(context))
+		       .onStart(AlbumImpl::start)
+		       .onStop(AlbumImpl::stop)
+		       .dependsOn(Track.class, "(title=track title)", AlbumImpl::addTrack)
+		       .provides(Album.class, "title", "album title")
+		artist.start();
+	}
+}
+
+Running the loader with the last released Felix framework (5.0.0):
+=================================================================
+
+under bndtools, click on the bnd.bnd file, then click on the "Run" window, then on "Run OSGi".
+
+you will then get the following output result:
+
+--------------------------------------------------------
+g! Starting benchmarks (each tested bundle will add/remove 7 components during bundle activation).
+
+	[Starting benchmarks with no processing done in components start methods]
+
+
+Benchmarking bundle: org.apache.felix.framework.loadtest.tracker ... \
+-> results in nanos: [546,822 | 613,264 | 670,311 | 846,572 | 168,057,014]
+
+
+Benchmarking bundle: org.apache.felix.framework.loadtest.tracker.parallel ... \
+-> results in nanos: [525,062 | 651,846 | 748,940 | 1,006,306 | 84,381,682]
+--------------------------------------------------------
+
+let's describe the result show above:
+
+1) The "org.apache.felix.framework.loadtest.tracker" bundle is the one that creates the components
+synchronously. It is started/stopped 10000 times, and the meaningful elapsed times are displayed:
+Here, the shortest time used to create and remove the 7 components takes around 546,822 nanos. And
+in the midle, you can see the average (670,311 nannoseconds), and in the last entry, the slowest
+time (168,057,014 nanos). 
+
+2) The "org.apache.felix.framework.loadtest.tracker.parallel" bundle is the same as the previous
+one, but creates components concurrently: 
+Here, the results are not better because by default, the size of the threadpool is 10 (see bnd.bnd)
+and I only have 4 cores my labtop).
+With the latest framework 5.1.0, this test does not complete and at a point in time, some components
+are not created timely.
+
+Running the loader with the last released Felix framework (5.1.0-SNAPSHOT):
+==========================================================================
+
+Edit the bnd.bnd file, comment the current "-runfwk" option and uncomment the other one, which uses
+the latest version (5.1.0-SNAPSHOT, which is included in the local repository): 
+
+#-runfw: org.eclipse.osgi;version='[3.10.1.v20140909-1633,3.10.1.v20140909-1633]'
+#-runfw: org.apache.felix.main;version='[5.0.0, 5.0.0]'
+-runfw: org.apache.felix.main;version=latest
+
+Then click on the "Run OSGi".
+You will normally see the following (under bndtools):
+
+----------------------------------------------------------------------------------------------------
+g! Starting benchmarks (each tested bundle will add/remove 7 components during bundle activation).
+
+	[Starting benchmarks with no processing done in components start methods]
+
+
+Benchmarking bundle: org.apache.felix.framework.loadtest.tracker ... \
+-> results in nanos: [546,681 | 614,242 | 673,661 | 1,012,047 | 43,224,831]
+
+
+Benchmarking bundle: org.apache.felix.framework.loadtest.tracker.parallel ... -
+Could not start components timely (7): started components: 5.
+----------------------------------------------------------------------------------------------------
+
+Here, the scenario controller has started the
+"org.apache.felix.framework.loadtest.tracker.parallel", but only 5 components have been created, and
+two are missing.
+
+
+
+

Added: felix/sandbox/pderop/bndtools-FELIX-4866/build.gradle
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/build.gradle?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/build.gradle (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/build.gradle Fri May 15 18:46:25 2015
@@ -0,0 +1,20 @@
+/*
+ * Master Gradle build script
+ *
+ * Depends on bndWorkspace and bndURI properties set by settings.gradle.
+ */
+
+/* Add bnd as a script dependency */
+buildscript {
+  dependencies {
+    classpath files(bndURI)
+  }
+}
+
+/* Configure the subprojects */
+subprojects {
+  def bndProject = bndWorkspace.getProject(name)
+  if (bndProject != null) {
+    plugins.apply 'biz.aQute.bnd'
+  }
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.classpath
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.classpath?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.classpath
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.gitignore?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.gitignore (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.gitignore Fri May 15 18:46:25 2015
@@ -0,0 +1,3 @@
+/bin/
+/generated/
+/cache/

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.project
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.project?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/.project
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/bin/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/bin/.gitignore?rev=1679621&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/build.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/build.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/build.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/build.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,57 @@
+########################
+## BND BUILD SETTINGS ##
+########################
+
+
+## Global defaults are loaded from the bnd library (as shown below), place your
+## specific settings here. Additional settings are inherited from ext/*.bnd and
+## they will be overridden by anything you specify in this file.
+
+## General Options
+#project.dependson:     ${p-dependson;:}
+#project.bootclasspath: ${p-bootclasspath;:}
+#project.buildpath:     ${p-buildpath;:}
+#project.sourcepath:    ${p-sourcepath;:}
+#project.allsourcepath: ${p-allsourcepath;:}
+#project.output:        ${p-output}
+#project.testpath:      ${p-testpath;:}
+
+#-verbose:              false
+#project:               ${basedir}
+#src:                   src
+#bin:                   bin
+#testsrc:               test
+#testbin:               bin_test
+#target-dir:            generated
+#target:                ${project}/${target-dir}
+#build:                 ${workspace}/cnf
+#p:                     ${basename;${project}}
+#project.name:          ${p}
+#plugin-dir:            ${build}/plugins
+
+## Java Compiler Options
+#java:                  java
+#javac:                 javac
+#javac.source:          1.5
+#javac.target:          1.5
+#javac.debug:           on
+
+## Bnd Options
+#-sources:              true
+#-sourcepath:           ${project}/src
+
+
+## Properties from ext/*.bnd can be referenced in order to extend them. For
+## example, to add one additional plugin to the list defined in
+## ext/repositories.bnd:
+# -plugin: ${ext.repositories.-plugin}, org.example.MyPlugin
+
+
+## To enable baselining, uncomment the following lines:
+# -baseline: *
+
+
+## If you use git, you might want to uncomment the following lines:
+# Git-Descriptor:       ${system-allow-fail;git describe --dirty --always}
+# Git-SHA:              ${system-allow-fail;git rev-list -1 HEAD}
+# -diffignore:          Git-Descriptor,Git-SHA
\ No newline at end of file

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/README.txt
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/README.txt?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/README.txt (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/README.txt Fri May 15 18:46:25 2015
@@ -0,0 +1,6 @@
+WARNING
+=======
+
+This directory contains JAR file dependencies that are intended ONLY FOR BUILT-TIME usage.
+None are intended to be deployed as bundles into a running OSGi Framework, and indeed they may cause
+unexpected errors if they are used at runtime.

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/biz.aQute.junit/biz.aQute.junit-latest.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/biz.aQute.launcher/biz.aQute.launcher-latest.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.foundation/ee.foundation-1.1.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.foundation/ee.foundation-1.1.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.foundation/ee.foundation-1.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.minimum/ee.minimum-1.2.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.minimum/ee.minimum-1.2.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.minimum/ee.minimum-1.2.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.minimum/ee.minimum-1.2.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.minimum/ee.minimum-1.2.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/ee.minimum/ee.minimum-1.2.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/junit.osgi/junit.osgi-3.8.2.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/junit.osgi/junit.osgi-3.8.2.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/junit.osgi/junit.osgi-3.8.2.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/junit/junit-4.11.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/junit/junit-4.11.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/junit/junit-4.11.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.foundation/org.osgi.ee.foundation-1.0.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.foundation/org.osgi.ee.foundation-1.0.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.foundation/org.osgi.ee.foundation-1.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.foundation/org.osgi.ee.foundation-1.0.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.foundation/org.osgi.ee.foundation-1.0.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.foundation/org.osgi.ee.foundation-1.0.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.3.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.3.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/org.osgi.ee.minimum/org.osgi.ee.minimum-1.1.3.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.0.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.0.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.0.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.1.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.1.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.2.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.2.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.2.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.3.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.3.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.3.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.3.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.3.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-4.3.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-5.0.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-5.0.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/buildrepo/osgi.core/osgi.core-5.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/zip

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/junit.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/junit.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/junit.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/junit.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,3 @@
+junit:\
+	junit;version=latest,\
+	hamcrest-core;version=latest

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/pluginpaths.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/pluginpaths.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/pluginpaths.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/pluginpaths.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,2 @@
+-pluginpath:\
+	${plugin-dir}/biz.aQute.repository/biz.aQute.repository.jar
\ No newline at end of file

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/repositories.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/repositories.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/repositories.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/ext/repositories.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,7 @@
+-plugin:\
+	aQute.bnd.deployer.repository.LocalIndexedRepo; name=Release;      local=${workspace}/cnf/releaserepo;pretty=true,\
+	aQute.bnd.deployer.repository.LocalIndexedRepo; name=Local;        local=${workspace}/cnf/localrepo;pretty=true,\
+	aQute.bnd.deployer.repository.FixedIndexedRepo; name=Bndtools Hub; locations=https://raw.githubusercontent.com/bndtools/bundle-hub/master/index.xml.gz,\
+	aQute.lib.deployer.FileRepo;                    name=Build;        location=${workspace}/cnf/buildrepo;latest=false
+
+-releaserepo: Release

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/gradle/biz.aQute.bnd.gradle.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/gradle/biz.aQute.bnd.gradle.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/gradle/biz.aQute.bnd.gradle.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml.sha?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml.sha (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/index.xml.sha Fri May 15 18:46:25 2015
@@ -0,0 +1 @@
+0c7699523a8159d0e5093db6f7ccec89025239b96751baaf5c1fa2f29d7c2ed0
\ No newline at end of file

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.dependencymanager.shell/org.apache.felix.dependencymanager.shell-4.0.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.0.1.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.0.1.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.dependencymanager/org.apache.felix.dependencymanager-4.0.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.main/org.apache.felix.main-5.0.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.main/org.apache.felix.main-5.0.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.main/org.apache.felix.main-5.0.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.main/org.apache.felix.main-5.1.0.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.main/org.apache.felix.main-5.1.0.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/localrepo/org.apache.felix.main/org.apache.felix.main-5.1.0.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/plugins/biz.aQute.repository/biz.aQute.repository.jar
------------------------------------------------------------------------------
    svn:mime-type = application/java-archive

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml.sha?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml.sha (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/cnf/releaserepo/index.xml.sha Fri May 15 18:46:25 2015
@@ -0,0 +1 @@
+bfa9bc10915a6852a8b4e61c41bde38dd451c54f91dba282f0729027047c99df
\ No newline at end of file

Added: felix/sandbox/pderop/bndtools-FELIX-4866/cnf/src/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/cnf/src/.gitignore?rev=1679621&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/bndtools-FELIX-4866/gradle.properties
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/gradle.properties?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/gradle.properties (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/gradle.properties Fri May 15 18:46:25 2015
@@ -0,0 +1,14 @@
+# cnf project name
+bnd_cnf=cnf
+
+# bnd_jar can also be a URL.
+bnd_jar=cnf/gradle/biz.aQute.bnd.gradle.jar
+
+# bnd_build can be set to the name of a "master" project whose dependencies will seed the set of projects to build.
+bnd_build=
+
+# Default gradle task to build
+bnd_defaultTask=build
+
+# This should be false. It only needs to be true in rare cases.
+bnd_preCompileRefresh=false

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.classpath
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.classpath?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.classpath
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.gitignore?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.gitignore (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.gitignore Fri May 15 18:46:25 2015
@@ -0,0 +1,3 @@
+/bin/
+/bin_test/
+/generated/

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.project
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.project?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.project
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.settings/org.eclipse.jdt.core.prefs?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.settings/org.eclipse.jdt.core.prefs (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/.settings/org.eclipse.jdt.core.prefs Fri May 15 18:46:25 2015
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/.gitignore?rev=1679621&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/ScenarioController.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/ScenarioController.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/ScenarioController.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/impl/Activator.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/impl/Activator.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/impl/Activator.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Album.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Album.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Album.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Artist.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Artist.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Artist.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Helper.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Helper.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Helper.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Track.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Track.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Track.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked$CheckedConsumer.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked%24CheckedConsumer.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked$CheckedConsumer.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked$CheckedFunction.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked%24CheckedFunction.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked$CheckedFunction.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked$CheckedRunnable.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked%24CheckedRunnable.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked$CheckedRunnable.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/Unchecked.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/AlbumImpl.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/AlbumImpl.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/AlbumImpl.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/ArtistImpl.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/ArtistImpl.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/ArtistImpl.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/TrackImpl.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/TrackImpl.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/scenario/impl/TrackImpl.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Activator.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Activator.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Activator.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Benchmark.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Benchmark.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Benchmark.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Component$1.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Component%241.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Component$1.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Component.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Component.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/Component.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/ParallelActivator.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/ParallelActivator.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/ParallelActivator.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/ServiceDependency.class
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/ServiceDependency.class?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin/org/apache/felix/framework/loadtest/tracker/ServiceDependency.class
------------------------------------------------------------------------------
    svn:mime-type = application/x-java-applet

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin_test/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bin_test/.gitignore?rev=1679621&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bnd.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bnd.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/bnd.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,33 @@
+-buildpath:  \
+	osgi.core;version=4.3,\
+	osgi.cmpn;version=4.3,\
+	org.apache.felix.dependencymanager;version=4.0
+-sub:  \
+	*.bnd
+-runbundles:  \
+	org.apache.felix.dependencymanager;version=latest,\
+	org.apache.felix.dependencymanager.shell;version=latest,\
+	org.apache.felix.metatype;version=1.0.10,\
+	org.apache.felix.log;version=1.0.1,\
+	org.apache.felix.gogo.command;version=0.12.0,\
+	org.apache.felix.gogo.shell;version=0.10.0,\
+	org.apache.felix.gogo.runtime;version=0.10.0,\
+	org.apache.felix.configadmin;version=1.8.0,\
+	org.apache.felix.framework.loadtest.scenario;version=latest,\
+	org.apache.felix.framework.loadtest.controller;version=latest,\
+	org.apache.felix.framework.loadtest.tracker;version=latest,\
+	org.apache.felix.framework.loadtest.tracker.parallel;version=latest
+-runproperties: org.osgi.framework.bootdelegation='sun.*,'
+-runee: JavaSE/compact1-1.8
+javac.source:          1.8
+javac.target:          1.8
+-runvm: -server -Xmx1024m -Xms1024m -Dthreads=10
+
+# Works with Equinox
+#-runfw: org.eclipse.osgi;version='[3.10.1.v20140909-1633,3.10.1.v20140909-1633]'
+
+# Works with last released framework
+#-runfw: org.apache.felix.main;version='[5.0.0, 5.0.0]'
+
+# Fails with latest Felix framework, in trunk (that includes the FELIX-4866 patch)
+-runfw: org.apache.felix.main;version=latest

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/controller.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/controller.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/controller.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/controller.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,5 @@
+Private-Package:  \
+	org.apache.felix.framework.loadtest.controller.impl
+Bundle-Activator: org.apache.felix.framework.loadtest.controller.impl.Activator
+Export-Package:  \
+	org.apache.felix.framework.loadtest.controller
\ No newline at end of file

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/.index
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/.index?rev=1679621&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/.index
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/buildfiles
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/buildfiles?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/buildfiles (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/buildfiles Fri May 15 18:46:25 2015
@@ -0,0 +1,4 @@
+/tmp/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/org.apache.felix.framework.loadtest.controller.jar
+/tmp/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/org.apache.felix.framework.loadtest.scenario.jar
+/tmp/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/org.apache.felix.framework.loadtest.tracker.jar
+/tmp/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/generated/org.apache.felix.framework.loadtest.tracker.parallel.jar

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/scenario.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/scenario.bnd?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/scenario.bnd (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/scenario.bnd Fri May 15 18:46:25 2015
@@ -0,0 +1,3 @@
+Export-Package:  \
+	org.apache.felix.framework.loadtest.scenario.impl,\
+	org.apache.felix.framework.loadtest.scenario
\ No newline at end of file

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/.gitignore
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/.gitignore?rev=1679621&view=auto
==============================================================================
    (empty)

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/ScenarioController.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/ScenarioController.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/ScenarioController.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/ScenarioController.java Fri May 15 18:46:25 2015
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.controller;
+
+import org.apache.felix.framework.loadtest.scenario.Album;
+import org.apache.felix.framework.loadtest.scenario.Artist;
+import org.apache.felix.framework.loadtest.scenario.Track;
+
+/**
+ * This service is injected in each scenario bundle. All scenario bundle components must depend on this 
+ * service, and must invoke the xxAdded() method once the component is fully initialized, and 
+ * the xxRemoved() method when the component is stopped.
+ * This benchmark expect scenario bundles to register some "Artists" components. Each "Artist" component is
+ * then expected to depend on many "Albums", and each "Album" then depends on many music "Tracks".
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public interface ScenarioController {
+    /**
+     * An Artist is added (service is started)
+     */
+    void artistAdded(Artist artist);
+
+    /**
+     * An Artist is removed (service is stopped)
+     */
+    void artistRemoved(Artist artist);
+
+    /**
+     * An Album is added (service is started)
+     */
+    void albumAdded(Album artist);
+ 
+    /**
+     * An Album is removed (service is stopped)
+     */
+    void albumRemoved(Album artist);
+ 
+    /**
+     * A Music Track is added (service is started)
+     */
+    void trackAdded(Track artist);
+  
+    /**
+     * A Music Track is removed (service is stopped)
+     */
+    void trackRemoved(Track artist);
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/Activator.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/Activator.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/Activator.java Fri May 15 18:46:25 2015
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.controller.impl;
+
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+
+/**
+ * This activator triggers the scenario controller thread, which will do some microbenchmarks for a given
+ * set of scenario bundles. The controller thread is fired only once the framework is started.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class Activator extends DependencyActivatorBase {
+    @Override
+    public void init(BundleContext context, DependencyManager m) throws Exception {
+        m.add(createComponent().setImplementation(ScenarioControllerImpl.class));
+    }
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/controller/impl/ScenarioControllerImpl.java Fri May 15 18:46:25 2015
@@ -0,0 +1,304 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.controller.impl;
+
+import static java.lang.System.out;
+import static java.lang.System.err;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+import static org.apache.felix.framework.loadtest.scenario.Artist.ALBUMS;
+import static org.apache.felix.framework.loadtest.scenario.Artist.ARTISTS;
+import static org.apache.felix.framework.loadtest.scenario.Artist.TRACKS;
+import static org.apache.felix.framework.loadtest.scenario.Helper.debug;
+
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+import java.util.stream.LongStream;
+import java.util.stream.Stream;
+
+import org.apache.felix.framework.loadtest.controller.ScenarioController;
+import org.apache.felix.framework.loadtest.scenario.Album;
+import org.apache.felix.framework.loadtest.scenario.Artist;
+import org.apache.felix.framework.loadtest.scenario.Helper;
+import org.apache.felix.framework.loadtest.scenario.Track;
+import org.apache.felix.framework.loadtest.scenario.Unchecked;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The controller which perform microbenchmarks on some scenario bundles.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class ScenarioControllerImpl implements Runnable, ScenarioController {
+    /**
+     * List of bundles to be executed by the benchmark.
+     */
+    final List<String> TESTS = Arrays.asList(
+        "org.apache.felix.framework.loadtest.tracker",
+        "org.apache.felix.framework.loadtest.tracker.parallel"
+    );
+    
+    /**
+     * Our injected bundle context, used to lookup the bundles to benchmark.
+     */
+    private volatile BundleContext m_bctx;
+    
+    /**
+     * Latches used to detect when expected services are registered, or unregistered.
+     */
+    private volatile CountDownLatch m_startLatch, m_stopLatch;
+
+    /**
+     * When a components is called in its start or stop method, we'll perform some processing if the following
+     * attribute is true.
+     */
+    private volatile boolean m_doProcessingInStartStop;
+        
+    /**
+     * Number of expected registering components
+     */
+    private final static int EXPECTED_COMPONENTS = ARTISTS + (ARTISTS * (ALBUMS + (ALBUMS * TRACKS)));
+    
+    /**
+     * Our component is starting: we'll first stop all bundles participating in the benchmark, then we'll 
+     * fire a thread, and from that thread we'll iterate on all bundles in order to do a benchmark on each.
+     * (we'll call start/stop N times, and will display the elapsed times for each bundle).
+     */
+    void start() {
+        new Thread(this).start();
+    }
+    
+    void stop() {
+    }
+    
+    @Override
+    public void run() {
+        // wait a bit in order to let the gogo banner be displayed before we start the bench.
+        Unchecked.run(() -> Thread.sleep(500)); 
+        
+        out.println("Starting benchmarks (each tested bundle will add/remove " + (ARTISTS + (ARTISTS * (ALBUMS + (ALBUMS * TRACKS)))) 
+           + " components during bundle activation).");
+       
+        // Stop all tested bundles.
+        forEachScenarioBundle(TESTS, Unchecked.consumer(bundle -> {
+            debug(() -> "Stopping bundle " + bundle.getSymbolicName());
+            bundle.stop();
+        }));
+        
+        // Register our controller service
+        m_bctx.registerService(ScenarioController.class.getName(), this, null);
+        
+        // Start/stop several times the tested bundles. (no processing done in components start methods).
+        m_doProcessingInStartStop = false;
+        out.println("\n\t[Starting benchmarks with no processing done in components start methods]");
+        startStopScenarioBundles(TESTS, 10000);
+       
+        // Start/stop several times the tested bundles (processing is done in components start methods).
+//        m_doProcessingInStartStop = true;
+//        out.println("\n\t[Starting benchmarks with processing done in components start methods]");
+//        startStopScenarioBundles(TESTS, 5);
+    }
+
+    @Override
+    public void artistAdded(Artist artist) {
+        int size = artist.getAlbums().size();
+        if (size != Artist.ALBUMS) {
+            throw new IllegalStateException("Artist has not created expected number of albums:" + size);
+        }
+        artist.play();
+        Helper.debug(() -> "Artist added : " + artist);
+        componentAdded();
+    }
+    
+    @Override
+    public void artistRemoved(Artist artist) {
+        Helper.debug(() -> "Artist removed : " + artist);
+        componentRemoved();
+    }
+    
+    @Override
+    public void albumAdded(Album album) {
+        int size = album.getMusicTracks().size();
+        if (size != Artist.TRACKS) {
+            throw new IllegalStateException("Album does not contain expected number of music tracks:" + size);
+        }
+        Helper.debug(() -> "Album added : " + album);
+        componentAdded();
+    }
+    
+    @Override
+    public void albumRemoved(Album album) {
+        componentRemoved();
+        Helper.debug(() -> "Album removed : " + album);
+    }
+    
+    @Override
+    public void trackAdded(Track track) {
+        Helper.debug(() -> "Track added : " + track);
+        componentAdded();
+    }
+    
+    @Override
+    public void trackRemoved(Track track) {
+        Helper.debug(() -> "Track removed : " + track);
+        componentRemoved();
+    }
+            
+    // ------------------- Private methods -----------------------------------------------------
+        
+    private void startStopScenarioBundles(List<String> tests, int iterations) {
+        String anim= "|/-\\";
+
+        forEachScenarioBundle(tests, bundle -> {
+            out.println("\n");
+            String progress = "\rBenchmarking bundle: " + bundle.getSymbolicName() + " ... ";            
+            List<Long> sortedResults = LongStream.range(0, iterations)
+                .peek(i -> out.print(progress + anim.charAt((int) i % anim.length())))
+                .map(n -> durationOf(() -> startAndStop(bundle)))
+                .sorted().boxed().collect(toList());
+            out.println();
+            displaySortedResults(sortedResults);
+            Unchecked.run(() -> Thread.sleep(500));
+        });        
+    }
+
+    /**
+     * Displays meaningful values in the sorted results (first=fastest, midle=average, last entry=slowest)
+     * @param sortedResults
+     */
+    private void displaySortedResults(List<Long> sortedResults) {
+        // We don't display an average of the duration times; Instead, we sort the results,
+        // and we display the significant results (the first entry is the fastest, the middle entry is the
+        // average, the last entry is the slowest ...)
+        out.printf("-> results in nanos: [%s]%n",  
+            Stream.of(0f, 24.99f, 49.99f, 74.99f, 99.99f)
+                .mapToInt(perc -> (int) (perc * sortedResults.size() / 100))
+                .mapToObj(sortedResults::get)
+                .map(this::formatNano)
+                .collect(joining(" | ")));
+    }
+    
+    /**
+     * Displays a nanosecond value using thousands separator. 
+     * Example: 1000000 -> 1,000,000
+     */
+    private String formatNano(Long nanoseconds) {
+		DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
+		DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
+		symbols.setGroupingSeparator(',');
+		return formatter.format(nanoseconds);
+    }
+
+    private void componentAdded() {
+        doProcessing();
+        m_startLatch.countDown();
+    }
+
+    private void componentRemoved() {
+        //doProcessing();
+        m_stopLatch.countDown();
+    }
+
+    private void doProcessing() {
+        if (m_doProcessingInStartStop) {
+            long duration = TimeUnit.MILLISECONDS.toNanos(ThreadLocalRandom.current().nextLong(5));
+            long t1 = System.nanoTime();
+            while (System.nanoTime() - t1 < duration)
+                ;
+        }
+    }
+    
+    /**
+     * Maps a function to all bundles participating in the benchmark.
+     */
+    private void forEachScenarioBundle(List<String> tests, Consumer<Bundle> consumer) {
+        tests.stream().forEach(test -> {
+            Optional<Bundle> bundle = Stream.of(m_bctx.getBundles()).filter(b -> b.getSymbolicName().equals(test)).findFirst();
+            bundle.ifPresent(b -> {
+                consumer.accept(b);
+            });
+        });   
+    }
+    
+   /**
+     * This function does this:
+     * 
+     * 1) start a bundle, and register the ScenarioController service (this will trigger all components activation)
+     * 2) wait for all expected components to be fully started
+     * 3) stop the bundle and wait for all expected components to be fully stopped
+     * 
+     * @param b the benchmarked scenario bundle
+     */    
+    void startAndStop(Bundle b) {
+        try {
+            m_startLatch = new CountDownLatch(EXPECTED_COMPONENTS);
+            m_stopLatch = new CountDownLatch(EXPECTED_COMPONENTS);
+
+            debug(() -> "starting bundle " + b.getSymbolicName());
+            b.start();
+                                    
+            if (! m_startLatch.await(5, TimeUnit.SECONDS)) {
+                err.println("\nCould not start components timely (" + EXPECTED_COMPONENTS + ")"
+                    + ": started components: " + (EXPECTED_COMPONENTS - m_startLatch.getCount()) + ".");
+                Unchecked.run(() -> Thread.sleep(Integer.MAX_VALUE));
+            }                        
+            
+            // Make sure all worker thread are idle before stopping bundle.
+            Helper.getThreadPool().awaitQuiescence(5, TimeUnit.SECONDS);
+
+            debug(() -> "stopping bundle " + b.getSymbolicName());
+            b.stop();
+            
+            // Wait for all component deactivations
+            if (! m_stopLatch.await(5, TimeUnit.SECONDS)) {
+                err.println("\nCould not stop components timely (" + EXPECTED_COMPONENTS + ")"
+                    + ": stopped components: " + (EXPECTED_COMPONENTS - m_stopLatch.getCount()) + ".");
+                Unchecked.run(() -> Thread.sleep(Integer.MAX_VALUE));
+            } 
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
+    
+    /**
+     * Returns the time consumed by the given runnable, ²ch is executed by this method.
+     */
+    private long durationOf(Runnable scenario) {
+        long start = System.nanoTime();
+        long end = 0;
+        try {
+            scenario.run();
+            end = System.nanoTime();
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+        return (end - start);
+    }
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Album.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Album.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Album.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Album.java Fri May 15 18:46:25 2015
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.scenario;
+
+import java.util.List;
+
+/**
+ * A single release of musics, comprising some music tracks.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public interface Album {
+    /**
+     * Returns the music tracks this Album is comprising.
+     */
+    List<Track> getMusicTracks();
+
+    /**
+     * Play all tracks from all albums.
+     */
+    void play();
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Artist.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Artist.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Artist.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Artist.java Fri May 15 18:46:25 2015
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.scenario;
+
+import java.util.List;
+
+/**
+ * An individual who creates musical Albums
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public interface Artist {
+    /**
+     * When a scenario bundles starts, it creates the following number of Artists (service)
+     * (you have to regenerate the SCR xml descriptor if you modify this, see README)
+     */
+    public final int ARTISTS = 1;
+    
+    /**
+     * Each Artist creates the following number of musical Albums.
+     * (you have to regenerate the SCR xml descriptor if you modify this, see README)
+     */
+    public final int ALBUMS = 2;
+    
+    /**
+     * Each Album contains the following number of musical Tracks.
+     * (you have to regenerate the SCR xml descriptor if you modify this, see README)
+     */
+    public final int TRACKS = 2;
+    
+    /**
+     * Returns the Albums that this Artist has created
+     */
+    List<Album> getAlbums();
+    
+    /**
+     * Play all tracks from all albums (this test method invocation time between services).
+     */
+    void play();
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Helper.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Helper.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Helper.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Helper.java Fri May 15 18:46:25 2015
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.scenario;
+
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Supplier;
+
+/**
+ * Helper class containing misc functions, and constants.
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class Helper {
+    /**
+     * Activate this flag for debugging.
+     */
+    private final static boolean DEBUG = true;
+
+    /** 
+     * Generator used to create unique identifiers.
+     */
+    private final static AtomicLong m_idGenerator = new AtomicLong();
+
+    /**
+     * Threadpool which can be optionally used by parallel scenarios.
+     */
+    private final static int CORES = Runtime.getRuntime().availableProcessors();
+    private final static ForkJoinPool TPOOL = new ForkJoinPool(Integer.getInteger("threads", CORES));
+    
+    /**
+     * Get the threadpool, possibly needed by some scenario supporting parallel mode
+     */
+    public static ForkJoinPool getThreadPool() {
+        return TPOOL;
+    }
+    
+    /**
+     * Display some debug messages.
+     */
+    public static void debug(Supplier<String> message) {
+        if (DEBUG) {
+            System.out.println(message.get());
+        }
+    }
+
+    /**
+     * Generates a unique id.
+     */
+    public static String generateId() {
+        return String.valueOf(m_idGenerator.incrementAndGet());
+    }
+}

Added: felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Track.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Track.java?rev=1679621&view=auto
==============================================================================
--- felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Track.java (added)
+++ felix/sandbox/pderop/bndtools-FELIX-4866/org.apache.felix.framework.loadtest/src/org/apache/felix/framework/loadtest/scenario/Track.java Fri May 15 18:46:25 2015
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.framework.loadtest.scenario;
+
+/**
+ * A piece of music
+ * 
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public interface Track {
+    /**
+     * Play this single piece of music.
+     */
+    void play();
+}



Mime
View raw message