From: Robert Varga Date: Fri, 11 Mar 2016 12:20:53 +0000 (+0100) Subject: Ensure AbstractUntypedActor#unknownMessage() is called X-Git-Tag: release/boron~168 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=5db008370b529e46305931f94e937f8b332ec299 Ensure AbstractUntypedActor#unknownMessage() is called Our code is silently ignoring messages while there is an abstract method provided for use when a message is not handled. Make sure we document the contract and update implementations to call the method when they encounter an unknown message. Change-Id: I3c75fdb2c154b40c537813dd5a6bab8f47dc95cc Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java index 50726bff2e..dffb6101c5 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java @@ -21,17 +21,24 @@ public abstract class AbstractUntypedActor extends UntypedActor { } @Override - public void onReceive(Object message) throws Exception { + public final void onReceive(Object message) throws Exception { handleReceive(message); } + /** + * Receive and handle an incoming message. If the implementation does not handle this particular message, + * it should call {@link #ignoreMessage(Object)} or {@link #unknownMessage(Object)}. + * + * @param message Incoming message + * @throws Exception + */ protected abstract void handleReceive(Object message) throws Exception; - protected void ignoreMessage(Object message) { - LOG.debug("Unhandled message {}", message); + protected final void ignoreMessage(Object message) { + LOG.debug("Ignoring unhandled message {}", message); } - protected void unknownMessage(Object message) throws Exception { + protected final void unknownMessage(Object message) { LOG.debug("Received unhandled message {}", message); unhandled(message); } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java index 598dfb1fe8..1e07332e51 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/notifications/RoleChangeNotifier.java @@ -45,7 +45,7 @@ public class RoleChangeNotifier extends AbstractUntypedActor implements AutoClos } @Override - protected void handleReceive(Object message) throws Exception { + protected void handleReceive(Object message) { if (message instanceof RegisterRoleChangeListener) { // register listeners for this shard @@ -92,6 +92,8 @@ public class RoleChangeNotifier extends AbstractUntypedActor implements AutoClos for (ActorRef listener: registeredListeners.values()) { listener.tell(latestLeaderStateChanged, getSelf()); } + } else { + unknownMessage(message); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java index cf3bdce331..7f985263c3 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListener.java @@ -32,17 +32,18 @@ public class DataChangeListener extends AbstractUntypedActor { private final AsyncDataChangeListener> listener; private boolean notificationsEnabled = false; - public DataChangeListener(AsyncDataChangeListener> listener) { + public DataChangeListener(AsyncDataChangeListener> listener) { this.listener = Preconditions.checkNotNull(listener, "listener should not be null"); } @Override - public void handleReceive(Object message) throws Exception { - if(message instanceof DataChanged){ + public void handleReceive(Object message) { + if (message instanceof DataChanged){ dataChanged(message); - } else if(message instanceof EnableNotification){ + } else if (message instanceof EnableNotification){ enableNotification((EnableNotification) message); + } else { + unknownMessage(message); } } @@ -56,8 +57,7 @@ public class DataChangeListener extends AbstractUntypedActor { // Do nothing if notifications are not enabled if(!notificationsEnabled) { - LOG.debug("Notifications not enabled for listener {} - dropping change notification", - listener); + LOG.debug("Notifications not enabled for listener {} - dropping change notification", listener); return; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerRegistrationActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerRegistrationActor.java index b087331287..2632498a03 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerRegistrationActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerRegistrationActor.java @@ -30,9 +30,11 @@ public class DataChangeListenerRegistrationActor extends AbstractUntypedActor { } @Override - public void handleReceive(Object message) throws Exception { + public void handleReceive(Object message) { if (message instanceof CloseDataChangeListenerRegistration) { closeListenerRegistration(); + } else { + unknownMessage(message); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerActor.java index 3f11909117..03978f2b66 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerActor.java @@ -37,6 +37,8 @@ final class DataTreeChangeListenerActor extends AbstractUntypedActor { dataChanged((DataTreeChanged)message); } else if (message instanceof EnableNotification) { enableNotification((EnableNotification) message); + } else { + unknownMessage(message); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerRegistrationActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerRegistrationActor.java index 7d0117f8e1..2a106b4dda 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerRegistrationActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeChangeListenerRegistrationActor.java @@ -34,6 +34,8 @@ public final class DataTreeChangeListenerRegistrationActor extends AbstractUntyp registration.close(); getSender().tell(CloseDataTreeChangeListenerRegistrationReply.getInstance(), getSelf()); getSelf().tell(PoisonPill.getInstance(), getSelf()); + } else { + unknownMessage(message); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadTransaction.java index 8ece2593f5..e65b8f415e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadTransaction.java @@ -34,14 +34,13 @@ public class ShardReadTransaction extends ShardTransaction { } @Override - public void handleReceive(Object message) throws Exception { + public void handleReceive(Object message) { if (message instanceof CreateSnapshot) { createSnapshot(); } else if(ReadData.isSerializedType(message)) { readData(transaction, ReadData.fromSerializable(message)); } else if(DataExists.isSerializedType(message)) { dataExists(transaction, DataExists.fromSerializable(message)); - } else { super.handleReceive(message); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadWriteTransaction.java index 515b448f7b..2cc23c90e8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadWriteTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardReadWriteTransaction.java @@ -24,7 +24,7 @@ public class ShardReadWriteTransaction extends ShardWriteTransaction { } @Override - public void handleReceive(Object message) throws Exception { + public void handleReceive(Object message) { if(ReadData.isSerializedType(message)) { readData(ReadData.fromSerializable(message)); } else if(DataExists.isSerializedType(message)) { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java index ebec5a1014..c2a05a6d61 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardTransaction.java @@ -16,7 +16,6 @@ import akka.japi.Creator; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActorWithMetering; -import org.opendaylight.controller.cluster.datastore.exceptions.UnknownMessageException; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats; import org.opendaylight.controller.cluster.datastore.messages.CloseTransaction; import org.opendaylight.controller.cluster.datastore.messages.CloseTransactionReply; @@ -69,16 +68,14 @@ public abstract class ShardTransaction extends AbstractUntypedActorWithMetering } @Override - public void handleReceive(Object message) throws Exception { + public void handleReceive(Object message) { if (CloseTransaction.isSerializedType(message)) { closeTransaction(true); } else if (message instanceof ReceiveTimeout) { - if(LOG.isDebugEnabled()) { - LOG.debug("Got ReceiveTimeout for inactivity - closing Tx"); - } + LOG.debug("Got ReceiveTimeout for inactivity - closing transaction {}", transactionID); closeTransaction(false); } else { - throw new UnknownMessageException(message); + unknownMessage(message); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java index 18294a50fa..2ad2488d6d 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardWriteTransaction.java @@ -41,8 +41,7 @@ public class ShardWriteTransaction extends ShardTransaction { } @Override - public void handleReceive(Object message) throws Exception { - + public void handleReceive(Object message) { if (message instanceof BatchedModifications) { batchedModifications((BatchedModifications)message); } else { diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerActor.java index 8c6b04cbf3..32250a7314 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/entityownership/EntityOwnershipListenerActor.java @@ -32,8 +32,10 @@ class EntityOwnershipListenerActor extends AbstractUntypedActor { @Override protected void handleReceive(Object message) { - if(message instanceof EntityOwnershipChange) { + if (message instanceof EntityOwnershipChange) { onEntityOwnershipChanged((EntityOwnershipChange)message); + } else { + unknownMessage(message); } }