protected void dataExists(AbstractShardDataTreeTransaction<?> transaction, DataExists message) {
    if (checkClosed(transaction)) {
      return;
    }

    final YangInstanceIdentifier path = message.getPath();
    boolean exists = transaction.getSnapshot().readNode(path).isPresent();
    getSender().tell(new DataExistsReply(exists, message.getVersion()).toSerializable(), getSelf());
  }
  protected void readData(AbstractShardDataTreeTransaction<?> transaction, ReadData message) {
    if (checkClosed(transaction)) {
      return;
    }

    final YangInstanceIdentifier path = message.getPath();
    Optional<NormalizedNode<?, ?>> optional = transaction.getSnapshot().readNode(path);
    ReadDataReply readDataReply = new ReadDataReply(optional.orNull(), message.getVersion());
    sender().tell(readDataReply.toSerializable(), self());
  }
 private boolean checkClosed(AbstractShardDataTreeTransaction<?> transaction) {
   final boolean ret = transaction.isClosed();
   if (ret) {
     shardStats.incrementFailedReadTransactionsCount();
     getSender()
         .tell(
             new akka.actor.Status.Failure(new ReadFailedException("Transaction is closed")),
             getSelf());
   }
   return ret;
 }