- // TODO: follow https://github.com/akka/akka/issues/18758 to see if Akka adds a named
- // exception for quarantine detection
- if (message instanceof AssociationErrorEvent) {
- AssociationErrorEvent event = (AssociationErrorEvent) message;
- Throwable cause = event.getCause();
- if (cause instanceof InvalidAssociation) {
- Throwable cause2 = ((InvalidAssociation) cause).getCause();
- if (cause2.getMessage().contains("quarantined this system")) {
+ if (message instanceof ThisActorSystemQuarantinedEvent) {
+ final ThisActorSystemQuarantinedEvent event = (ThisActorSystemQuarantinedEvent) message;
+ LOG.warn("Got quarantined by {}", event.remoteAddress());
+ quarantined = true;
+
+ // execute the callback
+ callback.apply();
+ } else if (message instanceof AssociationErrorEvent) {
+ final String errorMessage = message.toString();
+ LOG.trace("errorMessage:{}", errorMessage);
+ if (errorMessage.contains("The remote system has a UID that has been quarantined")) {
+ final 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());