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);
             }
 

Reply via email to