X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FSnapshotManagerTest.java;h=df83f8f55843b4f82ad9f4f8336c8b6913482c5b;hb=928f7af243a1e7ff9cf2b9b58846fa16a7009cca;hp=47720d95b6bcfd73458a923e3703f30049349fd7;hpb=4a60a637941ccf77ab7b32484cbc4128eaf3ea7c;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java index 47720d95b6..df83f8f558 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2015 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.raft; import static org.junit.Assert.assertArrayEquals; @@ -67,6 +75,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(new HashMap<>()).when(mockRaftActorContext).getPeerAddresses(); doReturn(mockConfigParams).when(mockRaftActorContext).getConfigParams(); doReturn(10L).when(mockConfigParams).getSnapshotBatchCount(); + doReturn(70).when(mockConfigParams).getSnapshotDataThresholdPercentage(); doReturn(mockReplicatedLog).when(mockRaftActorContext).getReplicatedLog(); doReturn("123").when(mockRaftActorContext).getId(); doReturn(mockDataPersistenceProvider).when(mockRaftActorContext).getPersistenceProvider(); @@ -151,6 +160,35 @@ public class SnapshotManagerTest extends AbstractActorTest { } + @Test + public void testCaptureWithNullLastLogEntry() throws Exception { + boolean capture = snapshotManager.capture(null, 1); + + assertTrue(capture); + + assertEquals(true, snapshotManager.isCapturing()); + + verify(mockProcedure).apply(null); + + CaptureSnapshot captureSnapshot = snapshotManager.getCaptureSnapshot(); + + System.out.println(captureSnapshot); + + // LastIndex and LastTerm are picked up from the lastLogEntry + assertEquals(-1L, captureSnapshot.getLastIndex()); + assertEquals(-1L, captureSnapshot.getLastTerm()); + + // Since the actor does not have any followers (no peer addresses) lastApplied will be from lastLogEntry + assertEquals(-1L, captureSnapshot.getLastAppliedIndex()); + assertEquals(-1L, captureSnapshot.getLastAppliedTerm()); + + // + assertEquals(-1L, captureSnapshot.getReplicatedToAllIndex()); + assertEquals(-1L, captureSnapshot.getReplicatedToAllTerm()); + actorRef.underlyingActor().clear(); + + } + @Test public void testCaptureWithCreateProcedureError () throws Exception { doThrow(new Exception("mock")).when(mockProcedure).apply(null); @@ -207,8 +245,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(lastLogEntry, -1); byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(mockDataPersistenceProvider, bytes, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); ArgumentCaptor snapshotArgumentCaptor = ArgumentCaptor.forClass(Snapshot.class); verify(mockDataPersistenceProvider).saveSnapshot(snapshotArgumentCaptor.capture()); @@ -239,8 +276,7 @@ public class SnapshotManagerTest extends AbstractActorTest { new MockRaftActorContext.MockPayload()), 9); byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(mockDataPersistenceProvider, bytes, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); ArgumentCaptor snapshotArgumentCaptor = ArgumentCaptor.forClass(Snapshot.class); verify(mockDataPersistenceProvider).saveSnapshot(snapshotArgumentCaptor.capture()); @@ -259,7 +295,6 @@ public class SnapshotManagerTest extends AbstractActorTest { verify(mockRaftActorBehavior).setReplicatedToAllIndex(9); } - @Test public void testPersistWhenReplicatedLogDataSizeGreaterThanThreshold(){ doReturn(Integer.MAX_VALUE).when(mockReplicatedLog).dataSize(); @@ -268,12 +303,39 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, new MockRaftActorContext.MockPayload()), -1); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); verify(mockReplicatedLog).snapshotPreCommit(9L, 6L); + + verify(mockRaftActorBehavior, never()).setReplicatedToAllIndex(anyLong()); + } + + @Test + public void testPersistWhenReplicatedLogSizeExceedsSnapshotBatchCount() { + doReturn(10L).when(mockReplicatedLog).size(); // matches snapshotBatchCount + doReturn(100).when(mockReplicatedLog).dataSize(); + + doReturn(5L).when(mockReplicatedLog).getSnapshotIndex(); + doReturn(5L).when(mockReplicatedLog).getSnapshotTerm(); + + long replicatedToAllIndex = 1; + ReplicatedLogEntry replicatedLogEntry = mock(ReplicatedLogEntry.class); + doReturn(replicatedLogEntry).when(mockReplicatedLog).get(replicatedToAllIndex); + doReturn(6L).when(replicatedLogEntry).getTerm(); + doReturn(replicatedToAllIndex).when(replicatedLogEntry).getIndex(); + + snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, + new MockRaftActorContext.MockPayload()), replicatedToAllIndex); + + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, 2000000L); + + verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); + + verify(mockReplicatedLog).snapshotPreCommit(9L, 6L); + + verify(mockRaftActorBehavior).setReplicatedToAllIndex(replicatedToAllIndex); } @Test @@ -288,8 +350,9 @@ public class SnapshotManagerTest extends AbstractActorTest { byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(mockDataPersistenceProvider, bytes, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + + assertEquals(true, snapshotManager.isCapturing()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -302,13 +365,12 @@ public class SnapshotManagerTest extends AbstractActorTest { SendInstallSnapshot sendInstallSnapshot = sendInstallSnapshotArgumentCaptor.getValue(); - assertTrue(Arrays.equals(bytes, sendInstallSnapshot.getSnapshot().toByteArray())); + assertTrue(Arrays.equals(bytes, sendInstallSnapshot.getSnapshot().getState())); } @Test public void testCallingPersistWithoutCaptureWillDoNothing(){ - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider, never()).saveSnapshot(any(Snapshot.class)); @@ -324,11 +386,9 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -345,10 +405,13 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + + assertEquals(true, snapshotManager.isCapturing()); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); + + assertEquals(false, snapshotManager.isCapturing()); verify(mockReplicatedLog).snapshotCommit(); @@ -369,7 +432,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -381,7 +444,7 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCommitBeforeCapture(){ - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -399,12 +462,11 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog, times(1)).snapshotCommit(); @@ -419,8 +481,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); snapshotManager.rollback(); @@ -452,8 +513,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); snapshotManager.rollback(); @@ -620,4 +680,4 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals("getTerm", -1L, reader.getTerm()); assertEquals("getIndex", -1L, reader.getIndex()); } -} \ No newline at end of file +}