- if(isPersistentPayload) {
- persistentProvider.persist(o, procedure);
+ private <T> void doPersist(final T entry, final Procedure<T> procedure, final boolean async) {
+ if (getDelegate().isRecoveryApplicable()) {
+ persistSuper(entry, procedure, async);
+ } else {
+ 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.
+ if (async) {
+ persistentProvider.persistAsync(payload, p -> procedure.apply(entry));
+ } else {
+ persistentProvider.persist(payload, p -> procedure.apply(entry));
+ }
+ } else {
+ persistSuper(entry, procedure, async);
+ }