[ https://issues.apache.org/jira/browse/HIVE-25203?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
László Bodor resolved HIVE-25203. --------------------------------- Fix Version/s: 4.0.0 Resolution: Fixed > HiveQueryResultSet and client operation are not expected to be closed twice > --------------------------------------------------------------------------- > > Key: HIVE-25203 > URL: https://issues.apache.org/jira/browse/HIVE-25203 > Project: Hive > Issue Type: Bug > Reporter: László Bodor > Assignee: László Bodor > Priority: Major > Labels: pull-request-available > Fix For: 4.0.0 > > Time Spent: 0.5h > Remaining Estimate: 0h > > While testing retry scenarios of HIVE-24786, we found that > HiveQueryResultSet.close() is called twice, which is not expected. There are > 2 different issues here: > 1. ResultSet should not handle Statement as in HiveQueryResultSet: > {code} > if (this.statement != null && (this.statement instanceof HiveStatement)) { > HiveStatement s = (HiveStatement) this.statement; > s.closeClientOperation(); > {code} > The hiearchy of Connection(HiveConnection) -> Statement(HiveStatement) -> > ResultSet(HiveQueryResultSet) should be respected in a sense that the parent > can handle child but not the opposite way, only except a single case, where > the state of the result set has an effect on statement's state, which is > [Statement.closeOnCompletion|https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#closeOnCompletion()], > which was introduced by HIVE-22698. > The above logic was introduced by > [HIVE-4974|https://github.com/apache/hive/blame/master/jdbc/src/java/org/apache/hive/jdbc/HiveQueryResultSet.java#L276]. > Its intention was to make children able to return their parents, but that > doesn't mean they should handle their parents' lifecycle. > 2. Also, HiveStatement should close HiveQueryResultSet only if it's not > already closed, so it would make sense to check ResultSet.isClosed() before > closing. This is for the very same reason as another change above, to avoid > duplicated close logic. > Background: under normal circumstances, a close operation is idempotent, we > should not worry about any side effects of calling it twice, but while > testing HIVE-24786, we found strange issues where in case of a > SocketTimeoutException, such code path was hit in the jdbc client, that made > HiveStatement.closeClientOperation() to be called twice, and it led to a > WARNING on HS2 side. This is not expected as the operation close is protected > by stmtHandle != null check, but yet it ran twice. To avoid situations like > this, cleaning up duplicated close calls would help. -- This message was sent by Atlassian Jira (v8.3.4#803005)