zhangbutao commented on PR #3393:
URL: https://github.com/apache/hive/pull/3393#issuecomment-1164078451
@zabetak I checked beeline code adn hs2 code, and i still think this change
should be fixed in hs2 side. Here's my test, please correct me if i am wrong.
Thank you.
1. Use following query to test exception message:
`set hive.support.concurrency=false;`
`set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;`
`create table testacid(id int) stored as orc
tblproperties('transactional'='true');`
2. The final result which wraps exception returned from **HS2 side**, a
_**TExecuteStatementResp**_ object
https://github.com/apache/hive/blob/8f1a5b6854daf5fb4814632f9356ef5fe7bb6964/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java#L672-L679
And the final exception massage is set using
_tStatus.setErrorMessage(getMessage());_, that is say client can only get
simplified exception message(**_Error running query_**) instead of full
exception stacktrace:
https://github.com/apache/hive/blob/8f1a5b6854daf5fb4814632f9356ef5fe7bb6964/service/src/java/org/apache/hive/service/cli/HiveSQLException.java#L131
3. The excepton displayed from the **Beeline side**:
Beeline client gets query response (**_TExecuteStatementResp_** object) from
HS2 side, and uses _Utils.verifySuccessWithInfo(execResp.getStatus())_ to check
status or throw exception:
https://github.com/apache/hive/blob/8f1a5b6854daf5fb4814632f9356ef5fe7bb6964/jdbc/src/java/org/apache/hive/jdbc/HiveStatement.java#L353-L354
https://github.com/apache/hive/blob/8f1a5b6854daf5fb4814632f9356ef5fe7bb6964/jdbc/src/java/org/apache/hive/jdbc/Utils.java#L378-L383
The final exception message displayed to client is
_status.getErrorMessage()_, that is "**_Error running query_**" returned from
HS2 side:
https://github.com/apache/hive/blob/8f1a5b6854daf5fb4814632f9356ef5fe7bb6964/service/src/java/org/apache/hive/service/cli/HiveSQLException.java#L117-L118
So, i think the root cause was that HS2 side did not return full valid
exception message, and because we often use **_e.getMessage()_** to retrieve
meaningful exception, we should add message content when throw a exception,
e.g.:
`throw new HiveSQLException("Error running query: " + e.toString(), e);`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]