From aa307bc6c06d9bcf8e877553af9babc95c42c39b Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Fri, 5 May 2017 14:21:50 -0400 Subject: [PATCH] Bug 8380: Fix unhandled messages in ShardManager Added trace logging for RegisterRoleChangeListenerReply and other MemberEvent (ie MemberJoined, MemberLeft). The DeleteMessagesSuccess message was the result of deleting legacy journal messages (SchemaContextModules) that were kept for backwards compatibility with Helium. I removed the associated code and the deprecated ShardManager class that was kept for the SchemaContextModules inner class. Also added logging for DeleteSnapshotsFailure and DeleteSnapshotsSuccess. Change-Id: I145ea815b191f1e167e73029df348c7d15732c4f Signed-off-by: Tom Pantelis --- .../cluster/datastore/ShardManager.java | 42 ------------------- .../datastore/shardmanager/ShardManager.java | 16 +++++-- .../shardmanager/ShardManagerTest.java | 21 ---------- 3 files changed, 12 insertions(+), 67 deletions(-) delete mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java deleted file mode 100644 index 3021080758..0000000000 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.cluster.datastore; - -import java.io.Serializable; -import java.util.Set; - -/** - * Manages shards. - * - * @deprecated This is a deprecated placeholder to keep its inner class present. It serves no other purpose. - */ -@Deprecated -public final class ShardManager { - /** - * We no longer persist SchemaContextModules but keep this class around for now for backwards - * compatibility so we don't get de-serialization failures on upgrade from Helium. - */ - @Deprecated - public static class SchemaContextModules implements Serializable { - private static final long serialVersionUID = -8884620101025936590L; - - private final Set modules; - - public SchemaContextModules(Set modules) { - this.modules = modules; - } - - public Set getModules() { - return modules; - } - } - - private ShardManager() { - throw new UnsupportedOperationException("deprecated outer class"); - } -} diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java index bb289bc82e..d3d8ce39c9 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java @@ -25,6 +25,8 @@ import akka.dispatch.Futures; import akka.dispatch.OnComplete; import akka.japi.Function; import akka.pattern.Patterns; +import akka.persistence.DeleteSnapshotsFailure; +import akka.persistence.DeleteSnapshotsSuccess; import akka.persistence.RecoveryCompleted; import akka.persistence.SaveSnapshotFailure; import akka.persistence.SaveSnapshotSuccess; @@ -86,6 +88,7 @@ import org.opendaylight.controller.cluster.datastore.utils.ClusterUtils; import org.opendaylight.controller.cluster.datastore.utils.Dispatchers; import org.opendaylight.controller.cluster.datastore.utils.PrimaryShardInfoFutureCache; import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListener; +import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListenerReply; import org.opendaylight.controller.cluster.notifications.RoleChangeNotification; import org.opendaylight.controller.cluster.raft.base.messages.FollowerInitialSyncUpStatus; import org.opendaylight.controller.cluster.raft.base.messages.SwitchBehavior; @@ -294,6 +297,15 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { onGetLocalShardIds(); } else if (message instanceof RunnableMessage) { ((RunnableMessage)message).run(); + } else if (message instanceof DeleteSnapshotsFailure) { + LOG.warn("{}: Failed to delete prior snapshots", persistenceId(), + ((DeleteSnapshotsFailure) message).cause()); + } else if (message instanceof DeleteSnapshotsSuccess) { + LOG.debug("{}: Successfully deleted prior snapshots", persistenceId(), message); + } else if (message instanceof RegisterRoleChangeListenerReply) { + LOG.trace("{}: Received RegisterRoleChangeListenerReply", persistenceId()); + } else if (message instanceof ClusterEvent.MemberEvent) { + LOG.trace("{}: Received other ClusterEvent.MemberEvent: {}", persistenceId(), message); } else { unknownMessage(message); } @@ -840,10 +852,6 @@ class ShardManager extends AbstractUntypedPersistentActorWithMetering { private void onRecoveryCompleted() { LOG.info("Recovery complete : {}", persistenceId()); - // We no longer persist SchemaContext modules so delete all the prior messages from the akka - // journal on upgrade from Helium. - deleteMessages(lastSequenceNr()); - if (currentSnapshot == null && restoreFromSnapshot != null && restoreFromSnapshot.getShardManagerSnapshot() != null) { ShardManagerSnapshot snapshot = restoreFromSnapshot.getShardManagerSnapshot(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java index 5efd094702..6e37a975ed 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManagerTest.java @@ -40,7 +40,6 @@ import akka.util.Timeout; import com.google.common.base.Function; import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Uninterruptibles; @@ -68,7 +67,6 @@ import org.opendaylight.controller.cluster.datastore.DatastoreContext; import org.opendaylight.controller.cluster.datastore.DatastoreContextFactory; import org.opendaylight.controller.cluster.datastore.DistributedDataStore; import org.opendaylight.controller.cluster.datastore.Shard; -import org.opendaylight.controller.cluster.datastore.ShardManager.SchemaContextModules; import org.opendaylight.controller.cluster.datastore.config.ConfigurationImpl; import org.opendaylight.controller.cluster.datastore.config.EmptyModuleShardConfigProvider; import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration; @@ -118,7 +116,6 @@ import org.opendaylight.controller.cluster.raft.messages.ServerChangeReply; import org.opendaylight.controller.cluster.raft.messages.ServerChangeStatus; import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; import org.opendaylight.controller.cluster.raft.policy.DisableElectionsRaftPolicy; -import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore; import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; import org.opendaylight.controller.md.cluster.datastore.model.TestModel; @@ -989,24 +986,6 @@ public class ShardManagerTest extends AbstractShardManagerTest { LOG.info("testOnReceiveFindLocalShardWaitForShardInitialized starting"); } - @Test - public void testOnRecoveryJournalIsCleaned() { - String persistenceID = "shard-manager-" + shardMrgIDSuffix; - InMemoryJournal.addEntry(persistenceID, 1L, new SchemaContextModules(ImmutableSet.of("foo"))); - InMemoryJournal.addEntry(persistenceID, 2L, new SchemaContextModules(ImmutableSet.of("bar"))); - InMemoryJournal.addDeleteMessagesCompleteLatch(persistenceID); - - newTestShardManager(); - - InMemoryJournal.waitForDeleteMessagesComplete(persistenceID); - - // Journal entries up to the last one should've been deleted - Map journal = InMemoryJournal.get(persistenceID); - synchronized (journal) { - assertEquals("Journal size", 0, journal.size()); - } - } - @Test public void testRoleChangeNotificationAndShardLeaderStateChangedReleaseReady() throws Exception { TestShardManager shardManager = newTestShardManager(); -- 2.36.6