You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by hu...@apache.org on 2017/05/27 08:56:32 UTC
incubator-hawq git commit: HAWQ-1443. Fix bug of HawqClient may
connect to different database.
Repository: incubator-hawq
Updated Branches:
refs/heads/master 6768af3e0 -> 4068f3ce0
HAWQ-1443. Fix bug of HawqClient may connect to different database.
Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/4068f3ce
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/4068f3ce
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/4068f3ce
Branch: refs/heads/master
Commit: 4068f3ce095c6b65e116ec4e8b7f636e5cf111b0
Parents: 6768af3
Author: hubertzhang <hu...@apache.org>
Authored: Sat May 27 14:47:26 2017 +0800
Committer: hubertzhang <hu...@apache.org>
Committed: Sat May 27 16:55:25 2017 +0800
----------------------------------------------------------------------
.../apache/hawq/ranger/service/HawqClient.java | 63 ++++++++++++++++----
.../hawq/ranger/service/HawqResourceMgr.java | 1 +
.../hawq/ranger/service/RangerServiceHawq.java | 1 +
.../hawq/ranger/service/HawqClientTest.java | 1 +
4 files changed, 54 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/4068f3ce/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqClient.java
----------------------------------------------------------------------
diff --git a/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqClient.java b/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqClient.java
index f8a252b..5d2cd71 100644
--- a/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqClient.java
+++ b/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqClient.java
@@ -29,6 +29,7 @@ import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
+import java.sql.*;
import java.util.*;
import javax.security.auth.Subject;
@@ -70,10 +71,12 @@ public class HawqClient extends BaseClient {
public static final List<String> INTERNAL_PROTOCOLS = HawqProtocols.getAllProtocols();
private static final String DEFAULT_DATABASE = "postgres";
+ private static final String DEFAULT_DATABASE_TEMPLATE = "DBTOBEREPLACEDINJDBCURL";
private static final String JDBC_DRIVER_CLASS = "org.postgresql.Driver";
private boolean isKerberosAuth = false;
private Connection con;
+ private String jdbc_url_template = "";
private Map<String, String> connectionProperties;
// we need to load class for the Postgres Driver directly to allow it to register with DriverManager
@@ -124,13 +127,13 @@ public class HawqClient extends BaseClient {
}});
}
else {
- LOG.info("Trying to use UnSecure client with username and password");
+ LOG.info("Trying to use UnSecure client with username "+ getConfigHolder().getUserName() +" and password");
final String userName = getConfigHolder().getUserName();
final String password = getConfigHolder().getPassword();
initConnection(userName, password);
}
}
-
+
private void initConnectionKerberos(String serverPricipal, String userPrincipal) throws SQLException{
try {
String url = String.format("jdbc:postgresql://%s:%s/%s?kerberosServerName=%s&jaasApplicationName=pgjdbc&user=%s",
@@ -142,6 +145,11 @@ public class HawqClient extends BaseClient {
LOG.debug("InitConnectionKerberos "+ url);
}
con = DriverManager.getConnection(url);
+ jdbc_url_template = String.format("jdbc:postgresql://%s:%s/%s?kerberosServerName=%s&jaasApplicationName=pgjdbc&user=%s",
+ connectionProperties.get("hostname"),
+ connectionProperties.get("port"), DEFAULT_DATABASE_TEMPLATE,
+ serverPricipal, userPrincipal
+ );
} catch (SQLException e) {
e.printStackTrace();
LOG.error("Unable to Connect to Hawq", e);
@@ -159,6 +167,7 @@ public class HawqClient extends BaseClient {
LOG.debug("InitConnectionKerberos "+ url);
}
con = DriverManager.getConnection(url, userName, password);
+ jdbc_url_template = String.format("jdbc:postgresql://%s:%s/%s", connectionProperties.get("hostname"), connectionProperties.get("port"), DEFAULT_DATABASE_TEMPLATE);
} catch (SQLException e) {
e.printStackTrace();
LOG.error("Unable to Connect to Hawq", e);
@@ -171,6 +180,36 @@ public class HawqClient extends BaseClient {
public void setConnection(Connection conn) {
con = conn;
}
+
+ public void resetConnection(String db) throws SQLException{
+ try {
+ if(db == null) {
+ return;
+ }
+ String newdb = db;
+ LOG.debug("resetconnectionbefore "+ jdbc_url_template + newdb);
+ String url = jdbc_url_template.replace(DEFAULT_DATABASE_TEMPLATE, newdb);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("resetconnection "+ jdbc_url_template+ url);
+ }
+ if(con !=null && !con.isClosed()){
+ con.close();
+ }
+ if (isKerberosAuth) {
+ con = DriverManager.getConnection(url);
+ } else {
+ final String userName = getConfigHolder().getUserName();
+ final String password = getConfigHolder().getPassword();
+ con = DriverManager.getConnection(url, userName, password);
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ LOG.error("Unable to Connect to Hawq", e);
+ throw e;
+ } catch (SecurityException se) {
+ se.printStackTrace();
+ }
+ }
/**
* Uses the connectionProperties and attempts to connect to Hawq.
@@ -205,7 +244,6 @@ public class HawqClient extends BaseClient {
String message = isConnected ? CONNECTION_SUCCESSFUL_MESSAGE : CONNECTION_FAILURE_MESSAGE;
generateResponseDataMap(isConnected, message, description, null, null, result);
-
return result;
}
@@ -278,22 +316,22 @@ public class HawqClient extends BaseClient {
return new ArrayList<>(uniqueResults);
}
for (String db: databases) {
+ resetConnection(db);
if (LOG.isDebugEnabled()) {
LOG.debug("<== HawqClient.queryHawqPerDbAndSchema: Connecting to db: " + db);
}
try {
preparedStatement = handleWildcardPreparedStatement(userInput, query, con);
-
+
if (LOG.isDebugEnabled()) {
- LOG.debug("<== HawqClient.queryHawqPerDbAndSchema Starting query: " + query);
+ LOG.debug("<== HawqClient.queryHawqPerDbAndSchema Starting query: " + preparedStatement.toString());
}
-
+
resultSet = preparedStatement.executeQuery();
-
while(resultSet.next()) {
- if(schemas.contains(resultSet.getString(schemaColumnName)) || schemas.contains(WILDCARD)) {
- uniqueResults.add(resultSet.getString(resultColumnName));
+ if(schemas.contains(resultSet.getString(schemaColumnName)) || schemas.contains(WILDCARD)) {
+ uniqueResults.add(resultSet.getString(resultColumnName));
}
}
@@ -317,14 +355,15 @@ public class HawqClient extends BaseClient {
ResultSet resultSet = null;
try {
- if(con == null) {
- return result;
+ resetConnection(database);
+ if(con == null) {
+ return result;
}
preparedStatement = handleWildcardPreparedStatement(userInput, query, con);
if (LOG.isDebugEnabled()) {
- LOG.debug("<== HawqClient.queryHawq Starting query: " + query);
+ LOG.debug("<== HawqClient.queryHawq Starting query: " + preparedStatement.toString());
}
resultSet = preparedStatement.executeQuery();
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/4068f3ce/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqResourceMgr.java
----------------------------------------------------------------------
diff --git a/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqResourceMgr.java b/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqResourceMgr.java
index d9f68d7..6dc9cad 100644
--- a/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqResourceMgr.java
+++ b/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/HawqResourceMgr.java
@@ -132,6 +132,7 @@ public abstract class HawqResourceMgr {
Collections.sort(result);
+ hawqClient.close();
} catch (Exception e) {
LOG.error("Unable to get hive resources.", e);
throw e;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/4068f3ce/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/RangerServiceHawq.java
----------------------------------------------------------------------
diff --git a/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/RangerServiceHawq.java b/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/RangerServiceHawq.java
index 24a76ca..9c1ccc8 100644
--- a/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/RangerServiceHawq.java
+++ b/ranger-plugin/admin-plugin/src/main/java/org/apache/hawq/ranger/service/RangerServiceHawq.java
@@ -55,6 +55,7 @@ public class RangerServiceHawq extends RangerBaseService {
try {
HawqClient hawqClient = new HawqClient(serviceName, configs);
result = hawqClient.checkConnection(configs);
+ hawqClient.close();
} catch (HadoopException e) {
LOG.error("<== RangerServiceHawq.validateConfig Error:" + e);
throw e;
http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/4068f3ce/ranger-plugin/admin-plugin/src/test/java/org/apache/hawq/ranger/service/HawqClientTest.java
----------------------------------------------------------------------
diff --git a/ranger-plugin/admin-plugin/src/test/java/org/apache/hawq/ranger/service/HawqClientTest.java b/ranger-plugin/admin-plugin/src/test/java/org/apache/hawq/ranger/service/HawqClientTest.java
index 64bf874..be3be17 100644
--- a/ranger-plugin/admin-plugin/src/test/java/org/apache/hawq/ranger/service/HawqClientTest.java
+++ b/ranger-plugin/admin-plugin/src/test/java/org/apache/hawq/ranger/service/HawqClientTest.java
@@ -70,6 +70,7 @@ public class HawqClientTest {
suppress(constructor(BaseClient.class, String.class, Map.class));
suppress(method(HawqClient.class, "initHawq"));
+ suppress(method(HawqClient.class, "resetConnection"));
hawqClient = new HawqClient("hawq", connectionProperties);
hawqClient.setConnection(conn);
hawqClientSpy = PowerMockito.spy(hawqClient);