Search in sources :

Example 1 with AskTimeoutException

use of akka.pattern.AskTimeoutException in project controller by opendaylight.

the class RemoteTransactionContextSupport method createTransactionContext.

private void createTransactionContext(final Throwable failure, final Object response) {
    // Create the TransactionContext from the response or failure. Store the new
    // TransactionContext locally until we've completed invoking the
    // TransactionOperations. This avoids thread timing issues which could cause
    // out-of-order TransactionOperations. Eg, on a modification operation, if the
    // TransactionContext is non-null, then we directly call the TransactionContext.
    // However, at the same time, the code may be executing the cached
    // TransactionOperations. So to avoid thus timing, we don't publish the
    // TransactionContext until after we've executed all cached TransactionOperations.
    TransactionContext localTransactionContext;
    if (failure != null) {
        LOG.debug("Tx {} Creating NoOpTransaction because of error", getIdentifier(), failure);
        Throwable resultingEx = failure;
        if (failure instanceof AskTimeoutException) {
            resultingEx = new ShardLeaderNotRespondingException(String.format("Could not create a %s transaction on shard %s. The shard leader isn't responding.", parent.getType(), shardName), failure);
        } else if (!(failure instanceof NoShardLeaderException)) {
            resultingEx = new Exception(String.format("Error creating %s transaction on shard %s", parent.getType(), shardName), failure);
        }
        localTransactionContext = new NoOpTransactionContext(resultingEx, getIdentifier());
    } else if (CreateTransactionReply.isSerializedType(response)) {
        localTransactionContext = createValidTransactionContext(CreateTransactionReply.fromSerializable(response));
    } else {
        IllegalArgumentException exception = new IllegalArgumentException(String.format("Invalid reply type %s for CreateTransaction", response.getClass()));
        localTransactionContext = new NoOpTransactionContext(exception, getIdentifier());
    }
    transactionContextWrapper.executePriorTransactionOperations(localTransactionContext);
}
Also used : ShardLeaderNotRespondingException(org.opendaylight.controller.cluster.datastore.exceptions.ShardLeaderNotRespondingException) AskTimeoutException(akka.pattern.AskTimeoutException) ShardLeaderNotRespondingException(org.opendaylight.controller.cluster.datastore.exceptions.ShardLeaderNotRespondingException) NoShardLeaderException(org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException) AskTimeoutException(akka.pattern.AskTimeoutException) NoShardLeaderException(org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException)

Aggregations

AskTimeoutException (akka.pattern.AskTimeoutException)1 NoShardLeaderException (org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException)1 ShardLeaderNotRespondingException (org.opendaylight.controller.cluster.datastore.exceptions.ShardLeaderNotRespondingException)1