X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fcommon%2Factor%2FQuarantinedMonitorActor.java;h=c5c19d8d37ebf81300e7021d84c1784064d12116;hb=HEAD;hp=ff8bfc8ff62575e9e5af8271324a96501a15c90d;hpb=0df6660a561209abca5f54bc265d5b1e52ad91d5;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 ff8bfc8ff6..c5c19d8d37 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 @@ -11,10 +11,13 @@ package org.opendaylight.controller.cluster.common.actor; import akka.actor.Address; import akka.actor.Props; import akka.actor.UntypedAbstractActor; +import akka.cluster.Cluster; +import akka.cluster.ClusterEvent; import akka.japi.Effect; import akka.remote.AssociationErrorEvent; import akka.remote.RemotingLifecycleEvent; -import akka.remote.ThisActorSystemQuarantinedEvent; +import akka.remote.artery.ThisActorSystemQuarantinedEvent; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.HashSet; import java.util.Set; import org.slf4j.Logger; @@ -37,15 +40,17 @@ public class QuarantinedMonitorActor extends UntypedAbstractActor { private final Effect callback; private boolean quarantined; - private Set
addressSet = new HashSet<>(); + private final Set
addressSet = new HashSet<>(); private int count = 0; + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", justification = "Akka class design") protected QuarantinedMonitorActor(final Effect callback) { this.callback = callback; LOG.debug("Created QuarantinedMonitorActor"); getContext().system().eventStream().subscribe(getSelf(), RemotingLifecycleEvent.class); + getContext().system().eventStream().subscribe(getSelf(), ClusterEvent.MemberDowned.class); } @Override @@ -63,25 +68,23 @@ public class QuarantinedMonitorActor extends UntypedAbstractActor { return; } - if (message instanceof ThisActorSystemQuarantinedEvent) { - final ThisActorSystemQuarantinedEvent event = (ThisActorSystemQuarantinedEvent) message; + if (message instanceof ThisActorSystemQuarantinedEvent event) { LOG.warn("Got quarantined by {}", event.remoteAddress()); quarantined = true; // execute the callback callback.apply(); - } else if (message instanceof AssociationErrorEvent) { - String errorMessage = message.toString(); + } else if (message instanceof AssociationErrorEvent event) { + final 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(); + final Address address = event.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; @@ -92,6 +95,12 @@ public class QuarantinedMonitorActor extends UntypedAbstractActor { count = 0; addressSet.clear(); } + } else if (message instanceof ClusterEvent.MemberDowned event) { + if (Cluster.get(getContext().system()).selfMember().equals(event.member())) { + LOG.warn("This member has been downed, restarting"); + + callback.apply(); + } } }