BUG 2134 : Make persistence configurable at the datastore level
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / main / java / org / opendaylight / controller / cluster / common / actor / AbstractUntypedPersistentActor.java
index 36b2866210cadb84d9db0ab28c5a8137236254a7..8a6217deab24029bf1f5fbe2f8e7d2b4154bdcff 100644 (file)
@@ -10,7 +10,10 @@ package org.opendaylight.controller.cluster.common.actor;
 
 import akka.event.Logging;
 import akka.event.LoggingAdapter;
+import akka.japi.Procedure;
+import akka.persistence.SnapshotSelectionCriteria;
 import akka.persistence.UntypedPersistentActor;
+import org.opendaylight.controller.cluster.DataPersistenceProvider;
 
 public abstract class AbstractUntypedPersistentActor extends UntypedPersistentActor {
 
@@ -67,4 +70,71 @@ public abstract class AbstractUntypedPersistentActor extends UntypedPersistentAc
         }
         unhandled(message);
     }
+
+    protected class PersistentDataProvider implements DataPersistenceProvider {
+
+        public PersistentDataProvider(){
+
+        }
+
+        @Override
+        public boolean isRecoveryApplicable() {
+            return true;
+        }
+
+        @Override
+        public <T> void persist(T o, Procedure<T> procedure) {
+            AbstractUntypedPersistentActor.this.persist(o, procedure);
+        }
+
+        @Override
+        public void saveSnapshot(Object o) {
+            AbstractUntypedPersistentActor.this.saveSnapshot(o);
+        }
+
+        @Override
+        public void deleteSnapshots(SnapshotSelectionCriteria criteria) {
+            AbstractUntypedPersistentActor.this.deleteSnapshots(criteria);
+        }
+
+        @Override
+        public void deleteMessages(long sequenceNumber) {
+            AbstractUntypedPersistentActor.this.deleteMessages(sequenceNumber);
+        }
+    }
+
+    protected class NonPersistentDataProvider implements DataPersistenceProvider {
+
+        public NonPersistentDataProvider(){
+
+        }
+
+        @Override
+        public boolean isRecoveryApplicable() {
+            return false;
+        }
+
+        @Override
+        public <T> void persist(T o, Procedure<T> procedure) {
+            try {
+                procedure.apply(o);
+            } catch (Exception e) {
+                LOG.error(e, "An unexpected error occurred");
+            }
+        }
+
+        @Override
+        public void saveSnapshot(Object o) {
+        }
+
+        @Override
+        public void deleteSnapshots(SnapshotSelectionCriteria criteria) {
+
+        }
+
+        @Override
+        public void deleteMessages(long sequenceNumber) {
+
+        }
+    }
 }