Merge "Bug 1536: Fixed minimum values of SET_TP_SRC/DST."
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / ShardTransaction.java
index 312ec9a4ff97f861b1fcbc23220dc44e6920b61a..360a10722c06df2c3e357631b43d89eac801a3d3 100644 (file)
@@ -14,8 +14,11 @@ import akka.event.Logging;
 import akka.event.LoggingAdapter;
 import akka.japi.Creator;
 import com.google.common.base.Optional;
-import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.CheckedFuture;
+import org.opendaylight.controller.cluster.datastore.exceptions.UnknownMessageException;
 import org.opendaylight.controller.cluster.datastore.messages.CloseTransaction;
+import org.opendaylight.controller.cluster.datastore.messages.DataExists;
+import org.opendaylight.controller.cluster.datastore.messages.DataExistsReply;
 import org.opendaylight.controller.cluster.datastore.messages.DeleteData;
 import org.opendaylight.controller.cluster.datastore.messages.DeleteDataReply;
 import org.opendaylight.controller.cluster.datastore.messages.MergeData;
@@ -89,7 +92,6 @@ public abstract class ShardTransaction extends AbstractUntypedActor {
   protected ShardTransaction(DOMStoreTransactionChain transactionChain,
                           ActorRef shardActor, SchemaContext schemaContext) {
     this.transactionChain = transactionChain;
-    //this.transaction = transaction;
     this.shardActor = shardActor;
     this.schemaContext = schemaContext;
   }
@@ -173,7 +175,7 @@ public abstract class ShardTransaction extends AbstractUntypedActor {
       getSender().tell(new GetCompositeModificationReply(
           new ImmutableCompositeModification(modification)), getSelf());
     }else{
-      throw new Exception ("ShardTransaction:handleRecieve received an unknown message"+message);
+         throw new UnknownMessageException(message);
     }
   }
 
@@ -183,28 +185,38 @@ public abstract class ShardTransaction extends AbstractUntypedActor {
     final ActorRef sender = getSender();
     final ActorRef self = getSelf();
     final YangInstanceIdentifier path = message.getPath();
-    final ListenableFuture<Optional<NormalizedNode<?, ?>>> future =
-        transaction.read(path);
+    final CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> future =
+          transaction.read(path);
 
-    future.addListener(new Runnable() {
+      future.addListener(new Runnable() {
       @Override
       public void run() {
         try {
-          Optional<NormalizedNode<?, ?>> optional = future.get();
+          Optional<NormalizedNode<?, ?>> optional = future.checkedGet();
           if (optional.isPresent()) {
             sender.tell(new ReadDataReply(schemaContext,optional.get()).toSerializable(), self);
           } else {
             sender.tell(new ReadDataReply(schemaContext,null).toSerializable(), self);
           }
         } catch (Exception e) {
-            sender.tell(new akka.actor.Status.Failure(new ReadFailedException( "An Exception occurred  when reading data from path : "
-                + path.toString(),e)),self);
+            sender.tell(new akka.actor.Status.Failure(e),self);
         }
 
       }
     }, getContext().dispatcher());
   }
 
+    protected void dataExists(DOMStoreReadTransaction transaction, DataExists message) {
+        final YangInstanceIdentifier path = message.getPath();
+
+        try {
+            Boolean exists = transaction.exists(path).checkedGet();
+            getSender().tell(new DataExistsReply(exists).toSerializable(), getSelf());
+        } catch (ReadFailedException e) {
+            getSender().tell(new akka.actor.Status.Failure(e),getSelf());
+        }
+
+    }
 
   protected void writeData(DOMStoreWriteTransaction transaction, WriteData message) {
     modification.addModification(
@@ -232,6 +244,7 @@ public abstract class ShardTransaction extends AbstractUntypedActor {
   }
 
   protected void deleteData(DOMStoreWriteTransaction transaction, DeleteData message) {
+    LOG.debug("deleteData at path : " + message.getPath().toString());
     modification.addModification(new DeleteModification(message.getPath()));
     try {
         transaction.delete(message.getPath());