From 8d8e440aa795660349714241ec64fdf4b462b378 Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Thu, 17 Nov 2016 02:03:26 -0500 Subject: [PATCH 1/1] Bug 5419: Add persistAsync method to DataPersistenceProvider Change-Id: I7558cdbc59bb3db1d2ea6311ff37eec47efff92e Signed-off-by: Tom Pantelis --- ...ActorDelegatingPersistentDataProvider.java | 35 +++++++++++++++---- .../cluster/DataPersistenceProvider.java | 11 +++++- .../DelegatingPersistentDataProvider.java | 5 +++ .../cluster/NonPersistentDataProvider.java | 5 +++ .../cluster/PersistentDataProvider.java | 5 +++ 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorDelegatingPersistentDataProvider.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorDelegatingPersistentDataProvider.java index 378f33a2be..238b7e7785 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorDelegatingPersistentDataProvider.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorDelegatingPersistentDataProvider.java @@ -31,22 +31,43 @@ class RaftActorDelegatingPersistentDataProvider extends DelegatingPersistentData } @Override - public void persist(final T object, final Procedure procedure) { + public void persist(final T entry, final Procedure procedure) { + doPersist(entry, procedure, false); + } + + @Override + public void persistAsync(T entry, Procedure procedure) { + doPersist(entry, procedure, true); + } + + private void doPersist(final T entry, final Procedure procedure, final boolean async) { if (getDelegate().isRecoveryApplicable()) { - super.persist(object, procedure); + persistSuper(entry, procedure, async); } else { - if (object instanceof ReplicatedLogEntry) { - Payload payload = ((ReplicatedLogEntry)object).getData(); + if (entry instanceof ReplicatedLogEntry) { + Payload payload = ((ReplicatedLogEntry)entry).getData(); if (payload instanceof PersistentPayload) { // We persist the Payload but not the ReplicatedLogEntry to avoid gaps in the journal indexes // on recovery if data persistence is later enabled. - persistentProvider.persist(payload, p -> procedure.apply(object)); + if (async) { + persistentProvider.persistAsync(payload, p -> procedure.apply(entry)); + } else { + persistentProvider.persist(payload, p -> procedure.apply(entry)); + } } else { - super.persist(object, procedure); + persistSuper(entry, procedure, async); } } else { - super.persist(object, procedure); + persistSuper(entry, procedure, async); } } } + + private void persistSuper(final T object, final Procedure procedure, final boolean async) { + if (async) { + super.persistAsync(object, procedure); + } else { + super.persist(object, procedure); + } + } } diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DataPersistenceProvider.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DataPersistenceProvider.java index d136d45bc7..c655dcdb89 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DataPersistenceProvider.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DataPersistenceProvider.java @@ -26,7 +26,7 @@ public interface DataPersistenceProvider { boolean isRecoveryApplicable(); /** - * Persists an entry to he applicable synchronously. + * Persists an entry to the applicable journal synchronously. * * @param entry the journal entry to persist * @param procedure the callback when persistence is complete @@ -34,6 +34,15 @@ public interface DataPersistenceProvider { */ void persist(T entry, Procedure procedure); + /** + * Persists an entry to the applicable journal asynchronously. + * + * @param entry the journal entry to persist + * @param procedure the callback when persistence is complete + * @param the type of the journal entry + */ + void persistAsync(T entry, Procedure procedure); + /** * Saves a snapshot. * diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DelegatingPersistentDataProvider.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DelegatingPersistentDataProvider.java index c513e38fc6..f1a20fcc8e 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DelegatingPersistentDataProvider.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/DelegatingPersistentDataProvider.java @@ -40,6 +40,11 @@ public class DelegatingPersistentDataProvider implements DataPersistenceProvider delegate.persist(entry, procedure); } + @Override + public void persistAsync(T entry, Procedure procedure) { + delegate.persistAsync(entry, procedure); + } + @Override public void saveSnapshot(Object entry) { delegate.saveSnapshot(entry); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/NonPersistentDataProvider.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/NonPersistentDataProvider.java index 91ae8f118e..d4381f7cd0 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/NonPersistentDataProvider.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/NonPersistentDataProvider.java @@ -33,6 +33,11 @@ public class NonPersistentDataProvider implements DataPersistenceProvider { } } + @Override + public void persistAsync(T entry, Procedure procedure) { + persist(entry, procedure); + } + @Override public void saveSnapshot(Object snapshot) { // no-op diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/PersistentDataProvider.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/PersistentDataProvider.java index b4f08c0394..1d676fa4a6 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/PersistentDataProvider.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/PersistentDataProvider.java @@ -33,6 +33,11 @@ public class PersistentDataProvider implements DataPersistenceProvider { persistentActor.persist(entry, procedure); } + @Override + public void persistAsync(T entry, Procedure procedure) { + persistentActor.persistAsync(entry, procedure); + } + @Override public void saveSnapshot(Object snapshot) { persistentActor.saveSnapshot(snapshot); -- 2.36.6