This is an automated email from the ASF dual-hosted git repository.
feiwang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git
The following commit(s) were added to refs/heads/master by this push:
new 745e3a4d6 [KYUUBI #5056] [REST] Return more helpful error message to
http client
745e3a4d6 is described below
commit 745e3a4d658b314b6fec422665571b6a93cb4f08
Author: fwang12 <[email protected]>
AuthorDate: Sat Jul 15 13:16:11 2023 +0800
[KYUUBI #5056] [REST] Return more helpful error message to http client
### _Why are the changes needed?_
Return mode helpful information to http client side.
Before this pr, the exception stack is only visible in server side log.
### _How was this patch tested?_
- [ ] Add some test cases that check the changes thoroughly including
negative and positive cases if possible
- [ ] Add screenshots for manual tests if appropriate
- [x] [Run
test](https://kyuubi.readthedocs.io/en/master/contributing/code/testing.html#running-tests)
locally before make a pull request
Closes #5056 from turboFei/info_err.
Closes #5056
cdda80557 [fwang12] refine
2da2b2072 [fwang12] pretty print
Authored-by: fwang12 <[email protected]>
Signed-off-by: fwang12 <[email protected]>
---
.../org/apache/kyuubi/server/api/ApiUtils.scala | 9 ++++-
.../kyuubi/server/api/v1/OperationsResource.scala | 18 ++++-----
.../kyuubi/server/api/v1/SessionsResource.scala | 43 +++++++++-------------
3 files changed, 31 insertions(+), 39 deletions(-)
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/ApiUtils.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/ApiUtils.scala
index 6b01def5c..5aaf4d778 100644
--- a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/ApiUtils.scala
+++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/ApiUtils.scala
@@ -19,14 +19,14 @@ package org.apache.kyuubi.server.api
import scala.collection.JavaConverters._
-import org.apache.kyuubi.Utils
+import org.apache.kyuubi.{Logging, Utils}
import org.apache.kyuubi.client.api.v1.dto.{OperationData, ServerData,
SessionData}
import org.apache.kyuubi.events.KyuubiOperationEvent
import org.apache.kyuubi.ha.client.ServiceNodeInfo
import org.apache.kyuubi.operation.KyuubiOperation
import org.apache.kyuubi.session.KyuubiSession
-object ApiUtils {
+object ApiUtils extends Logging {
def sessionData(session: KyuubiSession): SessionData = {
val sessionEvent = session.getSessionEvent
@@ -71,4 +71,9 @@ object ApiUtils {
nodeInfo.attributes.asJava,
"Running")
}
+
+ def logAndRefineErrorMsg(errorMsg: String, throwable: Throwable): String = {
+ error(errorMsg, throwable)
+ s"$errorMsg: ${Utils.prettyPrint(throwable)}"
+ }
}
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/OperationsResource.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/OperationsResource.scala
index b79ee27e3..ae5feea52 100644
---
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/OperationsResource.scala
+++
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/OperationsResource.scala
@@ -32,12 +32,13 @@ import org.apache.kyuubi.{KyuubiSQLException, Logging}
import org.apache.kyuubi.client.api.v1.dto._
import org.apache.kyuubi.events.KyuubiOperationEvent
import org.apache.kyuubi.operation.{FetchOrientation, KyuubiOperation,
OperationHandle}
-import org.apache.kyuubi.server.api.ApiRequestContext
+import org.apache.kyuubi.server.api.{ApiRequestContext, ApiUtils}
@Tag(name = "Operation")
@Produces(Array(MediaType.APPLICATION_JSON))
@Consumes(Array(MediaType.APPLICATION_JSON))
private[v1] class OperationsResource extends ApiRequestContext with Logging {
+ import ApiUtils.logAndRefineErrorMsg
@ApiResponse(
responseCode = "200",
@@ -57,8 +58,7 @@ private[v1] class OperationsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting an operation event"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -84,8 +84,7 @@ private[v1] class OperationsResource extends
ApiRequestContext with Logging {
case NonFatal(e) =>
val errorMsg =
s"Error applying ${request.getAction} for operation handle
$operationHandleStr"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -124,8 +123,7 @@ private[v1] class OperationsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = s"Error getting result set metadata for operation
handle $operationHandleStr"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -158,8 +156,7 @@ private[v1] class OperationsResource extends
ApiRequestContext with Logging {
throw e
case NonFatal(e) =>
val errorMsg = s"Error getting operation log for operation handle
$operationHandleStr"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -240,8 +237,7 @@ private[v1] class OperationsResource extends
ApiRequestContext with Logging {
throw new BadRequestException(e.getMessage)
case NonFatal(e) =>
val errorMsg = s"Error getting result row set for operation handle
$operationHandleStr"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
}
diff --git
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/SessionsResource.scala
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/SessionsResource.scala
index bc480c027..10a557867 100644
---
a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/SessionsResource.scala
+++
b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/api/v1/SessionsResource.scala
@@ -42,6 +42,8 @@ import org.apache.kyuubi.session.{KyuubiSession,
SessionHandle}
@Produces(Array(MediaType.APPLICATION_JSON))
@Consumes(Array(MediaType.APPLICATION_JSON))
private[v1] class SessionsResource extends ApiRequestContext with Logging {
+ import ApiUtils.logAndRefineErrorMsg
+
implicit def toSessionHandle(str: String): SessionHandle =
SessionHandle.fromUUID(str)
private def sessionManager = fe.be.sessionManager
@@ -89,8 +91,8 @@ private[v1] class SessionsResource extends ApiRequestContext
with Logging {
.build).get
} catch {
case NonFatal(e) =>
- error(s"Invalid $sessionHandleStr", e)
- throw new NotFoundException(s"Invalid $sessionHandleStr")
+ val errorMsg = s"Invalid $sessionHandleStr"
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -112,8 +114,8 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
new InfoDetail(info.toString, infoValue.getStringValue)
} catch {
case NonFatal(e) =>
- error(s"Unrecognized GetInfoType value: $infoType", e)
- throw new NotFoundException(s"Unrecognized GetInfoType value:
$infoType")
+ val errorMsg = s"Unrecognized GetInfoType value: $infoType"
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -198,8 +200,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error executing statement"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -217,8 +218,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting type information"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -236,8 +236,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting catalogs"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -261,8 +260,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting schemas"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -287,8 +285,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting tables"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -306,8 +303,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting table types"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -332,8 +328,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting columns"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -357,8 +352,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting functions"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -382,8 +376,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting primary keys"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -410,8 +403,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting cross reference"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
@@ -437,8 +429,7 @@ private[v1] class SessionsResource extends
ApiRequestContext with Logging {
} catch {
case NonFatal(e) =>
val errorMsg = "Error getting the list of all type operations belong
to session"
- error(errorMsg, e)
- throw new NotFoundException(errorMsg)
+ throw new NotFoundException(logAndRefineErrorMsg(errorMsg, e))
}
}
}