Repository: kylin Updated Branches: refs/heads/master 3091f06a6 -> e562aafee
KYLIN-2240 Add a toggle to ignore all cube signature inconsistency temporally Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/e562aafe Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/e562aafe Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/e562aafe Branch: refs/heads/master Commit: e562aafee10c8bbd125937503d42b958c1843aad Parents: 3091f06 Author: Hongbin Ma <mahong...@apache.org> Authored: Fri Dec 2 13:33:02 2016 +0800 Committer: Hongbin Ma <mahong...@apache.org> Committed: Fri Dec 2 13:33:18 2016 +0800 ---------------------------------------------------------------------- .../kylin/common/debug/BackdoorToggles.java | 18 ++++++++++++++++++ .../java/org/apache/kylin/jdbc/IRemoteClient.java | 3 ++- .../java/org/apache/kylin/jdbc/KylinClient.java | 7 ++++--- .../org/apache/kylin/jdbc/KylinResultSet.java | 9 ++++++++- .../org/apache/kylin/jdbc/json/QueryRequest.java | 12 ++++++++++++ .../java/org/apache/kylin/jdbc/DummyClient.java | 3 ++- .../apache/kylin/rest/service/QueryService.java | 11 ++++++++++- 7 files changed, 56 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java ---------------------------------------------------------------------- diff --git a/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java b/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java index f7c90aa..28f7697 100644 --- a/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java +++ b/core-common/src/main/java/org/apache/kylin/common/debug/BackdoorToggles.java @@ -79,6 +79,14 @@ public class BackdoorToggles { } } + public static Integer getStatementMaxRows() { + String v = getString(ATTR_STATEMENT_MAX_ROWS); + if (v == null) + return null; + else + return Integer.valueOf(v); + } + private static String getString(String key) { Map<String, String> toggles = _backdoorToggles.get(); if (toggles == null) { @@ -183,4 +191,14 @@ public class BackdoorToggles { */ public final static String DEBUG_TOGGLE_SHARD_ASSIGNMENT = "DEBUG_TOGGLE_SHARD_ASSIGNMENT"; + // properties on statement may go with this "channel" too + /** + * set ATTR_STATEMENT_MAX_ROWS="maxRows" to statement's max rows property + * + example:(put it into request body) + "backdoorToggles": { + "ATTR_STATEMENT_MAX_ROWS": "10" + } + */ + public final static String ATTR_STATEMENT_MAX_ROWS = "ATTR_STATEMENT_MAX_ROWS"; } http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/jdbc/src/main/java/org/apache/kylin/jdbc/IRemoteClient.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/IRemoteClient.java b/jdbc/src/main/java/org/apache/kylin/jdbc/IRemoteClient.java index b6a13e5..dfd8d76 100644 --- a/jdbc/src/main/java/org/apache/kylin/jdbc/IRemoteClient.java +++ b/jdbc/src/main/java/org/apache/kylin/jdbc/IRemoteClient.java @@ -21,6 +21,7 @@ package org.apache.kylin.jdbc; import java.io.Closeable; import java.io.IOException; import java.util.List; +import java.util.Map; import org.apache.calcite.avatica.AvaticaParameter; import org.apache.calcite.avatica.ColumnMetaData; @@ -51,6 +52,6 @@ public interface IRemoteClient extends Closeable { /** * Execute query remotely and get back result. */ - public QueryResult executeQuery(String sql, List<AvaticaParameter> params, List<Object> paramValues) throws IOException; + public QueryResult executeQuery(String sql, List<AvaticaParameter> params, List<Object> paramValues, Map<String, String> queryToggles) throws IOException; } http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java index 2d06a92..86c3a5b 100644 --- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java +++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinClient.java @@ -321,9 +321,9 @@ public class KylinClient implements IRemoteClient { } @Override - public QueryResult executeQuery(String sql, List<AvaticaParameter> params, List<Object> paramValues) throws IOException { + public QueryResult executeQuery(String sql, List<AvaticaParameter> params, List<Object> paramValues, Map<String, String> queryToggles) throws IOException { - SQLResponseStub queryResp = executeKylinQuery(sql, convertParameters(params, paramValues)); + SQLResponseStub queryResp = executeKylinQuery(sql, convertParameters(params, paramValues), queryToggles); if (queryResp.getIsException()) throw new IOException(queryResp.getExceptionMessage()); @@ -346,7 +346,7 @@ public class KylinClient implements IRemoteClient { return result; } - private SQLResponseStub executeKylinQuery(String sql, List<StatementParameter> params) throws IOException { + private SQLResponseStub executeKylinQuery(String sql, List<StatementParameter> params, Map<String, String> queryToggles) throws IOException { String url = baseUrl() + "/kylin/api/query"; String project = conn.getProject(); @@ -360,6 +360,7 @@ public class KylinClient implements IRemoteClient { } request.setSql(sql); request.setProject(project); + request.setBackdoorToggles(queryToggles); HttpPost post = new HttpPost(url); addHttpHeaders(post); http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java index 1bf2555..1c1157a 100644 --- a/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java +++ b/jdbc/src/main/java/org/apache/kylin/jdbc/KylinResultSet.java @@ -21,7 +21,9 @@ package org.apache.kylin.jdbc; import java.io.IOException; import java.sql.ResultSetMetaData; import java.sql.SQLException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.TimeZone; import org.apache.calcite.avatica.AvaticaParameter; @@ -57,9 +59,14 @@ public class KylinResultSet extends AvaticaResultSet { } IRemoteClient client = ((KylinConnection) statement.connection).getRemoteClient(); + + Map<String, String> queryToggles = new HashMap<>(); + int maxRows = statement.getMaxRows(); + queryToggles.put("ATTR_STATEMENT_MAX_ROWS", String.valueOf(maxRows)); + QueryResult result; try { - result = client.executeQuery(sql, params, paramValues); + result = client.executeQuery(sql, params, paramValues, queryToggles); } catch (IOException e) { throw new SQLException(e); } http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/jdbc/src/main/java/org/apache/kylin/jdbc/json/QueryRequest.java ---------------------------------------------------------------------- diff --git a/jdbc/src/main/java/org/apache/kylin/jdbc/json/QueryRequest.java b/jdbc/src/main/java/org/apache/kylin/jdbc/json/QueryRequest.java index 0e21e1f..b66ef8a 100644 --- a/jdbc/src/main/java/org/apache/kylin/jdbc/json/QueryRequest.java +++ b/jdbc/src/main/java/org/apache/kylin/jdbc/json/QueryRequest.java @@ -18,11 +18,15 @@ package org.apache.kylin.jdbc.json; +import java.util.Map; + public class QueryRequest { private String sql; private String project; private boolean acceptPartial = false; + private Map<String, String> backdoorToggles; + public String getSql() { return sql; } @@ -46,4 +50,12 @@ public class QueryRequest { public void setAcceptPartial(boolean acceptPartial) { this.acceptPartial = acceptPartial; } + + public Map<String, String> getBackdoorToggles() { + return backdoorToggles; + } + + public void setBackdoorToggles(Map<String, String> backdoorToggles) { + this.backdoorToggles = backdoorToggles; + } } http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java ---------------------------------------------------------------------- diff --git a/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java b/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java index d85ccae..6578825 100644 --- a/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java +++ b/jdbc/src/test/java/org/apache/kylin/jdbc/DummyClient.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.sql.Types; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.apache.calcite.avatica.AvaticaParameter; import org.apache.calcite.avatica.ColumnMetaData; @@ -63,7 +64,7 @@ public class DummyClient implements IRemoteClient { } @Override - public QueryResult executeQuery(String sql, List<AvaticaParameter> params, List<Object> paramValues) throws IOException { + public QueryResult executeQuery(String sql, List<AvaticaParameter> params, List<Object> paramValues, Map<String, String> queryToggles) throws IOException { List<Object> data = new ArrayList<Object>(); Object[] row = new Object[] { "foo", "bar", "tool" }; data.add(row); http://git-wip-us.apache.org/repos/asf/kylin/blob/e562aafe/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java index 4389a5d..e1787d7 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java @@ -324,12 +324,12 @@ public class QueryService extends BasicService { } final String queryId = UUID.randomUUID().toString(); - Map<String, String> toggles = new HashMap<>(); toggles.put(BackdoorToggles.KEY_QUERY_ID, queryId); if (sqlRequest.getBackdoorToggles() != null) { toggles.putAll(sqlRequest.getBackdoorToggles()); } + sqlRequest.setBackdoorToggles(toggles); BackdoorToggles.setToggles(toggles); try (SetThreadName ignored = new SetThreadName("Query %s", queryId)) { @@ -510,6 +510,13 @@ public class QueryService extends BasicService { return tableMetas; } + private void processStatementAttr(Statement s, SQLRequest sqlRequest) throws SQLException { + Integer statementMaxRows = BackdoorToggles.getStatementMaxRows(); + if (statementMaxRows != null) { + s.setMaxRows(statementMaxRows); + } + } + /** * @param sql * @param sqlRequest @@ -529,6 +536,7 @@ public class QueryService extends BasicService { if (sqlRequest instanceof PrepareSqlRequest) { PreparedStatement preparedState = conn.prepareStatement(sql); + processStatementAttr(preparedState, sqlRequest); for (int i = 0; i < ((PrepareSqlRequest) sqlRequest).getParams().length; i++) { setParam(preparedState, i + 1, ((PrepareSqlRequest) sqlRequest).getParams()[i]); @@ -537,6 +545,7 @@ public class QueryService extends BasicService { resultSet = preparedState.executeQuery(); } else { stat = conn.createStatement(); + processStatementAttr(stat, sqlRequest); resultSet = stat.executeQuery(sql); }