This is an automated email from the ASF dual-hosted git repository.
jiafengzheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris-manager.git
The following commit(s) were added to refs/heads/master by this push:
new 017d70e replace doris http query client with jdbc (#25)
017d70e is described below
commit 017d70e957a8e3e346aadfa2035f276ec3e4a799
Author: LiRui <[email protected]>
AuthorDate: Wed Mar 30 16:54:12 2022 +0800
replace doris http query client with jdbc (#25)
replace doris http query client with jdbc
---
.../doris/stack/connector/PaloQueryClient.java | 211 +++++++--------------
.../model/response/construct/NativeQueryResp.java | 1 +
2 files changed, 65 insertions(+), 147 deletions(-)
diff --git
a/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
b/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
index d43720f..9e4a89e 100644
---
a/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
+++
b/manager/manager/src/main/java/org/apache/doris/stack/connector/PaloQueryClient.java
@@ -19,24 +19,19 @@ package org.apache.doris.stack.connector;
import static
org.apache.doris.stack.constant.ConstantDef.PALO_ANALYZER_USER_PASSWORD;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-
-import org.apache.doris.stack.dao.PermissionsGroupRoleRepository;
-import org.apache.doris.stack.entity.PermissionsGroupRoleEntity;
-import org.apache.doris.stack.model.palo.PaloResponseEntity;
+import org.apache.doris.stack.driver.JdbcSampleClient;
import org.apache.doris.stack.model.response.construct.NativeQueryResp;
import org.apache.doris.stack.entity.ClusterInfoEntity;
-import org.apache.doris.stack.exception.PaloRequestException;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.Statement;
+import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
@Component
@Slf4j
@@ -49,8 +44,7 @@ public class PaloQueryClient extends PaloClient {
}
@Autowired
- private PermissionsGroupRoleRepository groupRoleRepository;
-
+ private JdbcSampleClient jdbcClient;
/**
* Create an ordinary analyst Palo large account user
* @param ns
@@ -63,7 +57,7 @@ public class PaloQueryClient extends PaloClient {
try {
String createSql = "create user '" + userName + "'@'%' IDENTIFIED
BY '" + passwd + "'";
- executeSQLNew(createSql, ns, db, entity);
+ executeSQL(createSql, ns, db, entity);
// String permissionSql = "GRANT SELECT_PRIV ON *.* TO
'" + userName + "'@'%'";
// executeSQL(permissionSql, ns, db, entity);
@@ -98,7 +92,7 @@ public class PaloQueryClient extends PaloClient {
String createSql =
"CREATE USER '" + userName + "'@'%' IDENTIFIED BY '" +
PALO_ANALYZER_USER_PASSWORD + "' DEFAULT ROLE 'admin'";
- executeCreateAdminUserSQL(createSql, ns, db, entity);
+ executeSQL(createSql, ns, db, entity);
} catch (Exception e) {
log.warn("create user exception {}.", e.getMessage());
throw e;
@@ -122,154 +116,77 @@ public class PaloQueryClient extends PaloClient {
}
}
- // execute sql by admin user, not cluster root
public NativeQueryResp executeSQL(String sql, String ns, String db,
ClusterInfoEntity entity) throws Exception {
- String url = getHostUrl(entity.getAddress(), entity.getHttpPort());
- StringBuffer buffer = new StringBuffer();
- buffer.append(url);
- buffer.append("/api/query/");
- buffer.append(ns);
- buffer.append("/");
- buffer.append(db);
- url = buffer.toString();
- log.debug("Send execute sql {} request, url is {}.", sql, url);
-
- PermissionsGroupRoleEntity groupRoleEntity =
groupRoleRepository.findById(entity.getAdminGroupId()).get();
-
- Map<String, String> headers = Maps.newHashMap();
- setHeaders(headers);
- setAuthHeaders(headers, groupRoleEntity.getPaloUserName(),
groupRoleEntity.getPassword());
-
- Map<String, String> responseBody = Maps.newHashMap();
- responseBody.put("stmt", sql);
-
- PaloResponseEntity response = poolManager.doPost(url, headers,
responseBody);
-
- if (response.getCode() != REQUEST_SUCCESS_CODE) {
- // SQL execution error
- throw new PaloRequestException("Query palo error:" +
response.getData());
- }
- JSONObject jsonObject = JSON.parseObject(response.getData());
- NativeQueryResp resp = new NativeQueryResp();
- String type = jsonObject.getString("type");
- resp.setType(type);
- int time = jsonObject.getInteger("time");
- resp.setTime(time);
-
- if (type.equals(NativeQueryResp.Type.result_set.name())) {
- List<List<String>> dataResult = Lists.newArrayList();
- String dataStr = jsonObject.getString("data");
- List<String> dataList = JSON.parseArray(dataStr, String.class);
- for (String data : dataList) {
- List<String> dataInfo = JSON.parseArray(data, String.class);
- dataResult.add(dataInfo);
- }
- resp.setData(dataResult);
-
- String metaStr = jsonObject.getString("meta");
- List<NativeQueryResp.Meta> metaList = JSON.parseArray(metaStr,
NativeQueryResp.Meta.class);
- resp.setMeta(metaList);
+ Statement stmt = jdbcClient.getStatement(entity.getAddress(),
entity.getQueryPort(),
+ entity.getUser(), entity.getPasswd(), db);
+ try {
+ NativeQueryResp res = executeSql(stmt, sql);
+ return res;
+ } catch (Exception e) {
+ log.error("execute sql {} exception: {}", sql, e);
+ throw e;
+ } finally {
+ jdbcClient.closeStatement(stmt);
}
- return resp;
}
- // execute sql by admin user, not cluster root
- public NativeQueryResp executeSQLNew(String sql, String ns, String db,
ClusterInfoEntity entity) throws Exception {
- String url = getHostUrl(entity.getAddress(), entity.getHttpPort());
- StringBuffer buffer = new StringBuffer();
- buffer.append(url);
- buffer.append("/api/query/");
- buffer.append(ns);
- buffer.append("/");
- buffer.append(db);
- url = buffer.toString();
- log.debug("Send execute sql {} request, url is {}.", sql, url);
-
- Map<String, String> headers = Maps.newHashMap();
- setHeaders(headers);
- setAuthHeaders(headers, entity.getUser(), entity.getPasswd());
-
- Map<String, String> responseBody = Maps.newHashMap();
- responseBody.put("stmt", sql);
-
- PaloResponseEntity response = poolManager.doPost(url, headers,
responseBody);
-
- if (response.getCode() != REQUEST_SUCCESS_CODE) {
- // SQL execution error
- throw new PaloRequestException("Query palo error:" +
response.getData());
+ public NativeQueryResp executeSql(Statement stmt, String sql) throws
Exception {
+ log.info("execute sql: {}", sql);
+
+ long startTimeMs = System.currentTimeMillis();
+ boolean isResultSet = true;
+ try {
+ isResultSet = stmt.execute(sql);
+ } catch (Exception e) {
+ log.error("execute sql {} exception: {}", sql, e);
+ throw e;
}
- JSONObject jsonObject = JSON.parseObject(response.getData());
+ long endTimeMs = System.currentTimeMillis();
+
NativeQueryResp resp = new NativeQueryResp();
- String type = jsonObject.getString("type");
- resp.setType(type);
- int time = jsonObject.getInteger("time");
- resp.setTime(time);
-
- if (type.equals(NativeQueryResp.Type.result_set.name())) {
- List<List<String>> dataResult = Lists.newArrayList();
- String dataStr = jsonObject.getString("data");
- List<String> dataList = JSON.parseArray(dataStr, String.class);
- for (String data : dataList) {
- List<String> dataInfo = JSON.parseArray(data, String.class);
- dataResult.add(dataInfo);
- }
- resp.setData(dataResult);
- String metaStr = jsonObject.getString("meta");
- List<NativeQueryResp.Meta> metaList = JSON.parseArray(metaStr,
NativeQueryResp.Meta.class);
- resp.setMeta(metaList);
- }
- return resp;
- }
+ log.info("is result set {}", isResultSet);
- // only for create admin user of the space
- public NativeQueryResp executeCreateAdminUserSQL(String sql, String ns,
String db, ClusterInfoEntity entity) throws Exception {
- String url = getHostUrl(entity.getAddress(), entity.getHttpPort());
- StringBuffer buffer = new StringBuffer();
- buffer.append(url);
- buffer.append("/api/query/");
- buffer.append(ns);
- buffer.append("/");
- buffer.append(db);
- url = buffer.toString();
- log.debug("Send execute sql {} request, url is {}.", sql, url);
-
- Map<String, String> headers = Maps.newHashMap();
- setHeaders(headers);
- setAuthHeaders(headers, entity.getUser(), entity.getPasswd());
-
- Map<String, String> responseBody = Maps.newHashMap();
- responseBody.put("stmt", sql);
-
- PaloResponseEntity response = poolManager.doPost(url, headers,
responseBody);
-
- if (response.getCode() != REQUEST_SUCCESS_CODE) {
- // SQL execution error
- throw new PaloRequestException("Query palo error:" +
response.getData());
+ if (isResultSet) {
+ resp.setType(NativeQueryResp.Type.result_set.name());
+ } else {
+ resp.setType(NativeQueryResp.Type.exec_status.name());
}
- JSONObject jsonObject = JSON.parseObject(response.getData());
- NativeQueryResp resp = new NativeQueryResp();
- String type = jsonObject.getString("type");
- resp.setType(type);
- int time = jsonObject.getInteger("time");
- resp.setTime(time);
-
- if (type.equals(NativeQueryResp.Type.result_set.name())) {
- List<List<String>> dataResult = Lists.newArrayList();
- String dataStr = jsonObject.getString("data");
- List<String> dataList = JSON.parseArray(dataStr, String.class);
- for (String data : dataList) {
- List<String> dataInfo = JSON.parseArray(data, String.class);
- dataResult.add(dataInfo);
+ // time type should be long?
+ resp.setTime((int) (endTimeMs - startTimeMs));
+
+ if (resp.getType().equals(NativeQueryResp.Type.result_set.name())) {
+ ResultSet res = stmt.getResultSet();
+
+ // get meta info
+ ResultSetMetaData meta = res.getMetaData();
+
+ List<NativeQueryResp.Meta> metaList = new ArrayList<>();
+
+ for (int i = 1; i <= meta.getColumnCount(); i++) {
+ String colName = meta.getColumnName(i);
+ String colType = meta.getColumnTypeName(i);
+ log.debug("{} column {} type is {}", i, colName, colType);
+ metaList.add(new NativeQueryResp.Meta(colName, colType));
}
- resp.setData(dataResult);
- String metaStr = jsonObject.getString("meta");
- List<NativeQueryResp.Meta> metaList = JSON.parseArray(metaStr,
NativeQueryResp.Meta.class);
resp.setMeta(metaList);
+
+ // get result info
+ List<List<String>> tableData = new ArrayList<>();
+ while (res.next()) {
+ List<String> row = new ArrayList<>();
+ for (int i = 1; i <= meta.getColumnCount(); i++) {
+ row.add(res.getString(i));
+ }
+ tableData.add(row);
+ log.debug("add row {}", row);
+ }
+
+ resp.setData(tableData);
}
return resp;
}
diff --git
a/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
b/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
index 557d734..a7abaae 100644
---
a/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
+++
b/manager/manager/src/main/java/org/apache/doris/stack/model/response/construct/NativeQueryResp.java
@@ -48,6 +48,7 @@ public class NativeQueryResp {
* Meta
*/
@Data
+ @AllArgsConstructor
public static class Meta {
private String name;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]