X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FRaftActorDelegatingPersistentDataProvider.java;h=84e2dafafae8ac78bf94cc539af89a3675662dd3;hp=466609d8938c7c9674af0d3954fb6b9e7fa6c7f3;hb=c42a5e91e0dcfc499b33a321ef45c0d310d366cc;hpb=6ed4207635b1ac2f4bb9611e82130002602f0d4d 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 466609d893..84e2dafafa 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 @@ -12,6 +12,7 @@ import com.google.common.base.Preconditions; import org.opendaylight.controller.cluster.DataPersistenceProvider; import org.opendaylight.controller.cluster.DelegatingPersistentDataProvider; import org.opendaylight.controller.cluster.PersistentDataProvider; +import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.PersistentPayload; /** @@ -30,17 +31,19 @@ class RaftActorDelegatingPersistentDataProvider extends DelegatingPersistentData } @Override - public void persist(T o, Procedure procedure) { + public void persist(final T o, final Procedure procedure) { if(getDelegate().isRecoveryApplicable()) { super.persist(o, procedure); } else { - boolean isPersistentPayload = false; if(o instanceof ReplicatedLogEntry) { - isPersistentPayload = ((ReplicatedLogEntry)o).getData() instanceof PersistentPayload; - } - - if(isPersistentPayload) { - persistentProvider.persist(o, procedure); + Payload payload = ((ReplicatedLogEntry)o).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(o)); + } else { + super.persist(o, procedure); + } } else { super.persist(o, procedure); }