You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2015/10/01 00:23:31 UTC
hive git commit: HIVE-11915 : BoneCP returns closed connections from
the pool (Sergey Shelukhin, reviewed by Thejar M Nair)
Repository: hive
Updated Branches:
refs/heads/master 50b6d0c6b -> edd630043
HIVE-11915 : BoneCP returns closed connections from the pool (Sergey Shelukhin, reviewed by Thejar M Nair)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/edd63004
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/edd63004
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/edd63004
Branch: refs/heads/master
Commit: edd63004375602bf7550513380ec25cf34ca5cf5
Parents: 50b6d0c
Author: Sergey Shelukhin <se...@apache.org>
Authored: Wed Sep 30 15:23:25 2015 -0700
Committer: Sergey Shelukhin <se...@apache.org>
Committed: Wed Sep 30 15:24:48 2015 -0700
----------------------------------------------------------------------
.../hadoop/hive/metastore/txn/TxnHandler.java | 25 +++++++++++---------
1 file changed, 14 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/edd63004/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
index 8597d9f..0b19368 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java
@@ -84,6 +84,7 @@ public class TxnHandler {
static final private Log LOG = LogFactory.getLog(TxnHandler.class.getName());
static private DataSource connPool;
+ static private boolean doRetryOnConnPool = false;
private final static Object lockLock = new Object(); // Random object to lock on for the lock
// method
@@ -885,18 +886,19 @@ public class TxnHandler {
}
- /**
- * Get a connection to the database
- * @param isolationLevel desired isolation level. If you are doing _any_ data modifications
- * you should request serializable, else read committed should be fine.
- * @return db connection
- * @throws MetaException if the connection cannot be obtained
- */
protected Connection getDbConn(int isolationLevel) throws SQLException {
- Connection dbConn = connPool.getConnection();
- dbConn.setAutoCommit(false);
- dbConn.setTransactionIsolation(isolationLevel);
- return dbConn;
+ int rc = doRetryOnConnPool ? 10 : 1;
+ while (true) {
+ try {
+ Connection dbConn = connPool.getConnection();
+ dbConn.setAutoCommit(false);
+ dbConn.setTransactionIsolation(isolationLevel);
+ return dbConn;
+ } catch (SQLException e){
+ if ((--rc) <= 0) throw e;
+ LOG.error("There is a problem with a connection from the pool, retrying", e);
+ }
+ }
}
void rollbackDBConn(Connection dbConn) {
@@ -1964,6 +1966,7 @@ public class TxnHandler {
config.setUser(user);
config.setPassword(passwd);
connPool = new BoneCPDataSource(config);
+ doRetryOnConnPool = true; // Enable retries to work around BONECP bug.
} else if ("dbcp".equals(connectionPooler)) {
ObjectPool objectPool = new GenericObjectPool();
ConnectionFactory connFactory = new DriverManagerConnectionFactory(driverUrl, user, passwd);