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%2Futils%2FInMemorySnapshotStore.java;h=a7e751c23e4de0abd8ab2b1b337c6261401e65b9;hb=refs%2Fchanges%2F24%2F32524%2F19;hp=130c707e3a1f06d6b2c51b112eb4ba316e69d0ae;hpb=194ee2fde243c264e32477b8d8ec9676dbfecaaa;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/InMemorySnapshotStore.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/InMemorySnapshotStore.java index 130c707e3a..a7e751c23e 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/InMemorySnapshotStore.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/InMemorySnapshotStore.java @@ -9,7 +9,6 @@ package org.opendaylight.controller.cluster.raft.utils; import akka.dispatch.Futures; -import akka.japi.Option; import akka.persistence.SelectedSnapshot; import akka.persistence.SnapshotMetadata; import akka.persistence.SnapshotSelectionCriteria; @@ -21,6 +20,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -39,6 +39,7 @@ public class InMemorySnapshotStore extends SnapshotStore { private static Map> snapshots = new ConcurrentHashMap<>(); private static final Map snapshotSavedLatches = new ConcurrentHashMap<>(); + private static final Map snapshotDeletedLatches = new ConcurrentHashMap<>(); public static void addSnapshot(String persistentId, Object snapshot) { List snapshotList = snapshots.get(persistentId); @@ -82,6 +83,10 @@ public class InMemorySnapshotStore extends SnapshotStore { snapshotSavedLatches.put(persistenceId, new CountDownLatch(1)); } + public static void addSnapshotDeletedLatch(String persistenceId) { + snapshotDeletedLatches.put(persistenceId, new CountDownLatch(1)); + } + public static T waitForSavedSnapshot(String persistenceId, Class type) { if(!Uninterruptibles.awaitUninterruptibly(snapshotSavedLatches.get(persistenceId), 5, TimeUnit.SECONDS)) { throw new AssertionError("Snapshot was not saved"); @@ -90,28 +95,34 @@ public class InMemorySnapshotStore extends SnapshotStore { return getSnapshots(persistenceId, type).get(0); } + public static void waitForDeletedSnapshot(String persistenceId) { + if(!Uninterruptibles.awaitUninterruptibly(snapshotDeletedLatches.get(persistenceId), 5, TimeUnit.SECONDS)) { + throw new AssertionError("Snapshot was not deleted"); + } + } + @Override - public Future> doLoadAsync(String persistenceId, + public Future> doLoadAsync(String persistenceId, SnapshotSelectionCriteria snapshotSelectionCriteria) { List snapshotList = snapshots.get(persistenceId); if(snapshotList == null){ - return Futures.successful(Option.none()); + return Futures.successful(Optional.empty()); } synchronized(snapshotList) { for(int i = snapshotList.size() - 1; i >= 0; i--) { StoredSnapshot snapshot = snapshotList.get(i); if(matches(snapshot, snapshotSelectionCriteria)) { - return Futures.successful(Option.some(new SelectedSnapshot(snapshot.metadata, + return Futures.successful(Optional.of(new SelectedSnapshot(snapshot.metadata, snapshot.data))); } } } - return Futures.successful(Option.none()); + return Futures.successful(Optional.empty()); } - private boolean matches(StoredSnapshot snapshot, SnapshotSelectionCriteria criteria) { + private static boolean matches(StoredSnapshot snapshot, SnapshotSelectionCriteria criteria) { return snapshot.metadata.sequenceNr() <= criteria.maxSequenceNr() && snapshot.metadata.timestamp() <= criteria.maxTimestamp(); } @@ -120,6 +131,9 @@ public class InMemorySnapshotStore extends SnapshotStore { public Future doSaveAsync(SnapshotMetadata snapshotMetadata, Object o) { List snapshotList = snapshots.get(snapshotMetadata.persistenceId()); + LOG.trace("doSaveAsync: persistentId {}: sequenceNr: {}: timestamp {}: {}", snapshotMetadata.persistenceId(), + snapshotMetadata.sequenceNr(), snapshotMetadata.timestamp(), o); + if(snapshotList == null){ snapshotList = new ArrayList<>(); snapshots.put(snapshotMetadata.persistenceId(), snapshotList); @@ -137,51 +151,51 @@ public class InMemorySnapshotStore extends SnapshotStore { } @Override - public void onSaved(SnapshotMetadata snapshotMetadata) throws Exception { - } - - @Override - public void doDelete(SnapshotMetadata snapshotMetadata) throws Exception { - List snapshotList = snapshots.get(snapshotMetadata.persistenceId()); - - if(snapshotList == null){ - return; - } - - synchronized (snapshotList) { - for(int i=0;i doDeleteAsync(SnapshotMetadata metadata) { + List snapshotList = snapshots.get(metadata.persistenceId()); + + if (snapshotList != null) { + synchronized (snapshotList) { + for(int i=0;i snapshotList = snapshots.get(persistentId); - if(snapshotList == null){ - return; - } + public Future doDeleteAsync(String persistenceId, SnapshotSelectionCriteria criteria) { + LOG.trace("doDelete: persistentId {}: maxSequenceNr: {}: maxTimestamp {}", persistenceId, + criteria.maxSequenceNr(), criteria.maxTimestamp()); - synchronized (snapshotList) { - Iterator iter = snapshotList.iterator(); - while(iter.hasNext()) { - StoredSnapshot s = iter.next(); - if(matches(s, snapshotSelectionCriteria)) { - LOG.trace("Deleting snapshot for sequenceNr: {}, timestamp: {}", - s.metadata.sequenceNr(), s.metadata.timestamp()); - - iter.remove(); + List snapshotList = snapshots.get(persistenceId); + if(snapshotList != null){ + synchronized (snapshotList) { + Iterator iter = snapshotList.iterator(); + while(iter.hasNext()) { + StoredSnapshot s = iter.next(); + if(matches(s, criteria)) { + LOG.trace("Deleting snapshot for sequenceNr: {}, timestamp: {}: {}", + s.metadata.sequenceNr(), s.metadata.timestamp(), s.data); + + iter.remove(); + } } } } + + CountDownLatch latch = snapshotDeletedLatches.get(persistenceId); + if(latch != null) { + latch.countDown(); + } + + return Futures.successful(null); } private static class StoredSnapshot {