X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fcommon%2Factor%2FQuarantinedMonitorActor.java;fp=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fcommon%2Factor%2FQuarantinedMonitorActor.java;h=ff8bfc8ff62575e9e5af8271324a96501a15c90d;hb=0df6660a561209abca5f54bc265d5b1e52ad91d5;hp=52df6ab7b388314879e72160890a624fc0104529;hpb=c032937639e5bc223deb8ec60fab9315c16edd16;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/QuarantinedMonitorActor.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/QuarantinedMonitorActor.java index 52df6ab7b3..ff8bfc8ff6 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/QuarantinedMonitorActor.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/QuarantinedMonitorActor.java @@ -8,10 +8,15 @@ package org.opendaylight.controller.cluster.common.actor; +import akka.actor.Address; import akka.actor.Props; import akka.actor.UntypedAbstractActor; import akka.japi.Effect; +import akka.remote.AssociationErrorEvent; +import akka.remote.RemotingLifecycleEvent; import akka.remote.ThisActorSystemQuarantinedEvent; +import java.util.HashSet; +import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,20 +29,23 @@ import org.slf4j.LoggerFactory; * */ public class QuarantinedMonitorActor extends UntypedAbstractActor { + public static final String ADDRESS = "quarantined-monitor"; private static final Logger LOG = LoggerFactory.getLogger(QuarantinedMonitorActor.class); - - public static final String ADDRESS = "quarantined-monitor"; + private static final Integer MESSAGE_THRESHOLD = 10; private final Effect callback; private boolean quarantined; + private Set
addressSet = new HashSet<>(); + private int count = 0; + protected QuarantinedMonitorActor(final Effect callback) { this.callback = callback; LOG.debug("Created QuarantinedMonitorActor"); - getContext().system().eventStream().subscribe(getSelf(), ThisActorSystemQuarantinedEvent.class); + getContext().system().eventStream().subscribe(getSelf(), RemotingLifecycleEvent.class); } @Override @@ -62,6 +70,28 @@ public class QuarantinedMonitorActor extends UntypedAbstractActor { // execute the callback callback.apply(); + } else if (message instanceof AssociationErrorEvent) { + String errorMessage = message.toString(); + LOG.trace("errorMessage:{}", errorMessage); + if (errorMessage.contains("The remote system has a UID that has been quarantined")) { + Address address = ((AssociationErrorEvent) message).getRemoteAddress(); + addressSet.add(address); + count++; + LOG.trace("address:{} addressSet: {} count:{}", address, addressSet, count); + if (count >= MESSAGE_THRESHOLD && addressSet.size() > 1) { + count = 0; + addressSet.clear(); + final AssociationErrorEvent event = (AssociationErrorEvent) message; + LOG.warn("Got quarantined via AssociationEvent by {}", event.remoteAddress()); + quarantined = true; + + // execute the callback + callback.apply(); + } + } else if (errorMessage.contains("The remote system explicitly disassociated")) { + count = 0; + addressSet.clear(); + } } }