X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsamples%2Fclustering-test-app%2Fprovider%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fclustering%2Fit%2Fprovider%2Fimpl%2FIdIntsDOMDataTreeLIstener.java;h=080a23a3349942d735f35966d396dd8b6bf070e5;hb=606c917c93f5ae76f3d1c3e8c5418511232ee074;hp=f5b55fd0775eaf3f3442fcc98de9c06d8b467ba1;hpb=2ac32ea2c4f57993a1dc49ef8ce380cb03acc822;p=controller.git diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsDOMDataTreeLIstener.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsDOMDataTreeLIstener.java index f5b55fd077..080a23a334 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsDOMDataTreeLIstener.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsDOMDataTreeLIstener.java @@ -8,104 +8,24 @@ package org.opendaylight.controller.clustering.it.provider.impl; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.SettableFuture; import java.util.Collection; import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicLong; import javax.annotation.Nonnull; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.api.DOMDataTreeListener; import org.opendaylight.mdsal.dom.api.DOMDataTreeListeningException; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public class IdIntsDOMDataTreeLIstener implements DOMDataTreeListener { - - private static final Logger LOG = LoggerFactory.getLogger(IdIntsDOMDataTreeLIstener.class); - private static final long SECOND_AS_NANO = 1000000000; - - private NormalizedNode localCopy = null; - private AtomicLong lastNotifTimestamp = new AtomicLong(0); - private ScheduledFuture scheduledFuture; - private ScheduledExecutorService executorService; - - @Override +public class IdIntsDOMDataTreeLIstener extends AbstractDataListener implements DOMDataTreeListener { + @Override public void onDataTreeChanged(@Nonnull final Collection changes, @Nonnull final Map> subtrees) { - - // There should only be one candidate reported - Preconditions.checkState(changes.size() == 1); - - lastNotifTimestamp.set(System.nanoTime()); - - // do not log the change into debug, only use trace since it will lead to OOM on default heap settings - LOG.debug("Received data tree changed"); - - changes.forEach(change -> { - if (change.getRootNode().getDataAfter().isPresent()) { - LOG.trace("Received change, data before: {}, data after: {}", - change.getRootNode().getDataBefore().isPresent() - ? change.getRootNode().getDataBefore().get() : "", - change.getRootNode().getDataAfter().get()); - - if (localCopy == null || checkEqual(change.getRootNode().getDataBefore().get())) { - localCopy = change.getRootNode().getDataAfter().get(); - } else { - LOG.warn("Ignoring notification."); - LOG.trace("Ignored notification content: {}", change); - } - } else { - LOG.warn("getDataAfter() is missing from notification. change: {}", change); - } - }); + onReceivedChanges(changes); } @Override - public void onDataTreeFailed(@Nonnull Collection causes) { - - } - - public boolean hasTriggered() { - return localCopy != null; + public void onDataTreeFailed(@Nonnull final Collection causes) { + onReceivedError(causes); } - - public Future tryFinishProcessing() { - executorService = Executors.newSingleThreadScheduledExecutor(); - final SettableFuture settableFuture = SettableFuture.create(); - - scheduledFuture = executorService.scheduleAtFixedRate(new CheckFinishedTask(settableFuture), 0, 1, TimeUnit.SECONDS); - return settableFuture; - } - - public boolean checkEqual(final NormalizedNode expected) { - return localCopy.equals(expected); - } - - private class CheckFinishedTask implements Runnable { - - private final SettableFuture future; - - CheckFinishedTask(final SettableFuture future) { - this.future = future; - } - - @Override - public void run() { - if (System.nanoTime() - lastNotifTimestamp.get() > (SECOND_AS_NANO * 4)) { - scheduledFuture.cancel(false); - future.set(null); - - executorService.shutdown(); - } - } - } - }