X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FRaftActorDelegatingPersistentDataProvider.java;h=238b7e77852b34f242c0d500cec206960deedba4;hb=bfe4439155b27fbf9ae300252420c8a81fcbdb80;hp=378f33a2be2528071de02ad171f573fb9d791d99;hpb=c9943f5bc72d4cde9356d3bd4cf73d36f4b2f754;p=controller.git 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); + } + } }