Example usage for io.netty.util.concurrent Promise cause

List of usage examples for io.netty.util.concurrent Promise cause

Introduction

In this page you can find the example usage for io.netty.util.concurrent Promise cause.

Prototype

Throwable cause();

Source Link

Document

Returns the cause of the failed I/O operation if the I/O operation has failed.

Usage

From source file:com.linecorp.armeria.common.RequestContext.java

License:Apache License

/**
 * Resolves the specified {@code promise} with the specified {@code result} so that the {@code promise} is
 * marked as 'done'. If {@code promise} is done already, this method does the following:
 * <ul>/* w ww .  j  av a  2 s .  c om*/
 *   <li>Log a warning about the failure, and</li>
 *   <li>Release {@code result} if it is {@linkplain ReferenceCounted a reference-counted object},
 *       such as {@link ByteBuf} and {@link FullHttpResponse}.</li>
 * </ul>
 * Note that a {@link Promise} can be done already even if you did not call this method in the following
 * cases:
 * <ul>
 *   <li>Invocation timeout - The invocation associated with the {@link Promise} has been timed out.</li>
 *   <li>User error - A service implementation called any of the following methods more than once:
 *     <ul>
 *       <li>{@link #resolvePromise(Promise, Object)}</li>
 *       <li>{@link #rejectPromise(Promise, Throwable)}</li>
 *       <li>{@link Promise#setSuccess(Object)}</li>
 *       <li>{@link Promise#setFailure(Throwable)}</li>
 *       <li>{@link Promise#cancel(boolean)}</li>
 *     </ul>
 *   </li>
 * </ul>
 */
@Deprecated
default void resolvePromise(Promise<?> promise, Object result) {
    @SuppressWarnings("unchecked")
    final Promise<Object> castPromise = (Promise<Object>) promise;

    if (castPromise.trySuccess(result)) {
        // Resolved successfully.
        return;
    }

    try {
        if (!(promise.cause() instanceof TimeoutException)) {
            // Log resolve failure unless it is due to a timeout.
            LoggerFactory.getLogger(RequestContext.class)
                    .warn("Failed to resolve a completed promise ({}) with {}", promise, result);
        }
    } finally {
        ReferenceCountUtil.safeRelease(result);
    }
}

From source file:com.linecorp.armeria.common.RequestContext.java

License:Apache License

/**
 * Rejects the specified {@code promise} with the specified {@code cause}. If {@code promise} is done
 * already, this method logs a warning about the failure. Note that a {@link Promise} can be done already
 * even if you did not call this method in the following cases:
 * <ul>/*from   ww w.  ja v a2 s. c om*/
 *   <li>Invocation timeout - The invocation associated with the {@link Promise} has been timed out.</li>
 *   <li>User error - A service implementation called any of the following methods more than once:
 *     <ul>
 *       <li>{@link #resolvePromise(Promise, Object)}</li>
 *       <li>{@link #rejectPromise(Promise, Throwable)}</li>
 *       <li>{@link Promise#setSuccess(Object)}</li>
 *       <li>{@link Promise#setFailure(Throwable)}</li>
 *       <li>{@link Promise#cancel(boolean)}</li>
 *     </ul>
 *   </li>
 * </ul>
 */
@Deprecated
default void rejectPromise(Promise<?> promise, Throwable cause) {
    if (promise.tryFailure(cause)) {
        // Fulfilled successfully.
        return;
    }

    final Throwable firstCause = promise.cause();
    if (firstCause instanceof TimeoutException) {
        // Timed out already.
        return;
    }

    if (Exceptions.isExpected(cause)) {
        // The exception that was thrown after firstCause (often a transport-layer exception)
        // was a usual expected exception, not an error.
        return;
    }

    LoggerFactory.getLogger(RequestContext.class).warn("Failed to reject a completed promise ({}) with {}",
            promise, cause, cause);
}

From source file:com.linecorp.armeria.common.ServiceInvocationContext.java

License:Apache License

/**
 * Resolves the specified {@code promise} with the specified {@code result} so that the {@code promise} is
 * marked as 'done'. If {@code promise} is done already, this method does the following:
 * <ul>//w  w w.ja v a  2 s .  c om
 *   <li>Log a warning about the failure, and</li>
 *   <li>Release {@code result} if it is {@linkplain ReferenceCounted a reference-counted object},
 *       such as {@link ByteBuf} and {@link FullHttpResponse}.</li>
 * </ul>
 * Note that a {@link Promise} can be done already even if you did not call this method in the following
 * cases:
 * <ul>
 *   <li>Invocation timeout - The invocation associated with the {@link Promise} has been timed out.</li>
 *   <li>User error - A service implementation called any of the following methods more than once:
 *     <ul>
 *       <li>{@link #resolvePromise(Promise, Object)}</li>
 *       <li>{@link #rejectPromise(Promise, Throwable)}</li>
 *       <li>{@link Promise#setSuccess(Object)}</li>
 *       <li>{@link Promise#setFailure(Throwable)}</li>
 *       <li>{@link Promise#cancel(boolean)}</li>
 *     </ul>
 *   </li>
 * </ul>
 */
public void resolvePromise(Promise<?> promise, Object result) {
    @SuppressWarnings("unchecked")
    final Promise<Object> castPromise = (Promise<Object>) promise;

    if (castPromise.trySuccess(result)) {
        // Resolved successfully.
        return;
    }

    try {
        if (!(promise.cause() instanceof TimeoutException)) {
            // Log resolve failure unless it is due to a timeout.
            logger().warn("Failed to resolve a completed promise ({}) with {}", promise, result);
        }
    } finally {
        ReferenceCountUtil.safeRelease(result);
    }
}

From source file:com.linecorp.armeria.common.ServiceInvocationContext.java

License:Apache License

/**
 * Rejects the specified {@code promise} with the specified {@code cause}. If {@code promise} is done
 * already, this method logs a warning about the failure. Note that a {@link Promise} can be done already
 * even if you did not call this method in the following cases:
 * <ul>//w w w .j a  v a  2  s.co m
 *   <li>Invocation timeout - The invocation associated with the {@link Promise} has been timed out.</li>
 *   <li>User error - A service implementation called any of the following methods more than once:
 *     <ul>
 *       <li>{@link #resolvePromise(Promise, Object)}</li>
 *       <li>{@link #rejectPromise(Promise, Throwable)}</li>
 *       <li>{@link Promise#setSuccess(Object)}</li>
 *       <li>{@link Promise#setFailure(Throwable)}</li>
 *       <li>{@link Promise#cancel(boolean)}</li>
 *     </ul>
 *   </li>
 * </ul>
 */
public void rejectPromise(Promise<?> promise, Throwable cause) {
    if (promise.tryFailure(cause)) {
        // Fulfilled successfully.
        return;
    }

    final Throwable firstCause = promise.cause();
    if (firstCause instanceof TimeoutException) {
        // Timed out already.
        return;
    }

    if (Exceptions.isExpected(cause)) {
        // The exception that was thrown after firstCause (often a transport-layer exception)
        // was a usual expected exception, not an error.
        return;
    }

    logger().warn("Failed to reject a completed promise ({}) with {}", promise, cause, cause);
}