[ 
https://issues.apache.org/jira/browse/HIVE-14524?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Wei Yan reassigned HIVE-14524:
------------------------------

    Assignee: Wei Yan  (was: Chao Sun)

> BaseSemanticAnalyzer may leak HMS connection
> --------------------------------------------
>
>                 Key: HIVE-14524
>                 URL: https://issues.apache.org/jira/browse/HIVE-14524
>             Project: Hive
>          Issue Type: Bug
>          Components: HiveServer2
>    Affects Versions: 2.2.0
>            Reporter: Chao Sun
>            Assignee: Wei Yan
>
> Currently {{BaseSemanticAnalyzer}} keeps a copy of thread-local {{Hive}} 
> object to connect to HMS. However, in some cases Hive may overwrite the 
> existing {{Hive}} object:
> {{Hive#getInternal}}:
> {code}
>   private static Hive getInternal(HiveConf c, boolean needsRefresh, boolean 
> isFastCheck,
>       boolean doRegisterAllFns) throws HiveException {
>     Hive db = hiveDB.get();
>     if (db == null || !db.isCurrentUserOwner() || needsRefresh
>         || (c != null && db.metaStoreClient != null && !isCompatible(db, c, 
> isFastCheck))) {
>       return create(c, false, db, doRegisterAllFns);
>     }
>     if (c != null) {
>       db.conf = c;
>     }
>     return db;
>   }
> {code}
> *This poses an potential problem*: if one first instantiates a 
> {{BaseSemanticAnalyzer}} object with the current {{Hive}} object (let's call 
> it A), and for some reason A is overwritten by B with the code above, then 
> {{BaseSemanticAnalyzer}} may keep using A to contact HMS, which will leak 
> connections.
> This can be reproduced by the following steps:
> 1. open a session
> 2. execute some simple query such as {{desc formatted src}}
> 3. change a metastore property (I know, this is not a perfect example...), 
> for instance: {{set hive.txn.timeout=500}}
> 4. run another command such as {{desc formatted src}} again
> Notice that in step 4), since a metavar is changed the {{isCompatible}} will 
> return false, and hence a new {{Hive}} object is created. As result, you'll 
> observe in the HS2 log that an connection has been leaked.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to