X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=opendaylight%2Fconfig%2Fconfig-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fmanager%2Fimpl%2Fosgi%2FExtensibleBundleTracker.java;h=132005ac7c4a426f1e96c24399e9c4ac0157fdd2;hb=2b78ca93f44c372fd72927db6cbd65f5d8387b49;hp=eb3c502cfb9f4765349d0a0e996b3d82d9bca9b9;hpb=ed6019236d78a69577888f60064c3714eaa80f6a;p=controller.git
diff --git a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ExtensibleBundleTracker.java b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ExtensibleBundleTracker.java
index eb3c502cfb..132005ac7c 100644
--- a/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ExtensibleBundleTracker.java
+++ b/opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/ExtensibleBundleTracker.java
@@ -8,7 +8,6 @@
package org.opendaylight.controller.config.manager.impl.osgi;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -22,51 +21,51 @@ import org.osgi.util.tracker.BundleTrackerCustomizer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
/**
- *
* Extensible bundle tracker. Takes several BundleTrackerCustomizers and
* propagates bundle events to all of them.
*
- * Primary customizer may return tracking object,
- * which will be passed to it during invocation of
- * {@link BundleTrackerCustomizer#removedBundle(Bundle, BundleEvent, Future)}
- *
- *
- * This extender modifies behaviour to not leak platform thread
- * in {@link BundleTrackerCustomizer#addingBundle(Bundle, BundleEvent)}
- * but deliver this event from its own single threaded executor.
+ *
+ * Primary customizer may return tracking object, which will be passed to it
+ * during invocation of
+ * {@link BundleTrackerCustomizer#removedBundle(Bundle, BundleEvent, Object)}
*
- * If bundle is removed before event for adding bundle was executed,
- * that event is cancelled. If addingBundle event is currently in progress
- * or was already executed, platform thread is block untill addingBundle
- * finishes so bundle could be removed correctly in platform thread.
+ *
+ * This extender modifies behavior to not leak platform thread in
+ * {@link BundleTrackerCustomizer#addingBundle(Bundle, BundleEvent)} but deliver
+ * this event from its own single threaded executor.
*
+ *
+ * If bundle is removed before event for adding bundle was executed, that event
+ * is cancelled. If addingBundle event is currently in progress or was already
+ * executed, platform thread is block until addingBundle finishes so bundle
+ * could be removed correctly in platform thread.
*
- * Method {@link BundleTrackerCustomizer#removedBundle(Bundle, BundleEvent, Object)}
- * is never invoked on registered trackers.
+ *
+ * Method
+ * {@link BundleTrackerCustomizer#removedBundle(Bundle, BundleEvent, Object)} is
+ * never invoked on registered trackers.
*
- * @param
+ * @param value
*/
public final class ExtensibleBundleTracker extends BundleTracker> {
-
private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder()
- .setNameFormat("config-bundle-tracker-%d")
- .build();
+ .setNameFormat("config-bundle-tracker-%d").build();
private final ExecutorService eventExecutor;
private final BundleTrackerCustomizer primaryTracker;
private final BundleTrackerCustomizer>[] additionalTrackers;
private static final Logger LOG = LoggerFactory.getLogger(ExtensibleBundleTracker.class);
- public ExtensibleBundleTracker(final BundleContext context, final BundleTrackerCustomizer primaryBundleTrackerCustomizer,
- final BundleTrackerCustomizer>... additionalBundleTrackerCustomizers) {
+ public ExtensibleBundleTracker(final BundleContext context,
+ final BundleTrackerCustomizer primaryBundleTrackerCustomizer,
+ final BundleTrackerCustomizer>... additionalBundleTrackerCustomizers) {
this(context, Bundle.ACTIVE, primaryBundleTrackerCustomizer, additionalBundleTrackerCustomizers);
}
public ExtensibleBundleTracker(final BundleContext context, final int bundleState,
- final BundleTrackerCustomizer primaryBundleTrackerCustomizer,
- final BundleTrackerCustomizer>... additionalBundleTrackerCustomizers) {
+ final BundleTrackerCustomizer primaryBundleTrackerCustomizer,
+ final BundleTrackerCustomizer>... additionalBundleTrackerCustomizers) {
super(context, bundleState, null);
this.primaryTracker = primaryBundleTrackerCustomizer;
this.additionalTrackers = additionalBundleTrackerCustomizers;
@@ -76,56 +75,36 @@ public final class ExtensibleBundleTracker extends BundleTracker> {
@Override
public Future addingBundle(final Bundle bundle, final BundleEvent event) {
- LOG.trace("Submiting AddingBundle for bundle {} and event {} to be processed asynchronously",bundle,event);
- Future future = eventExecutor.submit(new Callable() {
- @Override
- public T call() throws Exception {
- try {
- T primaryTrackerRetVal = primaryTracker.addingBundle(bundle, event);
+ LOG.trace("Submiting AddingBundle for bundle {} and event {} to be processed asynchronously", bundle, event);
+ return eventExecutor.submit(() -> {
+ T primaryTrackerRetVal = primaryTracker.addingBundle(bundle, event);
- forEachAdditionalBundle(new BundleStrategy() {
- @Override
- public void execute(final BundleTrackerCustomizer> tracker) {
- tracker.addingBundle(bundle, event);
- }
- });
- LOG.trace("AddingBundle for {} and event {} finished successfully",bundle,event);
- return primaryTrackerRetVal;
- } catch (Exception e) {
- LOG.error("Failed to add bundle ",e);
- throw e;
- }
- }
+ forEachAdditionalBundle(tracker -> tracker.addingBundle(bundle, event));
+ LOG.trace("AddingBundle for {} and event {} finished successfully", bundle, event);
+ return primaryTrackerRetVal;
});
- return future;
}
@Override
public void modifiedBundle(final Bundle bundle, final BundleEvent event, final Future object) {
// Intentionally NOOP
-
}
@Override
public void removedBundle(final Bundle bundle, final BundleEvent event, final Future object) {
- if(!object.isDone() && object.cancel(false)) {
+ if (!object.isDone() && object.cancel(false)) {
// We canceled adding event before it was processed
// so it is safe to return
- LOG.trace("Adding Bundle event for {} was cancelled. No additional work required.",bundle);
+ LOG.trace("Adding Bundle event for {} was cancelled. No additional work required.", bundle);
return;
}
try {
- LOG.trace("Invoking removedBundle event for {}",bundle);
+ LOG.trace("Invoking removedBundle event for {}", bundle);
primaryTracker.removedBundle(bundle, event, object.get());
- forEachAdditionalBundle(new BundleStrategy() {
- @Override
- public void execute(final BundleTrackerCustomizer> tracker) {
- tracker.removedBundle(bundle, event, null);
- }
- });
- LOG.trace("Removed bundle event for {} finished successfully.",bundle);
- } catch (InterruptedException | ExecutionException e) {
- LOG.error("Addition of bundle failed, ", e);
+ forEachAdditionalBundle(tracker -> tracker.removedBundle(bundle, event, null));
+ LOG.trace("Removed bundle event for {} finished successfully.", bundle);
+ } catch (final ExecutionException | InterruptedException e) {
+ LOG.error("Failed to remove bundle {}", bundle, e);
}
}
@@ -135,8 +114,7 @@ public final class ExtensibleBundleTracker extends BundleTracker> {
}
}
- private static interface BundleStrategy {
+ private interface BundleStrategy {
void execute(BundleTrackerCustomizer> tracker);
}
-
}