Github user squito commented on a diff in the pull request: https://github.com/apache/spark/pull/6205#discussion_r32258932 --- Diff: core/src/main/scala/org/apache/spark/rpc/RpcEnv.scala --- @@ -182,3 +185,117 @@ private[spark] object RpcAddress { RpcAddress(host, port) } } + + +/** + * An exception thrown if RpcTimeout modifies a [[TimeoutException]]. + */ +private[rpc] class RpcTimeoutException(message: String, cause: TimeoutException) + extends TimeoutException(message) { initCause(cause) } + + +/** + * Associates a timeout with a description so that a when a TimeoutException occurs, additional + * context about the timeout can be amended to the exception message. + * @param timeout timeout duration in seconds + * @param description description to be displayed in a timeout exception + */ +private[spark] class RpcTimeout(timeout: FiniteDuration, description: String) { + + /** Get the timeout duration */ + def duration: FiniteDuration = timeout + + /** Get the message associated with this timeout */ + def message: String = description + + /** Amends the standard message of TimeoutException to include the description */ + private def createRpcTimeoutException(te: TimeoutException): RpcTimeoutException = { + new RpcTimeoutException(te.getMessage() + " " + description, te) + } + + /** + * PartialFunction to match a TimeoutException and add the timeout description to the message + * + * @note This can be used in the recover callback of a Future to add to a TimeoutException + * Example: + * val timeout = new RpcTimeout(5 millis, "short timeout") + * Future(throw new TimeoutException).recover(timeout.addMessageIfTimeout) + */ + def addMessageIfTimeout[T]: PartialFunction[Throwable, T] = { + // The exception has already been converted to a RpcTimeoutException so just raise it + case rte: RpcTimeoutException => throw rte + // Any other TimeoutException get converted to a RpcTimeoutException with modified message + case te: TimeoutException => throw createRpcTimeoutException(te) + } + + /** + * Waits for a completed result to catch and amend a TimeoutException message --- End diff -- I think it would be a little clearer as: "Wait for the completed result and return it. If the result is not available within this timeout, throw a [[TimeoutException]] which indicates which configuration controls the timeout."
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org