BUG-9028: make NonPersistentDataProvider schedule invocation
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / main / java / org / opendaylight / controller / cluster / NonPersistentDataProvider.java
index d4381f7cd09119b8bf1128c5ddc76d5a458f4573..9a4a34cf596d00dbf1d1eca8dd1973b88f3d236d 100644 (file)
@@ -7,8 +7,11 @@
  */
 package org.opendaylight.controller.cluster;
 
+import static java.util.Objects.requireNonNull;
+
 import akka.japi.Procedure;
 import akka.persistence.SnapshotSelectionCriteria;
+import org.opendaylight.controller.cluster.common.actor.ExecuteInSelfActor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -18,38 +21,39 @@ import org.slf4j.LoggerFactory;
 public class NonPersistentDataProvider implements DataPersistenceProvider {
     private static final Logger LOG = LoggerFactory.getLogger(NonPersistentDataProvider.class);
 
+    private final ExecuteInSelfActor actor;
+
+    public NonPersistentDataProvider(final ExecuteInSelfActor actor) {
+        this.actor = requireNonNull(actor);
+    }
+
     @Override
     public boolean isRecoveryApplicable() {
         return false;
     }
 
     @Override
-    @SuppressWarnings("checkstyle:IllegalCatch")
-    public <T> void persist(T entry, Procedure<T> procedure) {
-        try {
-            procedure.apply(entry);
-        } catch (Exception e) {
-            LOG.error("An unexpected error occurred", e);
-        }
+    public <T> void persist(final T entry, final Procedure<T> procedure) {
+        invokeProcedure(procedure, entry);
     }
 
     @Override
-    public <T> void persistAsync(T entry, Procedure<T> procedure) {
-        persist(entry, procedure);
+    public <T> void persistAsync(final T entry, final Procedure<T> procedure) {
+        actor.executeInSelf(() -> invokeProcedure(procedure, entry));
     }
 
     @Override
-    public void saveSnapshot(Object snapshot) {
+    public void saveSnapshot(final Object snapshot) {
         // no-op
     }
 
     @Override
-    public void deleteSnapshots(SnapshotSelectionCriteria criteria) {
+    public void deleteSnapshots(final SnapshotSelectionCriteria criteria) {
         // no-op
     }
 
     @Override
-    public void deleteMessages(long sequenceNumber) {
+    public void deleteMessages(final long sequenceNumber) {
         // no-op
     }
 
@@ -57,4 +61,13 @@ public class NonPersistentDataProvider implements DataPersistenceProvider {
     public long getLastSequenceNumber() {
         return -1;
     }
+
+    @SuppressWarnings("checkstyle:IllegalCatch")
+    static <T> void invokeProcedure(final Procedure<T> procedure, final T argument) {
+        try {
+            procedure.apply(argument);
+        } catch (Exception e) {
+            LOG.error("An unexpected error occurred", e);
+        }
+    }
 }