[4/4] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-04-20 Thread kangkaisen
KYLIN-2506 Refactor Global Dictionary


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/9b36e268
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/9b36e268
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/9b36e268

Branch: refs/heads/master
Commit: 9b36e268d17fae688620faeaf6fabf9e660c04b2
Parents: 9131704
Author: kangkaisen 
Authored: Mon Feb 20 21:06:44 2017 +0800
Committer: kangkaisen 
Committed: Thu Apr 20 20:01:24 2017 +0800

--
 .../apache/kylin/common/KylinConfigBase.java|7 +
 .../kylin/common/lock/DistributedLock.java  |   37 +
 .../apache/kylin/dict/AppendTrieDictionary.java | 1204 +-
 .../kylin/dict/AppendTrieDictionaryChecker.java |  101 --
 .../org/apache/kylin/dict/CachedTreeMap.java|  481 ---
 .../kylin/dict/GlobalDictionaryBuilder.java |  119 +-
 .../kylin/dict/global/AppendDictNode.java   |  378 ++
 .../kylin/dict/global/AppendDictSlice.java  |  283 
 .../kylin/dict/global/AppendDictSliceKey.java   |   75 ++
 .../global/AppendTrieDictionaryBuilder.java |  283 
 .../global/AppendTrieDictionaryChecker.java |  102 ++
 .../kylin/dict/global/GlobalDictHDFSStore.java  |  413 ++
 .../kylin/dict/global/GlobalDictMetadata.java   |   51 +
 .../kylin/dict/global/GlobalDictStore.java  |  102 ++
 .../kylin/dict/AppendTrieDictionaryTest.java|  367 --
 .../apache/kylin/dict/CachedTreeMapTest.java|  378 --
 .../dict/global/AppendTrieDictionaryTest.java   |  523 
 .../job/impl/threadpool/DefaultScheduler.java   |8 +-
 .../impl/threadpool/DistributedScheduler.java   |   52 +-
 .../kylin/job/lock/DistributedJobLock.java  |   16 +-
 .../java/org/apache/kylin/job/lock/JobLock.java |7 +-
 .../org/apache/kylin/job/lock/MockJobLock.java  |4 +-
 .../engine/spark/KylinKryoRegistrator.java  |3 -
 .../test_case_data/localmeta/kylin.properties   |2 +-
 .../dict/ITGlobalDictionaryBuilderTest.java |  121 ++
 .../kylin/job/BaseTestDistributedScheduler.java |4 +-
 .../hbase/util/ZookeeperDistributedJobLock.java |  167 ++-
 .../storage/hbase/util/ZookeeperJobLock.java|4 +-
 28 files changed, 2687 insertions(+), 2605 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/9b36e268/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 4361242..bf6cdb8 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -29,6 +29,8 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.lock.DistributedLock;
+import org.apache.kylin.common.util.ClassUtil;
 import org.apache.kylin.common.util.CliCommandExecutor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -235,6 +237,11 @@ abstract public class KylinConfigBase implements 
Serializable {
 public Map getCubeCustomMeasureTypes() {
 return getPropertiesByPrefix("kylin.metadata.custom-measure-types.");
 }
+
+public DistributedLock getDistributedLock() {
+String clsName = getOptional("kylin.metadata.distributed-lock-impl", 
"org.apache.kylin.storage.hbase.util.ZookeeperDistributedJobLock");
+return (DistributedLock) ClassUtil.newInstance(clsName);
+}
 
 // 

 // DICTIONARY & SNAPSHOT

http://git-wip-us.apache.org/repos/asf/kylin/blob/9b36e268/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLock.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLock.java 
b/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLock.java
new file mode 100644
index 000..9f04f05
--- /dev/null
+++ 
b/core-common/src/main/java/org/apache/kylin/common/lock/DistributedLock.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Un

[1/4] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-04-20 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 913170468 -> 9b36e268d


http://git-wip-us.apache.org/repos/asf/kylin/blob/9b36e268/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedJobLock.java
--
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedJobLock.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedJobLock.java
index 983bfd9..c65b8da 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedJobLock.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedJobLock.java
@@ -19,13 +19,14 @@
 package org.apache.kylin.storage.hbase.util;
 
 import java.nio.charset.Charset;
-import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.Executor;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.curator.RetryPolicy;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
-import org.apache.curator.framework.imps.CuratorFrameworkState;
 import org.apache.curator.framework.recipes.cache.PathChildrenCache;
 import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
 import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
@@ -36,18 +37,14 @@ import org.apache.zookeeper.CreateMode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- * the jobLock is specially used to support distributed scheduler.
- */
-
 public class ZookeeperDistributedJobLock implements DistributedJobLock {
 private static Logger logger = 
LoggerFactory.getLogger(ZookeeperDistributedJobLock.class);
 
-public static final String ZOOKEEPER_LOCK_PATH = "/kylin/job_engine/lock";
+@SuppressWarnings("unused")
+private final KylinConfig config;
 
-final private KylinConfig config;
-final CuratorFramework zkClient;
-final PathChildrenCache childrenCache;
+private static final ConcurrentMap CACHE = 
new ConcurrentHashMap();
+private final CuratorFramework zkClient;
 
 public ZookeeperDistributedJobLock() {
 this(KylinConfig.getInstanceFromEnv());
@@ -57,16 +54,12 @@ public class ZookeeperDistributedJobLock implements 
DistributedJobLock {
 this.config = config;
 
 String zkConnectString = ZookeeperUtil.getZKConnectString();
-logger.info("zk connection string:" + zkConnectString);
 if (StringUtils.isEmpty(zkConnectString)) {
 throw new IllegalArgumentException("ZOOKEEPER_QUORUM is empty!");
 }
 
-RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
-zkClient = CuratorFrameworkFactory.newClient(zkConnectString, 
retryPolicy);
-zkClient.start();
+zkClient = getZKClient(config, zkConnectString);
 
-childrenCache = new PathChildrenCache(zkClient, getWatchPath(), true);
 Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
 @Override
 public void run() {
@@ -75,97 +68,104 @@ public class ZookeeperDistributedJobLock implements 
DistributedJobLock {
 }));
 }
 
+//make the zkClient to be singleton
+private static CuratorFramework getZKClient(KylinConfig config, String 
zkConnectString) {
+CuratorFramework zkClient = CACHE.get(config);
+if (zkClient == null) {
+synchronized (ZookeeperDistributedJobLock.class) {
+zkClient = CACHE.get(config);
+if (zkClient == null) {
+RetryPolicy retryPolicy = new 
ExponentialBackoffRetry(1000, 3);
+zkClient = 
CuratorFrameworkFactory.newClient(zkConnectString, 12, 15000, retryPolicy);
+zkClient.start();
+CACHE.put(config, zkClient);
+if (CACHE.size() > 1) {
+logger.warn("More than one singleton exist");
+}
+}
+}
+}
+return zkClient;
+}
+
 /**
- * Lock the segment with the segmentId and serverName.
- *
- *  if the segment related job want to be scheduled,
- * it must acquire the segment lock. segmentId is used to get the lock 
path,
- * serverName marked which job server keep the segment lock.
+ * Try locking the path with the lockPath and lockClient, if lock 
successfully,
+ * the lockClient will write into the data of lockPath.
  *
- * @param segmentId the id of segment need to lock
+ * @param lockPath the path will create in zookeeper
  *
- * @param serverName the hostname of job server
+ * @param lockClient the mark of client
  *
- * @return true if the segment locked successfully
+ * @return 

[2/4] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-04-20 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/9b36e268/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
--
diff --git 
a/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
 
b/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
deleted file mode 100644
index e2af338..000
--- 
a/core-dictionary/src/test/java/org/apache/kylin/dict/AppendTrieDictionaryTest.java
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.kylin.dict;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Random;
-import java.util.TreeMap;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.hadoop.fs.Path;
-import org.apache.kylin.common.util.HadoopUtil;
-import org.apache.kylin.common.util.LocalFileMetadataTestCase;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * Created by sunyerui on 16/4/28.
- */
-public class AppendTrieDictionaryTest extends LocalFileMetadataTestCase {
-
-public static final String BASE_DIR = "file:///tmp/kylin_append_dict";
-public static final String RESOURCE_DIR = "/dict/append_dict_test";
-
-@Before
-public void setUp() {
-staticCreateTestMetadata();
-System.setProperty("kylin.dictionary.append-entry-size", "5");
-System.setProperty("kylin.env.hdfs-working-dir", BASE_DIR);
-}
-
-@After
-public void after() {
-cleanup();
-staticCleanupTestMetadata();
-}
-
-public static void cleanup() {
-Path basePath = new Path(BASE_DIR);
-try {
-HadoopUtil.getFileSystem(basePath).delete(basePath, true);
-} catch (IOException e) {}
-}
-
-public static final String[] words = new String[] { "paint", "par", 
"part", "parts", "partition", "partitions", "party", "partie", "parties", 
"patient", "taste", "tar", "trie", "try", "tries", "字典", "字典树", 
"字母", // non-ascii characters
-"", // empty
-
"paiii",
-
"paiiipaiii",
-
"paintjkjdfklajkdljfkdsajklfjklsadjkjekjrklewjrklewjklrjklewjkljkljkljkljweklrjewkljrklewjrlkjewkljrkljkljkjlkjjkljkljkljkljlkjlkjlkjljdfadfads"
 + 
"dkfjadslkfjdsakljflksadjklfjklsjfkljwelkrjewkljrklewjklrjelkwjrklewjrlkjwkljerklkljlkjrlkwejrk"
 + 
"dkfjadslkfjdsakljflksadjklfjklsjfkljwelkrjewkljrklewjklrjelkwjrklewjrlkjwkljerklkljlkjrlkwejrk"
 + 
"dkfjadslkfjdsakljflksadjklfjklsjfkljwelkrjewk

kylin git commit: KYLIN-2506 Fix IT

2017-04-21 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master f9791172e -> 139aa1886


KYLIN-2506 Fix IT


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/139aa188
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/139aa188
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/139aa188

Branch: refs/heads/master
Commit: 139aa1886145c9210a1a752d1036766cfa00b73f
Parents: f979117
Author: kangkaisen 
Authored: Fri Apr 21 14:36:40 2017 +0800
Committer: kangkaisen 
Committed: Fri Apr 21 17:19:35 2017 +0800

--
 .../java/org/apache/kylin/job/BaseTestDistributedScheduler.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/139aa188/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
--
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java 
b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
index b4ac42f..aa96e2e 100644
--- 
a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
+++ 
b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
@@ -54,6 +54,7 @@ public class BaseTestDistributedScheduler extends 
HBaseMetadataTestCase {
 static KylinConfig kylinConfig2;
 static CuratorFramework zkClient;
 static File localMetaDir;
+static String backup;
 
 static final String SEGMENT_ID = "segmentId";
 static final String segmentId1 = "seg1" + UUID.randomUUID();
@@ -75,11 +76,10 @@ public class BaseTestDistributedScheduler extends 
HBaseMetadataTestCase {
 KylinConfig srcConfig = KylinConfig.getInstanceFromEnv();
 
 localMetaDir = Files.createTempDir();
-String backup = srcConfig.getMetadataUrl();
+backup = srcConfig.getMetadataUrl();
 srcConfig.setProperty("kylin.metadata.url", 
localMetaDir.getAbsolutePath());
 srcConfig.writeProperties(new File(confDstPath1));
 srcConfig.writeProperties(new File(confDstPath2));
-srcConfig.setProperty("kylin.metadata.url", backup);
 
 kylinConfig1 = KylinConfig.createInstanceFromUri(new 
File(confDstPath1).getAbsolutePath());
 kylinConfig2 = KylinConfig.createInstanceFromUri(new 
File(confDstPath2).getAbsolutePath());
@@ -132,6 +132,7 @@ public class BaseTestDistributedScheduler extends 
HBaseMetadataTestCase {
 
 FileUtils.deleteDirectory(localMetaDir);
 System.clearProperty("kylin.job.lock");
+System.clearProperty("kylin.metadata.url");
 staticCleanupTestMetadata();
 }
 



kylin git commit: KYLIN-2563 Fix bug in query authorization

2017-04-26 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 2d11fbcea -> 85b4b2c7c


KYLIN-2563 Fix bug in query authorization


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/85b4b2c7
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/85b4b2c7
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/85b4b2c7

Branch: refs/heads/master
Commit: 85b4b2c7c0dc7d2052cd92cc50ac3b6b94f88668
Parents: 2d11fbc
Author: kangkaisen 
Authored: Fri Apr 21 17:10:19 2017 +0800
Committer: kangkaisen 
Committed: Wed Apr 26 18:35:17 2017 +0800

--
 .../rest/controller/ProjectController.java  |  59 ++
 .../apache/kylin/rest/service/QueryService.java |   9 +-
 .../org/apache/kylin/rest/util/AclUtil.java | 116 +++
 3 files changed, 134 insertions(+), 50 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/85b4b2c7/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
index a6edece..40e798a 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/ProjectController.java
@@ -34,6 +34,7 @@ import org.apache.kylin.rest.request.ProjectRequest;
 import org.apache.kylin.rest.service.AccessService;
 import org.apache.kylin.rest.service.CubeService;
 import org.apache.kylin.rest.service.ProjectService;
+import org.apache.kylin.rest.util.AclUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,9 +42,6 @@ import 
org.springframework.security.acls.domain.GrantedAuthoritySid;
 import org.springframework.security.acls.domain.PrincipalSid;
 import org.springframework.security.acls.model.AccessControlEntry;
 import org.springframework.security.acls.model.Acl;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -69,6 +67,8 @@ public class ProjectController extends BasicController {
 private AccessService accessService;
 @Autowired
 private CubeService cubeService;
+@Autowired
+private AclUtil aclUtil;
 
 /**
  * Get available project list
@@ -90,29 +90,16 @@ public class ProjectController extends BasicController {
 List projectInstances = 
projectService.listAllProjects(limit, offset);
 
 //get user infomation
-Authentication authentication = 
SecurityContextHolder.getContext().getAuthentication();
-UserDetails userDetails = null;
-if (authentication == null) {
-logger.debug("authentication is null.");
-throw new InternalErrorException("Can not find authentication 
infomation.");
-}
-if (authentication.getPrincipal() instanceof UserDetails) {
-logger.debug("authentication.getPrincipal() is " + 
authentication.getPrincipal());
-userDetails = (UserDetails) authentication.getPrincipal();
-}
-if (authentication.getDetails() instanceof UserDetails) {
-logger.debug("authentication.getDetails() is " + 
authentication.getDetails());
-userDetails = (UserDetails) authentication.getDetails();
-}
+UserDetails userDetails = aclUtil.getCurrentUser();
+String userName = userDetails.getUsername();
 
 //check if ROLE_ADMIN return all,also get user role list
-List userAuthority = new ArrayList<>();
-for (GrantedAuthority auth : authentication.getAuthorities()) {
-userAuthority.add(auth.getAuthority());
-if (auth.getAuthority().equals(Constant.ROLE_ADMIN))
+List userAuthority = aclUtil.getAuthorityList();
+for (String auth : userAuthority) {
+if (auth.equals(Constant.ROLE_ADMIN))
 return projectInstances;
 }
-String userName = userDetails.getUsername();
+
 for (ProjectInstance projectInstance : projectInstances) {
 if (projectInstance == null) {
 continue;
@@ -157,32 +144,8 @@ public class ProjectController extends BasicController {
 if (cubeInstance == null) {
 continue;
 }
-

kylin git commit: The return type of tinyint for sum measure should be bigint

2017-05-10 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 901b10cee -> 1264ff39b


The return type of tinyint for sum measure should be bigint


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1264ff39
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1264ff39
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1264ff39

Branch: refs/heads/master
Commit: 1264ff39b740f9515653d30e0712739bc717d438
Parents: 901b10c
Author: kangkaisen 
Authored: Wed May 10 20:03:40 2017 +0800
Committer: kangkaisen 
Committed: Wed May 10 20:03:40 2017 +0800

--
 webapp/app/js/controllers/cubeMeasures.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1264ff39/webapp/app/js/controllers/cubeMeasures.js
--
diff --git a/webapp/app/js/controllers/cubeMeasures.js 
b/webapp/app/js/controllers/cubeMeasures.js
index 73a6cd0..824e2ca 100644
--- a/webapp/app/js/controllers/cubeMeasures.js
+++ b/webapp/app/js/controllers/cubeMeasures.js
@@ -367,7 +367,7 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, 
$modal,MetaModel,cubes
 
   switch($scope.newMeasure.function.expression){
 case "SUM":
-  
if(colType==="smallint"||colType==="int"||colType==="bigint"||colType==="integer"){
+  
if(colType==="tinyint"||colType==="smallint"||colType==="int"||colType==="bigint"||colType==="integer"){
 $scope.newMeasure.function.returntype= 'bigint';
   }else{

if(colType.indexOf('decimal')!=-1||colType==="double"||colType==="float"){



kylin git commit: KYLIN-2602 Add optional job threshold arg for MetadataCleanupJob

2017-05-10 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 1264ff39b -> b3310dcdc


KYLIN-2602 Add optional job threshold arg for MetadataCleanupJob


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b3310dcd
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b3310dcd
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b3310dcd

Branch: refs/heads/master
Commit: b3310dcdc0f9ac99006eb4d1a0910de9c43f22fd
Parents: 1264ff3
Author: kangkaisen 
Authored: Thu May 11 10:11:40 2017 +0800
Committer: kangkaisen 
Committed: Thu May 11 10:13:58 2017 +0800

--
 .../org/apache/kylin/tool/MetadataCleanupJob.java | 14 +++---
 1 file changed, 11 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/b3310dcd/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
--
diff --git a/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java 
b/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
index 7040dbb..8e17645 100644
--- a/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
+++ b/tool/src/main/java/org/apache/kylin/tool/MetadataCleanupJob.java
@@ -48,14 +48,17 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
 @SuppressWarnings("static-access")
 private static final Option OPTION_DELETE = 
OptionBuilder.withArgName("delete").hasArg().isRequired(false).withDescription("Delete
 the unused metadata").create("delete");
 
+@SuppressWarnings("static-access")
+private static final Option OPTION_THRESHOLD_FOR_JOB = 
OptionBuilder.withArgName("jobThreshold").hasArg().isRequired(false).withDescription("Specify
 how many days of job metadata keeping. Default 30 
days").create("jobThreshold");
+
 protected static final Logger logger = 
LoggerFactory.getLogger(MetadataCleanupJob.class);
 
 boolean delete = false;
 
 private KylinConfig config = null;
 
-public static final long TIME_THREADSHOLD = 1 * 3600 * 1000L; // 1 hour
-public static final long TIME_THREADSHOLD_FOR_JOB = 30 * 24 * 3600 * 
1000L; // 30 days
+private static final long TIME_THREADSHOLD = 1 * 3600 * 1000L; // 1 hour
+private static final int DEFAULT_DAY_THREADSHOLD_FOR_JOB = 30 ; // 30 days
 
 /*
  * (non-Javadoc)
@@ -68,10 +71,12 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
 
 logger.info("jobs args: " + Arrays.toString(args));
 options.addOption(OPTION_DELETE);
+options.addOption(OPTION_THRESHOLD_FOR_JOB);
 parseOptions(options, args);
 
 logger.info("options: '" + getOptionsAsString() + "'");
 logger.info("delete option value: '" + getOptionValue(OPTION_DELETE) + 
"'");
+logger.info("jobThreshold option value: '" + 
getOptionValue(OPTION_THRESHOLD_FOR_JOB) + "'");
 delete = Boolean.parseBoolean(getOptionValue(OPTION_DELETE));
 
 config = KylinConfig.getInstanceFromEnv();
@@ -148,7 +153,10 @@ public class MetadataCleanupJob extends AbstractHadoopJob {
 for (ExecutablePO executable : allExecutable) {
 long lastModified = executable.getLastModified();
 ExecutableOutputPO output = 
executableDao.getJobOutput(executable.getUuid());
-if (System.currentTimeMillis() - lastModified > 
TIME_THREADSHOLD_FOR_JOB && 
(ExecutableState.SUCCEED.toString().equals(output.getStatus()) || 
ExecutableState.DISCARDED.toString().equals(output.getStatus( {
+int jobThresholdDay = 
optionsHelper.hasOption(OPTION_THRESHOLD_FOR_JOB) ? 
Integer.valueOf(optionsHelper.getOptionValue(OPTION_THRESHOLD_FOR_JOB)) : 
DEFAULT_DAY_THREADSHOLD_FOR_JOB;
+long jobThresholdTime = jobThresholdDay * 24 * 3600 * 1000L;
+
+if (System.currentTimeMillis() - lastModified > jobThresholdTime 
&& (ExecutableState.SUCCEED.toString().equals(output.getStatus()) || 
ExecutableState.DISCARDED.toString().equals(output.getStatus( {
 toDeleteResource.add(ResourceStore.EXECUTE_RESOURCE_ROOT + "/" 
+ executable.getUuid());
 
toDeleteResource.add(ResourceStore.EXECUTE_OUTPUT_RESOURCE_ROOT + "/" + 
executable.getUuid());
 



kylin git commit: KYLIN-2606 Only return counter for precise count_distinct if query is exactAggregate

2017-05-10 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/KYLIN-2606 [created] f8336d4bb


KYLIN-2606 Only return counter for precise count_distinct if query is 
exactAggregate


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f8336d4b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f8336d4b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f8336d4b

Branch: refs/heads/KYLIN-2606
Commit: f8336d4bb85cba257c6487332c876436cdf9ef95
Parents: d449c40
Author: kangkaisen 
Authored: Wed Feb 15 19:53:17 2017 +0800
Committer: kangkaisen 
Committed: Thu May 11 14:24:49 2017 +0800

--
 .../kylin/cube/gridtable/CubeCodeSystem.java|   4 +
 .../org/apache/kylin/gridtable/GTRecord.java|   8 +
 .../kylin/gridtable/GTSampleCodeSystem.java |   4 +
 .../apache/kylin/gridtable/IGTCodeSystem.java   |   3 +
 .../measure/bitmap/BitmapCounterFactory.java|   2 +
 .../kylin/measure/bitmap/BitmapSerializer.java  |  37 -
 .../measure/bitmap/RoaringBitmapCounter.java|  10 ++
 .../bitmap/RoaringBitmapCounterFactory.java |   5 +
 .../metadata/datatype/DataTypeSerializer.java   |  13 ++
 .../gtrecord/GTCubeStorageQueryBase.java|  43 ++
 .../hbase/cube/v2/CubeHBaseEndpointRPC.java |   1 +
 .../storage/hbase/cube/v2/CubeHBaseScanRPC.java |   2 +-
 .../hbase/cube/v2/HBaseReadonlyStore.java   |  33 +++-
 .../coprocessor/endpoint/CubeVisitService.java  |   2 +-
 .../endpoint/generated/CubeVisitProtos.java | 151 +++
 .../endpoint/protobuf/CubeVisit.proto   |   1 +
 16 files changed, 282 insertions(+), 37 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/f8336d4b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java 
b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
index aaa12a7..9eae6f3 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
@@ -177,4 +177,8 @@ public class CubeCodeSystem implements IGTCodeSystem {
 return result;
 }
 
+@Override
+public DataTypeSerializer getSerializer(int col) {
+return serializers[col];
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f8336d4b/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
--
diff --git a/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
index 3e62ea7..f65e4b5 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
@@ -296,4 +296,12 @@ public class GTRecord implements Comparable, 
Cloneable {
 }
 }
 
+/** change pointers to point to data in given buffer, this
+ *  method allows to defined specific column to load */
+public void loadColumns(int selectedCol, ByteBuffer buf) {
+int pos = buf.position();
+int len = info.codeSystem.codeLength(selectedCol, buf);
+cols[selectedCol].set(buf.array(), buf.arrayOffset() + pos, len);
+}
+
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f8336d4b/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
index 3f3c844..2a5e791 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
@@ -118,4 +118,8 @@ public class GTSampleCodeSystem implements IGTCodeSystem {
 }
 };
 
+@Override
+public DataTypeSerializer getSerializer(int col) {
+return serializers[col];
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f8336d4b/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
index 89dfc99..9c8ad6b 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
@@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
 import org.apache.kylin.common.util.ImmutableBitSet

kylin git commit: KYLIN-2607 Add http timeout for RestClient

2017-05-12 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master b3ba338ea -> 320e56a53


KYLIN-2607 Add http timeout for RestClient


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/320e56a5
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/320e56a5
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/320e56a5

Branch: refs/heads/master
Commit: 320e56a532cf6d4968430c8111d239961a07c7f8
Parents: b3ba338
Author: kangkaisen 
Authored: Thu May 11 14:57:29 2017 +0800
Committer: kangkaisen 
Committed: Fri May 12 16:47:39 2017 +0800

--
 .../apache/kylin/common/restclient/RestClient.java  | 16 +---
 1 file changed, 13 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/320e56a5/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index 825c67f..33a4e7a 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -40,6 +40,9 @@ import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
 import org.apache.http.util.EntityUtils;
 import org.apache.kylin.common.util.JsonUtil;
 
@@ -59,6 +62,9 @@ public class RestClient {
 
 protected static Pattern fullRestPattern = 
Pattern.compile("(?:([^:]+)[:]([^@]+)[@])?([^:]+)(?:[:](\\d+))?");
 
+private static final int HTTP_CONNECTION_TIMEOUT_MS = 3;
+private static final int HTTP_SOCKET_TIMEOUT_MS = 12;
+
 public static boolean matchFullRestPattern(String uri) {
 Matcher m = fullRestPattern.matcher(uri);
 return m.matches();
@@ -93,7 +99,11 @@ public class RestClient {
 this.password = password;
 this.baseUrl = "http://"; + host + ":" + port + "/kylin/api";
 
-client = new DefaultHttpClient();
+final HttpParams httpParams = new BasicHttpParams();
+HttpConnectionParams.setSoTimeout(httpParams, HTTP_SOCKET_TIMEOUT_MS);
+HttpConnectionParams.setConnectionTimeout(httpParams, 
HTTP_CONNECTION_TIMEOUT_MS);
+
+client = new DefaultHttpClient(httpParams);
 
 if (userName != null && password != null) {
 CredentialsProvider provider = new BasicCredentialsProvider();
@@ -263,14 +273,14 @@ public class RestClient {
 InputStreamReader reader = null;
 BufferedReader rd = null;
 StringBuffer result = new StringBuffer();
-try{
+try {
 reader = new InputStreamReader(response.getEntity().getContent());
 rd = new BufferedReader(reader);
 String line = null;
 while ((line = rd.readLine()) != null) {
 result.append(line);
 }
-}finally {
+} finally {
 IOUtils.closeQuietly(reader);
 IOUtils.closeQuietly(rd);
 }



kylin git commit: KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in Broadcaster

2017-05-15 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 1c80c29b2 -> 1c3ed36f7


KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in Broadcaster


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1c3ed36f
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1c3ed36f
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1c3ed36f

Branch: refs/heads/master
Commit: 1c3ed36f7dcf2152b17966bb69dd3211ce4e8aba
Parents: 1c80c29
Author: gaodayue 
Authored: Sat May 6 05:21:22 2017 +0800
Committer: kangkaisen 
Committed: Mon May 15 16:02:01 2017 +0800

--
 .../java/org/apache/kylin/common/restclient/RestClient.java   | 4 
 .../java/org/apache/kylin/metadata/cachesync/Broadcaster.java | 7 +--
 2 files changed, 9 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1c3ed36f/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index 33a4e7a..470386b 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -287,4 +287,8 @@ public class RestClient {
 return result.toString();
 }
 
+@Override
+public String toString() {
+return String.format("RestClient(%s:%d)", host, port);
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c3ed36f/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
index 1394f7b..e787dfd 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
@@ -35,6 +35,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.restclient.RestClient;
 import org.apache.kylin.common.util.DaemonThreadFactory;
+import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -116,7 +117,7 @@ public class Broadcaster {
 for (String node : config.getRestServers()) {
 restClients.add(new RestClient(node));
 }
-final ExecutorService wipingCachePool = 
Executors.newFixedThreadPool(restClients.size(), new DaemonThreadFactory());
+final ExecutorService wipingCachePool = 
Executors.newCachedThreadPool(new DaemonThreadFactory());
 while (true) {
 try {
 final BroadcastEvent broadcastEvent = 
broadcastEvents.takeFirst();
@@ -125,8 +126,10 @@ public class Broadcaster {
 wipingCachePool.execute(new Runnable() {
 @Override
 public void run() {
-try {
+try (SetThreadName ignored = new 
SetThreadName("CacheWiper %s %s", restClient, broadcastEvent)) {
+logger.info("{} wipe cache {}", 
restClient, broadcastEvent);
 
restClient.wipeCache(broadcastEvent.getEntity(), broadcastEvent.getEvent(), 
broadcastEvent.getCacheKey());
+logger.info("{} wipe cache {} 
success", restClient, broadcastEvent);
 } catch (IOException e) {
 logger.warn("Thread failed during wipe 
cache at " + broadcastEvent, e);
 }



kylin git commit: Revert "KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in Broadcaster"

2017-05-15 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 1c3ed36f7 -> 858d94751


Revert "KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in 
Broadcaster"

This reverts commit 1c3ed36f7dcf2152b17966bb69dd3211ce4e8aba.


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/858d9475
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/858d9475
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/858d9475

Branch: refs/heads/master
Commit: 858d947518b308c1a33b832ea8ef49144285c02e
Parents: 1c3ed36
Author: kangkaisen 
Authored: Tue May 16 09:48:22 2017 +0800
Committer: kangkaisen 
Committed: Tue May 16 09:48:22 2017 +0800

--
 .../java/org/apache/kylin/common/restclient/RestClient.java   | 4 
 .../java/org/apache/kylin/metadata/cachesync/Broadcaster.java | 7 ++-
 2 files changed, 2 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/858d9475/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index 470386b..33a4e7a 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -287,8 +287,4 @@ public class RestClient {
 return result.toString();
 }
 
-@Override
-public String toString() {
-return String.format("RestClient(%s:%d)", host, port);
-}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/858d9475/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
index e787dfd..1394f7b 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
@@ -35,7 +35,6 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.restclient.RestClient;
 import org.apache.kylin.common.util.DaemonThreadFactory;
-import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -117,7 +116,7 @@ public class Broadcaster {
 for (String node : config.getRestServers()) {
 restClients.add(new RestClient(node));
 }
-final ExecutorService wipingCachePool = 
Executors.newCachedThreadPool(new DaemonThreadFactory());
+final ExecutorService wipingCachePool = 
Executors.newFixedThreadPool(restClients.size(), new DaemonThreadFactory());
 while (true) {
 try {
 final BroadcastEvent broadcastEvent = 
broadcastEvents.takeFirst();
@@ -126,10 +125,8 @@ public class Broadcaster {
 wipingCachePool.execute(new Runnable() {
 @Override
 public void run() {
-try (SetThreadName ignored = new 
SetThreadName("CacheWiper %s %s", restClient, broadcastEvent)) {
-logger.info("{} wipe cache {}", 
restClient, broadcastEvent);
+try {
 
restClient.wipeCache(broadcastEvent.getEntity(), broadcastEvent.getEvent(), 
broadcastEvent.getCacheKey());
-logger.info("{} wipe cache {} 
success", restClient, broadcastEvent);
 } catch (IOException e) {
 logger.warn("Thread failed during wipe 
cache at " + broadcastEvent, e);
 }



kylin git commit: KYLIN-2547 Fix multi-process concurrence bug in UpdateCubeInfoXXStep

2017-05-17 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/KYLIN-2547 [created] d0f7f1882


KYLIN-2547 Fix multi-process concurrence bug in UpdateCubeInfoXXStep


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/d0f7f188
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/d0f7f188
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/d0f7f188

Branch: refs/heads/KYLIN-2547
Commit: d0f7f1882ef02e84c112ea358152e4976ee081e0
Parents: a34db26
Author: kangkaisen 
Authored: Fri May 12 15:44:23 2017 +0800
Committer: kangkaisen 
Committed: Wed May 17 18:32:19 2017 +0800

--
 .../java/org/apache/kylin/cube/CubeManager.java |  14 ++
 .../mr/steps/UpdateCubeInfoAfterBuildStep.java  |   7 +-
 .../mr/steps/UpdateCubeInfoAfterMergeStep.java  |   7 +-
 .../engine/mr/steps/UpdateCubeInfoStep.java | 144 +++
 .../apache/kylin/rest/service/CacheService.java |  17 ---
 .../apache/kylin/rest/service/CubeService.java  |  80 ---
 6 files changed, 163 insertions(+), 106 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/d0f7f188/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
--
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java 
b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
index 0a94fb2..dc50e8a 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
@@ -183,6 +183,20 @@ public class CubeManager implements IRealizationProvider {
 return cubeMap.get(cubeName);
 }
 
+//get CubeInstance from store to ensure the cube metadata is latest
+public CubeInstance getCubeFromStore(String cubeName) throws IOException {
+String storePath = CubeInstance.concatResourcePath(cubeName);
+CubeInstance cube = getStore().getResource(storePath, 
CubeInstance.class, CUBE_SERIALIZER);
+
+CubeDesc cubeDesc = 
CubeDescManager.getInstance(config).getCubeDesc(cube.getDescName());
+cube.setConfig((KylinConfigExt) cubeDesc.getConfig());
+
+//update local cache
+cubeMap.putLocal(cube.getName(), cube);
+
+return cube;
+}
+
 public CubeInstance getCubeByUuid(String uuid) {
 Collection copy = new 
ArrayList(cubeMap.values());
 for (CubeInstance cube : copy) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/d0f7f188/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterBuildStep.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterBuildStep.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterBuildStep.java
index 2efd718..8df4a80 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterBuildStep.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterBuildStep.java
@@ -33,7 +33,6 @@ import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.engine.mr.CubingJob;
 import org.apache.kylin.engine.mr.common.BatchConstants;
 import org.apache.kylin.job.exception.ExecuteException;
-import org.apache.kylin.job.execution.AbstractExecutable;
 import org.apache.kylin.job.execution.ExecutableContext;
 import org.apache.kylin.job.execution.ExecuteResult;
 import org.apache.kylin.metadata.model.TblColRef;
@@ -42,7 +41,7 @@ import org.slf4j.LoggerFactory;
 
 /**
  */
-public class UpdateCubeInfoAfterBuildStep extends AbstractExecutable {
+public class UpdateCubeInfoAfterBuildStep extends UpdateCubeInfoStep {
 private static final Logger logger = 
LoggerFactory.getLogger(UpdateCubeInfoAfterBuildStep.class);
 
 public UpdateCubeInfoAfterBuildStep() {
@@ -50,9 +49,9 @@ public class UpdateCubeInfoAfterBuildStep extends 
AbstractExecutable {
 }
 
 @Override
-protected ExecuteResult doWork(ExecutableContext context) throws 
ExecuteException {
+protected ExecuteResult work(ExecutableContext context, CubeInstance cube) 
throws ExecuteException {
 final CubeManager cubeManager = 
CubeManager.getInstance(context.getConfig());
-final CubeInstance cube = 
cubeManager.getCube(CubingExecutableUtil.getCubeName(this.getParams()));
+
 final CubeSegment segment = 
cube.getSegmentById(CubingExecutableUtil.getSegmentId(this.getParams()));
 
 CubingJob cubingJob = (CubingJob) 
getManager().getJob(CubingExecutableUtil.getCubingJobId(this.getParams()));

http://git-wip-us.apache.org/repos/asf/kylin/blob/d0f7f188/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/UpdateCubeInfoAfterMergeStep.java

[10/50] [abbrv] kylin git commit: KYLIN-2526 refine find-hive-dependency.sh to support Ubuntu

2017-05-24 Thread kangkaisen
KYLIN-2526 refine find-hive-dependency.sh to support Ubuntu


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0061900b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0061900b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0061900b

Branch: refs/heads/KYLIN-2606
Commit: 0061900bb5bd34c8f0cc1c6e955d34bf34ca48e2
Parents: 5f52cea
Author: Cheng Wang 
Authored: Thu May 18 11:04:47 2017 +0800
Committer: liyang-gmt8 
Committed: Thu May 18 15:27:36 2017 +0800

--
 build/bin/find-hive-dependency.sh | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/0061900b/build/bin/find-hive-dependency.sh
--
diff --git a/build/bin/find-hive-dependency.sh 
b/build/bin/find-hive-dependency.sh
index 02a47ef..c4c7523 100644
--- a/build/bin/find-hive-dependency.sh
+++ b/build/bin/find-hive-dependency.sh
@@ -100,10 +100,10 @@ fi
 
 function checkFileExist()
 {
-files=$1
+files=(`echo $1 | cut -d ":" -f 1- | sed 's/:/ /g'`)
 misFiles=0
 outputMissFiles=
-for file in ${files//:/ }
+for file in ${files}
 do
 let allFiles++
 if [ ! -f "${file}" ]; then
@@ -111,8 +111,10 @@ function checkFileExist()
 let misFiles++
 fi
 done
-ratio=`echo "scale=3; ${misFiles}/${allFiles}" | bc`
-[[ `echo "$ratio < 0.01" | bc ` -eq 1 ]] || quit "A couple of hive jars 
can't be found: ${outputMisFiles}!"
+if [ 0 != ${misFiles} ]; then
+times=`expr ${allFiles} / ${misFiles}`
+[[ ${times} -gt 10 ]] || quit "A couple of hive jars can't be found: 
${outputMisFiles}, please export HIVE_LIB='YOUR_LOCAL_HIVE_LIB'"
+fi
 }
 
 function validateDirectory()



[07/50] [abbrv] kylin git commit: KYLIN-2627 add simple rollback on ResourceStore

2017-05-24 Thread kangkaisen
KYLIN-2627 add simple rollback on ResourceStore


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ea5cabac
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ea5cabac
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ea5cabac

Branch: refs/heads/KYLIN-2606
Commit: ea5cabac95b3d27aa60d6b16263904142e3d2daa
Parents: c9dc7cc
Author: Li Yang 
Authored: Wed May 17 17:46:08 2017 +0800
Committer: Roger Shi 
Committed: Wed May 17 19:40:34 2017 +0800

--
 .../kylin/common/persistence/ResourceStore.java | 103 ++-
 .../persistence/LocalFileResourceStoreTest.java |  44 
 2 files changed, 145 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ea5cabac/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
 
b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
index d5fbc2e..0565c66 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
@@ -18,7 +18,9 @@
 
 package org.apache.kylin.common.persistence;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.File;
@@ -27,6 +29,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.NavigableSet;
 import java.util.UUID;
@@ -237,6 +240,11 @@ abstract public class ResourceStore {
 final public void putResource(String resPath, InputStream content, long 
ts) throws IOException {
 resPath = norm(resPath);
 logger.trace("Directly saving resource " + resPath + " (Store " + 
kylinConfig.getMetadataUrl() + ")");
+putResourceCheckpoint(resPath, content, ts);
+}
+
+private void putResourceCheckpoint(String resPath, InputStream content, 
long ts) throws IOException {
+beforeChange(resPath);
 putResourceImpl(resPath, content, ts);
 }
 
@@ -266,7 +274,7 @@ abstract public class ResourceStore {
 dout.close();
 buf.close();
 
-newTS = checkAndPutResourceImpl(resPath, buf.toByteArray(), oldTS, 
newTS);
+newTS = checkAndPutResourceCheckpoint(resPath, buf.toByteArray(), 
oldTS, newTS);
 obj.setLastModified(newTS); // update again the confirmed TS
 return newTS;
 } catch (IOException e) {
@@ -278,6 +286,11 @@ abstract public class ResourceStore {
 }
 }
 
+private long checkAndPutResourceCheckpoint(String resPath, byte[] content, 
long oldTS, long newTS) throws IOException {
+beforeChange(resPath);
+return checkAndPutResourceImpl(resPath, content, oldTS, newTS);
+}
+
 /**
  * checks old timestamp when overwriting existing
  */
@@ -288,7 +301,12 @@ abstract public class ResourceStore {
  */
 final public void deleteResource(String resPath) throws IOException {
 logger.trace("Deleting resource " + resPath + " (Store " + 
kylinConfig.getMetadataUrl() + ")");
-deleteResourceImpl(norm(resPath));
+deleteResourceCheckpoint(norm(resPath));
+}
+
+private void deleteResourceCheckpoint(String resPath) throws IOException {
+beforeChange(resPath);
+deleteResourceImpl(resPath);
 }
 
 abstract protected void deleteResourceImpl(String resPath) throws 
IOException;
@@ -315,6 +333,87 @@ abstract public class ResourceStore {
 
 // 

 
+ThreadLocal checkpointing = new ThreadLocal<>();
+
+public Checkpoint checkpoint() {
+Checkpoint cp = checkpointing.get();
+if (cp != null)
+throw new IllegalStateException("A checkpoint has been open for 
this thread: " + cp);
+
+cp = new Checkpoint();
+checkpointing.set(cp);
+return cp;
+}
+
+private void beforeChange(String resPath) throws IOException {
+Checkpoint cp = checkpointing.get();
+if (cp != null)
+cp.beforeChange(resPath);
+}
+
+public class Checkpoint implements Closeable {
+
+LinkedHashMap origResData = new LinkedHashMap<>();
+LinkedHashMap origResTimestamp = new LinkedHashMap<>();
+
+private void beforeChange(String resPath) throws IOException {
+if (origResData.containsKey(resPath))
+return;
+
+   

[03/50] [abbrv] kylin git commit: Revert "KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in Broadcaster"

2017-05-24 Thread kangkaisen
Revert "KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in 
Broadcaster"

This reverts commit 1c3ed36f7dcf2152b17966bb69dd3211ce4e8aba.


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/858d9475
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/858d9475
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/858d9475

Branch: refs/heads/KYLIN-2606
Commit: 858d947518b308c1a33b832ea8ef49144285c02e
Parents: 1c3ed36
Author: kangkaisen 
Authored: Tue May 16 09:48:22 2017 +0800
Committer: kangkaisen 
Committed: Tue May 16 09:48:22 2017 +0800

--
 .../java/org/apache/kylin/common/restclient/RestClient.java   | 4 
 .../java/org/apache/kylin/metadata/cachesync/Broadcaster.java | 7 ++-
 2 files changed, 2 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/858d9475/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index 470386b..33a4e7a 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -287,8 +287,4 @@ public class RestClient {
 return result.toString();
 }
 
-@Override
-public String toString() {
-return String.format("RestClient(%s:%d)", host, port);
-}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/858d9475/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
index e787dfd..1394f7b 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
@@ -35,7 +35,6 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.restclient.RestClient;
 import org.apache.kylin.common.util.DaemonThreadFactory;
-import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -117,7 +116,7 @@ public class Broadcaster {
 for (String node : config.getRestServers()) {
 restClients.add(new RestClient(node));
 }
-final ExecutorService wipingCachePool = 
Executors.newCachedThreadPool(new DaemonThreadFactory());
+final ExecutorService wipingCachePool = 
Executors.newFixedThreadPool(restClients.size(), new DaemonThreadFactory());
 while (true) {
 try {
 final BroadcastEvent broadcastEvent = 
broadcastEvents.takeFirst();
@@ -126,10 +125,8 @@ public class Broadcaster {
 wipingCachePool.execute(new Runnable() {
 @Override
 public void run() {
-try (SetThreadName ignored = new 
SetThreadName("CacheWiper %s %s", restClient, broadcastEvent)) {
-logger.info("{} wipe cache {}", 
restClient, broadcastEvent);
+try {
 
restClient.wipeCache(broadcastEvent.getEntity(), broadcastEvent.getEvent(), 
broadcastEvent.getCacheKey());
-logger.info("{} wipe cache {} 
success", restClient, broadcastEvent);
 } catch (IOException e) {
 logger.warn("Thread failed during wipe 
cache at " + broadcastEvent, e);
 }



[23/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API for better convention

2017-05-24 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/model/TableMeta.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/model/TableMeta.java 
b/server-base/src/main/java/org/apache/kylin/rest/model/TableMeta.java
index 9a48851..47002b5 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/model/TableMeta.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/model/TableMeta.java
@@ -27,16 +27,16 @@ import java.util.List;
 public class TableMeta implements Serializable {
 
 private static final long serialVersionUID = 1L;
-private String TABLE_CAT;
-private String TABLE_SCHEM;
-private String TABLE_NAME;
-private String TABLE_TYPE;
-private String REMARKS;
-private String TYPE_CAT;
-private String TYPE_SCHEM;
-private String TYPE_NAME;
-private String SELF_REFERENCING_COL_NAME;
-private String REF_GENERATION;
+protected String TABLE_CAT;
+protected String TABLE_SCHEM;
+protected String TABLE_NAME;
+protected String TABLE_TYPE;
+protected String REMARKS;
+protected String TYPE_CAT;
+protected String TYPE_SCHEM;
+protected String TYPE_NAME;
+protected String SELF_REFERENCING_COL_NAME;
+protected String REF_GENERATION;
 private List columns = new ArrayList();
 
 public TableMeta() {

http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/model/TableMetaWithType.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/model/TableMetaWithType.java 
b/server-base/src/main/java/org/apache/kylin/rest/model/TableMetaWithType.java
new file mode 100644
index 000..55198fe
--- /dev/null
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/model/TableMetaWithType.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest.model;
+
+import java.io.Serializable;
+import java.util.HashSet;
+
+/**
+ * Created by luwei on 17-4-26.
+ */
+public class TableMetaWithType extends TableMeta {
+public static enum tableTypeEnum implements Serializable {
+
+LOOKUP, FACT
+
+}
+
+private HashSet TYPE;
+
+public TableMetaWithType(String tABLE_CAT, String tABLE_SCHEM, String 
tABLE_NAME, String tABLE_TYPE, String rEMARKS, String tYPE_CAT, String 
tYPE_SCHEM, String tYPE_NAME, String sELF_REFERENCING_COL_NAME, String 
rEF_GENERATION) {
+TABLE_CAT = tABLE_CAT;
+TABLE_SCHEM = tABLE_SCHEM;
+TABLE_NAME = tABLE_NAME;
+TABLE_TYPE = tABLE_TYPE;
+REMARKS = rEMARKS;
+TYPE_CAT = tYPE_CAT;
+TYPE_SCHEM = tYPE_SCHEM;
+TYPE_NAME = tYPE_NAME;
+SELF_REFERENCING_COL_NAME = sELF_REFERENCING_COL_NAME;
+REF_GENERATION = rEF_GENERATION;
+TYPE = new HashSet();
+}
+
+public HashSet getTYPE() {
+return TYPE;
+}
+
+public void setTYPE(HashSet TYPE) {
+this.TYPE = TYPE;
+}
+}

http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java
--
diff --git a/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java 
b/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java
new file mode 100644
index 000..53cbaba
--- /dev/null
+++ b/server-base/src/main/java/org/apache/kylin/rest/msg/CnMessage.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the Li

[46/50] [abbrv] kylin git commit: KYLIN-2636 optimize case when in group by

2017-05-24 Thread kangkaisen
KYLIN-2636 optimize case when in group by

KYLIN-2636 bug fix


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/79c75015
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/79c75015
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/79c75015

Branch: refs/heads/KYLIN-2606
Commit: 79c75015e49b2216f6e8ca9ec0cedbff72737821
Parents: 2c54989
Author: Hongbin Ma 
Authored: Mon May 22 16:45:24 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 20:30:06 2017 +0800

--
 .../resources/query/sql_subquery/query32.sql| 14 +
 .../resources/query/sql_subquery/query33.sql| 14 +
 .../resources/query/sql_subquery/query34.sql| 14 +
 .../kylin/query/relnode/OLAPProjectRel.java | 61 +++-
 4 files changed, 102 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/79c75015/kylin-it/src/test/resources/query/sql_subquery/query32.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query32.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query32.sql
new file mode 100644
index 000..394ea15
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query32.sql
@@ -0,0 +1,14 @@
+
+  select  sum(price) as sum_price,  (case when '1'='1' then 
test_cal_dt.week_beg_dt when '1'='2' then test_kylin_fact.lstg_site_id else 
test_kylin_fact.leaf_categ_id end) as xxx 
+  from test_kylin_fact
+  inner JOIN edw.test_cal_dt as test_cal_dt
+  ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt
+  inner JOIN test_category_groupings
+  ON test_kylin_fact.leaf_categ_id = test_category_groupings.leaf_categ_id AND 
test_kylin_fact.lstg_site_id = test_category_groupings.site_id
+  inner JOIN edw.test_sites as test_sites
+  ON test_kylin_fact.lstg_site_id = test_sites.site_id
+  
+  where case when '1'='1' then test_kylin_fact.cal_dt < date'2012-04-01' when 
'1'='2' then  test_cal_dt.week_beg_dt > date'2012-04-01' else  
test_kylin_fact.lstg_site_id is not null end and lstg_format_name='FP-GTC' 
+  
+  group by case when '1'='1' then test_cal_dt.week_beg_dt when '1'='2' then 
test_kylin_fact.lstg_site_id else test_kylin_fact.leaf_categ_id end
+ 

http://git-wip-us.apache.org/repos/asf/kylin/blob/79c75015/kylin-it/src/test/resources/query/sql_subquery/query33.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query33.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query33.sql
new file mode 100644
index 000..08ecc8e
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query33.sql
@@ -0,0 +1,14 @@
+
+  select  sum(price) as sum_price,  lstg_format_name,(case when '2'='1' then 
test_kylin_fact.lstg_site_id  when '2'='2' then test_cal_dt.week_beg_dt else 
test_kylin_fact.leaf_categ_id end) as xxx 
+  from test_kylin_fact
+  inner JOIN edw.test_cal_dt as test_cal_dt
+  ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt
+  inner JOIN test_category_groupings
+  ON test_kylin_fact.leaf_categ_id = test_category_groupings.leaf_categ_id AND 
test_kylin_fact.lstg_site_id = test_category_groupings.site_id
+  inner JOIN edw.test_sites as test_sites
+  ON test_kylin_fact.lstg_site_id = test_sites.site_id
+  
+  where case  when '2'='1' then  test_cal_dt.week_beg_dt > date'2012-04-01' 
when '2'='2' then test_kylin_fact.cal_dt < date'2012-04-01' else  
test_kylin_fact.lstg_site_id is not null end
+  
+  group by case  when '2'='1' then test_kylin_fact.lstg_site_id  when '2'='2' 
then test_cal_dt.week_beg_dt else test_kylin_fact.leaf_categ_id 
end,lstg_format_name
+ 

http://git-wip-us.apache.org/repos/asf/kylin/blob/79c75015/kylin-it/src/test/resources/query/sql_subquery/query34.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query34.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query34.sql
new file mode 100644
index 000..0dda9aa
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query34.sql
@@ -0,0 +1,14 @@
+
+  select  sum(price) as sum_price,  (case when '3'='1' then 
test_cal_dt.week_beg_dt else   test_kylin_fact.cal_dt  end) as xxx 
+  from test_kylin_fact
+  inner JOIN edw.test_cal_dt as test_cal_dt
+  ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt
+  inner JOIN test_category_groupings
+  ON test_kylin_fact.leaf_categ_id = test_category_groupings.leaf_categ_id AND 
test_kylin_fact.lstg_site_id = test_category_groupings.site_id
+  inner JOIN edw.test_sites as test_sites
+  ON test_kylin_fact.lstg_site_id = test_sites.site_id
+  
+  where case when '3'='1' then test_kylin_fact.cal_dt < date'2012-04-01' else  
test_cal_dt.week_beg_dt  > date'2012-04-01' end and lstg_format_n

[42/50] [abbrv] kylin git commit: Merge commit '9fef04d9a98e11454d00247d8cd2f4d501ba66a2'

2017-05-24 Thread kangkaisen
Merge commit '9fef04d9a98e11454d00247d8cd2f4d501ba66a2'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/34a65bae
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/34a65bae
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/34a65bae

Branch: refs/heads/KYLIN-2606
Commit: 34a65baec0d47de0d91aa8a98b8e1a70db7b6d65
Parents: ed0430b 9fef04d
Author: Hongbin Ma 
Authored: Tue May 23 20:22:54 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 20:22:54 2017 +0800

--
 webapp/app/js/model/projectModel.js | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)
--




[37/50] [abbrv] kylin git commit: minor, fix 'CREATE-TABLE-AS-SELECT cannot create external table'

2017-05-24 Thread kangkaisen
minor, fix 'CREATE-TABLE-AS-SELECT cannot create external table'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/83fb144f
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/83fb144f
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/83fb144f

Branch: refs/heads/KYLIN-2606
Commit: 83fb144f2c3df127a2b893f96a05507b8de01e7f
Parents: 81ed301
Author: Cheng Wang 
Authored: Tue May 23 19:41:21 2017 +0800
Committer: hongbin ma 
Committed: Tue May 23 19:46:02 2017 +0800

--
 .../java/org/apache/kylin/source/hive/HiveMRInput.java  | 12 +++-
 1 file changed, 7 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/83fb144f/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
--
diff --git 
a/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java 
b/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
index dffba8a..15d4456 100644
--- a/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
+++ b/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
@@ -190,14 +190,16 @@ public class HiveMRInput implements IMRInput {
 HiveCmdBuilder hiveCmdBuilder = new HiveCmdBuilder();
 hiveCmdBuilder.addStatement(hiveInitStatements);
 for (TableDesc lookUpTableDesc : lookupViewsTables) {
+String identity = lookUpTableDesc.getIdentity();
+String intermediate = lookUpTableDesc.getMaterializedName();
 if (lookUpTableDesc.isView()) {
 StringBuilder createIntermediateTableHql = new 
StringBuilder();
-createIntermediateTableHql.append("DROP TABLE IF EXISTS " 
+ lookUpTableDesc.getMaterializedName() + ";\n");
-createIntermediateTableHql.append("CREATE EXTERNAL TABLE 
IF NOT EXISTS " + lookUpTableDesc.getMaterializedName() + "\n");
-createIntermediateTableHql.append("LOCATION '" + 
jobWorkingDir + "/" + lookUpTableDesc.getMaterializedName() + "'\n");
-createIntermediateTableHql.append("AS SELECT * FROM " + 
lookUpTableDesc.getIdentity() + ";\n");
+createIntermediateTableHql.append("DROP TABLE IF EXISTS " 
+ intermediate + ";\n");
+createIntermediateTableHql.append("CREATE EXTERNAL TABLE 
IF NOT EXISTS " + intermediate + " LIKE " + identity + "\n");
+createIntermediateTableHql.append("LOCATION '" + 
jobWorkingDir + "/" + intermediate + "';\n");
+createIntermediateTableHql.append("INSERT OVERWRITE TABLE 
" + intermediate + " SELECT * FROM " + identity + ";\n");
 
hiveCmdBuilder.addStatement(createIntermediateTableHql.toString());
-hiveViewIntermediateTables = hiveViewIntermediateTables + 
lookUpTableDesc.getMaterializedName() + ";";
+hiveViewIntermediateTables = hiveViewIntermediateTables + 
intermediate + ";";
 }
 }
 



[17/50] [abbrv] kylin git commit: KYLIN-2624 pass IT

2017-05-24 Thread kangkaisen
KYLIN-2624 pass IT


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0bdd1c21
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0bdd1c21
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0bdd1c21

Branch: refs/heads/KYLIN-2606
Commit: 0bdd1c21981cef4d9e6edafd63b9c5a0fb2a6725
Parents: be32f75
Author: Yang Li 
Authored: Sat May 20 07:56:24 2017 +0800
Committer: Yang Li 
Committed: Sat May 20 09:38:51 2017 +0800

--
 examples/test_case_data/localmeta/UUID  |   1 +
 .../kylin/job/BaseTestDistributedScheduler.java |   2 +
 .../hbase/ITZookeeperDistributedLockTest.java   | 257 +++
 .../hbase/util/ZookeeperDistributedLock.java|  11 +-
 .../util/ITZookeeperDistributedLockTest.java| 254 --
 5 files changed, 268 insertions(+), 257 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/0bdd1c21/examples/test_case_data/localmeta/UUID
--
diff --git a/examples/test_case_data/localmeta/UUID 
b/examples/test_case_data/localmeta/UUID
new file mode 100644
index 000..e3f5e6b
--- /dev/null
+++ b/examples/test_case_data/localmeta/UUID
@@ -0,0 +1 @@
+$3591078f-9401-481a-a233-e7755c1142d0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/0bdd1c21/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
--
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java 
b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
index 6343dfa..1ea6507 100644
--- 
a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
+++ 
b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
@@ -113,6 +113,8 @@ public class BaseTestDistributedScheduler extends 
HBaseMetadataTestCase {
 
 @AfterClass
 public static void after() throws Exception {
+jobLock1.purgeLocks("");
+
 if (scheduler1 != null) {
 scheduler1.shutdown();
 scheduler1 = null;

http://git-wip-us.apache.org/repos/asf/kylin/blob/0bdd1c21/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
--
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
 
b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
new file mode 100644
index 000..8460cb9
--- /dev/null
+++ 
b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
@@ -0,0 +1,257 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.storage.hbase;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Random;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.kylin.common.lock.DistributedLock;
+import org.apache.kylin.common.lock.DistributedLock.Watcher;
+import org.apache.kylin.common.util.HBaseMetadataTestCase;
+import org.apache.kylin.storage.hbase.util.ZookeeperDistributedLock;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ITZookeeperDistributedLockTest extends HBaseMetadataTestCase {
+private static final Logger logger = 
LoggerFactory.getLogger(ITZookeeperDistributedLockTest.class);
+private static final String ZK_PFX = "/test/ZookeeperDistributedLockTest/" 
+ new Random().nextInt(1000);
+
+static ZookeeperDistributedLock.Factory factory;
+
+@BeforeClass
+public static void setup() throws Exception {
+staticCreateTestMetadata();
+factory = new Z

[41/50] [abbrv] kylin git commit: KYLIN-2603 enable GTAggregateScanner when there is having filter

2017-05-24 Thread kangkaisen
KYLIN-2603 enable GTAggregateScanner when there is having filter


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0e44a195
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0e44a195
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0e44a195

Branch: refs/heads/KYLIN-2606
Commit: 0e44a195b5b2a0074896ffae0636b82a1d7c1355
Parents: e1bc72e
Author: Li Yang 
Authored: Thu May 11 17:26:10 2017 +0800
Committer: hongbin ma 
Committed: Tue May 23 20:18:17 2017 +0800

--
 .../src/main/java/org/apache/kylin/gridtable/GTScanRequest.java| 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/0e44a195/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
index 9b6b2a6..ffaa8bd 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRequest.java
@@ -195,7 +195,7 @@ public class GTScanRequest {
 return new EmptyGTScanner();
 }
 
-if (!this.isAllowStorageAggregation()) {
+if (!this.isAllowStorageAggregation() && havingFilterPushDown == 
null) {
 logger.info("pre aggregation is not beneficial, skip it");
 } else if (this.hasAggregation()) {
 logger.info("pre aggregating results before returning");



[02/50] [abbrv] kylin git commit: KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in Broadcaster

2017-05-24 Thread kangkaisen
KYLIN-2619 Use newCachedThreadPool instead of newFixedThreadPool in Broadcaster


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1c3ed36f
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1c3ed36f
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1c3ed36f

Branch: refs/heads/KYLIN-2606
Commit: 1c3ed36f7dcf2152b17966bb69dd3211ce4e8aba
Parents: 1c80c29
Author: gaodayue 
Authored: Sat May 6 05:21:22 2017 +0800
Committer: kangkaisen 
Committed: Mon May 15 16:02:01 2017 +0800

--
 .../java/org/apache/kylin/common/restclient/RestClient.java   | 4 
 .../java/org/apache/kylin/metadata/cachesync/Broadcaster.java | 7 +--
 2 files changed, 9 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1c3ed36f/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
index 33a4e7a..470386b 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java
@@ -287,4 +287,8 @@ public class RestClient {
 return result.toString();
 }
 
+@Override
+public String toString() {
+return String.format("RestClient(%s:%d)", host, port);
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/1c3ed36f/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
index 1394f7b..e787dfd 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/cachesync/Broadcaster.java
@@ -35,6 +35,7 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.restclient.RestClient;
 import org.apache.kylin.common.util.DaemonThreadFactory;
+import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.metadata.project.ProjectManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -116,7 +117,7 @@ public class Broadcaster {
 for (String node : config.getRestServers()) {
 restClients.add(new RestClient(node));
 }
-final ExecutorService wipingCachePool = 
Executors.newFixedThreadPool(restClients.size(), new DaemonThreadFactory());
+final ExecutorService wipingCachePool = 
Executors.newCachedThreadPool(new DaemonThreadFactory());
 while (true) {
 try {
 final BroadcastEvent broadcastEvent = 
broadcastEvents.takeFirst();
@@ -125,8 +126,10 @@ public class Broadcaster {
 wipingCachePool.execute(new Runnable() {
 @Override
 public void run() {
-try {
+try (SetThreadName ignored = new 
SetThreadName("CacheWiper %s %s", restClient, broadcastEvent)) {
+logger.info("{} wipe cache {}", 
restClient, broadcastEvent);
 
restClient.wipeCache(broadcastEvent.getEntity(), broadcastEvent.getEvent(), 
broadcastEvent.getCacheKey());
+logger.info("{} wipe cache {} 
success", restClient, broadcastEvent);
 } catch (IOException e) {
 logger.warn("Thread failed during wipe 
cache at " + broadcastEvent, e);
 }



[18/50] [abbrv] kylin git commit: minor, more stable ITZookeeperDistributedLockTest

2017-05-24 Thread kangkaisen
minor, more stable ITZookeeperDistributedLockTest


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/fd3bfedb
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/fd3bfedb
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/fd3bfedb

Branch: refs/heads/KYLIN-2606
Commit: fd3bfedb50f488d6679b9a01bc17e214622b8838
Parents: 0bdd1c2
Author: Yang Li 
Authored: Sat May 20 14:00:06 2017 +0800
Committer: Yang Li 
Committed: Sat May 20 14:00:06 2017 +0800

--
 .../kylin/storage/hbase/ITZookeeperDistributedLockTest.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/fd3bfedb/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
--
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
 
b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
index 8460cb9..48d6736 100644
--- 
a/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
+++ 
b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
@@ -113,12 +113,12 @@ public class ITZookeeperDistributedLockTest extends 
HBaseMetadataTestCase {
 new Thread() {
 @Override
 public void run() {
-d.lock(path, 1);
+d.lock(path, 15000);
 }
 }.start();
 c.unlock(path);
 
-Thread.sleep(1);
+Thread.sleep(2);
 
 assertTrue(c.isLocked(path));
 assertEquals(d.getClient(), d.peekLock(path));



[30/50] [abbrv] kylin git commit: minor, apply first found hive_lib_dir

2017-05-24 Thread kangkaisen
minor, apply first found hive_lib_dir


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/8cd807f7
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/8cd807f7
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/8cd807f7

Branch: refs/heads/KYLIN-2606
Commit: 8cd807f778eeafbb54effb0dd1c7ab552e68c730
Parents: 11a0b57
Author: Cheng Wang 
Authored: Mon May 22 17:03:45 2017 +0800
Committer: 成 
Committed: Tue May 23 11:30:25 2017 +0800

--
 build/bin/find-hive-dependency.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/8cd807f7/build/bin/find-hive-dependency.sh
--
diff --git a/build/bin/find-hive-dependency.sh 
b/build/bin/find-hive-dependency.sh
index 8ebdfbd..6f28fd1 100644
--- a/build/bin/find-hive-dependency.sh
+++ b/build/bin/find-hive-dependency.sh
@@ -46,7 +46,8 @@ fi
 for data in ${arr[@]}
 do
 result=`echo $data | grep -e 'hive-exec[a-z0-9A-Z\.-]*.jar'`
-if [ $result ]
+# In some cases there are more than one lib dirs, only the first one will 
be applied.
+if [ $result ] && [ -z "$hive_exec_path" ]
 then
 hive_exec_path=$data
 fi



[19/50] [abbrv] kylin git commit: KYLIN-2624 pass IT

2017-05-24 Thread kangkaisen
KYLIN-2624 pass IT


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1b864f04
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1b864f04
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1b864f04

Branch: refs/heads/KYLIN-2606
Commit: 1b864f04e3fbf50c08978c2f8533ead4ca9784c6
Parents: d21c817
Author: Yang Li 
Authored: Sat May 20 14:14:43 2017 +0800
Committer: hongbin ma 
Committed: Sat May 20 14:19:07 2017 +0800

--
 examples/test_case_data/localmeta/UUID  |   1 +
 .../kylin/job/BaseTestDistributedScheduler.java |   2 +
 .../hbase/ITZookeeperDistributedLockTest.java   | 257 +++
 .../hbase/util/ZookeeperDistributedLock.java|  11 +-
 .../util/ITZookeeperDistributedLockTest.java| 254 --
 5 files changed, 268 insertions(+), 257 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1b864f04/examples/test_case_data/localmeta/UUID
--
diff --git a/examples/test_case_data/localmeta/UUID 
b/examples/test_case_data/localmeta/UUID
new file mode 100644
index 000..e3f5e6b
--- /dev/null
+++ b/examples/test_case_data/localmeta/UUID
@@ -0,0 +1 @@
+$3591078f-9401-481a-a233-e7755c1142d0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/1b864f04/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
--
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java 
b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
index 6343dfa..1ea6507 100644
--- 
a/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
+++ 
b/kylin-it/src/test/java/org/apache/kylin/job/BaseTestDistributedScheduler.java
@@ -113,6 +113,8 @@ public class BaseTestDistributedScheduler extends 
HBaseMetadataTestCase {
 
 @AfterClass
 public static void after() throws Exception {
+jobLock1.purgeLocks("");
+
 if (scheduler1 != null) {
 scheduler1.shutdown();
 scheduler1 = null;

http://git-wip-us.apache.org/repos/asf/kylin/blob/1b864f04/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
--
diff --git 
a/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
 
b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
new file mode 100644
index 000..48d6736
--- /dev/null
+++ 
b/kylin-it/src/test/java/org/apache/kylin/storage/hbase/ITZookeeperDistributedLockTest.java
@@ -0,0 +1,257 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.storage.hbase;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Random;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.kylin.common.lock.DistributedLock;
+import org.apache.kylin.common.lock.DistributedLock.Watcher;
+import org.apache.kylin.common.util.HBaseMetadataTestCase;
+import org.apache.kylin.storage.hbase.util.ZookeeperDistributedLock;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ITZookeeperDistributedLockTest extends HBaseMetadataTestCase {
+private static final Logger logger = 
LoggerFactory.getLogger(ITZookeeperDistributedLockTest.class);
+private static final String ZK_PFX = "/test/ZookeeperDistributedLockTest/" 
+ new Random().nextInt(1000);
+
+static ZookeeperDistributedLock.Factory factory;
+
+@BeforeClass
+public static void setup() throws Exception {
+staticCreateTestMetadata();
+factory = ne

[22/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API for better convention

2017-05-24 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/service/CubeServiceV2.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/CubeServiceV2.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/CubeServiceV2.java
new file mode 100644
index 000..2fae789
--- /dev/null
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/CubeServiceV2.java
@@ -0,0 +1,497 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest.service;
+
+import static org.apache.kylin.cube.model.CubeDesc.STATUS_DRAFT;
+import static 
org.apache.kylin.rest.controller2.CubeControllerV2.VALID_CUBENAME;
+
+import java.io.IOException;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.cube.CubeInstance;
+import org.apache.kylin.cube.CubeManager;
+import org.apache.kylin.cube.CubeSegment;
+import org.apache.kylin.cube.CubeUpdate;
+import org.apache.kylin.cube.cuboid.CuboidCLI;
+import org.apache.kylin.cube.model.CubeDesc;
+import org.apache.kylin.engine.mr.CubingJob;
+import org.apache.kylin.job.exception.JobException;
+import org.apache.kylin.job.execution.ExecutableState;
+import org.apache.kylin.metadata.model.DataModelDesc;
+import org.apache.kylin.metadata.model.SegmentStatusEnum;
+import org.apache.kylin.metadata.project.ProjectInstance;
+import org.apache.kylin.metadata.project.ProjectManager;
+import org.apache.kylin.metadata.realization.RealizationStatusEnum;
+import org.apache.kylin.metadata.realization.RealizationType;
+import org.apache.kylin.rest.constant.Constant;
+import org.apache.kylin.rest.exception.BadRequestException;
+import org.apache.kylin.rest.exception.ForbiddenException;
+import org.apache.kylin.rest.msg.Message;
+import org.apache.kylin.rest.msg.MsgPicker;
+import org.apache.kylin.rest.security.AclPermission;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by luwei on 17-4-17.
+ */
+
+@Component("cubeMgmtServiceV2")
+public class CubeServiceV2 extends CubeService {
+
+private static final Logger logger = 
LoggerFactory.getLogger(CubeServiceV2.class);
+
+@Autowired
+@Qualifier("accessService")
+private AccessService accessService;
+
+@Autowired
+@Qualifier("jobService")
+private JobService jobService;
+
+@Autowired
+@Qualifier("modelMgmtServiceV2")
+private ModelServiceV2 modelServiceV2;
+
+
+@PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#cube, 
'ADMINISTRATION') or hasPermission(#cube, 'OPERATION')  or hasPermission(#cube, 
'MANAGEMENT')")
+public CubeInstance deleteSegment(CubeInstance cube, String segmentName) 
throws IOException {
+Message msg = MsgPicker.getMsg();
+
+if (!segmentName.equals(cube.getSegments().get(0).getName()) && 
!segmentName.equals(cube.getSegments().get(cube.getSegments().size() - 
1).getName())) {
+throw new 
BadRequestException(String.format(msg.getDELETE_NOT_FIRST_LAST_SEG(), 
segmentName));
+}
+CubeSegment toDelete = null;
+for (CubeSegment seg : cube.getSegments()) {
+if (seg.getName().equals(segmentName)) {
+toDelete = seg;
+}
+}
+
+if (toDelete == null) {
+throw new 
BadRequestException(String.format(msg.getSEG_NOT_FOUND(), segmentName));
+}
+
+if (toDelete.getStatus() != SegmentStatusEnum.READY) {
+throw new 
BadRequestException(String.format(msg.getDELETE_NOT_READY_SEG(), segmentName));
+}
+
+CubeUpdate update = new CubeUpdate(cube);
+update.setToRemoveSegs(new CubeSegment[] { toDelete });
+

[26/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API for better convention

2017-05-24 Thread kangkaisen
KYLIN-2632 Refactor REST API for better convention


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/73a78dbe
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/73a78dbe
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/73a78dbe

Branch: refs/heads/KYLIN-2606
Commit: 73a78dbee84808de42925ca5a0b8e16761840233
Parents: 429dfbd
Author: Luwei-Chen 
Authored: Fri May 19 21:49:31 2017 +0800
Committer: liyang-gmt8 
Committed: Sun May 21 09:18:59 2017 +0800

--
 .../org/apache/kylin/cube/CubeDescManager.java  |  91 ++-
 .../org/apache/kylin/cube/model/CubeDesc.java   |  56 +-
 .../validation/rule/DictionaryRuleTest.java |   8 +-
 .../model/validation/rule/FunctionRuleTest.java |   6 +-
 .../apache/kylin/metadata/MetadataManager.java  |  16 +-
 .../kylin/metadata/model/DataModelDesc.java |  49 +-
 .../kylin/metadata/model/JoinTableDesc.java |   6 +-
 .../apache/kylin/metadata/model/JoinsTree.java  |  10 +
 .../kylin/metadata/model/TableExtDesc.java  |  10 +
 .../org/apache/kylin/engine/mr/IMRInput.java|   3 -
 .../java/org/apache/kylin/engine/mr/MRUtil.java |  14 +-
 .../kylin/rest/controller/AccessController.java |  12 +-
 .../kylin/rest/controller/AdminController.java  |  34 +-
 .../kylin/rest/controller/CacheController.java  |   8 +-
 .../kylin/rest/controller/CubeController.java   |  67 +-
 .../rest/controller/CubeDescController.java |   6 +-
 .../rest/controller/DiagnosisController.java|   9 +-
 .../rest/controller/EncodingController.java |   5 +-
 .../controller/ExternalFilterController.java|  10 +-
 .../kylin/rest/controller/HybridController.java |  13 +-
 .../kylin/rest/controller/JobController.java|  21 +-
 .../kylin/rest/controller/ModelController.java  |  17 +-
 .../rest/controller/ModelDescController.java|   4 +-
 .../rest/controller/ProjectController.java  |  19 +-
 .../kylin/rest/controller/QueryController.java  |  14 +-
 .../rest/controller/StreamingController.java|  16 +-
 .../kylin/rest/controller/TableController.java  |  16 +-
 .../kylin/rest/controller/UserController.java   |  11 +-
 .../rest/controller2/AccessControllerV2.java| 135 
 .../rest/controller2/AdminControllerV2.java | 106 +++
 .../rest/controller2/CacheControllerV2.java |  91 +++
 .../rest/controller2/CubeControllerV2.java  | 755 +++
 .../rest/controller2/CubeDescControllerV2.java  | 141 
 .../rest/controller2/DiagnosisControllerV2.java | 121 +++
 .../rest/controller2/EncodingControllerV2.java  |  80 ++
 .../controller2/ExternalFilterControllerV2.java | 101 +++
 .../rest/controller2/HybridControllerV2.java|  97 +++
 .../kylin/rest/controller2/JobControllerV2.java | 222 ++
 .../rest/controller2/ModelControllerV2.java | 284 +++
 .../rest/controller2/ModelDescControllerV2.java | 107 +++
 .../rest/controller2/ProjectControllerV2.java   | 269 +++
 .../rest/controller2/QueryControllerV2.java | 186 +
 .../rest/controller2/StreamingControllerV2.java | 288 +++
 .../rest/controller2/TableControllerV2.java | 159 
 .../rest/controller2/UserControllerV2.java  | 103 +++
 .../rest/exception/BadRequestException.java |   1 +
 .../org/apache/kylin/rest/model/ColumnMeta.java |  46 +-
 .../kylin/rest/model/ColumnMetaWithType.java|  70 ++
 .../org/apache/kylin/rest/model/TableMeta.java  |  20 +-
 .../kylin/rest/model/TableMetaWithType.java |  57 ++
 .../org/apache/kylin/rest/msg/CnMessage.java|  38 +
 .../java/org/apache/kylin/rest/msg/Message.java | 588 +++
 .../org/apache/kylin/rest/msg/MsgPicker.java|  42 ++
 .../kylin/rest/request/HiveTableRequestV2.java  |  59 ++
 .../rest/response/CubeInstanceResponse.java |  72 ++
 .../rest/response/DataModelDescResponse.java|  62 ++
 .../kylin/rest/response/HBaseResponse.java  |   9 +
 .../kylin/rest/response/ResponseCode.java   |   2 +-
 .../security/KylinAuthenticationProvider.java   |   2 +
 .../kylin/rest/security/LdapProvider.java   |   2 +
 .../kylin/rest/service/AccessService.java   |  59 +-
 .../apache/kylin/rest/service/AclService.java   |  49 +-
 .../apache/kylin/rest/service/AdminService.java |  63 +-
 .../apache/kylin/rest/service/CacheService.java |  10 +-
 .../apache/kylin/rest/service/CubeService.java  |  55 +-
 .../kylin/rest/service/CubeServiceV2.java   | 497 
 .../kylin/rest/service/DiagnosisService.java|  18 +-
 .../kylin/rest/service/EncodingService.java |   7 +-
 .../kylin/rest/service/ExtFilterService.java|  12 +-
 .../apache/kylin/rest/service/JobService.java   | 122 +--
 .../kylin/rest/service/KafkaConfigService.java  |   8 +-
 .../apache/kylin/rest/service/ModelService.java |  20 +-
 .../kylin/rest/service/ModelServiceV2.java  | 351 +
 .../kylin/rest/service/ProjectService.java  |   2 +
 .../kylin/rest/service/P

[04/50] [abbrv] kylin git commit: KYLIN-2623 Move output(Hbase) code to outputside

2017-05-24 Thread kangkaisen
KYLIN-2623 Move output(Hbase) code to outputside


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a38b02df
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a38b02df
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a38b02df

Branch: refs/heads/KYLIN-2606
Commit: a38b02df0387541684aa1689e044927af650f1c7
Parents: edc4d4c
Author: Roger Shi 
Authored: Tue May 16 13:50:23 2017 +0800
Committer: liyang-gmt8 
Committed: Tue May 16 14:03:50 2017 +0800

--
 .../org/apache/kylin/engine/mr/IMROutput2.java  |  33 +-
 .../engine/mr/common/AbstractHadoopJob.java |   6 +-
 .../apache/kylin/engine/mr/steps/CuboidJob.java |  37 +++
 .../kylin/engine/mr/steps/InMemCuboidJob.java   |  55 ++
 .../engine/mr/steps/LayerReducerNumSizing.java  |  80 --
 .../kylin/engine/mr/steps/MergeCuboidJob.java   |  37 ---
 .../engine/mr/steps/MergeCuboidMapper.java  |  35 +-
 .../kylin/engine/mr/steps/ReducerNumSizing.java | 106 +++
 .../apache/kylin/source/hive/HiveMRInput.java   |   2 -
 .../apache/kylin/source/kafka/KafkaMRInput.java |   1 -
 .../hbase/steps/HBaseMROutput2Transition.java   |  97 +
 11 files changed, 284 insertions(+), 205 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/a38b02df/engine-mr/src/main/java/org/apache/kylin/engine/mr/IMROutput2.java
--
diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/IMROutput2.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/IMROutput2.java
index 603f207..69bba0a 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/IMROutput2.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/IMROutput2.java
@@ -18,11 +18,14 @@
 
 package org.apache.kylin.engine.mr;
 
+import java.util.List;
+
+import org.apache.hadoop.mapreduce.Job;
+import org.apache.hadoop.mapreduce.lib.input.FileSplit;
+import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.job.execution.DefaultChainedExecutable;
 
-import java.util.List;
-
 public interface IMROutput2 {
 
 /** Return a helper to participate in batch cubing job flow. */
@@ -53,6 +56,19 @@ public interface IMROutput2 {
 
 /** Add step that does any necessary clean up. */
 public void addStepPhase4_Cleanup(DefaultChainedExecutable jobFlow);
+
+public IMROutputFormat getOuputFormat();
+
+}
+
+public interface IMROutputFormat {
+
+/** Configure the InputFormat of given job. */
+public void configureJobInput(Job job, String input) throws Exception;
+
+/** Configure the OutputFormat of given job. */
+public void configureJobOutput(Job job, String output, CubeSegment 
segment, int level) throws Exception;
+
 }
 
 /** Return a helper to participate in batch merge job flow. */
@@ -82,6 +98,19 @@ public interface IMROutput2 {
 
 /** Add step that does any necessary clean up. */
 public void addStepPhase3_Cleanup(DefaultChainedExecutable jobFlow);
+
+public IMRMergeOutputFormat getOuputFormat();
+}
+
+public interface IMRMergeOutputFormat {
+
+/** Configure the InputFormat of given job. */
+public void configureJobInput(Job job, String input) throws Exception;
+
+/** Configure the OutputFormat of given job. */
+public void configureJobOutput(Job job, String output, CubeSegment 
segment) throws Exception;
+
+public CubeSegment findSourceSegment(FileSplit fileSplit, CubeInstance 
cube);
 }
 
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/a38b02df/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
index 44686d6..764cbdd 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/AbstractHadoopJob.java
@@ -559,7 +559,7 @@ public abstract class AbstractHadoopJob extends Configured 
implements Tool {
 HadoopUtil.deletePath(conf, path);
 }
 
-protected double getTotalMapInputMB() throws ClassNotFoundException, 
IOException, InterruptedException, JobException {
+public static double getTotalMapInputMB(Job job) throws 
ClassNotFoundException, IOException, InterruptedException, JobException {
 if (job == null) {
 throw new JobException("Job is null");
 }
@@ -576,6 +576,10 @@ public abstract class AbstractHadoopJob extends Configured 
imple

[36/50] [abbrv] kylin git commit: Merge commit 'ce6e3ede2f670bf037a55234630b85098265075a'

2017-05-24 Thread kangkaisen
Merge commit 'ce6e3ede2f670bf037a55234630b85098265075a'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/81ed3011
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/81ed3011
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/81ed3011

Branch: refs/heads/KYLIN-2606
Commit: 81ed30110186e2c13511a3fc50f6098645412aab
Parents: 2471d5e ce6e3ed
Author: Hongbin Ma 
Authored: Tue May 23 19:31:36 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 19:31:36 2017 +0800

--
 build/bin/load-hive-conf.sh |  2 +-
 .../impl/threadpool/DistributedScheduler.java   |  1 +
 .../apache/kylin/metadata/MetadataManager.java  |  2 ++
 .../kylin/metadata/model/DataModelDesc.java |  1 +
 .../security/KylinAuthenticationProvider.java   | 20 +++-
 .../apache/kylin/rest/service/CacheService.java |  1 -
 .../kylin/rest/service/ModelServiceTest.java|  2 +-
 .../hbase/util/ZookeeperDistributedLock.java|  2 --
 webapp/app/js/controllers/page.js   | 16 +---
 9 files changed, 26 insertions(+), 21 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/81ed3011/build/bin/load-hive-conf.sh
--
diff --cc build/bin/load-hive-conf.sh
index c7317c6,a42cd0c..0937719
--- a/build/bin/load-hive-conf.sh
+++ b/build/bin/load-hive-conf.sh
@@@ -12,4 -12,4 +12,4 @@@ rm -rf ${hive_conf_prop
  export ENABLE_CHECK_ENV=false
  ${dir}/kylin.sh org.apache.kylin.tool.HiveConfigCLI ${hive_conf_dir} 
${hive_conf_prop}
  [[ 0 == $? ]] || quit "Can not parse xml file: ${hive_conf_dir}, please check 
it."
--hive_conf_properties=`cat ${hive_conf_prop}`
++hive_conf_properties=`cat ${hive_conf_prop}`

http://git-wip-us.apache.org/repos/asf/kylin/blob/81ed3011/core-metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
--
diff --cc 
core-metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
index 00fafaf,b3ca14a..39d7830
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/MetadataManager.java
@@@ -603,9 -600,7 +603,10 @@@ public class MetadataManager 
  ResourceStore store = getStore();
  try {
  DataModelDesc dataModelDesc = store.getResource(path, 
DataModelDesc.class, MODELDESC_SERIALIZER);
 -dataModelDesc.init(config, this.getAllTablesMap(), 
this.ccInfoMap);
++
 +if (dataModelDesc.getStatus() == null)
 +dataModelDesc.init(config, this.getAllTablesMap(), 
this.ccInfoMap);
 +
  dataModelDescMap.putLocal(dataModelDesc.getName(), dataModelDesc);
  return dataModelDesc;
  } catch (Exception e) {
@@@ -653,8 -648,7 +654,9 @@@
  }
  
  private DataModelDesc saveDataModelDesc(DataModelDesc dataModelDesc) 
throws IOException {
 -dataModelDesc.init(config, this.getAllTablesMap(), this.ccInfoMap);
++
 +if (dataModelDesc.getStatus() == null)
 +dataModelDesc.init(config, this.getAllTablesMap(), 
this.ccInfoMap);
  
  String path = dataModelDesc.getResourcePath();
  getStore().putResource(path, dataModelDesc, MODELDESC_SERIALIZER);

http://git-wip-us.apache.org/repos/asf/kylin/blob/81ed3011/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
--
diff --cc 
core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
index c3554f2,2174b7a..a689979
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
@@@ -415,10 -385,9 +415,11 @@@ public class DataModelDesc extends Root
  
  TableDesc tableDesc = tables.get(join.getTable());
  String alias = join.getAlias();
 -if (alias == null)
 +if (alias == null) {
  alias = tableDesc.getName();
 +join.setAlias(alias);
 +}
+ 
  TableRef ref = new TableRef(this, alias, tableDesc);
  
  join.setTableRef(ref);

http://git-wip-us.apache.org/repos/asf/kylin/blob/81ed3011/server-base/src/main/java/org/apache/kylin/rest/security/KylinAuthenticationProvider.java
--

http://git-wip-us.apache.org/repos/asf/kylin/blob/81ed3011/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
--
diff --cc 
server-base/src/main/java/org/apache/kylin/rest/service

[25/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API for better convention

2017-05-24 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
index 99447a1..b6e2d45 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
@@ -39,6 +39,7 @@ import org.apache.kylin.rest.service.QueryService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -61,9 +62,10 @@ public class QueryController extends BasicController {
 private static final Logger logger = 
LoggerFactory.getLogger(QueryController.class);
 
 @Autowired
+@Qualifier("queryService")
 private QueryService queryService;
 
-@RequestMapping(value = "/query", method = RequestMethod.POST)
+@RequestMapping(value = "/query", method = RequestMethod.POST, produces = 
{ "application/json" })
 @ResponseBody
 public SQLResponse query(@RequestBody SQLRequest sqlRequest) {
 return queryService.doQueryWithCache(sqlRequest);
@@ -76,7 +78,7 @@ public class QueryController extends BasicController {
 return queryService.doQueryWithCache(sqlRequest);
 }
 
-@RequestMapping(value = "/saved_queries", method = RequestMethod.POST)
+@RequestMapping(value = "/saved_queries", method = RequestMethod.POST, 
produces = { "application/json" })
 @ResponseBody
 public void saveQuery(@RequestBody SaveSqlRequest sqlRequest) throws 
IOException {
 String creator = 
SecurityContextHolder.getContext().getAuthentication().getName();
@@ -85,21 +87,21 @@ public class QueryController extends BasicController {
 queryService.saveQuery(creator, newQuery);
 }
 
-@RequestMapping(value = "/saved_queries/{id}", method = 
RequestMethod.DELETE)
+@RequestMapping(value = "/saved_queries/{id}", method = 
RequestMethod.DELETE, produces = { "application/json" })
 @ResponseBody
 public void removeQuery(@PathVariable String id) throws IOException {
 String creator = 
SecurityContextHolder.getContext().getAuthentication().getName();
 queryService.removeQuery(creator, id);
 }
 
-@RequestMapping(value = "/saved_queries", method = RequestMethod.GET)
+@RequestMapping(value = "/saved_queries", method = RequestMethod.GET, 
produces = { "application/json" })
 @ResponseBody
 public List getQueries() throws IOException {
 String creator = 
SecurityContextHolder.getContext().getAuthentication().getName();
 return queryService.getQueries(creator);
 }
 
-@RequestMapping(value = "/query/format/{format}", method = 
RequestMethod.GET)
+@RequestMapping(value = "/query/format/{format}", method = 
RequestMethod.GET, produces = { "application/json" })
 @ResponseBody
 public void downloadQueryResult(@PathVariable String format, SQLRequest 
sqlRequest, HttpServletResponse response) {
 SQLResponse result = queryService.doQueryWithCache(sqlRequest);
@@ -129,7 +131,7 @@ public class QueryController extends BasicController {
 }
 }
 
-@RequestMapping(value = "/tables_and_columns", method = RequestMethod.GET)
+@RequestMapping(value = "/tables_and_columns", method = RequestMethod.GET, 
produces = { "application/json" })
 @ResponseBody
 public List getMetadata(MetaRequest metaRequest) {
 try {

http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
index 407ee2e..b0bb02a 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/StreamingController.java
@@ -39,6 +39,7 @@ import org.apache.kylin.source.kafka.config.KafkaConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.access.AccessDeniedException;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -63,13 +64,18

[38/50] [abbrv] kylin git commit: KYLIN-2641 - The current selected project is incorrect after we delete a project.

2017-05-24 Thread kangkaisen
KYLIN-2641 - The current selected project is incorrect after we delete a 
project.

Signed-off-by: Billy Liu 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/9fef04d9
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/9fef04d9
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/9fef04d9

Branch: refs/heads/KYLIN-2606
Commit: 9fef04d9a98e11454d00247d8cd2f4d501ba66a2
Parents: 81ed301
Author: 10069681 
Authored: Tue May 23 18:34:26 2017 +0800
Committer: Billy Liu 
Committed: Tue May 23 20:02:21 2017 +0800

--
 webapp/app/js/model/projectModel.js | 18 --
 1 file changed, 12 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/9fef04d9/webapp/app/js/model/projectModel.js
--
diff --git a/webapp/app/js/model/projectModel.js 
b/webapp/app/js/model/projectModel.js
index d2d32b4..77f47e8 100644
--- a/webapp/app/js/model/projectModel.js
+++ b/webapp/app/js/model/projectModel.js
@@ -21,7 +21,6 @@ KylinApp.service('ProjectModel', function () {
   this.projects = [];
   this.selectedProject = "_null";
 
-
   this.setSelectedProject = function (project) {
 var _projects =[];
 angular.forEach(this.projects,function(pro){
@@ -31,6 +30,7 @@ KylinApp.service('ProjectModel', function () {
   this.selectedProject = project;
 }
   };
+
   this.getSelectedProject = function (project) {
 if (this.selectedProject == "_null") {
   return null;
@@ -56,10 +56,10 @@ KylinApp.service('ProjectModel', function () {
 this.sortProjects();
   }
 
-  this.removeProject = function (project) {
+  this.removeProject = function (projectName) {
 var index = -1;
 for (var i = 0; i < this.projects.length; i++) {
-  if (this.projects[i].name == project) {
+  if (this.projects[i].name == projectName) {
 index = i;
 break;
   }
@@ -67,7 +67,15 @@ KylinApp.service('ProjectModel', function () {
 if (index > -1) {
   this.projects.splice(index, 1);
 }
-this.selectedProject = this.projects[0];
+
+if (this.selectedProject == projectName) {
+if (this.projects.length) {
+   this.selectedProject = this.projects[0].name;
+} else {
+   this.selectedProject = "_null";
+}
+}
+
 this.sortProjects();
   }
 
@@ -96,7 +104,6 @@ KylinApp.service('ProjectModel', function () {
 }
   }
 }
-;
 return this.getSelectedProject();
   }
 
@@ -124,7 +131,6 @@ KylinApp.service('ProjectModel', function () {
   }
 }
 return index;
-
   }
 
 })



[34/50] [abbrv] kylin git commit: KYLIN-2640 refactor ISource API

2017-05-24 Thread kangkaisen
KYLIN-2640 refactor ISource API


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0a0edfef
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0a0edfef
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0a0edfef

Branch: refs/heads/KYLIN-2606
Commit: 0a0edfefb96689ba06bb89a657d7c65711894ebb
Parents: 4766c78
Author: Li Yang 
Authored: Tue May 23 14:55:09 2017 +0800
Committer: hongbin ma 
Committed: Tue May 23 17:30:18 2017 +0800

--
 .../apache/kylin/common/KylinConfigBase.java|   4 +
 .../java/org/apache/kylin/cube/CubeManager.java |  24 +-
 .../java/org/apache/kylin/cube/CubeSegment.java |  14 +-
 .../kylin/cube/cli/DictionaryGeneratorCLI.java  |   8 +-
 .../org/apache/kylin/cube/util/CubingUtils.java |   4 +-
 .../org/apache/kylin/dict/DictionaryInfo.java   |   2 +-
 .../apache/kylin/dict/DictionaryManager.java|  14 +-
 .../dict/DistinctColumnValuesProvider.java  |   4 +-
 .../kylin/dict/TableColumnValueEnumerator.java  |   6 +-
 .../dict/TableColumnValueSortedEnumerator.java  |  14 +-
 .../kylin/dict/lookup/LookupStringTable.java|   4 +-
 .../apache/kylin/dict/lookup/LookupTable.java   |   8 +-
 .../kylin/dict/lookup/SnapshotManager.java  |   8 +-
 .../apache/kylin/dict/lookup/SnapshotTable.java |   8 +-
 .../apache/kylin/dict/MockupReadableTable.java  |   8 +-
 .../org/apache/kylin/source/IReadableTable.java | 146 
 .../java/org/apache/kylin/source/ISource.java   |  29 ++-
 .../kylin/source/ISourceMetadataExplorer.java   |  36 +++
 .../org/apache/kylin/source/ReadableTable.java  | 145 
 .../org/apache/kylin/source/SourceFactory.java  |  15 +-
 .../apache/kylin/source/SourcePartition.java|   8 +
 .../storage/gtrecord/CubeTupleConverter.java|   4 +-
 .../apache/kylin/engine/mr/DFSFileTable.java|   4 +-
 .../kylin/engine/mr/DFSFileTableReader.java |   2 +-
 .../org/apache/kylin/engine/mr/IMRInput.java|   6 +-
 .../kylin/engine/mr/SortedColumnDFSFile.java|   4 +-
 .../engine/mr/SortedColumnDFSFileReader.java|  16 +-
 .../engine/mr/steps/CreateDictionaryJob.java|   4 +-
 .../engine/mr/steps/MergeCuboidMapperTest.java  |   2 +-
 .../engine/spark/KylinKryoRegistrator.java  |   2 +-
 .../kylin/cube/ITDictionaryManagerTest.java |   4 +-
 .../kylin/provision/BuildCubeWithEngine.java|   4 +-
 .../kylin/provision/BuildCubeWithStream.java|   4 +-
 .../hive/ITHiveSourceTableLoaderTest.java   |  29 ++-
 .../source/hive/ITSnapshotManagerTest.java  |   6 +-
 server-base/pom.xml |   2 +
 .../kylin/rest/controller/CubeController.java   |   2 +-
 .../kylin/rest/controller/TableController.java  |   2 +-
 .../rest/controller2/TableControllerV2.java |   8 +-
 .../kylin/rest/job/StorageCleanupJob.java   |   8 +-
 .../apache/kylin/rest/service/JobService.java   |   4 +-
 .../rest/service/TableSchemaUpdateChecker.java  | 207 
 .../apache/kylin/rest/service/TableService.java | 105 +++--
 .../kylin/rest/service/TableServiceV2.java  |  12 +-
 .../kylin/source/hive/HiveMetadataExplorer.java | 116 +
 .../apache/kylin/source/hive/HiveSource.java|  38 +--
 .../source/hive/HiveSourceTableLoader.java  | 147 
 .../org/apache/kylin/source/hive/HiveTable.java |   4 +-
 .../kylin/source/hive/HiveTableReader.java  |   2 +-
 .../apache/kylin/source/hive/SchemaChecker.java | 234 ---
 .../apache/kylin/source/kafka/KafkaSource.java  |  46 +++-
 51 files changed, 816 insertions(+), 721 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/0a0edfef/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 8930129..abe142a 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -474,6 +474,10 @@ abstract public class KylinConfigBase implements 
Serializable {
 // SOURCE.HIVE
 // 

 
+public int getDefaultSource() {
+return Integer.parseInt(getOptional("kylin.source.default", "0"));
+}
+
 public Map getSourceEngines() {
 Map r = Maps.newLinkedHashMap();
 // ref constants in ISourceAware

http://git-wip-us.apache.org/repos/asf/kylin/blob/0a0edfef/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java
--
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java 

[11/50] [abbrv] kylin git commit: KYLIN-2624 introduce StorageURL and set timeout for metadata access

2017-05-24 Thread kangkaisen
KYLIN-2624 introduce StorageURL and set timeout for metadata access


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2dfc5bb3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2dfc5bb3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2dfc5bb3

Branch: refs/heads/KYLIN-2606
Commit: 2dfc5bb36a00245b95deeebb5bb3bca9c353c934
Parents: 7c152c5
Author: Li Yang 
Authored: Thu May 18 14:16:17 2017 +0800
Committer: nichunen 
Committed: Fri May 19 13:52:53 2017 +0800

--
 .../apache/kylin/common/KylinConfigBase.java|  30 ++-
 .../org/apache/kylin/common/StorageURL.java | 183 +++
 .../common/persistence/FileResourceStore.java   |   2 +-
 .../apache/kylin/common/KylinConfigTest.java|   9 +-
 .../org/apache/kylin/common/StorageURLTest.java | 103 +++
 .../persistence/LocalFileResourceStoreTest.java |   3 +-
 .../common/persistence/ResourceStoreTest.java   |  18 +-
 .../common/util/LocalFileMetadataTestCase.java  |   7 +
 .../apache/kylin/dict/DictionaryManager.java|  18 +-
 .../dict/global/AppendTrieDictionaryTest.java   |   5 +-
 .../impl/threadpool/DistributedScheduler.java   |  11 +-
 .../apache/kylin/storage/StorageContext.java|   7 +-
 .../kylin/engine/mr/steps/CubeReducerTest.java  |   2 +-
 .../engine/mr/steps/NDCuboidMapperTest.java |   2 +-
 .../kylin/job/BaseTestDistributedScheduler.java |   5 +-
 .../kylin/storage/hbase/ITStorageTest.java  |   3 +-
 .../apache/kylin/query/schema/OLAPSchema.java   |   5 +-
 .../rest/security/MockAclHBaseStorage.java  |  11 +-
 .../rest/security/RealAclHBaseStorage.java  |  15 +-
 .../apache/kylin/rest/service/QueryService.java |  11 +-
 .../kylin/storage/hbase/HBaseConnection.java|  51 +++---
 .../kylin/storage/hbase/HBaseResourceStore.java |  46 +++--
 .../storage/hbase/util/CubeMigrationCLI.java|  20 +-
 .../hbase/util/GridTableHBaseBenchmark.java |   3 +-
 .../kylin/storage/hdfs/HDFSResourceStore.java   |  50 ++---
 .../hbase/steps/CubeHFileMapper2Test.java   |   4 +-
 .../storage/hbase/steps/MockupMapContext.java   |   2 +-
 .../org/apache/kylin/tool/CubeMigrationCLI.java |  20 +-
 28 files changed, 461 insertions(+), 185 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/2dfc5bb3/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index b620924..caef95e 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -169,7 +169,7 @@ abstract public class KylinConfigBase implements 
Serializable {
 }
 
 public String toString() {
-return getMetadataUrl();
+return getMetadataUrl().toString();
 }
 
 // 

@@ -205,8 +205,8 @@ abstract public class KylinConfigBase implements 
Serializable {
 // METADATA
 // 

 
-public String getMetadataUrl() {
-return getOptional("kylin.metadata.url");
+public StorageURL getMetadataUrl() {
+return StorageURL.valueOf(getOptional("kylin.metadata.url", ""));
 }
 
 // for test only
@@ -215,14 +215,7 @@ abstract public class KylinConfigBase implements 
Serializable {
 }
 
 public String getMetadataUrlPrefix() {
-String metadataUrl = getMetadataUrl();
-String defaultPrefix = "kylin_metadata";
-
-int cut = metadataUrl.lastIndexOf('@');
-if (cut > 0) {
-return metadataUrl.substring(0, cut);
-}
-return defaultPrefix;
+return getMetadataUrl().getIdentifier();
 }
 
 public String[] getRealizationProviders() {
@@ -558,8 +551,14 @@ abstract public class KylinConfigBase implements 
Serializable {
 return Integer.parseInt(getOptional("kylin.storage.default", "2"));
 }
 
-public String getStorageUrl() {
-return getOptional("kylin.storage.url");
+public StorageURL getStorageUrl() {
+String url = getOptional("kylin.storage.url", "default@hbase");
+
+// for backward compatibility
+if ("hbase".equals(url))
+url = "default@hbase";
+
+return StorageURL.valueOf(url);
 }
 
 public String getHBaseClusterFs() {
@@ -987,10 +986,7 @@ abstract public class KylinConfigBase implements 
Serializable {
 }
 
 public String getResourceStoreImpl() {
-String metadataUrl = KylinConfig.getInstanceFromEnv().getMetadataUrl();
-   

[13/50] [abbrv] kylin git commit: KAP-733 minor UT fix

2017-05-24 Thread kangkaisen
KAP-733 minor UT fix


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/8ce972fd
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/8ce972fd
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/8ce972fd

Branch: refs/heads/KYLIN-2606
Commit: 8ce972fd6475e923af2a5e525d8ddb698d0dbadf
Parents: 2dfc5bb
Author: Li Yang 
Authored: Fri May 19 15:50:32 2017 +0800
Committer: liyang-gmt8 
Committed: Fri May 19 17:25:55 2017 +0800

--
 .../apache/kylin/common/util/LocalFileMetadataTestCase.java| 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/8ce972fd/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
--
diff --git 
a/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
 
b/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
index e5e4f8b..a44a55d 100644
--- 
a/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
+++ 
b/core-common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java
@@ -81,7 +81,11 @@ public class LocalFileMetadataTestCase extends 
AbstractKylinTestCase {
 String dir = 
KylinConfig.getInstanceFromEnv().getHdfsWorkingDirectory();
 if (dir.startsWith("file://"))
 dir = dir.substring("file://".length());
-return dir;
+try {
+return new File(dir).getCanonicalPath();
+} catch (IOException e) {
+throw new RuntimeException(e);
+}
 }
 
 protected ResourceStore getStore() {



[15/50] [abbrv] kylin git commit: KYLIN-2624 fix IT with refactored DistributedLock

2017-05-24 Thread kangkaisen
KYLIN-2624 fix IT with refactored DistributedLock


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/be32f758
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/be32f758
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/be32f758

Branch: refs/heads/KYLIN-2606
Commit: be32f75883c21bf32545d1b06158ad7cf36d676b
Parents: f36372b
Author: Yang Li 
Authored: Fri May 19 22:02:38 2017 +0800
Committer: Yang Li 
Committed: Fri May 19 22:02:38 2017 +0800

--
 .../job/impl/threadpool/DistributedScheduler.java   |  1 +
 .../hbase/util/ZookeeperDistributedLock.java| 16 
 2 files changed, 13 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/be32f758/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
--
diff --git 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
index d01cb5a..8812dad 100644
--- 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
+++ 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
@@ -319,6 +319,7 @@ public class DistributedScheduler implements 
Scheduler, Conn
 }
 return path;
 }
+
 @Override
 public void shutdown() throws SchedulerException {
 logger.info("Will shut down Job Engine ");

http://git-wip-us.apache.org/repos/asf/kylin/blob/be32f758/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
--
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
index d181d81..dc2a23e 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
@@ -281,10 +281,18 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 
 // normalize lock path
 private String norm(String lockPath) {
-if (lockPath.startsWith(zkPathBase))
-return lockPath;
-else
-return zkPathBase + (lockPath.startsWith("/") ? "" : "/") + 
lockPath;
+if (!lockPath.startsWith(zkPathBase))
+lockPath = zkPathBase + (lockPath.startsWith("/") ? "" : "/") + 
lockPath;
+
+return dropDoubleSlash(lockPath);
+}
+
+public static String dropDoubleSlash(String path) {
+for (int n = Integer.MAX_VALUE; n > path.length();) {
+n = path.length();
+path = path.replace("//", "/");
+}
+return path;
 }
 
 // 




[44/50] [abbrv] kylin git commit: KYLIN-2631 Seek to next model when no cube in current model satisfies query

2017-05-24 Thread kangkaisen
KYLIN-2631 Seek to next model when no cube in current model satisfies query

KYLIN-2631 bug fix


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f870c6c4
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f870c6c4
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f870c6c4

Branch: refs/heads/KYLIN-2606
Commit: f870c6c4d64e4aa2ae5f3495534d97e04466b843
Parents: ada37a9
Author: Hongbin Ma 
Authored: Fri May 19 21:12:26 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 20:30:03 2017 +0800

--
 .../apache/kylin/metadata/model/TblColRef.java  |  20 +-
 .../kylin/metadata/realization/SQLDigest.java   |   2 +
 .../gtrecord/GTCubeStorageQueryBase.java|   3 -
 .../kylin/query/relnode/OLAPTableScan.java  |  13 +-
 .../relnode/OLAPToEnumerableConverter.java  |  11 +-
 .../kylin/query/routing/ModelChooser.java   | 219 --
 .../apache/kylin/query/routing/QueryRouter.java |   2 +-
 .../kylin/query/routing/RealizationChooser.java | 224 +++
 8 files changed, 260 insertions(+), 234 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/f870c6c4/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
index aa4c056..3bca61c 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
@@ -87,8 +87,12 @@ public class TblColRef implements Serializable {
 checkArgument(col.table.getModel() == UNKNOWN_MODEL || 
col.table.getModel() == model);
 TableRef tableRef = model.findTable(alias);
 
checkArgument(tableRef.getTableDesc().getIdentity().equals(col.column.getTable().getIdentity()));
-col.table = tableRef;
-col.identity = null;
+checkArgument(tableRef.getTableDesc() == col.column.getTable());
+col.fixTableRef(tableRef);
+}
+
+public static void unfixUnknownModel(TblColRef col) {
+col.unfixTableRef();
 }
 
 // for test mainly
@@ -105,6 +109,7 @@ public class TblColRef implements Serializable {
 // 

 
 private TableRef table;
+private TableRef backupTable;// only used in fixTableRef()
 private ColumnDesc column;
 private String identity;
 private String parserDescription;
@@ -119,6 +124,17 @@ public class TblColRef implements Serializable {
 this.column = column;
 }
 
+public void fixTableRef(TableRef tableRef) {
+this.backupTable = this.table;
+this.table = tableRef;
+this.identity = null;
+}
+
+public void unfixTableRef() {
+this.table = backupTable;
+this.identity = null;
+}
+
 public ColumnDesc getColumnDesc() {
 return column;
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f870c6c4/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
index 03ff3ff..9ce65bb 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/SQLDigest.java
@@ -96,6 +96,8 @@ public class SQLDigest {
 this.sortOrders = sortOrders;
 this.isRawQuery = isRawQuery();
 this.limitPrecedesAggr = limitPrecedesAggr;
+
+this.includeSubqueryJoinParticipants();
 }
 
 private boolean isRawQuery() {

http://git-wip-us.apache.org/repos/asf/kylin/blob/f870c6c4/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
--
diff --git 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
index 5faa098..176d73c 100644
--- 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
+++ 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
@@ -99,9 +99,6 @@ public abstract class GTCubeStorageQueryBase implements 
IStorageQuery {
 protected GTCubeStorageQueryRequest getStorageQueryRequest(StorageContext 
context, SQLDigest sqlDigest, TupleInfo re

[06/50] [abbrv] kylin git commit: KYLIN-2621 The user of the LDAP group named admin always has ROLE_ADMIN permission

2017-05-24 Thread kangkaisen
KYLIN-2621 The user of the LDAP group named admin always has ROLE_ADMIN 
permission

Signed-off-by: Billy Liu 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a34db26f
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a34db26f
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a34db26f

Branch: refs/heads/KYLIN-2606
Commit: a34db26f0bd594b55fd4df29b66f15579bb3c8ff
Parents: 858d947
Author: 10069681 
Authored: Mon May 15 20:31:26 2017 +0800
Committer: Billy Liu 
Committed: Wed May 17 16:23:12 2017 +0800

--
 .../rest/security/AuthoritiesPopulator.java | 20 ++--
 1 file changed, 10 insertions(+), 10 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/a34db26f/server-base/src/main/java/org/apache/kylin/rest/security/AuthoritiesPopulator.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/security/AuthoritiesPopulator.java
 
b/server-base/src/main/java/org/apache/kylin/rest/security/AuthoritiesPopulator.java
index 2b290ce..592791c 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/security/AuthoritiesPopulator.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/security/AuthoritiesPopulator.java
@@ -52,8 +52,11 @@ public class AuthoritiesPopulator extends 
DefaultLdapAuthoritiesPopulator {
 this.adminRoleAsAuthority = new SimpleGrantedAuthority(adminRole);
 
 String[] defaultRoles = StringUtils.split(defaultRole, ",");
-if (ArrayUtils.contains(defaultRoles, Constant.ROLE_MODELER))
+if (ArrayUtils.contains(defaultRoles, Constant.ROLE_MODELER)) {
 this.defaultAuthorities.add(modelerAuthority);
+this.defaultAuthorities.add(analystAuthority);
+}
+
 if (ArrayUtils.contains(defaultRoles, Constant.ROLE_ANALYST))
 this.defaultAuthorities.add(analystAuthority);
 }
@@ -62,19 +65,16 @@ public class AuthoritiesPopulator extends 
DefaultLdapAuthoritiesPopulator {
 public Set getGroupMembershipRoles(String userDn, String 
username) {
 Set authorities = 
super.getGroupMembershipRoles(userDn, username);
 
-authorities.addAll(defaultAuthorities);
+Set userAuthorities = new 
HashSet();
+userAuthorities.addAll(defaultAuthorities);
 
 if (authorities.contains(adminRoleAsAuthority)) {
-authorities.add(adminAuthority);
-authorities.add(modelerAuthority);
-authorities.add(analystAuthority);
-}
-
-if (authorities.contains(modelerAuthority)) {
-authorities.add(analystAuthority);
+userAuthorities.add(adminAuthority);
+userAuthorities.add(modelerAuthority);
+userAuthorities.add(analystAuthority);
 }
 
-return authorities;
+return userAuthorities;
 }
 
 }



[20/50] [abbrv] kylin git commit: KYLIN-2459 fix implementation

2017-05-24 Thread kangkaisen
KYLIN-2459 fix implementation


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/429dfbdc
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/429dfbdc
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/429dfbdc

Branch: refs/heads/KYLIN-2606
Commit: 429dfbdc93371e8df2095e35298425ccab8ac7de
Parents: 1b864f0
Author: Yang Li 
Authored: Sat May 20 19:52:30 2017 +0800
Committer: Roger Shi 
Committed: Sat May 20 21:35:36 2017 +0800

--
 .../apache/kylin/common/KylinConfigBase.java| 36 ++--
 .../kylin/common/persistence/ResourceStore.java | 45 ++--
 .../common/persistence/ResourceStoreTest.java   | 11 +
 .../common/util/LocalFileMetadataTestCase.java  |  7 +--
 4 files changed, 32 insertions(+), 67 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/429dfbdc/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index df3baf4..8930129 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -218,6 +218,16 @@ abstract public class KylinConfigBase implements 
Serializable {
 return getMetadataUrl().getIdentifier();
 }
 
+public Map getResourceStoreImpls() {
+Map r = Maps.newLinkedHashMap();
+// ref constants in ISourceAware
+r.put("", "org.apache.kylin.common.persistence.FileResourceStore");
+r.put("hbase", "org.apache.kylin.storage.hbase.HBaseResourceStore");
+r.put("hdfs", "org.apache.kylin.storage.hdfs.HDFSResourceStore");
+
r.putAll(getPropertiesByPrefix("kylin.metadata.resource-store-provider.")); // 
note the naming convention -- 
http://kylin.apache.org/development/coding_naming_convention.html
+return r;
+}
+
 public String[] getRealizationProviders() {
 return getOptionalStringArray("kylin.metadata.realization-providers", 
//
 new String[] { "org.apache.kylin.cube.CubeManager", 
"org.apache.kylin.storage.hybrid.HybridManager" });
@@ -456,6 +466,10 @@ abstract public class KylinConfigBase implements 
Serializable {
 return getOptional("kylin.job.advanced-flat-table.class");
 }
 
+public String getJobTrackingURLPattern() {
+return getOptional("kylin.job.tracking-url-pattern", "");
+}
+
 // 

 // SOURCE.HIVE
 // 

@@ -970,26 +984,4 @@ abstract public class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(getOptional("kylin.web.cross-domain-enabled", "true"));
 }
 
-//ResourceStore Impl
-/*public String getResourceStoreImpl() {
-return getOptional("kylin.metadata.default-resource-store-impl", 
"org.apache.kylin.storage.hbase.HBaseResourceStore");
-}*/
-
-public Map getResourceStoreImpls() {
-Map r = Maps.newLinkedHashMap();
-// ref constants in ISourceAware
-r.put("", "org.apache.kylin.common.persistence.FileResourceStore");
-r.put("hbase", "org.apache.kylin.storage.hbase.HBaseResourceStore");
-r.put("hdfs", "org.apache.kylin.storage.hdfs.HDFSResourceStore");
-r.putAll(getPropertiesByPrefix("kylin.resource.store.provider."));
-return r;
-}
-
-public String getResourceStoreImpl() {
-return getResourceStoreImpls().get(getMetadataUrl().getScheme());
-}
-
-public String getJobTrackingURLPattern() {
-return getOptional("kylin.job.tracking-url-pattern", "");
-}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/429dfbdc/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
 
b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
index 0565c66..7fb93e7 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/persistence/ResourceStore.java
@@ -39,6 +39,7 @@ import java.util.concurrent.ConcurrentMap;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.StorageURL;
 import org.apache.kylin.common.util.ClassUtil;
 import org.apache.kylin.common.util.Optio

[08/50] [abbrv] kylin git commit: KYLIN-2635 fix IT

2017-05-24 Thread kangkaisen
KYLIN-2635 fix IT


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/5f52cea4
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/5f52cea4
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/5f52cea4

Branch: refs/heads/KYLIN-2606
Commit: 5f52cea4f7ffbb0fa885df650803156cd1daa5d2
Parents: ea5caba
Author: Hongbin Ma 
Authored: Wed May 17 21:26:09 2017 +0800
Committer: Roger Shi 
Committed: Thu May 18 11:02:49 2017 +0800

--
 .../org/apache/kylin/metadata/filter/CompareTupleFilter.java   | 6 ++
 1 file changed, 6 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/5f52cea4/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
index 2771250..c091c7c 100755
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
@@ -167,7 +167,13 @@ public class CompareTupleFilter extends TupleFilter {
 return true;
 else
 return false;
+} else {
+if (operator == FilterOperatorEnum.ISNOTNULL)
+return true;
+else if (operator == FilterOperatorEnum.ISNULL)
+return false;
 }
+
 if (cs.isNull(firstCondValue)) {
 return false;
 }



[33/50] [abbrv] kylin git commit: KYLIN-2640 refactor ISource API

2017-05-24 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/0a0edfef/server-base/src/main/java/org/apache/kylin/rest/service/TableSchemaUpdateChecker.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/TableSchemaUpdateChecker.java
 
b/server-base/src/main/java/org/apache/kylin/rest/service/TableSchemaUpdateChecker.java
new file mode 100644
index 000..a87ddd8
--- /dev/null
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/service/TableSchemaUpdateChecker.java
@@ -0,0 +1,207 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest.service;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.lang.String.format;
+
+import java.util.List;
+import java.util.Set;
+
+import javax.annotation.Nullable;
+
+import org.apache.kylin.cube.CubeInstance;
+import org.apache.kylin.cube.CubeManager;
+import org.apache.kylin.metadata.MetadataManager;
+import org.apache.kylin.metadata.model.ColumnDesc;
+import org.apache.kylin.metadata.model.DataModelDesc;
+import org.apache.kylin.metadata.model.TableDesc;
+import org.apache.kylin.metadata.model.TblColRef;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+public class TableSchemaUpdateChecker {
+private final MetadataManager metadataManager;
+private final CubeManager cubeManager;
+
+static class CheckResult {
+private final boolean valid;
+private final String reason;
+
+private CheckResult(boolean valid, String reason) {
+this.valid = valid;
+this.reason = reason;
+}
+
+void raiseExceptionWhenInvalid() {
+if (!valid) {
+throw new RuntimeException(reason);
+}
+}
+
+static CheckResult validOnFirstLoad(String tableName) {
+return new CheckResult(true, format("Table '%s' hasn't been loaded 
before", tableName));
+}
+
+static CheckResult validOnCompatibleSchema(String tableName) {
+return new CheckResult(true, format("Table '%s' is compatible with 
all existing cubes", tableName));
+}
+
+static CheckResult invalidOnFetchSchema(String tableName, Exception e) 
{
+return new CheckResult(false, format("Failed to fetch metadata of 
'%s': %s", tableName, e.getMessage()));
+}
+
+static CheckResult invalidOnIncompatibleSchema(String tableName, 
List reasons) {
+StringBuilder buf = new StringBuilder();
+for (String reason : reasons) {
+buf.append("- ").append(reason).append("\n");
+}
+
+return new CheckResult(false, format("Found %d issue(s) with 
'%s':%n%s Please disable and purge related cube(s) first", reasons.size(), 
tableName, buf.toString()));
+}
+}
+
+TableSchemaUpdateChecker(MetadataManager metadataManager, CubeManager 
cubeManager) {
+this.metadataManager = checkNotNull(metadataManager, "metadataManager 
is null");
+this.cubeManager = checkNotNull(cubeManager, "cubeManager is null");
+}
+
+private List findCubeByTable(final String fullTableName) {
+Iterable relatedCubes = 
Iterables.filter(cubeManager.listAllCubes(), new Predicate() {
+@Override
+public boolean apply(@Nullable CubeInstance cube) {
+if (cube == null || cube.allowBrokenDescriptor()) {
+return false;
+}
+DataModelDesc model = cube.getModel();
+if (model == null)
+return false;
+return model.containsTable(fullTableName);
+}
+});
+
+return ImmutableList.copyOf(relatedCubes);
+}
+
+private boolean isColumnCompatible(ColumnDesc column, ColumnDesc newCol) {
+if (!column.getName().equalsIgnoreCase(newCol.getName())) {
+return false;
+}
+
+if (column.getType().isIntegerFamily()) {
+// OLAPTable.l

[50/50] [abbrv] kylin git commit: KYLIN-2606 Only return counter for precise count_distinct if query is exactAggregate

2017-05-24 Thread kangkaisen
KYLIN-2606 Only return counter for precise count_distinct if query is 
exactAggregate


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/d610a6dd
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/d610a6dd
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/d610a6dd

Branch: refs/heads/KYLIN-2606
Commit: d610a6dd50b547c0f1f4d1529aaf626760c66549
Parents: fdacf5d
Author: kangkaisen 
Authored: Wed Feb 15 19:53:17 2017 +0800
Committer: kangkaisen 
Committed: Wed May 24 15:36:38 2017 +0800

--
 .../kylin/cube/gridtable/CubeCodeSystem.java|   4 +
 .../org/apache/kylin/gridtable/GTRecord.java|   8 +
 .../kylin/gridtable/GTSampleCodeSystem.java |   4 +
 .../apache/kylin/gridtable/IGTCodeSystem.java   |   3 +
 .../measure/bitmap/BitmapCounterFactory.java|   2 +
 .../kylin/measure/bitmap/BitmapSerializer.java  |  37 -
 .../measure/bitmap/RoaringBitmapCounter.java|  10 ++
 .../bitmap/RoaringBitmapCounterFactory.java |   5 +
 .../metadata/datatype/DataTypeSerializer.java   |  13 ++
 .../gtrecord/GTCubeStorageQueryBase.java|  47 ++
 .../hbase/cube/v2/CubeHBaseEndpointRPC.java |   1 +
 .../storage/hbase/cube/v2/CubeHBaseScanRPC.java |   2 +-
 .../hbase/cube/v2/HBaseReadonlyStore.java   |  33 +++-
 .../coprocessor/endpoint/CubeVisitService.java  |   2 +-
 .../endpoint/generated/CubeVisitProtos.java | 151 +++
 .../endpoint/protobuf/CubeVisit.proto   |   1 +
 16 files changed, 286 insertions(+), 37 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/d610a6dd/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java 
b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
index aaa12a7..9eae6f3 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/CubeCodeSystem.java
@@ -177,4 +177,8 @@ public class CubeCodeSystem implements IGTCodeSystem {
 return result;
 }
 
+@Override
+public DataTypeSerializer getSerializer(int col) {
+return serializers[col];
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/d610a6dd/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
--
diff --git a/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
index 3e62ea7..f65e4b5 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
@@ -296,4 +296,12 @@ public class GTRecord implements Comparable, 
Cloneable {
 }
 }
 
+/** change pointers to point to data in given buffer, this
+ *  method allows to defined specific column to load */
+public void loadColumns(int selectedCol, ByteBuffer buf) {
+int pos = buf.position();
+int len = info.codeSystem.codeLength(selectedCol, buf);
+cols[selectedCol].set(buf.array(), buf.arrayOffset() + pos, len);
+}
+
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/d610a6dd/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
index 3f3c844..2a5e791 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTSampleCodeSystem.java
@@ -118,4 +118,8 @@ public class GTSampleCodeSystem implements IGTCodeSystem {
 }
 };
 
+@Override
+public DataTypeSerializer getSerializer(int col) {
+return serializers[col];
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/d610a6dd/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
index 89dfc99..9c8ad6b 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/IGTCodeSystem.java
@@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
 import org.apache.kylin.common.util.ImmutableBitSet;
 import org.apache.kylin.dimension.DimensionEncoding;
 import

[16/50] [abbrv] kylin git commit: KYLIN-2624 fix IT with refactored DistributedLock

2017-05-24 Thread kangkaisen
KYLIN-2624 fix IT with refactored DistributedLock


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/d21c8170
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/d21c8170
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/d21c8170

Branch: refs/heads/KYLIN-2606
Commit: d21c8170b7bbc8f750aadab5c68d229dee6d252f
Parents: f36372b
Author: Hongbin Ma 
Authored: Fri May 19 22:44:50 2017 +0800
Committer: hongbin ma 
Committed: Fri May 19 22:48:41 2017 +0800

--
 .../hbase/util/ZookeeperDistributedLock.java| 30 +---
 1 file changed, 19 insertions(+), 11 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/d21c8170/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
--
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
index d181d81..ea64bbf 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ZookeeperDistributedLock.java
@@ -123,7 +123,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 throw new NullPointerException("client must not be null");
 if (zkPathBase == null)
 throw new NullPointerException("zkPathBase must not be null");
-
+
 this.curator = curator;
 this.zkPathBase = zkPathBase;
 this.client = client;
@@ -138,7 +138,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 @Override
 public boolean lock(String lockPath) {
 lockPath = norm(lockPath);
-
+
 logger.debug(client + " trying to lock " + lockPath);
 
 try {
@@ -148,7 +148,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 } catch (Exception ex) {
 throw new RuntimeException("Error while " + client + " trying to 
lock " + lockPath, ex);
 }
-
+
 String lockOwner = peekLock(lockPath);
 if (client.equals(lockOwner)) {
 logger.info(client + " acquired lock at " + lockPath);
@@ -214,7 +214,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 public boolean isLockedByMe(String lockPath) {
 return client.equals(peekLock(lockPath));
 }
-
+
 @Override
 public void unlock(String lockPath) {
 lockPath = norm(lockPath);
@@ -236,7 +236,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 throw new RuntimeException("Error while " + client + " trying to 
unlock " + lockPath, ex);
 }
 }
-
+
 @Override
 public void purgeLocks(String lockPathRoot) {
 lockPathRoot = norm(lockPathRoot);
@@ -245,7 +245,7 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 
curator.delete().guaranteed().deletingChildrenIfNeeded().forPath(lockPathRoot);
 
 logger.info(client + " purged all locks under " + lockPathRoot);
-
+
 } catch (Exception ex) {
 throw new RuntimeException("Error while " + client + " trying to 
purge " + lockPathRoot, ex);
 }
@@ -278,13 +278,21 @@ public class ZookeeperDistributedLock implements 
DistributedLock, JobLock {
 }
 return cache;
 }
-
+
 // normalize lock path
 private String norm(String lockPath) {
-if (lockPath.startsWith(zkPathBase))
-return lockPath;
-else
-return zkPathBase + (lockPath.startsWith("/") ? "" : "/") + 
lockPath;
+if (!lockPath.startsWith(zkPathBase))
+lockPath = zkPathBase + (lockPath.startsWith("/") ? "" : "/") + 
lockPath;
+
+return dropDoubleSlash(lockPath);
+}
+
+public static String dropDoubleSlash(String path) {
+for (int n = Integer.MAX_VALUE; n > path.length();) {
+n = path.length();
+path = path.replace("//", "/");
+}
+return path;
 }
 
 // 




[27/50] [abbrv] kylin git commit: KYLIN-2589 fix MessageDigest not thread safe in KylinAuthenticationProvider

2017-05-24 Thread kangkaisen
KYLIN-2589 fix MessageDigest not thread safe in KylinAuthenticationProvider


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ce09d6c7
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ce09d6c7
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ce09d6c7

Branch: refs/heads/KYLIN-2606
Commit: ce09d6c7f027cdc55c10fb96ea21a70c4002f244
Parents: fd3bfed
Author: shaofengshi 
Authored: Mon May 22 11:24:38 2017 +0800
Committer: shaofengshi 
Committed: Mon May 22 11:25:13 2017 +0800

--
 .../security/KylinAuthenticationProvider.java   | 20 +++-
 1 file changed, 7 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ce09d6c7/server-base/src/main/java/org/apache/kylin/rest/security/KylinAuthenticationProvider.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/security/KylinAuthenticationProvider.java
 
b/server-base/src/main/java/org/apache/kylin/rest/security/KylinAuthenticationProvider.java
index d0dd06a..ffe9811 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/security/KylinAuthenticationProvider.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/security/KylinAuthenticationProvider.java
@@ -18,10 +18,9 @@
 
 package org.apache.kylin.rest.security;
 
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hashing;
+import org.apache.kylin.common.util.ByteArray;
 import org.apache.kylin.rest.service.UserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,26 +54,21 @@ public class KylinAuthenticationProvider implements 
AuthenticationProvider {
 //Embedded authentication provider
 private AuthenticationProvider authenticationProvider;
 
-MessageDigest md = null;
+private HashFunction hf = null;
 
 public KylinAuthenticationProvider(AuthenticationProvider 
authenticationProvider) {
 super();
 Assert.notNull(authenticationProvider, "The embedded 
authenticationProvider should not be null.");
 this.authenticationProvider = authenticationProvider;
-try {
-md = MessageDigest.getInstance("MD5");
-} catch (NoSuchAlgorithmException e) {
-throw new RuntimeException("Failed to init Message Digest ", e);
-}
+hf = Hashing.murmur3_128();
 }
 
 @Override
 public Authentication authenticate(Authentication authentication) throws 
AuthenticationException {
 Authentication authed = null;
 Cache userCache = cacheManager.getCache("UserCache");
-md.reset();
-byte[] hashKey = md.digest((authentication.getName() + 
authentication.getCredentials()).getBytes());
-String userKey = Arrays.toString(hashKey);
+byte[] hashKey = hf.hashString(authentication.getName() + 
authentication.getCredentials()).asBytes();
+ByteArray userKey = new ByteArray(hashKey);
 
 Element authedUser = userCache.get(userKey);
 if (null != authedUser) {



[43/50] [abbrv] kylin git commit: KYLIN-2630 NPE when a subquery joins another lookup tables

2017-05-24 Thread kangkaisen
KYLIN-2630 NPE when a subquery joins another lookup tables


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ada37a91
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ada37a91
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ada37a91

Branch: refs/heads/KYLIN-2606
Commit: ada37a9109678abf347d3600b3a19888d6f64056
Parents: 34a65ba
Author: Hongbin Ma 
Authored: Thu May 18 20:54:45 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 20:24:46 2017 +0800

--
 .../resources/query/sql_subquery/query30.sql| 15 ++
 .../resources/query/sql_subquery/query31.sql| 19 
 .../apache/kylin/query/relnode/OLAPJoinRel.java | 12 
 .../org/apache/kylin/query/relnode/OLAPRel.java | 31 +++-
 .../kylin/query/relnode/OLAPTableScan.java  | 18 ++--
 5 files changed, 72 insertions(+), 23 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ada37a91/kylin-it/src/test/resources/query/sql_subquery/query30.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query30.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query30.sql
new file mode 100644
index 000..3b0dfbf
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query30.sql
@@ -0,0 +1,15 @@
+
+SELECT t1.cal_dt, t1.sum_price,t1.lstg_site_id 
+FROM (
+  select cal_dt, lstg_site_id, sum(price) as sum_price
+  from test_kylin_fact
+  group by cal_dt, lstg_site_id
+  
+) t1
+
+inner JOIN edw.test_cal_dt as test_cal_dt
+on t1.cal_dt=test_cal_dt.cal_dt
+
+inner JOIN edw.test_sites as test_sites
+on t1.lstg_site_id = test_sites.site_id
+

http://git-wip-us.apache.org/repos/asf/kylin/blob/ada37a91/kylin-it/src/test/resources/query/sql_subquery/query31.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query31.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query31.sql
new file mode 100644
index 000..fafc01f
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query31.sql
@@ -0,0 +1,19 @@
+
+SELECT t1.week_beg_dt, t1.sum_price,t1.lstg_site_id 
+FROM (
+  select test_cal_dt.week_beg_dt, sum(price) as sum_price, lstg_site_id
+  from test_kylin_fact
+  inner JOIN edw.test_cal_dt as test_cal_dt
+  ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt
+  inner JOIN test_category_groupings
+  ON test_kylin_fact.leaf_categ_id = test_category_groupings.leaf_categ_id AND 
test_kylin_fact.lstg_site_id = test_category_groupings.site_id
+  inner JOIN edw.test_sites as test_sites
+  ON test_kylin_fact.lstg_site_id = test_sites.site_id
+  group by test_cal_dt.week_beg_dt, lstg_site_id
+) t1
+inner JOIN edw.test_cal_dt as test_cal_dt
+on t1.week_beg_dt=test_cal_dt.week_beg_dt
+ inner JOIN edw.test_sites as test_sites
+ 
+  on t1.lstg_site_id = test_sites.site_id
+

http://git-wip-us.apache.org/repos/asf/kylin/blob/ada37a91/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
--
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
index 60b5712..1b5970c 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPJoinRel.java
@@ -140,12 +140,24 @@ public class OLAPJoinRel extends EnumerableJoin 
implements OLAPRel {
 implementor.freeContext();
 }
 }
+
+if (leftHasSubquery) {
+// After KYLIN-2579, leftHasSubquery means right side have to be 
separate olap context 
+implementor.setNewOLAPContextRequired(true);
+}
+
 implementor.fixSharedOlapTableScanOnTheRight(this);
 implementor.visitChild(this.right, this);
 if (this.context != implementor.getContext() || ((OLAPRel) 
this.right).hasSubQuery()) {
 this.hasSubQuery = true;
 rightHasSubquery = true;
 // if child is also an OLAPJoin, then the context has already been 
popped
+
+if (leftHasSubquery) {
+
Preconditions.checkState(!implementor.isNewOLAPContextRequired());//should have 
been satisfied
+Preconditions.checkState(this.context != 
implementor.getContext(), "missing a new olapcontext");
+}
+
 if (this.context != implementor.getContext()) {
 implementor.freeContext();
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/ada37a91/query/src/main/java/org/apache/kylin/query/relnode/OLAPRel.java
--
diff --gi

[47/50] [abbrv] kylin git commit: Merge commit '79c75015e49b2216f6e8ca9ec0cedbff72737821'

2017-05-24 Thread kangkaisen
Merge commit '79c75015e49b2216f6e8ca9ec0cedbff72737821'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/92b64043
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/92b64043
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/92b64043

Branch: refs/heads/KYLIN-2606
Commit: 92b640437ca09ba75fc7bce6407cf722f4f4dd8b
Parents: 34a65ba 79c7501
Author: Hongbin Ma 
Authored: Tue May 23 20:34:28 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 20:34:28 2017 +0800

--
 .../kylin/dict/BuiltInFunctionTransformer.java  |   2 +
 .../kylin/metadata/filter/CaseTupleFilter.java  |  52 -
 .../metadata/filter/CompareTupleFilter.java |  29 ++-
 .../filter/FilterOptimizeTransformer.java   |  88 +---
 .../filter/IOptimizeableTupleFilter.java|  22 ++
 .../filter/ITupleFilterTransformer.java |   5 +
 .../metadata/filter/LogicalTupleFilter.java |  27 ++-
 .../kylin/metadata/filter/TupleFilter.java  |   1 -
 .../apache/kylin/metadata/model/TblColRef.java  |  20 +-
 .../kylin/metadata/realization/SQLDigest.java   |   2 +
 .../gtrecord/GTCubeStorageQueryBase.java|  27 +--
 .../resources/query/sql_subquery/query30.sql|  15 ++
 .../resources/query/sql_subquery/query31.sql|  19 ++
 .../resources/query/sql_subquery/query32.sql|  14 ++
 .../resources/query/sql_subquery/query33.sql|  14 ++
 .../resources/query/sql_subquery/query34.sql|  14 ++
 .../kylin/query/relnode/OLAPFilterRel.java  |   2 +-
 .../apache/kylin/query/relnode/OLAPJoinRel.java |  13 ++
 .../kylin/query/relnode/OLAPProjectRel.java |  61 -
 .../org/apache/kylin/query/relnode/OLAPRel.java |  31 +--
 .../kylin/query/relnode/OLAPTableScan.java  |  29 ++-
 .../relnode/OLAPToEnumerableConverter.java  |  11 +-
 .../kylin/query/routing/ModelChooser.java   | 219 --
 .../apache/kylin/query/routing/QueryRouter.java |   2 +-
 .../kylin/query/routing/RealizationChooser.java | 224 +++
 .../kylin/rest/controller/UserController.java   |   4 +-
 26 files changed, 634 insertions(+), 313 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/92b64043/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
--
diff --cc 
core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
index 5faa098,b4e9d47..a8c4872
--- 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
+++ 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
@@@ -85,7 -86,7 +86,6 @@@ public abstract class GTCubeStorageQuer
  }
  
  scanner = new CubeSegmentScanner(cubeSeg, request.getCuboid(), 
request.getDimensions(), request.getGroups(), request.getMetrics(), 
request.getFilter(), request.getHavingFilter(), request.getContext());
- 
 -
  if (!scanner.isSegmentSkipped())
  scanners.add(scanner);
  }
@@@ -455,7 -458,7 +457,6 @@@
  }
  aggrOutCol.getColumnDesc().setId("" + (aggrIdxAmongMetrics + 1));
  }
- 
 -
  return havingFilter;
  }
  



[45/50] [abbrv] kylin git commit: KYLIN-2635 optimize determined case when filters

2017-05-24 Thread kangkaisen
KYLIN-2635 optimize determined case when filters


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2c549895
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2c549895
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2c549895

Branch: refs/heads/KYLIN-2606
Commit: 2c549895dab065491faef3a46cf0b710791ef2af
Parents: f870c6c
Author: Hongbin Ma 
Authored: Mon May 22 15:05:20 2017 +0800
Committer: Hongbin Ma 
Committed: Tue May 23 20:30:06 2017 +0800

--
 .../kylin/dict/BuiltInFunctionTransformer.java  |  2 +
 .../kylin/metadata/filter/CaseTupleFilter.java  | 52 ++--
 .../metadata/filter/CompareTupleFilter.java | 29 +--
 .../filter/FilterOptimizeTransformer.java   | 88 ++--
 .../filter/IOptimizeableTupleFilter.java| 22 +
 .../filter/ITupleFilterTransformer.java |  5 ++
 .../metadata/filter/LogicalTupleFilter.java | 27 +-
 .../kylin/metadata/filter/TupleFilter.java  |  1 -
 .../gtrecord/GTCubeStorageQueryBase.java| 26 +++---
 .../kylin/query/relnode/OLAPFilterRel.java  |  2 +-
 .../apache/kylin/query/relnode/OLAPJoinRel.java |  1 +
 .../kylin/rest/controller/UserController.java   |  4 +-
 12 files changed, 203 insertions(+), 56 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/2c549895/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java
 
b/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java
index f5cbe68..7a48a1c 100755
--- 
a/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java
+++ 
b/core-dictionary/src/main/java/org/apache/kylin/dict/BuiltInFunctionTransformer.java
@@ -41,6 +41,8 @@ import com.google.common.primitives.Primitives;
 
 /**
  * only take effect when the compare filter has function
+ * 
+ * is a first type transformer defined in ITupleFilterTransformer
  */
 public class BuiltInFunctionTransformer implements ITupleFilterTransformer {
 public static final Logger logger = 
LoggerFactory.getLogger(BuiltInFunctionTransformer.class);

http://git-wip-us.apache.org/repos/asf/kylin/blob/2c549895/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CaseTupleFilter.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CaseTupleFilter.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CaseTupleFilter.java
index 2b00d69..9083212 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CaseTupleFilter.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CaseTupleFilter.java
@@ -26,11 +26,13 @@ import java.util.List;
 
 import org.apache.kylin.metadata.tuple.IEvaluatableTuple;
 
+import com.google.common.collect.Lists;
+
 /**
  * @author xjiang
  * 
  */
-public class CaseTupleFilter extends TupleFilter {
+public class CaseTupleFilter extends TupleFilter implements 
IOptimizeableTupleFilter {
 
 private List whenFilters;
 private List thenFilters;
@@ -40,6 +42,12 @@ public class CaseTupleFilter extends TupleFilter {
 
 public CaseTupleFilter() {
 super(new ArrayList(), FilterOperatorEnum.CASE);
+reinit();
+}
+
+private void reinit() {
+this.children.clear();
+
 this.filterIndex = 0;
 this.values = Collections.emptyList();
 this.whenFilters = new ArrayList();
@@ -47,14 +55,31 @@ public class CaseTupleFilter extends TupleFilter {
 this.elseFilter = null;
 }
 
+public List getWhenFilters() {
+return Collections.unmodifiableList(whenFilters);
+}
+
+public List getThenFilters() {
+return Collections.unmodifiableList(thenFilters);
+}
+
+public TupleFilter getElseFilter() {
+return elseFilter;
+}
+
 @Override
 public void addChild(TupleFilter child) {
-super.addChild(child);
+
 if (this.filterIndex % 2 == 0) {
-this.whenFilters.add(child);
+this.elseFilter = child;
 } else {
+this.whenFilters.add(this.elseFilter);
 this.thenFilters.add(child);
+this.elseFilter = null;
 }
+
+super.addChild(child);
+
 this.filterIndex++;
 }
 
@@ -65,9 +90,7 @@ public class CaseTupleFilter extends TupleFilter {
 
 @Override
 public boolean evaluate(IEvaluatableTuple tuple, IFilterCodeSystem cs) {
-if (whenFilters.size() != thenFilters.size()) {
-elseFilter = whenFilters.remove(whenFilters.size() - 1);
-}
+
 boolean mat

[49/50] [abbrv] kylin git commit: minor, fix CI

2017-05-24 Thread kangkaisen
minor, fix CI


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/fdacf5d3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/fdacf5d3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/fdacf5d3

Branch: refs/heads/KYLIN-2606
Commit: fdacf5d3fac8740ab031f35d6317571f11a87c23
Parents: 5d2934b
Author: Hongbin Ma 
Authored: Wed May 24 10:42:30 2017 +0800
Committer: hongbin ma 
Committed: Wed May 24 10:52:57 2017 +0800

--
 kylin-it/src/test/resources/query/sql_subquery/query32.sql | 2 +-
 kylin-it/src/test/resources/query/sql_subquery/query33.sql | 2 +-
 kylin-it/src/test/resources/query/sql_subquery/query34.sql | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/fdacf5d3/kylin-it/src/test/resources/query/sql_subquery/query32.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query32.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query32.sql
index 394ea15..6565aa0 100644
--- a/kylin-it/src/test/resources/query/sql_subquery/query32.sql
+++ b/kylin-it/src/test/resources/query/sql_subquery/query32.sql
@@ -1,5 +1,5 @@
 
-  select  sum(price) as sum_price,  (case when '1'='1' then 
test_cal_dt.week_beg_dt when '1'='2' then test_kylin_fact.lstg_site_id else 
test_kylin_fact.leaf_categ_id end) as xxx 
+  select  (case when '1'='1' then test_cal_dt.week_beg_dt when '1'='2' then 
test_kylin_fact.lstg_site_id else test_kylin_fact.leaf_categ_id end) as xxx , 
sum(price) as sum_price
   from test_kylin_fact
   inner JOIN edw.test_cal_dt as test_cal_dt
   ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt

http://git-wip-us.apache.org/repos/asf/kylin/blob/fdacf5d3/kylin-it/src/test/resources/query/sql_subquery/query33.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query33.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query33.sql
index 08ecc8e..6ed1e37 100644
--- a/kylin-it/src/test/resources/query/sql_subquery/query33.sql
+++ b/kylin-it/src/test/resources/query/sql_subquery/query33.sql
@@ -1,5 +1,5 @@
 
-  select  sum(price) as sum_price,  lstg_format_name,(case when '2'='1' then 
test_kylin_fact.lstg_site_id  when '2'='2' then test_cal_dt.week_beg_dt else 
test_kylin_fact.leaf_categ_id end) as xxx 
+  selectlstg_format_name,(case when '2'='1' then 
test_kylin_fact.lstg_site_id  when '2'='2' then test_cal_dt.week_beg_dt else 
test_kylin_fact.leaf_categ_id end) as xxx ,sum(price) as sum_price
   from test_kylin_fact
   inner JOIN edw.test_cal_dt as test_cal_dt
   ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt

http://git-wip-us.apache.org/repos/asf/kylin/blob/fdacf5d3/kylin-it/src/test/resources/query/sql_subquery/query34.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query34.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query34.sql
index 0dda9aa..56d04fa 100644
--- a/kylin-it/src/test/resources/query/sql_subquery/query34.sql
+++ b/kylin-it/src/test/resources/query/sql_subquery/query34.sql
@@ -1,5 +1,5 @@
 
-  select  sum(price) as sum_price,  (case when '3'='1' then 
test_cal_dt.week_beg_dt else   test_kylin_fact.cal_dt  end) as xxx 
+  select  (case when '3'='1' then test_cal_dt.week_beg_dt else   
test_kylin_fact.cal_dt  end) as xxx ,  sum(price) as sum_price
   from test_kylin_fact
   inner JOIN edw.test_cal_dt as test_cal_dt
   ON test_kylin_fact.cal_dt = test_cal_dt.cal_dt



[28/50] [abbrv] kylin git commit: Revert "minor, fix csv export garbled issue"

2017-05-24 Thread kangkaisen
Revert "minor, fix csv export garbled issue"

This reverts commit 949237ddca0ab24bf8121ccc002d802df678761c.


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f9b6db6a
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f9b6db6a
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f9b6db6a

Branch: refs/heads/KYLIN-2606
Commit: f9b6db6a582747f58e91d22de76ff7549172f460
Parents: ce09d6c
Author: shaofengshi 
Authored: Mon May 22 16:52:47 2017 +0800
Committer: shaofengshi 
Committed: Mon May 22 16:52:47 2017 +0800

--
 .../java/org/apache/kylin/rest/controller/QueryController.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/f9b6db6a/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
index 99447a1..c5f896d 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/QueryController.java
@@ -103,7 +103,7 @@ public class QueryController extends BasicController {
 @ResponseBody
 public void downloadQueryResult(@PathVariable String format, SQLRequest 
sqlRequest, HttpServletResponse response) {
 SQLResponse result = queryService.doQueryWithCache(sqlRequest);
-response.setContentType("text/" + format + ";charset=ansi");
+response.setContentType("text/" + format + ";charset=utf-8");
 response.setHeader("Content-Disposition", "attachment; 
filename=\"result." + format + "\"");
 ICsvListWriter csvWriter = null;
 



[31/50] [abbrv] kylin git commit: minor, materialize lookup views as external table

2017-05-24 Thread kangkaisen
minor, materialize lookup views as external table


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/4766c789
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/4766c789
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/4766c789

Branch: refs/heads/KYLIN-2606
Commit: 4766c789d8298b477edad7a9e86ebaec603f1b52
Parents: 8cd807f
Author: Cheng Wang 
Authored: Tue May 23 11:10:41 2017 +0800
Committer: 成 
Committed: Tue May 23 11:30:25 2017 +0800

--
 .../src/main/java/org/apache/kylin/source/hive/HiveMRInput.java| 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/4766c789/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
--
diff --git 
a/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java 
b/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
index bdbe321..dffba8a 100644
--- a/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
+++ b/source-hive/src/main/java/org/apache/kylin/source/hive/HiveMRInput.java
@@ -193,7 +193,7 @@ public class HiveMRInput implements IMRInput {
 if (lookUpTableDesc.isView()) {
 StringBuilder createIntermediateTableHql = new 
StringBuilder();
 createIntermediateTableHql.append("DROP TABLE IF EXISTS " 
+ lookUpTableDesc.getMaterializedName() + ";\n");
-createIntermediateTableHql.append("CREATE TABLE IF NOT 
EXISTS " + lookUpTableDesc.getMaterializedName() + "\n");
+createIntermediateTableHql.append("CREATE EXTERNAL TABLE 
IF NOT EXISTS " + lookUpTableDesc.getMaterializedName() + "\n");
 createIntermediateTableHql.append("LOCATION '" + 
jobWorkingDir + "/" + lookUpTableDesc.getMaterializedName() + "'\n");
 createIntermediateTableHql.append("AS SELECT * FROM " + 
lookUpTableDesc.getIdentity() + ";\n");
 
hiveCmdBuilder.addStatement(createIntermediateTableHql.toString());



[24/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API for better convention

2017-05-24 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/controller2/HybridControllerV2.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller2/HybridControllerV2.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller2/HybridControllerV2.java
new file mode 100644
index 000..ddf745a
--- /dev/null
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller2/HybridControllerV2.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest.controller2;
+
+import org.apache.kylin.rest.controller.BasicController;
+import org.apache.kylin.rest.msg.MsgPicker;
+import org.apache.kylin.rest.request.HybridRequest;
+import org.apache.kylin.rest.response.EnvelopeResponse;
+import org.apache.kylin.rest.response.ResponseCode;
+import org.apache.kylin.rest.service.HybridService;
+import org.apache.kylin.storage.hybrid.HybridInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping(value = "/hybrids")
+public class HybridControllerV2 extends BasicController {
+
+@Autowired
+private HybridService hybridService;
+
+@RequestMapping(value = "", method = RequestMethod.POST, produces = { 
"application/vnd.apache.kylin-v2+json" })
+@ResponseBody
+public EnvelopeResponse createV2(@RequestHeader("Accept-Language") String 
lang, @RequestBody HybridRequest request) {
+MsgPicker.setMsg(lang);
+
+checkRequiredArg("hybrid", request.getHybrid());
+checkRequiredArg("project", request.getProject());
+checkRequiredArg("model", request.getModel());
+checkRequiredArg("cubes", request.getCubes());
+HybridInstance instance = 
hybridService.createHybridCube(request.getHybrid(), request.getProject(), 
request.getModel(), request.getCubes());
+return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, instance, "");
+}
+
+@RequestMapping(value = "", method = RequestMethod.PUT, produces = { 
"application/vnd.apache.kylin-v2+json" })
+@ResponseBody
+public EnvelopeResponse updateV2(@RequestHeader("Accept-Language") String 
lang, @RequestBody HybridRequest request) {
+MsgPicker.setMsg(lang);
+
+checkRequiredArg("hybrid", request.getHybrid());
+checkRequiredArg("project", request.getProject());
+checkRequiredArg("model", request.getModel());
+checkRequiredArg("cubes", request.getCubes());
+HybridInstance instance = 
hybridService.updateHybridCube(request.getHybrid(), request.getProject(), 
request.getModel(), request.getCubes());
+return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, instance, "");
+}
+
+@RequestMapping(value = "", method = RequestMethod.DELETE, produces = { 
"application/vnd.apache.kylin-v2+json" })
+@ResponseBody
+public void deleteV2(@RequestHeader("Accept-Language") String lang, 
@RequestBody HybridRequest request) {
+MsgPicker.setMsg(lang);
+
+checkRequiredArg("hybrid", request.getHybrid());
+checkRequiredArg("project", request.getProject());
+checkRequiredArg("model", request.getModel());
+hybridService.deleteHybridCube(request.getHybrid(), 
request.getProject(), request.getModel());
+}
+
+@RequestMapping(value = "", method = RequestMethod.GET, produces = { 
"application/vnd.apache.kylin-v2+json" })
+@ResponseBody
+public EnvelopeResponse listV2(@RequestHeader("Accept-Language") String 
lang, @RequestParam(required = false) String project, @RequestParam(required = 
false) String model) {
+MsgPicker.setMsg(lang);
+
+ 

[40/50] [abbrv] kylin git commit: KYLIN-2603, push down having clause when possible

2017-05-24 Thread kangkaisen
KYLIN-2603, push down having clause when possible


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/e1bc72e3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/e1bc72e3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/e1bc72e3

Branch: refs/heads/KYLIN-2606
Commit: e1bc72e36d83a42d364e6d9b0ee893fbc018d498
Parents: 83fb144
Author: Li Yang 
Authored: Wed May 10 21:01:53 2017 +0800
Committer: hongbin ma 
Committed: Tue May 23 20:18:17 2017 +0800

--
 .../cube/gridtable/ScanRangePlannerBase.java|   3 +-
 .../org/apache/kylin/cube/model/RowKeyDesc.java |  16 +-
 .../kylin/gridtable/GTAggregateScanner.java | 223 ++-
 .../apache/kylin/gridtable/GTScanRequest.java   |  19 +-
 .../kylin/gridtable/GTScanRequestBuilder.java   |   8 +-
 .../java/org/apache/kylin/gridtable/GTUtil.java |  33 ++-
 .../apache/kylin/metadata/model/ColumnDesc.java |   2 +
 .../apache/kylin/metadata/model/TblColRef.java  |   2 +
 .../kylin/metadata/realization/SQLDigest.java   |  36 ++-
 .../storage/gtrecord/CubeScanRangePlanner.java  |  12 +-
 .../storage/gtrecord/CubeSegmentScanner.java|  10 +-
 .../gtrecord/GTCubeStorageQueryBase.java|  51 -
 .../gtrecord/GTCubeStorageQueryRequest.java |  14 +-
 .../kylin/storage/gtrecord/ScannerWorker.java   |   4 +
 .../storage/gtrecord/DictGridTableTest.java |  14 ++
 .../kylin/storage/hbase/ITStorageTest.java  |   6 +-
 .../kylin/query/relnode/OLAPAggregateRel.java   |   6 +-
 .../apache/kylin/query/relnode/OLAPContext.java |   9 +-
 .../kylin/query/relnode/OLAPFilterRel.java  |   9 +-
 19 files changed, 370 insertions(+), 107 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/e1bc72e3/core-cube/src/main/java/org/apache/kylin/cube/gridtable/ScanRangePlannerBase.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/ScanRangePlannerBase.java
 
b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/ScanRangePlannerBase.java
index d938f2b..ed0a77a 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/gridtable/ScanRangePlannerBase.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/gridtable/ScanRangePlannerBase.java
@@ -44,14 +44,15 @@ import com.google.common.collect.Sets;
 public abstract class ScanRangePlannerBase {
 
 //GT 
-protected TupleFilter gtFilter;
 protected GTInfo gtInfo;
+protected TupleFilter gtFilter;
 protected Pair gtStartAndEnd;
 protected TblColRef gtPartitionCol;
 protected ImmutableBitSet gtDimensions;
 protected ImmutableBitSet gtAggrGroups;
 protected ImmutableBitSet gtAggrMetrics;
 protected String[] gtAggrFuncs;
+protected TupleFilter havingFilter;
 protected boolean isPartitionColUsingDatetimeEncoding = true;
 
 protected RecordComparator rangeStartComparator;

http://git-wip-us.apache.org/repos/asf/kylin/blob/e1bc72e3/core-cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java 
b/core-cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
index 00557c5..124f126 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/RowKeyDesc.java
@@ -18,21 +18,23 @@
 
 package org.apache.kylin.cube.model;
 
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.base.Objects;
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.kylin.metadata.model.TblColRef;
-
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.kylin.metadata.model.TblColRef;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Objects;
+
 /**
  */
+@SuppressWarnings("serial")
 @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = 
Visibility.NONE, isGetterVisibility = Visibility.NONE, setterVisibility = 
Visibility.NONE)
 public class RowKeyDesc implements java.io.Serializable {
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/e1bc72e3/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTAggregateScanner.j

[29/50] [abbrv] kylin git commit: KYLIN-2637 The tips is not shown after creating project successfully.

2017-05-24 Thread kangkaisen
KYLIN-2637 The tips is not shown after creating project successfully.

Signed-off-by: Billy Liu 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ce6e3ede
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ce6e3ede
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ce6e3ede

Branch: refs/heads/KYLIN-2606
Commit: ce6e3ede2f670bf037a55234630b85098265075a
Parents: f9b6db6
Author: 10069681 
Authored: Mon May 22 20:34:53 2017 +0800
Committer: Billy Liu 
Committed: Tue May 23 09:43:07 2017 +0800

--
 webapp/app/js/controllers/page.js | 16 +---
 1 file changed, 13 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ce6e3ede/webapp/app/js/controllers/page.js
--
diff --git a/webapp/app/js/controllers/page.js 
b/webapp/app/js/controllers/page.js
index 056cc48..c426516 100644
--- a/webapp/app/js/controllers/page.js
+++ b/webapp/app/js/controllers/page.js
@@ -188,7 +188,7 @@ KylinApp.controller('PageCtrl', function ($scope, $q, 
AccessService, $modal, $lo
 
 });
 
-var projCtrl = function ($scope, $location, $modalInstance, ProjectService, 
MessageService, projects, project, SweetAlert, ProjectModel, $cookieStore, 
$route) {
+var projCtrl = function ($scope, $location, $modalInstance, ProjectService, 
MessageService, projects, project, SweetAlert, ProjectModel, $cookieStore, 
$route, $timeout) {
   $scope.state = {
 isEdit: false,
 oldProjName: null,
@@ -240,10 +240,20 @@ var projCtrl = function ($scope, $location, 
$modalInstance, ProjectService, Mess
 }
 else {
   ProjectService.save({}, {projectDescData: angular.toJson($scope.proj)}, 
function (newProj) {
-SweetAlert.swal('Success!', 'New project created successfully!', 
'success');
 $modalInstance.dismiss('cancel');
 $cookieStore.put("project", newProj.name);
-location.reload();
+SweetAlert.swal({
+  title: "Success!",
+  text: "New project created successfully!",
+  confirmButtonClass: 'btn-primary',
+  type: "success"
+},function(){
+  location.reload();
+});
+
+$timeout(function () {
+  location.reload();
+}, 3000);
   }, function (e) {
 if (e.data && e.data.exception) {
   var message = e.data.exception;



[01/50] [abbrv] kylin git commit: KYLIN-2557 code review [Forced Update!]

2017-05-24 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/KYLIN-2606 f8336d4bb -> d610a6dd5 (forced update)


KYLIN-2557 code review


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1c80c29b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1c80c29b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1c80c29b

Branch: refs/heads/KYLIN-2606
Commit: 1c80c29b22d9c00de1eb2e9a09c21377714248b7
Parents: e6a8a00
Author: Yang Li 
Authored: Sun May 14 20:14:29 2017 +0800
Committer: Yang Li 
Committed: Sun May 14 20:14:29 2017 +0800

--
 .../kylin/storage/hbase/HBaseConnection.java| 54 ++--
 1 file changed, 27 insertions(+), 27 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1c80c29b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
--
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
index ef82641..5fafa2b 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/HBaseConnection.java
@@ -18,7 +18,18 @@
 
 package org.apache.kylin.storage.hbase;
 
-import com.google.common.collect.Sets;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
@@ -39,17 +50,7 @@ import org.apache.kylin.common.util.HadoopUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import com.google.common.collect.Sets;
 
 /**
  * @author yangli9
@@ -67,8 +68,6 @@ public class HBaseConnection {
 
 private static ExecutorService coprocessorPool = null;
 
-private static DistributedLock lock = null;
-
 static {
 Runtime.getRuntime().addShutdownHook(new Thread() {
 @Override
@@ -268,18 +267,20 @@ public class HBaseConnection {
 }
 
 public static void createHTableIfNeeded(Connection conn, String table, 
String... families) throws IOException {
-Admin hbase = conn.getAdmin();
+Admin admin = conn.getAdmin();
 TableName tableName = TableName.valueOf(table);
-boolean hasLock = false;
+DistributedLock lock = null;
+String lockPath = getLockPath(table);
+
 try {
 if (tableExists(conn, table)) {
 logger.debug("HTable '" + table + "' already exists");
-Set existingFamilies = 
getFamilyNames(hbase.getTableDescriptor(tableName));
+Set existingFamilies = 
getFamilyNames(admin.getTableDescriptor(tableName));
 boolean wait = false;
 for (String family : families) {
 if (existingFamilies.contains(family) == false) {
 logger.debug("Adding family '" + family + "' to HTable 
'" + table + "'");
-hbase.addColumn(tableName, 
newFamilyDescriptor(family));
+admin.addColumn(tableName, 
newFamilyDescriptor(family));
 // addColumn() is async, is there a way to wait it 
finish?
 wait = true;
 }
@@ -295,7 +296,8 @@ public class HBaseConnection {
 }
 
 lock = 
KylinConfig.getInstanceFromEnv().getDistributedLockFactory().lockForCurrentProcess();
-hasLock = lock.lock(getLockPath(table), Long.MAX_VALUE);
+if (!lock.lock(lockPath, Long.MAX_VALUE))
+throw new RuntimeException("Cannot acquire lock to create 
HTable " + table);
 
 if (tableExists(conn, table)) {
 logger.debug("HTable '" + table + "' already exists");
@@ -313,15 +315,13 @@ public class HBaseConnection {
 }
 }
 
-//desc.setValue(HTABLE_UUID_TAG, UUID.randomUUID().toString());
- 

[09/50] [abbrv] kylin git commit: KYLIN-2577, refine hive configurations during cubing steps

2017-05-24 Thread kangkaisen
KYLIN-2577, refine hive configurations during cubing steps


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/7c152c51
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/7c152c51
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/7c152c51

Branch: refs/heads/KYLIN-2606
Commit: 7c152c515ce6cebe380c4e1b7c16d109192308db
Parents: 0061900
Author: Cheng Wang 
Authored: Thu May 18 11:05:34 2017 +0800
Committer: liyang-gmt8 
Committed: Thu May 18 15:27:36 2017 +0800

--
 build/bin/load-hive-conf.sh |  2 +-
 .../kylin/common/util/HiveCmdBuilder.java   | 56 +++-
 .../kylin/common/util/HiveCmdBuilderTest.java   |  2 +-
 .../kylin/job/engine/JobEngineConfig.java   | 43 ---
 .../source/hive/CreateFlatHiveTableStep.java|  3 --
 .../apache/kylin/source/hive/HiveMRInput.java   |  4 --
 6 files changed, 57 insertions(+), 53 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/7c152c51/build/bin/load-hive-conf.sh
--
diff --git a/build/bin/load-hive-conf.sh b/build/bin/load-hive-conf.sh
index a5046f0..a42cd0c 100644
--- a/build/bin/load-hive-conf.sh
+++ b/build/bin/load-hive-conf.sh
@@ -11,5 +11,5 @@ hive_conf_prop="${KYLIN_HOME}/logs/hive_props"
 rm -rf ${hive_conf_prop}
 export ENABLE_CHECK_ENV=false
 ${dir}/kylin.sh org.apache.kylin.tool.HiveConfigCLI ${hive_conf_dir} 
${hive_conf_prop}
-[[ 0 == $? ]] || quit "Error, can not parse ${hive_conf_dir} and can not apply 
it to hive relevant check."
+[[ 0 == $? ]] || quit "Can not parse xml file: ${hive_conf_dir}, please check 
it."
 hive_conf_properties=`cat ${hive_conf_prop}`
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/7c152c51/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java 
b/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
index 255867a..2f6b9a0 100644
--- a/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
+++ b/core-common/src/main/java/org/apache/kylin/common/util/HiveCmdBuilder.java
@@ -27,17 +27,25 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
 
 import com.google.common.collect.Lists;
 
 public class HiveCmdBuilder {
 private static final Logger logger = 
LoggerFactory.getLogger(HiveCmdBuilder.class);
 
+public static final String HIVE_CONF_FILENAME = "kylin_hive_conf";
+
 public enum HiveClientMode {
 CLI, BEELINE
 }
@@ -50,6 +58,7 @@ public class HiveCmdBuilder {
 public HiveCmdBuilder() {
 kylinConfig = KylinConfig.getInstanceFromEnv();
 clientMode = 
HiveClientMode.valueOf(kylinConfig.getHiveClientMode().toUpperCase());
+loadHiveConfiguration();
 }
 
 public String build() {
@@ -75,8 +84,8 @@ public class HiveCmdBuilder {
 bw.newLine();
 }
 buf.append("beeline ");
-buf.append(parseProps());
 buf.append(kylinConfig.getHiveBeelineParams());
+buf.append(parseProps());
 buf.append(" -f ");
 buf.append(tmpHql.getAbsolutePath());
 buf.append(";ret_code=$?;rm -f ");
@@ -123,6 +132,7 @@ public class HiveCmdBuilder {
 }
 
 public void setHiveConfProps(Map hiveConfProps) {
+this.hiveConfProps.clear();
 this.hiveConfProps.putAll(hiveConfProps);
 }
 
@@ -144,4 +154,48 @@ public class HiveCmdBuilder {
 public String toString() {
 return build();
 }
+
+private void loadHiveConfiguration() {
+
+File hiveConfFile;
+String hiveConfFileName = (HIVE_CONF_FILENAME + ".xml");
+String path = System.getProperty(KylinConfig.KYLIN_CONF);
+
+if (StringUtils.isNotEmpty(path)) {
+hiveConfFile = new File(path, hiveConfFileName);
+} else {
+path = KylinConfig.getKylinHome();
+if (StringUtils.isEmpty(path)) {
+logger.error("KYLIN_HOME is not set, can not locate hive conf: 
{}.xml", HIVE_CONF_FILENAME);
+return;
+}
+hiveConfFile = new File(path + File.separator + "conf", 
hiveConfF

[14/50] [abbrv] kylin git commit: Merge commit '87fedf75e5bbf61a33cf1b31720ad9ac55de6287'

2017-05-24 Thread kangkaisen
Merge commit '87fedf75e5bbf61a33cf1b31720ad9ac55de6287'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f36372bc
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f36372bc
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f36372bc

Branch: refs/heads/KYLIN-2606
Commit: f36372bc657b1edb312b36a071b077cde184eab8
Parents: 8ce972f 87fedf7
Author: Hongbin Ma 
Authored: Fri May 19 17:55:26 2017 +0800
Committer: Hongbin Ma 
Committed: Fri May 19 17:55:26 2017 +0800

--
 .../rel/rules/OLAPJoinPushThroughJoinRule.java  | 172 
 .../rel/rules/OLAPJoinPushThroughJoinRule2.java | 205 +
 .../java/org/apache/calcite/tools/Programs.java | 438 +++
 build/bin/find-hive-dependency.sh   |   4 +-
 build/bin/kylin.sh  |  41 +-
 build/bin/sample.sh |  24 +-
 .../apache/kylin/common/KylinConfigBase.java|   8 +-
 .../kylin/common/lock/DistributedLock.java  |  63 ++-
 .../common/lock/DistributedLockFactory.java |  43 ++
 .../kylin/common/restclient/RestClient.java |  16 +-
 .../org/apache/kylin/common/util/CheckUtil.java |  50 ++-
 .../apache/kylin/cube/model/DimensionDesc.java  |   3 +-
 .../kylin/dict/BuiltInFunctionTransformer.java  |   8 +-
 .../kylin/dict/GlobalDictionaryBuilder.java |  71 +--
 .../impl/threadpool/DistributedScheduler.java   |  55 +--
 .../kylin/job/lock/DistributedJobLock.java  |  24 -
 .../kylin/metadata/cachesync/Broadcaster.java   |  66 ++-
 .../metadata/filter/function/BuiltInMethod.java |  39 +-
 .../metadata/filter/function/LikeMatchers.java  | 141 ++
 examples/sample_cube/create_sample_tables.sql   |  10 +-
 .../kylin/job/BaseTestDistributedScheduler.java |  35 +-
 .../job/ITDistributedSchedulerBaseTest.java |   6 +-
 .../job/ITDistributedSchedulerTakeOverTest.java |   2 +-
 .../resources/query/sql_subquery/query17.sql|  17 +
 .../resources/query/sql_subquery/query18.sql|  23 +
 .../resources/query/sql_subquery/query19.sql|  20 +
 .../resources/query/sql_subquery/query21.sql|  26 ++
 .../resources/query/sql_subquery/query22.sql|  25 ++
 .../resources/query/sql_subquery/query23.sql|  26 ++
 .../resources/query/sql_subquery/query24.sql|  29 ++
 .../resources/query/sql_subquery/query25.sql|  22 +
 .../resources/query/sql_subquery/query26.sql|  16 +
 .../resources/query/sql_subquery/query27.sql|  20 +
 .../resources/query/sql_subquery/query28.sql|  21 +
 .../query/sql_subquery/query29.sql.todo |  22 +
 .../kylin/query/relnode/OLAPAggregateRel.java   |   4 +-
 .../apache/kylin/query/relnode/OLAPContext.java |  10 +
 .../kylin/query/relnode/OLAPFilterRel.java  |   2 +-
 .../apache/kylin/query/relnode/OLAPJoinRel.java |  12 +-
 .../kylin/query/relnode/OLAPProjectRel.java |  15 +-
 .../rest/security/AuthoritiesPopulator.java |  20 +-
 .../apache/kylin/rest/service/AclService.java   |   1 -
 .../kylin/rest/service/CacheServiceTest.java|  10 +-
 .../kylin/storage/hbase/HBaseConnection.java|  30 +-
 .../hbase/util/ZookeeperDistributedJobLock.java | 257 ---
 .../hbase/util/ZookeeperDistributedLock.java| 307 +
 .../storage/hbase/util/ZookeeperJobLock.java| 144 ++
 .../apache/kylin/storage/hdfs/LockManager.java  |   8 +-
 .../util/ITZookeeperDistributedLockTest.java| 254 +++
 .../apache/kylin/tool/MetadataCleanupJob.java   |  14 +-
 webapp/app/js/controllers/access.js |   1 +
 webapp/app/js/controllers/admin.js  |  12 +-
 webapp/app/js/controllers/cubeMeasures.js   |   2 +-
 webapp/app/js/controllers/query.js  |   4 +-
 54 files changed, 2273 insertions(+), 625 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/f36372bc/build/bin/find-hive-dependency.sh
--

http://git-wip-us.apache.org/repos/asf/kylin/blob/f36372bc/build/bin/sample.sh
--
diff --cc build/bin/sample.sh
index 2e13805,10900bb..b9c4ea3
--- a/build/bin/sample.sh
+++ b/build/bin/sample.sh
@@@ -52,10 -62,10 +63,11 @@@ the
  else
  
beeline_params=${beeline_params/${hive2_url}/${hive2_url}${sample_database}}
  fi
- beeline ${hive_conf_properties} ${beeline_params} -f 
${KYLIN_HOME}/sample_cube/create_sample_tables.sql  || { exit 1; }
 -beeline ${beeline_params} --hivevar hdfs_tmp_dir=${hdfs_tmp_dir} -f 
${KYLIN_HOME}/sample_cube/create_sample_tables.sql  || { exit 1; }
++
++beeline ${hive_conf_properties} --hivevar hdfs_tmp_dir=${hdfs_tmp_dir} 
${beeline_params} -f ${KYLIN_HOME}/sample_cube/create_sample_tables.sql  || { 
exit 1; }
  else
 -hive -e "CREATE DATABASE IF NOT EX

[12/50] [abbrv] kylin git commit: fix KYLIN-2594: After reloading metadata, refresh the project list

2017-05-24 Thread kangkaisen
fix KYLIN-2594: After reloading metadata, refresh the project list

Signed-off-by: Billy Liu 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/87fedf75
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/87fedf75
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/87fedf75

Branch: refs/heads/KYLIN-2606
Commit: 87fedf75e5bbf61a33cf1b31720ad9ac55de6287
Parents: a34db26
Author: pengjianlin 
Authored: Fri May 19 16:24:28 2017 +0800
Committer: Billy Liu 
Committed: Fri May 19 16:44:28 2017 +0800

--
 webapp/app/js/controllers/admin.js | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/87fedf75/webapp/app/js/controllers/admin.js
--
diff --git a/webapp/app/js/controllers/admin.js 
b/webapp/app/js/controllers/admin.js
index 10e2c38..37c1d67 100644
--- a/webapp/app/js/controllers/admin.js
+++ b/webapp/app/js/controllers/admin.js
@@ -18,7 +18,7 @@
 
 'use strict';
 
-KylinApp.controller('AdminCtrl', function ($scope, AdminService, CacheService, 
TableService, loadingRequest, MessageService, $modal, 
SweetAlert,kylinConfig,ProjectModel,$window) {
+KylinApp.controller('AdminCtrl', function ($scope, AdminService, CacheService, 
TableService, loadingRequest, MessageService, ProjectService, $modal, 
SweetAlert,kylinConfig,ProjectModel,$window) {
   $scope.configStr = "";
   $scope.envStr = "";
 
@@ -84,7 +84,7 @@ KylinApp.controller('AdminCtrl', function ($scope, 
AdminService, CacheService, T
   }
 });
   }
-  
+
   $scope.reloadMeta = function () {
 SweetAlert.swal({
   title: '',
@@ -98,6 +98,9 @@ KylinApp.controller('AdminCtrl', function ($scope, 
AdminService, CacheService, T
   if (isConfirm) {
 CacheService.clean({}, function () {
   SweetAlert.swal('Success!', 'Cache reload successfully', 'success');
+  ProjectService.listReadable({}, function(projects) {
+ProjectModel.setProjects(projects);
+  });
 }, function (e) {
   if (e.data && e.data.exception) {
 var message = e.data.exception;



[05/50] [abbrv] kylin git commit: KYLIN-2625 not null filter clause should be evaluable in storage

2017-05-24 Thread kangkaisen
KYLIN-2625  not null filter clause should be evaluable in storage


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/c9dc7cc7
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/c9dc7cc7
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/c9dc7cc7

Branch: refs/heads/KYLIN-2606
Commit: c9dc7cc78c5eed40f4c5a438423b857a145f17b1
Parents: a38b02d
Author: Hongbin Ma 
Authored: Tue May 16 18:04:03 2017 +0800
Committer: Roger Shi 
Committed: Tue May 16 20:59:12 2017 +0800

--
 .../metadata/filter/CompareTupleFilter.java |  3 ++-
 .../test/resources/query/sql_limit/query04.sql  | 25 
 2 files changed, 27 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/c9dc7cc7/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
index d783e52..2771250 100755
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/CompareTupleFilter.java
@@ -215,7 +215,8 @@ public class CompareTupleFilter extends TupleFilter {
 @Override
 public boolean isEvaluable() {
 return (column != null || (function != null && 
function.isEvaluable())) //
-&& !conditionValues.isEmpty() && secondColumn == null;
+&& (!conditionValues.isEmpty() || operator == 
FilterOperatorEnum.ISNOTNULL || operator == FilterOperatorEnum.ISNULL) //
+&& secondColumn == null;
 }
 
 public boolean alwaysReturnTrue() {

http://git-wip-us.apache.org/repos/asf/kylin/blob/c9dc7cc7/kylin-it/src/test/resources/query/sql_limit/query04.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_limit/query04.sql 
b/kylin-it/src/test/resources/query/sql_limit/query04.sql
new file mode 100644
index 000..381ab65
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_limit/query04.sql
@@ -0,0 +1,25 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+
+
+select * from (
+select * from test_kylin_fact
+  where lstg_format_name is not null
+  ) limit 20
+ 



[39/50] [abbrv] kylin git commit: minor, use soft reference in dict cache

2017-05-24 Thread kangkaisen
minor, use soft reference in dict cache


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ed0430bc
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ed0430bc
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ed0430bc

Branch: refs/heads/KYLIN-2606
Commit: ed0430bc0649ac5b4de7a6c3df0f65b8121d12cd
Parents: 0e44a19
Author: Li Yang 
Authored: Fri May 12 15:23:19 2017 +0800
Committer: hongbin ma 
Committed: Tue May 23 20:18:17 2017 +0800

--
 .../src/main/java/org/apache/kylin/dict/DictionaryManager.java| 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ed0430bc/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java
index bbe6cac..1628f4e 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryManager.java
@@ -99,8 +99,7 @@ public class DictionaryManager {
 }
 })//
 .maximumSize(config.getCachedDictMaxEntrySize())//
-.expireAfterWrite(1, TimeUnit.DAYS)//
-.build(new CacheLoader() {
+.expireAfterWrite(1, TimeUnit.DAYS).build(new 
CacheLoader() {
 @Override
 public DictionaryInfo load(String key) throws Exception {
 DictionaryInfo dictInfo = 
DictionaryManager.this.load(key, true);



[32/50] [abbrv] kylin git commit: minor, move temporary file to folder var

2017-05-24 Thread kangkaisen
minor, move temporary file to folder var


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/11a0b57a
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/11a0b57a
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/11a0b57a

Branch: refs/heads/KYLIN-2606
Commit: 11a0b57acd434cff426e860a0b4c645b496522f6
Parents: 73a78db
Author: Cheng Wang 
Authored: Mon May 22 16:30:38 2017 +0800
Committer: 成 
Committed: Tue May 23 11:30:25 2017 +0800

--
 build/bin/load-hive-conf.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/11a0b57a/build/bin/load-hive-conf.sh
--
diff --git a/build/bin/load-hive-conf.sh b/build/bin/load-hive-conf.sh
index a42cd0c..c7317c6 100644
--- a/build/bin/load-hive-conf.sh
+++ b/build/bin/load-hive-conf.sh
@@ -5,9 +5,9 @@
 source $(cd -P -- "$(dirname -- "$0")" && pwd -P)/header.sh
 
 # source me
-
+mkdir -p ${KYLIN_HOME}/var
 hive_conf_dir="${KYLIN_HOME}/conf/kylin_hive_conf.xml"
-hive_conf_prop="${KYLIN_HOME}/logs/hive_props"
+hive_conf_prop="${KYLIN_HOME}/var/hive_props"
 rm -rf ${hive_conf_prop}
 export ENABLE_CHECK_ENV=false
 ${dir}/kylin.sh org.apache.kylin.tool.HiveConfigCLI ${hive_conf_dir} 
${hive_conf_prop}



[21/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API for better convention

2017-05-24 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/73a78dbe/server-base/src/main/java/org/apache/kylin/rest/service/QueryServiceV2.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/QueryServiceV2.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/QueryServiceV2.java
new file mode 100644
index 000..368
--- /dev/null
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/service/QueryServiceV2.java
@@ -0,0 +1,516 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest.service;
+
+import static org.apache.kylin.common.util.CheckUtil.checkCondition;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.sql.DataSource;
+
+import org.apache.calcite.avatica.ColumnMetaData;
+import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.QueryContext;
+import org.apache.kylin.common.debug.BackdoorToggles;
+import org.apache.kylin.common.exceptions.ResourceLimitExceededException;
+import org.apache.kylin.common.util.SetThreadName;
+import org.apache.kylin.cube.CubeManager;
+import org.apache.kylin.metadata.model.DataModelDesc;
+import org.apache.kylin.metadata.model.JoinDesc;
+import org.apache.kylin.metadata.model.JoinTableDesc;
+import org.apache.kylin.metadata.model.ModelDimensionDesc;
+import org.apache.kylin.metadata.model.TableRef;
+import org.apache.kylin.metadata.project.ProjectInstance;
+import org.apache.kylin.query.relnode.OLAPContext;
+import org.apache.kylin.query.util.QueryUtil;
+import org.apache.kylin.rest.constant.Constant;
+import org.apache.kylin.rest.exception.BadRequestException;
+import org.apache.kylin.rest.exception.InternalErrorException;
+import org.apache.kylin.rest.metrics.QueryMetricsFacade;
+import org.apache.kylin.rest.model.ColumnMetaWithType;
+import org.apache.kylin.rest.model.SelectedColumnMeta;
+import org.apache.kylin.rest.model.TableMetaWithType;
+import org.apache.kylin.rest.msg.Message;
+import org.apache.kylin.rest.msg.MsgPicker;
+import org.apache.kylin.rest.request.PrepareSqlRequest;
+import org.apache.kylin.rest.request.SQLRequest;
+import org.apache.kylin.rest.response.SQLResponse;
+import org.apache.kylin.rest.util.TableauInterceptor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Component;
+
+import com.google.common.collect.Lists;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+
+/**
+ * Created by luwei on 17-4-24.
+ */
+@Component("queryServiceV2")
+public class QueryServiceV2 extends QueryService {
+private static final Logger logger = 
LoggerFactory.getLogger(QueryServiceV2.class);
+
+@Autowired
+@Qualifier("cacheService")
+private CacheService cacheService;
+
+@Autowired
+@Qualifier("modelMgmtServiceV2")
+private ModelServiceV2 modelServiceV2;
+
+public SQLResponse doQueryWithCache(SQLRequest sqlRequest) {
+Message msg = MsgPicker.getMsg();
+
+KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
+String serverMode = kylinConfig.getServerMode();
+if (!(Constant.SERVER_MODE_QUERY.equals(serverMode.toLowerCase()) || 
Constant.SERVER_MODE_ALL.equals(serverMode.toLowerCase( {
+throw new 
BadRequestException(String.format(msg.getQUERY_NOT_ALLOWED(), serverMode));
+}
+if (StringUtils.isBlank(sqlRequest.getProject())) {
+throw new BadRequestException(msg.

[48/50] [abbrv] kylin git commit: fix CI

2017-05-24 Thread kangkaisen
fix CI


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/5d2934b7
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/5d2934b7
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/5d2934b7

Branch: refs/heads/KYLIN-2606
Commit: 5d2934b7e6331e5fef2c18c92d7338932b087b3f
Parents: 92b6404
Author: Hongbin Ma 
Authored: Tue May 23 21:26:02 2017 +0800
Committer: hongbin ma 
Committed: Tue May 23 21:27:41 2017 +0800

--
 .../apache/kylin/metadata/model/TblColRef.java  |  1 -
 .../org/apache/kylin/rest/DebugDeployCLI.java   | 31 
 2 files changed, 31 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/5d2934b7/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
index 3bca61c..5a28e8b 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/TblColRef.java
@@ -87,7 +87,6 @@ public class TblColRef implements Serializable {
 checkArgument(col.table.getModel() == UNKNOWN_MODEL || 
col.table.getModel() == model);
 TableRef tableRef = model.findTable(alias);
 
checkArgument(tableRef.getTableDesc().getIdentity().equals(col.column.getTable().getIdentity()));
-checkArgument(tableRef.getTableDesc() == col.column.getTable());
 col.fixTableRef(tableRef);
 }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/5d2934b7/server/src/main/java/org/apache/kylin/rest/DebugDeployCLI.java
--
diff --git a/server/src/main/java/org/apache/kylin/rest/DebugDeployCLI.java 
b/server/src/main/java/org/apache/kylin/rest/DebugDeployCLI.java
new file mode 100644
index 000..28c1b12
--- /dev/null
+++ b/server/src/main/java/org/apache/kylin/rest/DebugDeployCLI.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest;
+
+import java.io.IOException;
+
+import org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI;
+
+public class DebugDeployCLI {
+
+public static void main(String[] args) throws IOException {
+DebugTomcat.setupDebugEnv();
+DeployCoprocessorCLI.main(new String[] { "default", "all" });
+}
+}



[35/50] [abbrv] kylin git commit: KYLIN-2632 Refactor REST API and service

2017-05-24 Thread kangkaisen
KYLIN-2632 Refactor REST API and service


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/2471d5e5
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2471d5e5
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2471d5e5

Branch: refs/heads/KYLIN-2606
Commit: 2471d5e56219d7c51342953ae37eb77370ae1e58
Parents: 0a0edfe
Author: Luwei-Chen 
Authored: Tue May 23 18:17:29 2017 +0800
Committer: liyang-gmt8 
Committed: Tue May 23 18:21:27 2017 +0800

--
 .../rest/controller2/CubeControllerV2.java  |  74 +
 .../rest/controller2/DiagnosisControllerV2.java |  21 ++-
 .../rest/controller2/ModelControllerV2.java |  63 +---
 .../rest/controller2/ProjectControllerV2.java   | 109 +
 .../rest/response/CubeInstanceResponse.java |  23 ++-
 .../rest/response/DataModelDescResponse.java|  23 ++-
 .../apache/kylin/rest/service/CacheService.java |  14 +-
 .../kylin/rest/service/CubeServiceV2.java   | 159 ++
 .../kylin/rest/service/ModelServiceV2.java  | 161 +++
 .../kylin/rest/service/ProjectServiceV2.java|  91 +++
 10 files changed, 319 insertions(+), 419 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/2471d5e5/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
--
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
index 05d99f5..a9e00ba 100644
--- 
a/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller2/CubeControllerV2.java
@@ -21,6 +21,7 @@ package org.apache.kylin.rest.controller2;
 import java.io.IOException;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -50,6 +51,7 @@ import org.apache.kylin.rest.request.CubeRequest;
 import org.apache.kylin.rest.request.JobBuildRequest;
 import org.apache.kylin.rest.request.JobBuildRequest2;
 import org.apache.kylin.rest.response.CubeInstanceResponse;
+import org.apache.kylin.rest.response.CubeInstanceResponse.CubeComparator;
 import org.apache.kylin.rest.response.EnvelopeResponse;
 import org.apache.kylin.rest.response.GeneralResponse;
 import org.apache.kylin.rest.response.HBaseResponse;
@@ -74,7 +76,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.google.common.collect.Lists;
 
@@ -149,6 +150,8 @@ public class CubeControllerV2 extends BasicController {
 
 cubeInstanceResponses.add(cubeInstanceResponse);
 }
+CubeComparator cubeComparator = new CubeComparator();
+Collections.sort(cubeInstanceResponses, cubeComparator);
 data.put("cubes", cubeInstanceResponses);
 data.put("size", cubes.size());
 
@@ -468,58 +471,6 @@ public class CubeControllerV2 extends BasicController {
 }
 
 /**
- * update CubDesc
- *
- * @return Table metadata array
- * @throws JsonProcessingException
- * @throws IOException
- */
-
-@RequestMapping(value = "", method = { RequestMethod.PUT }, produces = { 
"application/vnd.apache.kylin-v2+json" })
-@ResponseBody
-public EnvelopeResponse updateCubeDescV2(@RequestHeader("Accept-Language") 
String lang, @RequestBody CubeRequest cubeRequest) throws IOException {
-MsgPicker.setMsg(lang);
-
-CubeDesc desc = deserializeCubeDescV2(cubeRequest);
-cubeServiceV2.validateCubeDesc(desc, false);
-
-boolean createNew = cubeServiceV2.unifyCubeDesc(desc, false);
-
-String projectName = (null == cubeRequest.getProject()) ? 
ProjectInstance.DEFAULT_PROJECT_NAME : cubeRequest.getProject();
-
-desc = cubeServiceV2.updateCubeToResourceStore(desc, projectName, 
createNew, false);
-
-String descData = JsonUtil.writeValueAsIndentString(desc);
-GeneralResponse data = new GeneralResponse();
-data.setProperty("uuid", desc.getUuid());
-data.setProperty("cubeDescData", descData);
-
-return new EnvelopeResponse(ResponseCode.CODE_SUCCESS, data, "");
-}
-
-@RequestMapping(value = "/draft", method = { RequestMethod.PUT }, produces 
= { "application/vnd.apache.kylin-v2+json" })
-@ResponseBody
-public EnvelopeResponse 
updateCubeDescDraftV2(@RequestHeader("Accept-Language") Stri

kylin git commit: KYLIN-2378 Set job thread name with job uuid

2017-01-12 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master a11a31da0 -> 0f36b9b37


KYLIN-2378 Set job thread name with job uuid


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0f36b9b3
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0f36b9b3
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0f36b9b3

Branch: refs/heads/master
Commit: 0f36b9b37097b95c16dd62cbe32781e5af8911dc
Parents: a11a31d
Author: kangkaisen 
Authored: Mon Jan 9 17:21:38 2017 +0800
Committer: kangkaisen 
Committed: Thu Jan 12 17:42:54 2017 +0800

--
 .../org/apache/kylin/job/impl/threadpool/DefaultScheduler.java| 3 ++-
 .../apache/kylin/job/impl/threadpool/DistributedScheduler.java| 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/0f36b9b3/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DefaultScheduler.java
--
diff --git 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DefaultScheduler.java
 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DefaultScheduler.java
index ddb3a21..403abc4 100644
--- 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DefaultScheduler.java
+++ 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DefaultScheduler.java
@@ -29,6 +29,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
+import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.job.Scheduler;
 import org.apache.kylin.job.constant.ExecutableConstants;
 import org.apache.kylin.job.engine.JobEngineConfig;
@@ -137,7 +138,7 @@ public class DefaultScheduler implements 
Scheduler, Connecti
 
 @Override
 public void run() {
-try {
+try (SetThreadName ignored = new SetThreadName("Job %s", 
executable.getId())) {
 executable.execute(context);
 // trigger the next step asap
 fetcherPool.schedule(fetcher, 0, TimeUnit.SECONDS);

http://git-wip-us.apache.org/repos/asf/kylin/blob/0f36b9b3/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
--
diff --git 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
index be07d76..3436529 100644
--- 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
+++ 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
@@ -35,6 +35,7 @@ import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
 import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.SetThreadName;
 import org.apache.kylin.job.Scheduler;
 import org.apache.kylin.job.constant.ExecutableConstants;
 import org.apache.kylin.job.engine.JobEngineConfig;
@@ -173,7 +174,7 @@ public class DistributedScheduler implements 
Scheduler, Conn
 
 @Override
 public void run() {
-try {
+try (SetThreadName ignored = new SetThreadName("Job %s", 
executable.getId())) {
 String segmentId = executable.getParam(SEGMENT_ID);
 if (jobLock.lockWithName(segmentId, serverName)) {
 logger.info(executable.toString() + " scheduled in server: 
" + serverName);



kylin git commit: KYLIN-2238 Add query server scan threshold

2017-01-14 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 20c329423 -> 4b00ec26d


KYLIN-2238 Add query server scan threshold


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/4b00ec26
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/4b00ec26
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/4b00ec26

Branch: refs/heads/master
Commit: 4b00ec26de1e1cc9bf9b2e55a1b162d123114df8
Parents: 20c3294
Author: kangkaisen 
Authored: Tue Nov 29 19:51:39 2016 +0800
Committer: kangkaisen 
Committed: Sat Jan 14 19:00:09 2017 +0800

--
 .../storage/gtrecord/SequentialCubeTupleIterator.java | 14 +++---
 1 file changed, 11 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/4b00ec26/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
--
diff --git 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
index ee868c7..c621215 100644
--- 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
+++ 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/SequentialCubeTupleIterator.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import javax.annotation.Nullable;
 
+import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.cube.cuboid.Cuboid;
 import org.apache.kylin.metadata.model.FunctionDesc;
 import org.apache.kylin.metadata.model.TblColRef;
@@ -33,6 +34,7 @@ import org.apache.kylin.metadata.tuple.ITuple;
 import org.apache.kylin.metadata.tuple.ITupleIterator;
 import org.apache.kylin.metadata.tuple.TupleInfo;
 import org.apache.kylin.storage.StorageContext;
+import org.apache.kylin.storage.exception.ScanOutOfLimitException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,6 +47,8 @@ public class SequentialCubeTupleIterator implements 
ITupleIterator {
 
 private static final Logger logger = 
LoggerFactory.getLogger(SequentialCubeTupleIterator.class);
 
+private final int SCAN_THRESHOLD = 
KylinConfig.getInstanceFromEnv().getScanThreshold();
+
 protected List scanners;
 protected List segmentCubeTupleIterators;
 protected Iterator tupleIterator;
@@ -78,7 +82,7 @@ public class SequentialCubeTupleIterator implements 
ITupleIterator {
 tupleIterator = new 
SortedIteratorMergerWithLimit(transformed, 
context.getFinalPushDownLimit(), getTupleDimensionComparator(cuboid, 
returnTupleInfo)).getIterator();
 }
 }
-
+
 public Comparator getTupleDimensionComparator(Cuboid cuboid, 
TupleInfo returnTupleInfo) {
 // dimensionIndexOnTuple is for SQL with limit
 List temp = Lists.newArrayList();
@@ -92,7 +96,7 @@ public class SequentialCubeTupleIterator implements 
ITupleIterator {
 for (int i = 0; i < temp.size(); i++) {
 dimensionIndexOnTuple[i] = temp.get(i);
 }
-
+
 return new Comparator() {
 @Override
 public int compare(ITuple o1, ITuple o2) {
@@ -137,7 +141,11 @@ public class SequentialCubeTupleIterator implements 
ITupleIterator {
 
 @Override
 public ITuple next() {
-scanCount++;
+// prevent the big query to make the Query Server OOM
+if (scanCount++ > SCAN_THRESHOLD) {
+throw new ScanOutOfLimitException("Scan count exceed the scan 
threshold: " + SCAN_THRESHOLD);
+}
+
 if (++scanCountDelta >= 1000)
 flushScanCountDelta();
 



kylin git commit: KYLIN-2304 Only copy latest version dict for global dict

2017-01-14 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 4b00ec26d -> eb18ac59f


KYLIN-2304 Only copy latest version dict for global dict


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/eb18ac59
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/eb18ac59
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/eb18ac59

Branch: refs/heads/master
Commit: eb18ac59fa74b3f2f1f0163f7728739a1027a233
Parents: 4b00ec2
Author: kangkaisen 
Authored: Sun Dec 18 20:09:03 2016 +0800
Committer: kangkaisen 
Committed: Sat Jan 14 19:07:59 2017 +0800

--
 .../apache/kylin/dict/AppendTrieDictionary.java  | 19 +--
 .../org/apache/kylin/dict/CachedTreeMap.java |  2 +-
 2 files changed, 14 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/eb18ac59/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
index 5029bc4..80403cc 100644
--- 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
+++ 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
@@ -1173,13 +1173,15 @@ public class AppendTrieDictionary extends 
CacheDictionary {
 
 @Override
 public AppendTrieDictionary copyToAnotherMeta(KylinConfig srcConfig, 
KylinConfig dstConfig) throws IOException {
+//copy appendDict
 Configuration conf = new Configuration();
-AppendTrieDictionary newDict = new AppendTrieDictionary();
-
newDict.initParams(baseDir.replaceFirst(srcConfig.getHdfsWorkingDirectory(), 
dstConfig.getHdfsWorkingDirectory()), baseId, maxId, maxValueLength, nValues, 
bytesConvert);
-newDict.initDictSliceMap((CachedTreeMap)dictSliceMap);
-logger.info("Copy AppendDict from {} to {}", this.baseDir, 
newDict.baseDir);
-Path srcPath = new Path(this.baseDir);
-Path dstPath = new Path(newDict.baseDir);
+
+Path base = new Path(baseDir);
+FileSystem srcFs = FileSystem.get(base.toUri(), conf);
+Path srcPath = CachedTreeMap.getLatestVersion(conf, srcFs, base);
+Path dstPath = new 
Path(srcPath.toString().replaceFirst(srcConfig.getHdfsWorkingDirectory(), 
dstConfig.getHdfsWorkingDirectory()));
+logger.info("Copy appendDict from {} to {}", srcPath, dstPath);
+
 FileSystem dstFs = FileSystem.get(dstPath.toUri(), conf);
 if (dstFs.exists(dstPath)) {
 logger.info("Delete existing AppendDict {}", dstPath);
@@ -1187,6 +1189,11 @@ public class AppendTrieDictionary extends 
CacheDictionary {
 }
 FileUtil.copy(FileSystem.get(srcPath.toUri(), conf), srcPath, 
FileSystem.get(dstPath.toUri(), conf), dstPath, false, true, conf);
 
+// init new AppendTrieDictionary
+AppendTrieDictionary newDict = new AppendTrieDictionary();
+
newDict.initParams(baseDir.replaceFirst(srcConfig.getHdfsWorkingDirectory(), 
dstConfig.getHdfsWorkingDirectory()), baseId, maxId, maxValueLength, nValues, 
bytesConverter);
+newDict.initDictSliceMap((CachedTreeMap) dictSliceMap);
+
 return newDict;
 }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/eb18ac59/core-dictionary/src/main/java/org/apache/kylin/dict/CachedTreeMap.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/CachedTreeMap.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/CachedTreeMap.java
index 3be4fd7..cc23261 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/CachedTreeMap.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/CachedTreeMap.java
@@ -225,7 +225,7 @@ public class CachedTreeMap ext
 return getLatestVersion(conf, fs, baseDir).toUri().getPath();
 }
 
-private static Path getLatestVersion(Configuration conf, FileSystem fs, 
Path baseDir) throws IOException {
+public static Path getLatestVersion(Configuration conf, FileSystem fs, 
Path baseDir) throws IOException {
 String[] versions = listAllVersions(fs, baseDir);
 if (versions.length > 0) {
 return new Path(versions[versions.length - 1]);



kylin git commit: KYLIN-2357 Make ERROR_RECORD_LOG_THRESHOLD configurable

2017-01-14 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master eb18ac59f -> 8d374f843


KYLIN-2357 Make ERROR_RECORD_LOG_THRESHOLD configurable


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/8d374f84
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/8d374f84
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/8d374f84

Branch: refs/heads/master
Commit: 8d374f84368194d78208ea3b7683a697e8ec4314
Parents: eb18ac5
Author: kangkaisen 
Authored: Sat Jan 7 19:16:30 2017 +0800
Committer: kangkaisen 
Committed: Sat Jan 14 19:14:42 2017 +0800

--
 .../src/main/java/org/apache/kylin/common/KylinConfigBase.java   | 4 
 .../java/org/apache/kylin/engine/mr/common/BatchConstants.java   | 1 -
 .../org/apache/kylin/engine/mr/steps/BaseCuboidMapperBase.java   | 2 +-
 .../kylin/engine/mr/steps/FactDistinctColumnsMapperBase.java | 2 +-
 4 files changed, 6 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/8d374f84/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 494c641..d6774ff 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -423,6 +423,10 @@ abstract public class KylinConfigBase implements 
Serializable {
 return Integer.parseInt(getOptional("kylin.job.scheduler.default", 
"0"));
 }
 
+public Integer getErrorRecordThreshold() {
+return 
Integer.parseInt(getOptional("kylin.job.error-record-threshold", "0"));
+}
+
 // 

 // SOURCE.HIVE
 // 


http://git-wip-us.apache.org/repos/asf/kylin/blob/8d374f84/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
index 078d80f..0281539 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
@@ -80,7 +80,6 @@ public interface BatchConstants {
  */
 String MAPREDUCE_COUNTER_GROUP_NAME = "Cube Builder";
 int NORMAL_RECORD_LOG_THRESHOLD = 10;
-int ERROR_RECORD_LOG_THRESHOLD = 100;
 
 /**
  * dictionaries builder class

http://git-wip-us.apache.org/repos/asf/kylin/blob/8d374f84/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/BaseCuboidMapperBase.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/BaseCuboidMapperBase.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/BaseCuboidMapperBase.java
index d08e29a..93e413b 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/BaseCuboidMapperBase.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/BaseCuboidMapperBase.java
@@ -87,7 +87,7 @@ abstract public class BaseCuboidMapperBase 
extends KylinMapper BatchConstants.ERROR_RECORD_LOG_THRESHOLD) {
+if (errorRecordCounter > 
cubeSegment.getConfig().getErrorRecordThreshold()) {
 if (ex instanceof IOException)
 throw (IOException) ex;
 else if (ex instanceof RuntimeException)

http://git-wip-us.apache.org/repos/asf/kylin/blob/8d374f84/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsMapperBase.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsMapperBase.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsMapperBase.java
index 74aebb0..34624e3 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsMapperBase.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/FactDistinctColumnsMapperBase.java
@@ -105,7 +105,7 @@ abstract public class FactDistinctColumnsMapperBase extends Kyli
 ex.printStackTrace(System.err);
 
 errorRecordCounter++;
-if (errorRecordCounter > BatchConstants.ERROR_RECORD_LOG_THRESHOLD) {
+if (errorRecordCounter > 
cubeSeg.getConfig().getErrorR

kylin git commit: KYLIN-2304 minor, fix variable name error

2017-01-14 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 8d374f843 -> e79a55d94


KYLIN-2304 minor, fix variable name error


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/e79a55d9
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/e79a55d9
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/e79a55d9

Branch: refs/heads/master
Commit: e79a55d94c6c45c315f991b8a8e6f606a6b2c25e
Parents: 8d374f8
Author: kangkaisen 
Authored: Sat Jan 14 19:31:55 2017 +0800
Committer: kangkaisen 
Committed: Sat Jan 14 19:31:55 2017 +0800

--
 .../src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/e79a55d9/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
index 80403cc..b797167 100644
--- 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
+++ 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
@@ -1191,7 +1191,7 @@ public class AppendTrieDictionary extends 
CacheDictionary {
 
 // init new AppendTrieDictionary
 AppendTrieDictionary newDict = new AppendTrieDictionary();
-
newDict.initParams(baseDir.replaceFirst(srcConfig.getHdfsWorkingDirectory(), 
dstConfig.getHdfsWorkingDirectory()), baseId, maxId, maxValueLength, nValues, 
bytesConverter);
+
newDict.initParams(baseDir.replaceFirst(srcConfig.getHdfsWorkingDirectory(), 
dstConfig.getHdfsWorkingDirectory()), baseId, maxId, maxValueLength, nValues, 
bytesConvert);
 newDict.initDictSliceMap((CachedTreeMap) dictSliceMap);
 
 return newDict;



kylin git commit: KYLIN-2389 Improve resource utilization for DistributedScheduler

2017-01-18 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master e89446500 -> 837bd8200


KYLIN-2389 Improve resource utilization for DistributedScheduler


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/837bd820
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/837bd820
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/837bd820

Branch: refs/heads/master
Commit: 837bd8200b250f38fcfb2d221764d5aca0c66403
Parents: e894465
Author: kangkaisen 
Authored: Fri Jan 13 19:58:41 2017 +0800
Committer: kangkaisen 
Committed: Wed Jan 18 16:14:24 2017 +0800

--
 .../impl/threadpool/DistributedScheduler.java   |  8 +--
 .../kylin/job/lock/DistributedJobLock.java  |  2 +
 .../apache/kylin/rest/service/JobService.java   | 45 --
 .../hbase/util/ZookeeperDistributedJobLock.java | 63 
 4 files changed, 58 insertions(+), 60 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/837bd820/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
--
diff --git 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
index 3436529..84e62d5 100644
--- 
a/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
+++ 
b/core-job/src/main/java/org/apache/kylin/job/impl/threadpool/DistributedScheduler.java
@@ -195,13 +195,13 @@ public class DistributedScheduler implements 
Scheduler, Conn
 }
 }
 
-//release job lock only when the all tasks of the job finish and the 
job server keep the cube lock.
+//release job lock when job state is ready or running and the job 
server keep the cube lock.
 private void releaseJobLock(AbstractExecutable executable) {
 if (executable instanceof DefaultChainedExecutable) {
 String segmentId = executable.getParam(SEGMENT_ID);
 ExecutableState state = executable.getStatus();
 
-if (state == ExecutableState.SUCCEED || state == 
ExecutableState.ERROR || state == ExecutableState.DISCARDED) {
+if (state != ExecutableState.READY && state != 
ExecutableState.RUNNING) {
 if (segmentWithLocks.contains(segmentId)) {
 logger.info(executable.toString() + " will release the 
lock for the segment: " + segmentId);
 jobLock.unlockWithName(segmentId);
@@ -232,7 +232,7 @@ public class DistributedScheduler implements 
Scheduler, Conn
 if (executable instanceof DefaultChainedExecutable && 
executable.getParams().get(SEGMENT_ID).equalsIgnoreCase(segmentId) && 
!nodeData.equalsIgnoreCase(serverName)) {
 try {
 logger.warn(nodeData + " has released the lock 
for: " + segmentId + " but the job still running. so " + serverName + " resume 
the job");
-if (jobLock.lockWithName(segmentId, serverName)) {
+if (!jobLock.isHasLocked(segmentId)) {
 
executableManager.resumeRunningJobForce(executable.getId());
 fetcherPool.schedule(fetcher, 0, 
TimeUnit.SECONDS);
 break;
@@ -302,7 +302,7 @@ public class DistributedScheduler implements 
Scheduler, Conn
 AbstractExecutable executable = executableManager.getJob(id);
 if (output.getState() == ExecutableState.RUNNING && executable 
instanceof DefaultChainedExecutable) {
 try {
-if (jobLock.lockWithName(executable.getParam(SEGMENT_ID), 
serverName)) {
+if (!jobLock.isHasLocked(executable.getParam(SEGMENT_ID))) 
{
 
executableManager.resumeRunningJobForce(executable.getId());
 fetcherPool.schedule(fetcher, 0, TimeUnit.SECONDS);
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/837bd820/core-job/src/main/java/org/apache/kylin/job/lock/DistributedJobLock.java
--
diff --git 
a/core-job/src/main/java/org/apache/kylin/job/lock/DistributedJobLock.java 
b/core-job/src/main/java/org/apache/kylin/job/lock/DistributedJobLock.java
index 9335e56..1c173ec 100644
--- a/core-job/src/main/java/org/apache/kylin/job/lock/DistributedJobLock.java
+++ b/core-job/src/main/java/org/apache/kylin/job/lock/DistributedJobLock.java
@@ -24,6 +24,8 @@ public interface DistributedJobLock extends JobLock {
 
 boolean lock

kylin git commit: KYLIN-2242 write multiple files in FactDistinctColumnsReducer with MultipleOutputs

2017-01-21 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master c2229c9c7 -> 7de8aa120


KYLIN-2242 write multiple files in FactDistinctColumnsReducer with 
MultipleOutputs


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/7de8aa12
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/7de8aa12
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/7de8aa12

Branch: refs/heads/master
Commit: 7de8aa1203a72bad105ed692f7100535939b03af
Parents: c2229c9
Author: kangkaisen 
Authored: Sat Dec 17 14:12:48 2016 +0800
Committer: kangkaisen 
Committed: Sat Jan 21 23:19:50 2017 +0800

--
 .../apache/kylin/common/util/HadoopUtil.java|  16 ++
 .../kylin/engine/mr/JobBuilderSupport.java  |   2 +-
 .../kylin/engine/mr/common/BatchConstants.java  |   9 +-
 .../engine/mr/steps/CreateDictionaryJob.java|  43 ++--
 .../engine/mr/steps/FactDistinctColumnsJob.java |  32 ++-
 .../mr/steps/FactDistinctColumnsReducer.java| 240 +++
 .../engine/mr/steps/SaveStatisticsStep.java |  10 +-
 .../mr/steps/UpdateCubeInfoAfterBuildStep.java  |  10 +-
 8 files changed, 175 insertions(+), 187 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/7de8aa12/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java 
b/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
index bdc4c3e..b9ffe38 100644
--- a/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
+++ b/core-common/src/main/java/org/apache/kylin/common/util/HadoopUtil.java
@@ -26,8 +26,10 @@ import java.net.URISyntaxException;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.fs.PathFilter;
 import org.apache.hadoop.io.Writable;
 import org.apache.kylin.common.KylinConfig;
 import org.slf4j.Logger;
@@ -140,4 +142,18 @@ public class HadoopUtil {
 }
 }
 
+public static Path getFilterOnlyPath(FileSystem fs, Path baseDir, final 
String filter) throws IOException {
+FileStatus[] fileStatus = fs.listStatus(baseDir, new PathFilter() {
+@Override
+public boolean accept(Path path) {
+return path.getName().startsWith(filter);
+}
+});
+
+if (fileStatus.length == 1) {
+return fileStatus[0].getPath();
+} else {
+return null;
+}
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/7de8aa12/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
index 696b22a..c34a904 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
@@ -171,7 +171,7 @@ public class JobBuilderSupport {
 }
 
 public String getStatisticsPath(String jobId) {
-return getRealizationRootPath(jobId) + "/statistics";
+return getRealizationRootPath(jobId) + "/fact_distinct_columns/" + 
BatchConstants.CFG_OUTPUT_STATISTICS;
 }
 
 // 


http://git-wip-us.apache.org/repos/asf/kylin/blob/7de8aa12/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
index 0281539..602b4bb 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/BatchConstants.java
@@ -53,9 +53,16 @@ public interface BatchConstants {
 String CFG_STATISTICS_ENABLED = "statistics.enabled";
 String CFG_STATISTICS_OUTPUT = "statistics.ouput";//spell error, for 
compatibility issue better not change it
 String CFG_STATISTICS_SAMPLING_PERCENT = "statistics.sampling.percent";
-String CFG_STATISTICS_CUBE_ESTIMATION_FILENAME = "cube_statistics.txt";
 String CFG_STATISTICS_CUBOID_ESTIMATION_FILENAME = "cuboid_statistics.seq";
 
+String CFG_MAPRED_OUTPUT_COMPRESS = "mapred.output.compress&quo

kylin git commit: KYLIN-2433 Fix NPE in MergeCuboidMapper

2017-02-07 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 6d11dd1d2 -> b32cc9545


KYLIN-2433 Fix NPE in MergeCuboidMapper


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b32cc954
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b32cc954
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b32cc954

Branch: refs/heads/master
Commit: b32cc9545a76657570c4a3353469ded43892c772
Parents: 6d11dd1
Author: kangkaisen 
Authored: Fri Feb 3 14:00:50 2017 +0800
Committer: kangkaisen 
Committed: Tue Feb 7 17:20:30 2017 +0800

--
 .../apache/kylin/engine/mr/steps/MergeCuboidMapper.java   | 10 ++
 1 file changed, 10 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/b32cc954/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
index 047e2b1..acf1403 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
@@ -129,6 +129,11 @@ public class MergeCuboidMapper extends KylinMapper {
 List columns = 
measureType.getColumnsNeedDictionary(measureDesc.getFunction());
 boolean needReEncode = false;
 for (TblColRef col : columns) {
+//handle the column that all records is null
+if (sourceCubeSegment.getDictionary(col) == null) {
+continue;
+}
+
 if 
(!sourceCubeSegment.getDictionary(col).equals(mergedCubeSegment.getDictionary(col)))
 {
 oldDicts.put(col, sourceCubeSegment.getDictionary(col));
 newDicts.put(col, mergedCubeSegment.getDictionary(col));
@@ -249,6 +254,11 @@ public class MergeCuboidMapper extends KylinMapper {
 }
 
 private Boolean checkNeedMerging(TblColRef col) throws IOException {
+//handle the column that all records is null
+if (sourceCubeSegment.getDictionary(col) == null) {
+return false;
+}
+
 Boolean ret = dimensionsNeedDict.get(col);
 if (ret != null)
 return ret;



kylin git commit: KYLIN-2430 Get exitCode form FsShell.run in BulkLoadJob

2017-02-07 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master eee9ecbcb -> 7b860adb0


KYLIN-2430 Get exitCode form FsShell.run in BulkLoadJob


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/7b860adb
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/7b860adb
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/7b860adb

Branch: refs/heads/master
Commit: 7b860adb0a23b53d6e2e40337f4317a3a2b067ba
Parents: eee9ecb
Author: kangkaisen 
Authored: Tue Feb 7 17:35:48 2017 +0800
Committer: kangkaisen 
Committed: Tue Feb 7 17:40:39 2017 +0800

--
 .../kylin/storage/hbase/steps/BulkLoadJob.java | 17 -
 1 file changed, 12 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/7b860adb/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
--
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
index 1c05767..30616c5 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/steps/BulkLoadJob.java
@@ -55,11 +55,18 @@ public class BulkLoadJob extends AbstractHadoopJob {
 
 Configuration conf = HBaseConnection.getCurrentHBaseConfiguration();
 FsShell shell = new FsShell(conf);
-try {
-shell.run(new String[] { "-chmod", "-R", "777", input });
-} catch (Exception e) {
-logger.error("Couldn't change the file permissions ", e);
-throw new IOException(e);
+
+int exitCode = -1;
+int retryCount = 10;
+while (exitCode != 0 && retryCount >= 1) {
+exitCode = shell.run(new String[] { "-chmod", "-R", "777", input 
});
+retryCount--;
+Thread.sleep(5000);
+}
+
+if (exitCode != 0) {
+logger.error("Failed to change the file permissions: " + input);
+throw new IOException("Failed to change the file permissions: " + 
input);
 }
 
 String[] newArgs = new String[2];



kylin git commit: KYLIN-2388 Hot load kylin config from web

2017-02-07 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 7b860adb0 -> 39afa5197


KYLIN-2388 Hot load kylin config from web


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/39afa519
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/39afa519
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/39afa519

Branch: refs/heads/master
Commit: 39afa5197e197d5143843a3bb62c528749b03418
Parents: 7b860ad
Author: kangkaisen 
Authored: Thu Jan 12 14:35:59 2017 +0800
Committer: kangkaisen 
Committed: Tue Feb 7 19:57:29 2017 +0800

--
 .../org/apache/kylin/common/KylinConfig.java|  6 +-
 .../apache/kylin/common/KylinConfigTest.java| 28 -
 .../util/HotLoadKylinPropertiesTestCase.java| 64 
 .../kylin/cube/CubeSpecificConfigTest.java  | 37 ++-
 .../apache/kylin/job/JobEngineConfigTest.java   | 47 ++
 .../kylin/rest/controller/CacheController.java  |  9 ++-
 webapp/app/js/controllers/admin.js  | 26 
 webapp/app/js/services/cache.js |  3 +-
 webapp/app/partials/admin/admin.html|  3 +
 9 files changed, 191 insertions(+), 32 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/39afa519/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
--
diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
index 0f40654..c7a18c6 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
@@ -201,7 +201,7 @@ public class KylinConfig extends KylinConfigBase {
 return kylinHome + File.separator + "conf";
 }
 
-static File getKylinPropertiesFile() {
+public static File getKylinPropertiesFile() {
 String kylinConfHome = System.getProperty(KYLIN_CONF);
 if (!StringUtils.isEmpty(kylinConfHome)) {
 logger.info("Use KYLIN_CONF=" + kylinConfHome);
@@ -385,4 +385,8 @@ public class KylinConfig extends KylinConfigBase {
 //}
 //logger.info(buf.toString());
 }
+
+public synchronized void hotLoadKylinProperties() {
+reloadKylinConfig(getKylinProperties());
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/39afa519/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java
--
diff --git 
a/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java 
b/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java
index a426fc6..4d5f130 100644
--- a/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java
+++ b/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java
@@ -26,24 +26,12 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.Map;
 
-import org.apache.kylin.common.util.LocalFileMetadataTestCase;
-import org.junit.After;
-import org.junit.Before;
+import org.apache.kylin.common.util.HotLoadKylinPropertiesTestCase;
 import org.junit.Test;
 
 import com.google.common.collect.Maps;
 
-public class KylinConfigTest extends LocalFileMetadataTestCase {
-@Before
-public void setUp() throws Exception {
-this.createTestMetadata();
-}
-
-@After
-public void after() throws Exception {
-this.cleanupTestMetadata();
-}
-
+public class KylinConfigTest extends HotLoadKylinPropertiesTestCase{
 @Test
 public void testMRConfigOverride() {
 KylinConfig config = KylinConfig.getInstanceFromEnv();
@@ -78,9 +66,19 @@ public class KylinConfigTest extends 
LocalFileMetadataTestCase {
 KylinConfig config = KylinConfig.getInstanceFromEnv();
 Map override = Maps.newHashMap();
 KylinConfig configExt = KylinConfigExt.createInstance(config, 
override);
-
 assertTrue(config.properties == configExt.properties);
 config.setProperty("1234", "1234");
 assertEquals("1234", configExt.getOptional("1234"));
 }
+
+@Test
+public void testPropertiesHotLoad() {
+KylinConfig config = KylinConfig.getInstanceFromEnv();
+assertEquals("who...@kylin.apache.org", config.getKylinOwner());
+
+updateProperty("kylin.storage.hbase.owner-tag", 
"ky...@kylin.apache.org");
+KylinConfig.getInstanceFromEnv().hotLoadKylinProperties();
+
+assertEquals("ky...@kylin.apache.org", config.getKylinOwner());
+}
 }

http://git-wip-us.apache.org/repos/asf/kylin/b

kylin git commit: KYLIN-2377 Add kylin client query timeout

2017-02-07 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 0dcce15f7 -> 8263752a4


KYLIN-2377 Add kylin client query timeout


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/8263752a
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/8263752a
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/8263752a

Branch: refs/heads/master
Commit: 8263752a499158342e0588fda851a4006e8b1669
Parents: 0dcce15
Author: kangkaisen 
Authored: Tue Jan 10 14:02:18 2017 +0800
Committer: kangkaisen 
Committed: Wed Feb 8 15:51:30 2017 +0800

--
 .../org/apache/kylin/common/KylinConfigBase.java|  4 
 .../java/org/apache/kylin/cube/CubeInstance.java|  1 +
 .../kylin/metadata/realization/IRealization.java|  5 -
 .../org/apache/kylin/storage/StorageContext.java| 16 +++-
 .../storage/gtrecord/GTCubeStorageQueryBase.java|  2 ++
 .../gtrecord/SequentialCubeTupleIterator.java   |  5 +
 .../apache/kylin/storage/hybrid/HybridInstance.java |  1 +
 7 files changed, 32 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/8263752a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index fe15b1e..ebd9dfc 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -877,6 +877,10 @@ abstract public class KylinConfigBase implements 
Serializable {
 return udfMap;
 }
 
+public int getQueryTimeoutSeconds() {
+return 
Integer.parseInt(this.getOptional("kylin.query.timeout-seconds", "0"));
+}
+
 // 

 // SERVER
 // 


http://git-wip-us.apache.org/repos/asf/kylin/blob/8263752a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java
--
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java 
b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java
index 1d60575..fb9a7a7 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java
@@ -178,6 +178,7 @@ public class CubeInstance extends RootPersistentEntity 
implements IRealization,
 return sizeRecordSize;
 }
 
+@Override
 public KylinConfig getConfig() {
 return config;
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/8263752a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java
index a0243f4..aafc0f0 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/realization/IRealization.java
@@ -21,6 +21,7 @@ package org.apache.kylin.metadata.realization;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.metadata.model.ColumnDesc;
 import org.apache.kylin.metadata.model.DataModelDesc;
 import org.apache.kylin.metadata.model.IStorageAware;
@@ -42,7 +43,7 @@ public interface IRealization extends IStorageAware {
 public DataModelDesc getModel();
 
 public Set getAllColumns();
-
+
 public Set getAllColumnDescs();
 
 public List getAllDimensions();
@@ -60,4 +61,6 @@ public interface IRealization extends IStorageAware {
 public long getDateRangeEnd();
 
 public boolean supportsLimitPushDown();
+
+public KylinConfig getConfig();
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/8263752a/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
--
diff --git 
a/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java 
b/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
index ec46f83..ab0ea73 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
@@ -41,6 +41,7 @@ public class StorageContext {
 private int finalPushDownLimit = Integer.

kylin git commit: Fix bug in static init of DataType to pass ExtendedColumnSerializerTest UT

2017-02-08 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master df3ecd324 -> 570ab42a9


Fix bug in static init of DataType to pass ExtendedColumnSerializerTest UT


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/570ab42a
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/570ab42a
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/570ab42a

Branch: refs/heads/master
Commit: 570ab42a9b7597ce85b17202b67cd0ea5403cba4
Parents: df3ecd3
Author: kangkaisen 
Authored: Wed Feb 8 21:25:37 2017 +0800
Committer: kangkaisen 
Committed: Wed Feb 8 21:38:00 2017 +0800

--
 .../main/java/org/apache/kylin/metadata/datatype/DataType.java| 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/570ab42a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
index b726c5f..d3756b8 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
@@ -114,7 +114,8 @@ public class DataType implements Serializable {
 public static final DataType ANY = DataType.getType("any");
 
 static {
-MeasureTypeFactory.init();
+//to ensure the MeasureTypeFactory class has initialized
+MeasureTypeFactory.getUDAFs();
 }
 
 public static DataType getType(String type) {



kylin git commit: KYLIN-2308 bug fix and improve user experience

2017-02-08 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 7742b31d8 -> 1e9f0908b


KYLIN-2308 bug fix and improve user experience


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1e9f0908
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1e9f0908
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1e9f0908

Branch: refs/heads/master
Commit: 1e9f0908b9942113bbd251dc5eeba71973cc77e1
Parents: 7742b31
Author: kangkaisen 
Authored: Thu Feb 9 12:06:56 2017 +0800
Committer: kangkaisen 
Committed: Thu Feb 9 15:54:01 2017 +0800

--
 webapp/app/js/controllers/cubeAdvanceSetting.js | 36 ++--
 webapp/app/js/controllers/cubeSchema.js |  8 +
 .../cubeDesigner/advanced_settings.html |  2 +-
 3 files changed, 43 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1e9f0908/webapp/app/js/controllers/cubeAdvanceSetting.js
--
diff --git a/webapp/app/js/controllers/cubeAdvanceSetting.js 
b/webapp/app/js/controllers/cubeAdvanceSetting.js
index 39d36b0..7cdb1cd 100644
--- a/webapp/app/js/controllers/cubeAdvanceSetting.js
+++ b/webapp/app/js/controllers/cubeAdvanceSetting.js
@@ -342,12 +342,44 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function 
($scope, $modal,cubeConfi
 return assignedMeasures;
   };
 
-  if ($scope.getAllMeasureNames().length != 
$scope.getAssignedMeasureNames().length) {
+  $scope.rmDeprecatedMeasureNames = function () {
+var allMeasureNames = $scope.getAllMeasureNames();
+var tmpColumnFamily = $scope.cubeMetaFrame.hbase_mapping.column_family;
+
+angular.forEach($scope.cubeMetaFrame.hbase_mapping.column_family, function 
(colFamily,index1) {
+  angular.forEach(colFamily.columns[0].measure_refs, function 
(measureName, index2) {
+var allIndex = allMeasureNames.indexOf(measureName);
+if (allIndex == -1) {
+  tmpColumnFamily[index1].columns[0].measure_refs.splice(index2, 1);
+}
+
+if (tmpColumnFamily[index1].columns[0].measure_refs == 0) {
+  tmpColumnFamily.splice(index1, 1);
+}
+  });
+});
+
+$scope.cubeMetaFrame.hbase_mapping.column_family = tmpColumnFamily;
+  };
+
+  if ($scope.getAssignedMeasureNames().length == 0) {
 $scope.initColumnFamily();
+  } else {
+$scope.rmDeprecatedMeasureNames();
+if ($scope.getAllMeasureNames().length > 
$scope.getAssignedMeasureNames().length) {
+  $scope.initColumnFamily();
+}
   }
 
-
   $scope.addColumnFamily = function () {
+var isCFEmpty = _.some($scope.cubeMetaFrame.hbase_mapping.column_family, 
function(colFamily) {
+  return colFamily.columns[0].measure_refs.length == 0;
+});
+
+if (isCFEmpty === true) {
+  return;
+}
+
 var colFamily = 
$scope.newColFamily($scope.cubeMetaFrame.hbase_mapping.column_family.length + 
1);
 $scope.cubeMetaFrame.hbase_mapping.column_family.push(colFamily);
   };

http://git-wip-us.apache.org/repos/asf/kylin/blob/1e9f0908/webapp/app/js/controllers/cubeSchema.js
--
diff --git a/webapp/app/js/controllers/cubeSchema.js 
b/webapp/app/js/controllers/cubeSchema.js
index 17371f2..4beeebe 100755
--- a/webapp/app/js/controllers/cubeSchema.js
+++ b/webapp/app/js/controllers/cubeSchema.js
@@ -287,6 +287,14 @@ KylinApp.controller('CubeSchemaCtrl', function ($scope, 
QueryService, UserServic
   errors.push("All measures need to be assigned to column family");
 }
 
+var isCFEmpty = 
_.some($scope.cubeMetaFrame.hbase_mapping.column_family, function(colFamily) {
+  return colFamily.columns[0].measure_refs.length == 0;
+});
+
+if (isCFEmpty == true) {
+  errors.push("Each column family can't not be empty");
+}
+
 
 var errorInfo = "";
 angular.forEach(errors,function(item){

http://git-wip-us.apache.org/repos/asf/kylin/blob/1e9f0908/webapp/app/partials/cubeDesigner/advanced_settings.html
--
diff --git a/webapp/app/partials/cubeDesigner/advanced_settings.html 
b/webapp/app/partials/cubeDesigner/advanced_settings.html
index bf95256..f26722b 100755
--- a/webapp/app/partials/cubeDesigner/advanced_settings.html
+++ b/webapp/app/partials/cubeDesigner/advanced_settings.html
@@ -453,7 +453,7 @@
 
  

-   
+   
  

  



kylin git commit: KYLIN-2316 Global dict couldn't be used for dimension column

2017-02-09 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 7fa25e0fa -> 3ee49467c


KYLIN-2316 Global dict couldn't be used for dimension column


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/3ee49467
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/3ee49467
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/3ee49467

Branch: refs/heads/master
Commit: 3ee49467ce686d11afcecbc636bb5213b0927427
Parents: 7fa25e0
Author: kangkaisen 
Authored: Thu Feb 9 19:54:26 2017 +0800
Committer: kangkaisen 
Committed: Thu Feb 9 20:28:17 2017 +0800

--
 .../kylin/cube/model/validation/rule/DictionaryRule.java |  9 +
 .../cube/model/validation/rule/DictionaryRuleTest.java   | 11 +--
 2 files changed, 18 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/3ee49467/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java
--
diff --git 
a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java
 
b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java
index 37889c2..8da3ca0 100644
--- 
a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java
+++ 
b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java
@@ -29,6 +29,7 @@ import org.apache.kylin.cube.model.DictionaryDesc;
 import org.apache.kylin.cube.model.validation.IValidatorRule;
 import org.apache.kylin.cube.model.validation.ResultLevel;
 import org.apache.kylin.cube.model.validation.ValidateContext;
+import org.apache.kylin.dict.GlobalDictionaryBuilder;
 import org.apache.kylin.metadata.model.TblColRef;
 
 /**
@@ -45,10 +46,13 @@ public class DictionaryRule implements 
IValidatorRule {
 static final String ERROR_REUSE_BUILDER_BOTH_SET = "REUSE and BUILDER both 
set on dictionary for column: ";
 static final String ERROR_REUSE_BUILDER_BOTH_EMPTY = "REUSE and BUILDER 
both empty on dictionary for column: ";
 static final String ERROR_TRANSITIVE_REUSE = "Transitive REUSE is not 
allowed for dictionary: ";
+static final String ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE = "Global 
dictionary couldn't be used for dimension column: ";
 
 @Override
 public void validate(CubeDesc cubeDesc, ValidateContext context) {
 List dictDescs = cubeDesc.getDictionaries();
+Set dimensionColumns = 
cubeDesc.listDimensionColumnsIncludingDerived();
+
 if (dictDescs == null || dictDescs.isEmpty()) {
 return;
 }
@@ -78,6 +82,11 @@ public class DictionaryRule implements 
IValidatorRule {
 return;
 }
 
+if (StringUtils.isNotEmpty(builderClass) && 
builderClass.equalsIgnoreCase(GlobalDictionaryBuilder.class.getName()) && 
dimensionColumns.contains(dictCol)) {
+context.addResult(ResultLevel.ERROR, 
ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE + dictCol);
+return;
+}
+
 if (reuseCol != null) {
 reuseDictionaries.add(dictDesc);
 } else {

http://git-wip-us.apache.org/repos/asf/kylin/blob/3ee49467/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java
--
diff --git 
a/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java
 
b/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java
index 452768f..fcb723e 100644
--- 
a/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java
+++ 
b/core-cube/src/test/java/org/apache/kylin/cube/model/validation/rule/DictionaryRuleTest.java
@@ -19,6 +19,7 @@
 package org.apache.kylin.cube.model.validation.rule;
 
 import static 
org.apache.kylin.cube.model.validation.rule.DictionaryRule.ERROR_DUPLICATE_DICTIONARY_COLUMN;
+import static 
org.apache.kylin.cube.model.validation.rule.DictionaryRule.ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE;
 import static 
org.apache.kylin.cube.model.validation.rule.DictionaryRule.ERROR_REUSE_BUILDER_BOTH_EMPTY;
 import static 
org.apache.kylin.cube.model.validation.rule.DictionaryRule.ERROR_REUSE_BUILDER_BOTH_SET;
 import static 
org.apache.kylin.cube.model.validation.rule.DictionaryRule.ERROR_TRANSITIVE_REUSE;
@@ -91,10 +92,16 @@ public class DictionaryRuleTest extends 
LocalFileMetadataTestCase {
 DictionaryDesc.create("lstg_site_id", "SELLER_ID", null),
 DictionaryDesc.create("price", "lstg_site_id", null)

kylin git commit: minor, UHCReducerCount change back to 3 by default to make IT cover KYLIN-2135

2017-02-10 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master e09338b34 -> edf6cef15


minor, UHCReducerCount change back to 3 by default to make IT cover KYLIN-2135


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/edf6cef1
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/edf6cef1
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/edf6cef1

Branch: refs/heads/master
Commit: edf6cef15753eae8675e9f2f4cf4ba5c7fb4e513
Parents: e09338b
Author: kangkaisen 
Authored: Fri Feb 10 17:36:51 2017 +0800
Committer: kangkaisen 
Committed: Fri Feb 10 17:36:51 2017 +0800

--
 .../src/main/java/org/apache/kylin/common/KylinConfigBase.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/edf6cef1/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 81f0187..894e28a 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -746,7 +746,7 @@ abstract public class KylinConfigBase implements 
Serializable {
 
 //UHC: ultra high cardinality columns, contain the ShardByColumns and the 
GlobalDictionaryColumns
 public int getUHCReducerCount() {
-return 
Integer.parseInt(getOptional("kylin.engine.mr.uhc-reducer-count", "1"));
+return 
Integer.parseInt(getOptional("kylin.engine.mr.uhc-reducer-count", "3"));
 }
 
 public boolean isBuildDictInReducerEnabled() {



kylin git commit: KYLIN-2446 Support project names filter in DeployCoprocessorCLI

2017-02-14 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master e2ff7842e -> 69f898482


KYLIN-2446 Support project names filter in DeployCoprocessorCLI


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/69f89848
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/69f89848
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/69f89848

Branch: refs/heads/master
Commit: 69f898482499d530dddeb35b3327f65a50899dd5
Parents: e2ff784
Author: kangkaisen 
Authored: Tue Feb 14 17:25:44 2017 +0800
Committer: kangkaisen 
Committed: Tue Feb 14 17:43:14 2017 +0800

--
 .../hbase/util/DeployCoprocessorCLI.java| 40 +++-
 1 file changed, 39 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/69f89848/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/DeployCoprocessorCLI.java
--
diff --git 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/DeployCoprocessorCLI.java
 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/DeployCoprocessorCLI.java
index e72859d..29c738e 100644
--- 
a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/DeployCoprocessorCLI.java
+++ 
b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/DeployCoprocessorCLI.java
@@ -54,7 +54,11 @@ import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.metadata.model.SegmentStatusEnum;
+import org.apache.kylin.metadata.project.ProjectInstance;
+import org.apache.kylin.metadata.project.ProjectManager;
+import org.apache.kylin.metadata.project.RealizationEntry;
 import org.apache.kylin.metadata.realization.IRealizationConstants;
+import org.apache.kylin.metadata.realization.RealizationType;
 import org.apache.kylin.storage.hbase.HBaseConnection;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -102,11 +106,14 @@ public class DeployCoprocessorCLI {
 tableNames = filterByTables(tableNames, 
Arrays.asList(args).subList(2, args.length));
 } else if (filterType.equals("-cube")) {
 tableNames = filterByCubes(tableNames, 
Arrays.asList(args).subList(2, args.length));
+} else if (filterType.equals("-project")) {
+tableNames = filterByProjects(tableNames, 
Arrays.asList(args).subList(2, args.length));
 } else if (!filterType.equals("all")) {
 printUsageAndExit();
 }
 
 logger.info("Will execute tables " + tableNames);
+long start = System.currentTimeMillis();
 
 Set oldJarPaths = getCoprocessorJarPaths(hbaseAdmin, 
tableNames);
 logger.info("Old coprocessor jar: " + oldJarPaths);
@@ -121,16 +128,47 @@ public class DeployCoprocessorCLI {
 
 hbaseAdmin.close();
 
+logger.info("Processed time: " + (System.currentTimeMillis() - start));
 logger.info("Processed tables count: " + processedTables.size());
 logger.info("Processed tables: " + processedTables);
 logger.info("Active coprocessor jar: " + hdfsCoprocessorJar);
 }
 
 private static void printUsageAndExit() {
-logger.info("Probe run, exiting. Append argument 'all' or specific 
tables/cubes to execute.");
+logger.info("Usage: ");
+logger.info("$KYLIN_HOME/bin/kylin.sh  
org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI 
$KYLIN_HOME/lib/kylin-coprocessor-*.jar all");
+logger.info("$KYLIN_HOME/bin/kylin.sh  
org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI 
$KYLIN_HOME/lib/kylin-coprocessor-*.jar -table tableName1 tableName2 ...");
+logger.info("$KYLIN_HOME/bin/kylin.sh  
org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI 
$KYLIN_HOME/lib/kylin-coprocessor-*.jar -cube cubeName1 cubeName2 ... ");
+logger.info("$KYLIN_HOME/bin/kylin.sh  
org.apache.kylin.storage.hbase.util.DeployCoprocessorCLI 
$KYLIN_HOME/lib/kylin-coprocessor-*.jar -project projectName1 projectName2 
...");
 System.exit(0);
 }
 
+private static List filterByProjects(List allTableNames, 
List projectNames) {
+ProjectManager projectManager = 
ProjectManager.getInstance(KylinConfig.getInstanceFromEnv());
+CubeManager cubeManager = 
CubeManager.getInstance(KylinConfig.getInstanceFromEnv());
+
+List result = Lists.newArrayList();
+for (String p : projectNames) {
+p = p.trim();
+if (p.endsWith(",")) {
+p = p.substring(0, p.length() - 1);
+}
+
+ProjectInstance 

kylin git commit: KYLIN-2433 Handle the column that all records is null in MergeCuboidMapper

2017-02-14 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/master 69f898482 -> a5326fcb5


KYLIN-2433 Handle the column that all records is null in MergeCuboidMapper


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/a5326fcb
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/a5326fcb
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/a5326fcb

Branch: refs/heads/master
Commit: a5326fcb5a670970ee20b08486a77ec02dcf5c66
Parents: 69f8984
Author: kangkaisen 
Authored: Tue Feb 14 11:29:23 2017 +0800
Committer: kangkaisen 
Committed: Tue Feb 14 17:50:26 2017 +0800

--
 .../kylin/engine/mr/steps/MergeCuboidMapper.java| 16 ++--
 1 file changed, 10 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/a5326fcb/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
index acf1403..fccd48a 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/MergeCuboidMapper.java
@@ -191,9 +191,18 @@ public class MergeCuboidMapper extends KylinMapper {
 if (this.checkNeedMerging(col)) {
 // if dictionary on fact table column, needs rewrite
 DictionaryManager dictMgr = 
DictionaryManager.getInstance(config);
-Dictionary sourceDict = 
dictMgr.getDictionary(sourceCubeSegment.getDictResPath(col));
 Dictionary mergedDict = 
dictMgr.getDictionary(mergedCubeSegment.getDictResPath(col));
 
+Dictionary sourceDict;
+// handle the column that all records is null
+if (sourceCubeSegment.getDictionary(col) == null) {
+BytesUtil.writeUnsigned(mergedDict.nullId(), 
newKeyBodyBuf, bufOffset, mergedDict.getSizeOfId());
+bufOffset += mergedDict.getSizeOfId();
+continue;
+} else {
+sourceDict = 
dictMgr.getDictionary(sourceCubeSegment.getDictResPath(col));
+}
+
 while (sourceDict.getSizeOfValue() > newKeyBodyBuf.length - 
bufOffset || //
 mergedDict.getSizeOfValue() > newKeyBodyBuf.length - 
bufOffset || //
 mergedDict.getSizeOfId() > newKeyBodyBuf.length - 
bufOffset) {
@@ -254,11 +263,6 @@ public class MergeCuboidMapper extends KylinMapper {
 }
 
 private Boolean checkNeedMerging(TblColRef col) throws IOException {
-//handle the column that all records is null
-if (sourceCubeSegment.getDictionary(col) == null) {
-return false;
-}
-
 Boolean ret = dimensionsNeedDict.get(col);
 if (ret != null)
 return ret;



[1/3] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-03-13 Thread kangkaisen
Repository: kylin
Updated Branches:
  refs/heads/KYLIN-2506 [created] ee3f8e6e0


http://git-wip-us.apache.org/repos/asf/kylin/blob/ee3f8e6e/core-dictionary/src/test/java/org/apache/kylin/dict/CachedTreeMapTest.java
--
diff --git 
a/core-dictionary/src/test/java/org/apache/kylin/dict/CachedTreeMapTest.java 
b/core-dictionary/src/test/java/org/apache/kylin/dict/CachedTreeMapTest.java
deleted file mode 100644
index 3c29d9c..000
--- a/core-dictionary/src/test/java/org/apache/kylin/dict/CachedTreeMapTest.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-package org.apache.kylin.dict;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.DataOutput;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.UUID;
-
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.io.Writable;
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.kylin.common.util.HadoopUtil;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Test;
-
-/**
- * Created by sunyerui on 16/7/12.
- */
-public class CachedTreeMapTest {
-
-public static class Key implements WritableComparable {
-int keyInt;
-
-public static Key of(int keyInt) {
-Key newKey = new Key();
-newKey.keyInt = keyInt;
-return newKey;
-}
-
-@Override
-public int compareTo(Object o) {
-return keyInt - ((Key)o).keyInt;
-}
-
-@Override
-public void write(DataOutput out) throws IOException {
-out.writeInt(keyInt);
-}
-
-@Override
-public void readFields(DataInput in) throws IOException {
-keyInt = in.readInt();
-}
-
-@Override
-public String toString() {
-return String.valueOf(keyInt);
-}
-}
-
-public static boolean VALUE_WRITE_ERROR_TOGGLE = false;
-public static class Value implements Writable {
-String valueStr;
-
-public static Value of(String valueStr) {
-Value newValue = new Value();
-newValue.valueStr = valueStr;
-return newValue;
-}
-
-@Override
-public void write(DataOutput out) throws IOException {
-if (VALUE_WRITE_ERROR_TOGGLE) {
-out.write(new byte[0]);
-return;
-}
-out.writeUTF(valueStr);
-}
-
-@Override
-public void readFields(DataInput in) throws IOException {
-valueStr = in.readUTF();
-}
-}
-
-public static class CachedFileFilter implements FileFilter {
-@Override
-public boolean accept(File pathname) {
-return pathname.getName().startsWith(CachedTreeMap.CACHED_PREFIX);
-}
-}
-
-public static class VersionFilter implements FileFilter {
-@Override
-public boolean accept(File pathname) {
-return pathname.getName().startsWith(CachedTreeMap.VERSION_PREFIX);
-}
-}
-
-
-static final UUID uuid = UUID.randomUUID();
-static final String baseDir = "/tmp/kylin_cachedtreemap_test/" + uuid;
-static final String workingDir = baseDir + "/working";
-
-private static void cleanup() {
-Path basePath = new Path(baseDir);
-try {
-HadoopUtil.getFileSystem(basePath).delete(basePath, true);
-} catch (IOException e) {}
-VALUE_WRITE_ERROR_TOGGLE = false;
-}
-
-@After
-public void afterTest() {
-cleanup();
-}
-
-@AfterClass
-public static void tearDown() {
-cleanup();
-}
-
-@Test
-public void testCachedTreeMap() throws IOException {
-CachedTreeMap map = createMutableMap();
-map.put(Key.of(1), Value.of("a"));
-  

[3/3] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-03-13 Thread kangkaisen
KYLIN-2506 Refactor Global Dictionary


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ee3f8e6e
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ee3f8e6e
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ee3f8e6e

Branch: refs/heads/KYLIN-2506
Commit: ee3f8e6e0d202ea3aacf24caf75762f1e6048ebb
Parents: 3a3e967
Author: kangkaisen 
Authored: Mon Feb 20 21:06:44 2017 +0800
Committer: kangkaisen 
Committed: Mon Mar 13 21:27:46 2017 +0800

--
 .../apache/kylin/dict/AppendTrieDictionary.java | 1197 +-
 .../kylin/dict/AppendTrieDictionaryBuilder.java |  289 +
 .../kylin/dict/AppendTrieDictionaryChecker.java |9 +-
 .../org/apache/kylin/dict/CachedTreeMap.java|  481 ---
 .../java/org/apache/kylin/dict/DictNode.java|  376 ++
 .../java/org/apache/kylin/dict/DictSlice.java   |  283 +
 .../org/apache/kylin/dict/DictSliceKey.java |   75 ++
 .../apache/kylin/dict/GlobalDictHDFSStore.java  |  419 ++
 .../apache/kylin/dict/GlobalDictMetadata.java   |   50 +
 .../org/apache/kylin/dict/GlobalDictStore.java  |  102 ++
 .../kylin/dict/GlobalDictionaryBuilder.java |   12 +-
 .../kylin/dict/AppendTrieDictionaryTest.java|  324 -
 .../apache/kylin/dict/CachedTreeMapTest.java|  378 --
 .../engine/spark/KylinKryoRegistrator.java  |3 -
 14 files changed, 1943 insertions(+), 2055 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ee3f8e6e/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
index 962686d..1205c92 100644
--- 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
+++ 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
@@ -15,1173 +15,125 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
 */
-
 package org.apache.kylin.dict;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.cache.RemovalListener;
+import com.google.common.cache.RemovalNotification;
+import org.apache.hadoop.fs.Path;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.Dictionary;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.io.DataInput;
-import java.io.DataInputStream;
 import java.io.DataOutput;
-import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.NavigableSet;
 import java.util.Objects;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FSDataInputStream;
-import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.FileUtil;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.io.Writable;
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.common.util.Bytes;
-import org.apache.kylin.common.util.BytesUtil;
-import org.apache.kylin.common.util.ClassUtil;
-import org.apache.kylin.common.util.Dictionary;
-import org.apache.kylin.common.util.HadoopUtil;
-import org.apache.kylin.common.util.Pair;
-import org.apache.kylin.metadata.MetadataManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.concurrent.ExecutionException;
+import static com.google.common.base.Preconditions.checkState;
 
 /**
  * A dictionary based on Trie data structure that maps enumerations of byte[] 
to
  * int IDs, used for global dictionary.
- *
- * Trie data is split into sub trees, called {@link DictSlice}, and stored in 
a {@link CachedTreeMap} with a configurable cache size.
- *
+ * 
+ * Trie data is split into sub trees, called {@link DictSlice}.
+ * 
  * With Trie the memory footprint of the mapping is kinda minimized at the cost
  * CPU, if compared to HashMap of ID Arrays. Performance test shows Trie is
  * roughly 10 times slower, so there's a cache layer overlays on top of Trie 
and
  * gracefully fall back to Trie using a weak reference.
- *
+ * 
  * The implementation is NOT thread-safe for now.
- *
+ * 
  *

[2/3] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-03-13 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/ee3f8e6e/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java
--
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java
new file mode 100644
index 000..dd9593a
--- /dev/null
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java
@@ -0,0 +1,376 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.dict;
+
+import org.apache.kylin.common.util.Bytes;
+import org.apache.kylin.common.util.BytesUtil;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+
+public class DictNode {
+public byte[] part;
+public int id = -1;
+public boolean isEndOfValue;
+public ArrayList children = new ArrayList<>();
+
+public int nValuesBeneath;
+public DictNode parent;
+public int childrenCount = 1;
+
+DictNode(byte[] value, boolean isEndOfValue) {
+reset(value, isEndOfValue);
+}
+
+DictNode(byte[] value, boolean isEndOfValue, ArrayList children) 
{
+reset(value, isEndOfValue, children);
+}
+
+void reset(byte[] value, boolean isEndOfValue) {
+reset(value, isEndOfValue, new ArrayList());
+}
+
+void reset(byte[] value, boolean isEndOfValue, ArrayList 
children) {
+this.part = value;
+this.isEndOfValue = isEndOfValue;
+clearChild();
+for (DictNode child : children) {
+addChild(child);
+}
+this.id = -1;
+}
+
+void clearChild() {
+this.children.clear();
+int childrenCountDelta = this.childrenCount - 1;
+for (DictNode p = this; p != null; p = p.parent) {
+p.childrenCount -= childrenCountDelta;
+}
+}
+
+void addChild(DictNode child) {
+addChild(-1, child);
+}
+
+void addChild(int index, DictNode child) {
+child.parent = this;
+if (index < 0) {
+this.children.add(child);
+} else {
+this.children.add(index, child);
+}
+for (DictNode p = this; p != null; p = p.parent) {
+p.childrenCount += child.childrenCount;
+}
+}
+
+private DictNode removeChild(int index) {
+DictNode child = children.remove(index);
+child.parent = null;
+for (DictNode p = this; p != null; p = p.parent) {
+p.childrenCount -= child.childrenCount;
+}
+return child;
+}
+
+private DictNode duplicateNode() {
+DictNode newChild = new DictNode(part, false);
+newChild.parent = parent;
+if (parent != null) {
+int index = parent.children.indexOf(this);
+parent.addChild(index + 1, newChild);
+}
+return newChild;
+}
+
+public byte[] firstValue() {
+ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+DictNode p = this;
+while (true) {
+bytes.write(p.part, 0, p.part.length);
+if (p.isEndOfValue || p.children.size() == 0) {
+break;
+}
+p = p.children.get(0);
+}
+return bytes.toByteArray();
+}
+
+public static DictNode splitNodeTree(final DictNode splitNode) {
+if (splitNode == null) {
+return null;
+}
+DictNode current = splitNode;
+DictNode p = current.parent;
+while (p != null) {
+int index = p.children.indexOf(current);
+assert index != -1;
+DictNode newParent = p.duplicateNode();
+for (int i = p.children.size() - 1; i >= index; i--) {
+DictNode child = p.removeChild(i);
+newParent.addChild(0, child);
+}
+current = newParent;
+p = p.parent;
+}
+return current;
+}
+
+public byte[] buildTrieBytes() {
+  

[20/50] [abbrv] kylin git commit: minor, allow DebugTomcat on sandbox in different LAN

2017-04-13 Thread kangkaisen
minor, allow DebugTomcat on sandbox in different LAN


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/551f5ed2
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/551f5ed2
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/551f5ed2

Branch: refs/heads/KYLIN-2506
Commit: 551f5ed2e7922f63e260b5adf1e04c8a86a77298
Parents: 7af5529
Author: lidongsjtu 
Authored: Sat Apr 1 20:55:58 2017 +0800
Committer: lidongsjtu 
Committed: Tue Apr 4 10:55:37 2017 +0800

--
 examples/test_case_data/sandbox/hdfs-site.xml | 4 
 1 file changed, 4 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/551f5ed2/examples/test_case_data/sandbox/hdfs-site.xml
--
diff --git a/examples/test_case_data/sandbox/hdfs-site.xml 
b/examples/test_case_data/sandbox/hdfs-site.xml
index 1d9040a..c06222e 100644
--- a/examples/test_case_data/sandbox/hdfs-site.xml
+++ b/examples/test_case_data/sandbox/hdfs-site.xml
@@ -15,6 +15,10 @@
   limitations under the License.
 -->
 
+
+dfs.client.use.datanode.hostname
+true
+
 
 
 dfs.block.access.token.enable



[12/50] [abbrv] kylin git commit: KYLIN-2529 Allow thread-local override of KylinConfig

2017-04-13 Thread kangkaisen
KYLIN-2529 Allow thread-local override of KylinConfig


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1e8b6a5e
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1e8b6a5e
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1e8b6a5e

Branch: refs/heads/KYLIN-2506
Commit: 1e8b6a5e7b1350930c68e750fb1ce75c27428082
Parents: 782a974
Author: lidongsjtu 
Authored: Thu Mar 30 19:54:34 2017 +0800
Committer: lidongsjtu 
Committed: Fri Mar 31 19:03:54 2017 +0800

--
 .../org/apache/kylin/common/KylinConfig.java| 37 ++--
 .../apache/kylin/common/KylinConfigTest.java| 31 +++-
 2 files changed, 56 insertions(+), 12 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/1e8b6a5e/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
--
diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
index c6b1511..a9a0c45 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfig.java
@@ -50,30 +50,41 @@ public class KylinConfig extends KylinConfigBase {
 public static final String KYLIN_CONF = "KYLIN_CONF";
 
 // static cached instances
-private static KylinConfig ENV_INSTANCE = null;
+private static KylinConfig SYS_ENV_INSTANCE = null;
+
+// thread-local instances, will override SYS_ENV_INSTANCE
+private static final transient ThreadLocal 
THREAD_ENV_INSTANCE = new ThreadLocal<>();
 
 public static KylinConfig getInstanceFromEnv() {
 synchronized (KylinConfig.class) {
-if (ENV_INSTANCE == null) {
+KylinConfig config = THREAD_ENV_INSTANCE.get();
+if (config != null) {
+return config;
+}
+
+if (SYS_ENV_INSTANCE == null) {
 try {
-KylinConfig config = new KylinConfig();
+config = new KylinConfig();
 config.reloadKylinConfig(getKylinProperties());
 
 logger.info("Initialized a new KylinConfig from 
getInstanceFromEnv : " + System.identityHashCode(config));
-ENV_INSTANCE = config;
+SYS_ENV_INSTANCE = config;
 } catch (IllegalArgumentException e) {
 throw new IllegalStateException("Failed to find 
KylinConfig ", e);
 }
 }
-return ENV_INSTANCE;
+return SYS_ENV_INSTANCE;
 }
 }
 
 //Only used in test cases!!! 
 public static void destroyInstance() {
-logger.info("Destory KylinConfig");
-dumpStackTrace();
-ENV_INSTANCE = null;
+synchronized (KylinConfig.class) {
+logger.info("Destroy KylinConfig");
+dumpStackTrace();
+SYS_ENV_INSTANCE = null;
+THREAD_ENV_INSTANCE.remove();
+}
 }
 
 public enum UriType {
@@ -158,12 +169,12 @@ public class KylinConfig extends KylinConfigBase {
 
 public static void setKylinConfigInEnvIfMissing(Properties prop) {
 synchronized (KylinConfig.class) {
-if (ENV_INSTANCE == null) {
+if (SYS_ENV_INSTANCE == null) {
 try {
 KylinConfig config = new KylinConfig();
 config.reloadKylinConfig(prop);
-logger.info("Resetting ENV_INSTANCE by a input stream: " + 
System.identityHashCode(config));
-ENV_INSTANCE = config;
+logger.info("Resetting SYS_ENV_INSTANCE by a input stream: 
" + System.identityHashCode(config));
+SYS_ENV_INSTANCE = config;
 } catch (IllegalArgumentException e) {
 throw new IllegalStateException("Failed to find 
KylinConfig ", e);
 }
@@ -177,6 +188,10 @@ public class KylinConfig extends KylinConfigBase {
 setKylinConfigInEnvIfMissing(props);
 }
 
+public static void setKylinConfigThreadLocal(KylinConfig config) {
+THREAD_ENV_INSTANCE.set(config);
+}
+
 public static KylinConfig createKylinConfig(String propsInStr) throws 
IOException {
 Properties props = new Properties();
 props.load(new StringReader(propsInStr));

http://git-wip-us.apache.org/repos/asf/kylin/blob/1e8b6a5e/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java
--
diff --git 
a/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java 
b/core-common/src/test/java/org/apache/kylin/common/KylinConfigTest.java
ind

[32/50] [abbrv] kylin git commit: minor, remove method fillbackOptimizedColumn

2017-04-13 Thread kangkaisen
minor, remove method fillbackOptimizedColumn


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/6b4f70d2
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/6b4f70d2
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/6b4f70d2

Branch: refs/heads/KYLIN-2506
Commit: 6b4f70d257e1eb363a7b792cde8f6f59821094a6
Parents: 75630b8
Author: Roger Shi 
Authored: Sun Apr 9 21:26:09 2017 +0800
Committer: Roger Shi 
Committed: Sun Apr 9 21:26:09 2017 +0800

--
 .../kylin/query/relnode/OLAPAggregateRel.java | 18 --
 1 file changed, 18 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/6b4f70d2/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
--
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
index 2c75a14..1378681 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
@@ -345,8 +345,6 @@ public class OLAPAggregateRel extends Aggregate implements 
OLAPRel {
 }
 
 private void buildRewriteFieldsAndMetricsColumns() {
-fillbackOptimizedColumn();
-
 ColumnRowType inputColumnRowType = ((OLAPRel) 
getInput()).getColumnRowType();
 RelDataTypeFactory typeFactory = getCluster().getTypeFactory();
 for (int i = 0; i < this.aggregations.size(); i++) {
@@ -385,22 +383,6 @@ public class OLAPAggregateRel extends Aggregate implements 
OLAPRel {
 }
 }
 
-private void fillbackOptimizedColumn() {
-// some aggcall will be optimized out in sub-query (e.g. tableau 
generated sql), we need to fill them back
-RelDataType inputAggRow = getInput().getRowType();
-RelDataType outputAggRow = getRowType();
-if (inputAggRow.getFieldCount() != outputAggRow.getFieldCount()) {
-for (RelDataTypeField inputField : inputAggRow.getFieldList()) {
-String inputFieldName = inputField.getName();
-// constant columns(starts with $) should not be added to 
context.
-if (!inputFieldName.startsWith("$") && 
outputAggRow.getField(inputFieldName, true, false) == null) {
-TblColRef column = 
this.columnRowType.getColumnByIndex(inputField.getIndex());
-this.context.metricsColumns.add(column);
-}
-}
-}
-}
-
 private boolean noPrecaculatedFieldsAvailable() {
 return !this.context.hasPrecalculatedFields() || 
!RewriteImplementor.needRewrite(this.context);
 }



[05/50] [abbrv] kylin git commit: KYLIN-2501 Stream Aggregate GTRecords at Query Server

2017-04-13 Thread kangkaisen
KYLIN-2501 Stream Aggregate GTRecords at Query Server


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0fa57248
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0fa57248
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0fa57248

Branch: refs/heads/KYLIN-2506
Commit: 0fa572482f209d25cca6968812d293c08d077210
Parents: fa3ee3f
Author: gaodayue 
Authored: Wed Mar 15 22:45:02 2017 +0800
Committer: Hongbin Ma 
Committed: Fri Mar 31 16:39:35 2017 +0800

--
 .../apache/kylin/common/KylinConfigBase.java|   4 +
 .../kylin/common/util/ImmutableBitSet.java  |  29 ++-
 .../org/apache/kylin/GTForwardingScanner.java   |  56 +
 .../kylin/cube/gridtable/CubeGridTable.java |  18 --
 .../gridtable/CuboidToGridTableMapping.java |  18 ++
 .../cube/inmemcubing/InMemCubeBuilder.java  |   6 +-
 .../kylin/gridtable/GTAggregateScanner.java |  16 +-
 .../apache/kylin/gridtable/GTFilterScanner.java |  22 +-
 .../org/apache/kylin/gridtable/GTRecord.java|  80 +++
 .../apache/kylin/gridtable/GTScanRequest.java   |  13 ++
 .../gridtable/GTStreamAggregateScanner.java | 211 +++
 .../kylin/gridtable/GTScanReqSerDerTest.java|   4 +-
 .../apache/kylin/storage/StorageContext.java|  20 ++
 .../storage/gtrecord/CubeScanRangePlanner.java  |   3 +-
 .../storage/gtrecord/CubeSegmentScanner.java|   7 +-
 .../storage/gtrecord/CubeTupleConverter.java|  31 +--
 .../gtrecord/GTCubeStorageQueryBase.java|  38 +++-
 .../kylin/storage/gtrecord/ITupleConverter.java |   3 +-
 .../gtrecord/PartitionResultIterator.java   |  59 ++
 .../storage/gtrecord/PartitionResultMerger.java | 100 +
 .../kylin/storage/gtrecord/ScannerWorker.java   |   5 +-
 .../gtrecord/SegmentCubeTupleIterator.java  |  72 ++-
 .../gtrecord/StorageResponseGTScatter.java  |  82 +++
 .../hbase/cube/v2/CubeHBaseEndpointRPC.java |   7 +-
 .../storage/hbase/cube/v2/CubeHBaseRPC.java |   5 +-
 .../storage/hbase/cube/v2/CubeHBaseScanRPC.java |   5 +-
 26 files changed, 704 insertions(+), 210 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/0fa57248/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 02349ad..9cd35c8 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -802,6 +802,10 @@ abstract public class KylinConfigBase implements 
Serializable {
 return Boolean.valueOf(getOptional("kylin.query.skip-empty-segments", 
"true"));
 }
 
+public boolean isStreamAggregateEnabled() {
+return 
Boolean.parseBoolean(getOptional("kylin.query.stream-aggregate-enabled", 
"true"));
+}
+
 @Deprecated //Limit is good even it's large. This config is meaning less 
since we already have scan threshold 
 public int getStoragePushDownLimitMax() {
 return Integer.parseInt(getOptional("kylin.query.max-limit-pushdown", 
"1"));

http://git-wip-us.apache.org/repos/asf/kylin/blob/0fa57248/core-common/src/main/java/org/apache/kylin/common/util/ImmutableBitSet.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/util/ImmutableBitSet.java 
b/core-common/src/main/java/org/apache/kylin/common/util/ImmutableBitSet.java
index b417877..5cdf08c 100644
--- 
a/core-common/src/main/java/org/apache/kylin/common/util/ImmutableBitSet.java
+++ 
b/core-common/src/main/java/org/apache/kylin/common/util/ImmutableBitSet.java
@@ -19,8 +19,9 @@ package org.apache.kylin.common.util;
 
 import java.nio.ByteBuffer;
 import java.util.BitSet;
+import java.util.Iterator;
 
-public class ImmutableBitSet {
+public class ImmutableBitSet implements Iterable {
 
 public static final ImmutableBitSet EMPTY = new ImmutableBitSet(new 
BitSet());
 
@@ -168,4 +169,30 @@ public class ImmutableBitSet {
 return new ImmutableBitSet(bitSet);
 }
 };
+
+/**
+ * Iterate over the positions of true value.
+ * @return the iterator
+ */
+@Override
+public Iterator iterator() {
+return new Iterator() {
+int index = 0;
+
+@Override
+public boolean hasNext() {
+return index < arr.length;
+}
+
+@Override
+public Integer next() {
+return arr[index++];
+}
+
+@Override
+public void remove() {
+throw new UnsupportedOperation

[39/50] [abbrv] kylin git commit: KYLIN-2540 remove unused test

2017-04-13 Thread kangkaisen
KYLIN-2540 remove unused test


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/9532bf2b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/9532bf2b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/9532bf2b

Branch: refs/heads/KYLIN-2506
Commit: 9532bf2b089b0b77b7ca49ec73f9304fcbe3
Parents: 86645af
Author: lidongsjtu 
Authored: Mon Apr 10 22:22:19 2017 +0800
Committer: lidongsjtu 
Committed: Tue Apr 11 11:13:25 2017 +0800

--
 .../test/java/org/apache/kylin/rest/util/QueryUtilTest.java| 6 --
 1 file changed, 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/9532bf2b/server-base/src/test/java/org/apache/kylin/rest/util/QueryUtilTest.java
--
diff --git 
a/server-base/src/test/java/org/apache/kylin/rest/util/QueryUtilTest.java 
b/server-base/src/test/java/org/apache/kylin/rest/util/QueryUtilTest.java
index c00cd3f..dcd8c98 100644
--- a/server-base/src/test/java/org/apache/kylin/rest/util/QueryUtilTest.java
+++ b/server-base/src/test/java/org/apache/kylin/rest/util/QueryUtilTest.java
@@ -51,12 +51,6 @@ public class QueryUtilTest extends LocalFileMetadataTestCase 
{
 String s = QueryUtil.massageSql(sqlRequest);
 Assert.assertEquals("select ( date '2001-09-28' + interval '2' 
month) from test_kylin_fact group by ( date '2001-09-28' + interval '2' 
month)", s);
 }
-{
-SQLRequest sqlRequest = new SQLRequest();
-sqlRequest.setSql("select 
concat(\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\",\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\")
 
concat(\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\",\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\")
 ()");
-String s = QueryUtil.massageSql(sqlRequest);
-Assert.assertEquals("select {fn 
concat(\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\",\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\")
 } {fn 
concat(\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\",\"TEST_KYLIN_FACT\".\"LSTG_FORMAT_NAME\")
 } ()", s);
-}
 }
 
 @Test



[44/50] [abbrv] kylin git commit: Merge commit 'a36288142f30cad931881107872adb4ba0a574a3'

2017-04-13 Thread kangkaisen
Merge commit 'a36288142f30cad931881107872adb4ba0a574a3'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/e9ec116c
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/e9ec116c
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/e9ec116c

Branch: refs/heads/KYLIN-2506
Commit: e9ec116c247072603a5405ddba425fd349ba670b
Parents: f44f828 a362881
Author: Hongbin Ma 
Authored: Tue Apr 11 17:12:46 2017 +0800
Committer: Hongbin Ma 
Committed: Tue Apr 11 17:12:46 2017 +0800

--
 build/conf/kylin.properties |  1 +
 .../kylin/common/util/HiveCmdBuilder.java   | 16 +++-
 .../kylin/common/util/HiveCmdBuilderTest.java   |  1 +
 .../cube/model/CubeJoinedFlatTableDesc.java |  4 +-
 .../org/apache/kylin/job/JoinedFlatTable.java   | 34 +++
 .../kylin/job/engine/JobEngineConfig.java   |  2 +-
 .../apache/kylin/job/JoinedFlatTableTest.java   |  4 +-
 .../metadata/filter/CompareTupleFilter.java | 14 +++
 .../filter/FilterOptimizeTransformer.java   | 89 ++
 .../kylin/metadata/model/FunctionDesc.java  |  8 +-
 .../kylin/metadata/model/ParameterDesc.java | 58 ++--
 .../apache/kylin/metadata/model/TblColRef.java  | 10 ++
 .../gtrecord/GTCubeStorageQueryBase.java|  2 +-
 .../gtrecord/StorageResponseGTScatter.java  | 22 +++--
 .../engine/mr/common/HadoopStatusGetter.java| 15 +--
 examples/test_case_data/sandbox/hdfs-site.xml   |  4 +
 .../test_case_data/sandbox/kylin.properties |  1 +
 .../src/test/resources/query/sql/query104.sql   | 31 +++
 .../resources/query/sql_casewhen/query55.sql| 22 +
 .../query/sql_casewhen/query55.sql.disable  | 22 -
 .../resources/query/sql_subquery/query15.sql| 29 ++
 .../resources/query/sql_subquery/query16.sql| 38 
 .../kylin/query/relnode/OLAPAggregateRel.java   | 13 ++-
 .../kylin/query/relnode/OLAPFilterRel.java  | 25 ++---
 .../kylin/query/relnode/OLAPProjectRel.java | 12 +--
 .../kylin/query/relnode/OLAPTableScan.java  |  2 +-
 .../org/apache/kylin/query/udf/ConcatUDF.java   | 28 ++
 .../org/apache/kylin/rest/util/QueryUtil.java   | 15 ---
 .../apache/kylin/rest/util/QueryUtilTest.java   |  6 --
 .../apache/kylin/source/hive/HiveMRInput.java   | 97 +---
 .../kylin/storage/hbase/HBaseConnection.java|  7 +-
 .../hbase/util/DeployCoprocessorCLI.java|  1 +
 32 files changed, 425 insertions(+), 208 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/e9ec116c/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
--
diff --cc core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
index 7313630,5553d34..54c1e61
--- a/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
+++ b/core-job/src/main/java/org/apache/kylin/job/JoinedFlatTable.java
@@@ -19,8 -19,8 +19,9 @@@
  package org.apache.kylin.job;
  
  import java.io.File;
 +import java.lang.reflect.Method;
  import java.util.HashSet;
+ import java.util.Map;
  import java.util.Set;
  
  import javax.xml.parsers.DocumentBuilder;
@@@ -49,18 -46,18 +50,17 @@@ public class JoinedFlatTable 
  return storageDfsDir + "/" + flatDesc.getTableName();
  }
  
- public static String generateHiveSetStatements(JobEngineConfig 
engineConfig) {
 -public static String generateHiveInitStatements(
 -String flatTableDatabase, String kylinHiveFile, Map cubeOverrides) {
++public static String generateHiveInitStatements(String flatTableDatabase, 
String kylinHiveFile, Map cubeOverrides) {
+ 
  StringBuilder buffer = new StringBuilder();
  
+ buffer.append("USE ").append(flatTableDatabase).append(";\n");
  try {
- File hadoopPropertiesFile = new 
File(engineConfig.getHiveConfFilePath());
- 
- if (hadoopPropertiesFile.exists()) {
+ File file = new File(kylinHiveFile);
+ if (file.exists()) {
  DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
- DocumentBuilder builder;
- Document doc;
- builder = factory.newDocumentBuilder();
- doc = builder.parse(hadoopPropertiesFile);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document doc = builder.parse(file);
  NodeList nl = doc.getElementsByTagName("property");
  for (int i = 0; i < nl.getLength(); i++) {
  String name = 
doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
@@@ -101,24 -103,8 +106,19 @@@
  return ddl.toString();
  }
  
- public static String generateInsertDataStatement(IJoinedFlatTableDe

[48/50] [abbrv] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-04-13 Thread kangkaisen
KYLIN-2506 Refactor Global Dictionary


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ce8b24f6
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ce8b24f6
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ce8b24f6

Branch: refs/heads/KYLIN-2506
Commit: ce8b24f60a01d03eb57a223dbae095e7ceb98c7f
Parents: 1caf19a
Author: kangkaisen 
Authored: Mon Feb 20 21:06:44 2017 +0800
Committer: kangkaisen 
Committed: Thu Apr 13 16:20:57 2017 +0800

--
 .../apache/kylin/dict/AppendTrieDictionary.java | 1197 +-
 .../kylin/dict/AppendTrieDictionaryBuilder.java |  289 +
 .../kylin/dict/AppendTrieDictionaryChecker.java |9 +-
 .../org/apache/kylin/dict/CachedTreeMap.java|  481 ---
 .../java/org/apache/kylin/dict/DictNode.java|  376 ++
 .../java/org/apache/kylin/dict/DictSlice.java   |  283 +
 .../org/apache/kylin/dict/DictSliceKey.java |   75 ++
 .../apache/kylin/dict/GlobalDictHDFSStore.java  |  420 ++
 .../apache/kylin/dict/GlobalDictMetadata.java   |   50 +
 .../org/apache/kylin/dict/GlobalDictStore.java  |  102 ++
 .../kylin/dict/GlobalDictionaryBuilder.java |   12 +-
 .../kylin/dict/AppendTrieDictionaryTest.java|  329 -
 .../apache/kylin/dict/CachedTreeMapTest.java|  378 --
 .../engine/spark/KylinKryoRegistrator.java  |3 -
 14 files changed, 1946 insertions(+), 2058 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ce8b24f6/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
--
diff --git 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
index 962686d..ea216ba 100644
--- 
a/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
+++ 
b/core-dictionary/src/main/java/org/apache/kylin/dict/AppendTrieDictionary.java
@@ -15,1173 +15,125 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
 */
-
 package org.apache.kylin.dict;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.cache.RemovalListener;
+import com.google.common.cache.RemovalNotification;
+import org.apache.hadoop.fs.Path;
+import org.apache.kylin.common.KylinConfig;
+import org.apache.kylin.common.util.Dictionary;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import java.io.DataInput;
-import java.io.DataInputStream;
 import java.io.DataOutput;
-import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.NavigableSet;
 import java.util.Objects;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FSDataInputStream;
-import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.FileUtil;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.io.Writable;
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.kylin.common.KylinConfig;
-import org.apache.kylin.common.util.Bytes;
-import org.apache.kylin.common.util.BytesUtil;
-import org.apache.kylin.common.util.ClassUtil;
-import org.apache.kylin.common.util.Dictionary;
-import org.apache.kylin.common.util.HadoopUtil;
-import org.apache.kylin.common.util.Pair;
-import org.apache.kylin.metadata.MetadataManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.concurrent.ExecutionException;
+import static com.google.common.base.Preconditions.checkState;
 
 /**
  * A dictionary based on Trie data structure that maps enumerations of byte[] 
to
  * int IDs, used for global dictionary.
- *
- * Trie data is split into sub trees, called {@link DictSlice}, and stored in 
a {@link CachedTreeMap} with a configurable cache size.
- *
+ * 
+ * Trie data is split into sub trees, called {@link DictSlice}.
+ * 
  * With Trie the memory footprint of the mapping is kinda minimized at the cost
  * CPU, if compared to HashMap of ID Arrays. Performance test shows Trie is
  * roughly 10 times slower, so there's a cache layer overlays on top of Trie 
and
  * gracefully fall back to Trie using a weak reference.
- *
+ * 
  * The implementation is NOT thread-safe for now.
- *
+ * 
  *

[10/50] [abbrv] kylin git commit: KYLIN-2528 refine job email notification to support starttls and customized port

2017-04-13 Thread kangkaisen
KYLIN-2528 refine job email notification to support starttls and customized port


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f6ee76c8
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f6ee76c8
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f6ee76c8

Branch: refs/heads/KYLIN-2506
Commit: f6ee76c85a86971e71f998b2dd096b035bc7613c
Parents: 19d5b3d
Author: Hongbin Ma 
Authored: Fri Mar 31 18:12:22 2017 +0800
Committer: Hongbin Ma 
Committed: Fri Mar 31 18:12:22 2017 +0800

--
 build/conf/kylin.properties  | 12 +++-
 .../org/apache/kylin/common/KylinConfigBase.java |  8 
 .../org/apache/kylin/common/util/MailService.java| 15 +--
 examples/test_case_data/localmeta/kylin.properties   | 15 +--
 examples/test_case_data/sandbox/kylin.properties |  8 +++-
 5 files changed, 44 insertions(+), 14 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/f6ee76c8/build/conf/kylin.properties
--
diff --git a/build/conf/kylin.properties b/build/conf/kylin.properties
index 1a55c94..0a77093 100644
--- a/build/conf/kylin.properties
+++ b/build/conf/kylin.properties
@@ -117,11 +117,13 @@ kylin.job.status.with.kerberos=false
 kylin.job.step.timeout=7200
 
 # If true, will send email notification on job complete
-kylin.job.notification-enabled=false
-kylin.job.notification-mail-host=
-kylin.job.notification-mail-username=
-kylin.job.notification-mail-password=
-kylin.job.notification-mail-sender=
+#kylin.job.notification-enabled=true
+#kylin.job.notification-mail-enable-starttls=true
+#kylin.job.notification-mail-host=smtp.office365.com
+#kylin.job.notification-mail-port=587
+#kylin.job.notification-mail-username=ky...@example.com
+#kylin.job.notification-mail-password=mypassword
+#kylin.job.notification-mail-sender=ky...@example.com
 
 
 ### ENGINE ###

http://git-wip-us.apache.org/repos/asf/kylin/blob/f6ee76c8/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 02349ad..36c2b16 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -392,6 +392,14 @@ abstract public class KylinConfigBase implements 
Serializable {
 return 
Boolean.parseBoolean(getOptional("kylin.job.notification-enabled", "false"));
 }
 
+public boolean isStarttlsEnabled() {
+return 
Boolean.parseBoolean(getOptional("kylin.job.notification-mail-enable-starttls", 
"false"));
+}
+
+public String getSmtpPort() {
+return getOptional("kylin.job.notification-mail-port", "25");
+}
+
 public String getMailHost() {
 return getOptional("kylin.job.notification-mail-host", "");
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/f6ee76c8/core-common/src/main/java/org/apache/kylin/common/util/MailService.java
--
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/util/MailService.java 
b/core-common/src/main/java/org/apache/kylin/common/util/MailService.java
index 5793967..25bc03c 100644
--- a/core-common/src/main/java/org/apache/kylin/common/util/MailService.java
+++ b/core-common/src/main/java/org/apache/kylin/common/util/MailService.java
@@ -34,18 +34,22 @@ public class MailService {
 private static final org.slf4j.Logger logger = 
LoggerFactory.getLogger(MailService.class);
 
 private Boolean enabled = Boolean.TRUE;
+private Boolean starttlsEnabled = Boolean.FALSE;
 private String host;
+private String port;
 private String username;
 private String password;
 private String sender;
 
 public MailService(KylinConfig config) {
-this(config.isMailEnabled(), config.getMailHost(), 
config.getMailUsername(), config.getMailPassword(), config.getMailSender());
+this(config.isMailEnabled(), config.isStarttlsEnabled(), 
config.getMailHost(), config.getSmtpPort(), config.getMailUsername(), 
config.getMailPassword(), config.getMailSender());
 }
 
-private MailService(boolean enabled, String host, String username, String 
password, String sender) {
+private MailService(boolean enabled, boolean starttlsEnabled, String host, 
String port, String username, String password, String sender) {
 this.enabled = enabled;
+this.starttlsEnabled = starttlsEnabled;
 this.host = host;
+this.port = port;
 this.username = u

[27/50] [abbrv] kylin git commit: KYLIN 2534 column family select mistake

2017-04-13 Thread kangkaisen
KYLIN 2534 column family select mistake


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/75630b8d
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/75630b8d
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/75630b8d

Branch: refs/heads/KYLIN-2506
Commit: 75630b8d90a900550a55f4a931eedee4b9eb3d21
Parents: 023fa23
Author: chenzhx <346839...@qq.com>
Authored: Thu Apr 6 15:42:52 2017 +0800
Committer: chenzhx <346839...@qq.com>
Committed: Thu Apr 6 15:42:52 2017 +0800

--
 webapp/app/js/controllers/cubeAdvanceSetting.js | 21 ++--
 1 file changed, 11 insertions(+), 10 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/75630b8d/webapp/app/js/controllers/cubeAdvanceSetting.js
--
diff --git a/webapp/app/js/controllers/cubeAdvanceSetting.js 
b/webapp/app/js/controllers/cubeAdvanceSetting.js
index 5e7de33..d3e2922 100644
--- a/webapp/app/js/controllers/cubeAdvanceSetting.js
+++ b/webapp/app/js/controllers/cubeAdvanceSetting.js
@@ -339,18 +339,19 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function 
($scope, $modal,cubeConfi
 var allMeasureNames = $scope.getAllMeasureNames();
 var tmpColumnFamily = $scope.cubeMetaFrame.hbase_mapping.column_family;
 
-angular.forEach($scope.cubeMetaFrame.hbase_mapping.column_family, function 
(colFamily,index1) {
-  angular.forEach(colFamily.columns[0].measure_refs, function 
(measureName, index2) {
-var allIndex = allMeasureNames.indexOf(measureName);
+for(var j=0;j<$scope.cubeMetaFrame.hbase_mapping.column_family.length; 
j++) {
+  for (var 
i=0;i<$scope.cubeMetaFrame.hbase_mapping.column_family[j].columns[0].measure_refs.length;
 i++){
+var allIndex = 
allMeasureNames.indexOf($scope.cubeMetaFrame.hbase_mapping.column_family[j].columns[0].measure_refs[i]);
 if (allIndex == -1) {
-  tmpColumnFamily[index1].columns[0].measure_refs.splice(index2, 1);
+  tmpColumnFamily[j].columns[0].measure_refs.splice(i, 1);
+  i--
 }
-
-if (tmpColumnFamily[index1].columns[0].measure_refs == 0) {
-  tmpColumnFamily.splice(index1, 1);
-}
-  });
-});
+  }
+  if (tmpColumnFamily[j].columns[0].measure_refs.length == 0) {
+tmpColumnFamily.splice(j, 1);
+j--
+  }
+}
 
 $scope.cubeMetaFrame.hbase_mapping.column_family = tmpColumnFamily;
   };



[33/50] [abbrv] kylin git commit: KYLIN-2536 replace codehaus jackson with fasterxml

2017-04-13 Thread kangkaisen
KYLIN-2536 replace codehaus jackson with fasterxml

Signed-off-by: lidongsjtu 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/b641032b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/b641032b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/b641032b

Branch: refs/heads/KYLIN-2506
Commit: b641032bfe2d79ae162c88ac7faf082250ca3a73
Parents: 2e87fb4
Author: etherge 
Authored: Fri Apr 7 18:28:07 2017 +0800
Committer: lidongsjtu 
Committed: Sun Apr 9 23:54:44 2017 +0800

--
 .../kylin/engine/mr/common/HadoopStatusGetter.java   | 15 ---
 1 file changed, 8 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/b641032b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/HadoopStatusGetter.java
--
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/HadoopStatusGetter.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/HadoopStatusGetter.java
index 1107aa5..f31369b 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/HadoopStatusGetter.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/common/HadoopStatusGetter.java
@@ -43,11 +43,12 @@ import org.apache.http.client.params.AuthPolicy;
 import org.apache.http.impl.auth.SPNegoSchemeFactory;
 import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.client.DefaultHttpClient;
-import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 /**
  */
 public class HadoopStatusGetter {
@@ -68,8 +69,8 @@ public class HadoopStatusGetter {
 String response = useKerberosAuth ? 
getHttpResponseWithKerberosAuth(url) : getHttpResponse(url);
 logger.debug("Hadoop job " + mrJobId + " status : " + response);
 JsonNode root = new ObjectMapper().readTree(response);
-RMAppState state = 
RMAppState.valueOf(root.findValue("state").getTextValue());
-FinalApplicationStatus finalStatus = 
FinalApplicationStatus.valueOf(root.findValue("finalStatus").getTextValue());
+RMAppState state = 
RMAppState.valueOf(root.findValue("state").textValue());
+FinalApplicationStatus finalStatus = 
FinalApplicationStatus.valueOf(root.findValue("finalStatus").textValue());
 return Pair.of(state, finalStatus);
 }
 
@@ -84,12 +85,12 @@ public class HadoopStatusGetter {
 System.setProperty("java.security.krb5.conf", krb5ConfigPath);
 System.setProperty("sun.security.krb5.debug", "true");
 System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
-
+
 DefaultHttpClient client = new DefaultHttpClient();
 AuthSchemeRegistry authSchemeRegistry = new AuthSchemeRegistry();
 authSchemeRegistry.register(AuthPolicy.SPNEGO, new 
SPNegoSchemeFactory(skipPortAtKerberosDatabaseLookup));
 client.setAuthSchemes(authSchemeRegistry);
-
+
 BasicCredentialsProvider credentialsProvider = new 
BasicCredentialsProvider();
 Credentials useJaasCreds = new Credentials() {
 public String getPassword() {
@@ -102,7 +103,7 @@ public class HadoopStatusGetter {
 };
 credentialsProvider.setCredentials(new AuthScope(null, -1, null), 
useJaasCreds);
 client.setCredentialsProvider(credentialsProvider);
-
+
 String response = null;
 while (response == null) {
 if (url.startsWith("https://";)) {



[13/50] [abbrv] kylin git commit: Merge commit '782a97482ca1e92cf24e04badd8ee48c9b829f46'

2017-04-13 Thread kangkaisen
Merge commit '782a97482ca1e92cf24e04badd8ee48c9b829f46'


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ee5397bc
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ee5397bc
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ee5397bc

Branch: refs/heads/KYLIN-2506
Commit: ee5397bc6207c9cdf57cdce93bcda6bcac58a5a9
Parents: d4cce76 782a974
Author: Hongbin Ma 
Authored: Fri Mar 31 20:00:16 2017 +0800
Committer: Hongbin Ma 
Committed: Fri Mar 31 20:00:59 2017 +0800

--
 build/conf/kylin.properties |   2 +-
 .../apache/kylin/common/KylinConfigBase.java|   4 +
 .../kylin/common/util/ImmutableBitSet.java  |  29 +-
 .../org/apache/kylin/GTForwardingScanner.java   |  56 
 .../java/org/apache/kylin/cube/CubeManager.java |   8 +-
 .../kylin/cube/gridtable/CubeGridTable.java |  18 --
 .../gridtable/CuboidToGridTableMapping.java |  18 ++
 .../cube/inmemcubing/InMemCubeBuilder.java  |   6 +-
 .../org/apache/kylin/cube/model/CubeDesc.java   |  11 +-
 .../kylin/gridtable/GTAggregateScanner.java |  16 +-
 .../apache/kylin/gridtable/GTFilterScanner.java |  22 +-
 .../org/apache/kylin/gridtable/GTRecord.java|  80 ++---
 .../apache/kylin/gridtable/GTScanRequest.java   |  13 +
 .../gridtable/GTStreamAggregateScanner.java | 219 ++
 .../kylin/gridtable/GTScanReqSerDerTest.java|   4 +-
 .../apache/kylin/measure/hllc/HLLCounter.java   |  54 ++--
 .../apache/kylin/storage/StorageContext.java|   8 +
 .../storage/gtrecord/CubeScanRangePlanner.java  |   3 +-
 .../storage/gtrecord/CubeSegmentScanner.java|   7 +-
 .../storage/gtrecord/CubeTupleConverter.java|  26 +-
 .../gtrecord/GTCubeStorageQueryBase.java|  35 ++-
 .../kylin/storage/gtrecord/ITupleConverter.java |   3 +-
 .../gtrecord/PartitionResultIterator.java   |  59 
 .../kylin/storage/gtrecord/ScannerWorker.java   |   5 +-
 .../gtrecord/SegmentCubeTupleIterator.java  |  71 -
 .../SortMergedPartitionResultIterator.java  |  81 +
 .../gtrecord/StorageResponseGTScatter.java  |  83 ++---
 .../mr/steps/FactDistinctColumnsMapper.java |  31 +-
 .../mr/steps/NewCubeSamplingMethodTest.java | 299 +++
 .../hbase/cube/v2/CubeHBaseEndpointRPC.java |   7 +-
 .../storage/hbase/cube/v2/CubeHBaseRPC.java |   5 +-
 .../storage/hbase/cube/v2/CubeHBaseScanRPC.java |   5 +-
 .../apache/kylin/tool/StorageCleanupJob.java|  13 +-
 33 files changed, 1047 insertions(+), 254 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/ee5397bc/build/conf/kylin.properties
--

http://git-wip-us.apache.org/repos/asf/kylin/blob/ee5397bc/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
--

http://git-wip-us.apache.org/repos/asf/kylin/blob/ee5397bc/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
--
diff --cc core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
index f4480c8,3397adc..3e62ea7
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTRecord.java
@@@ -118,20 -114,14 +114,24 @@@ public class GTRecord implements Compar
  return result;
  }
  
++
 +/** decode and return the values of this record */
 +public Object[] getValues(int[] selectedColumns, Object[] result) {
 +assert selectedColumns.length <= result.length;
 +for (int i = 0; i < selectedColumns.length; i++) {
- int c = selectedColumns[i];
- if (cols[c].array() == null) {
- result[i] = null;
- } else {
- result[i] = info.codeSystem.decodeColumnValue(c, 
cols[c].asBuffer());
- }
++result[i] = decodeValue(selectedColumns[i]);
 +}
 +return result;
 +}
 +
+ public Object decodeValue(int c) {
+ ByteArray col = cols[c];
+ if (col != null && col.array() != null) {
+ return info.codeSystem.decodeColumnValue(c, col.asBuffer());
+ }
+ return null;
+ }
+ 
  public int sizeOf(ImmutableBitSet selectedCols) {
  int size = 0;
  for (int i = 0; i < selectedCols.trueBitCount(); i++) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/ee5397bc/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeTupleConverter.java
--
diff --cc 
core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeTupleConverter.java
index 526a554,b762e5c..7df80ca
--- 
a/core-storage/src/main/ja

[47/50] [abbrv] kylin git commit: KYLIN-2506 Refactor Global Dictionary

2017-04-13 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/ce8b24f6/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java
--
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java 
b/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java
new file mode 100644
index 000..dd9593a
--- /dev/null
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/DictNode.java
@@ -0,0 +1,376 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kylin.dict;
+
+import org.apache.kylin.common.util.Bytes;
+import org.apache.kylin.common.util.BytesUtil;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.IdentityHashMap;
+import java.util.LinkedList;
+
+public class DictNode {
+public byte[] part;
+public int id = -1;
+public boolean isEndOfValue;
+public ArrayList children = new ArrayList<>();
+
+public int nValuesBeneath;
+public DictNode parent;
+public int childrenCount = 1;
+
+DictNode(byte[] value, boolean isEndOfValue) {
+reset(value, isEndOfValue);
+}
+
+DictNode(byte[] value, boolean isEndOfValue, ArrayList children) 
{
+reset(value, isEndOfValue, children);
+}
+
+void reset(byte[] value, boolean isEndOfValue) {
+reset(value, isEndOfValue, new ArrayList());
+}
+
+void reset(byte[] value, boolean isEndOfValue, ArrayList 
children) {
+this.part = value;
+this.isEndOfValue = isEndOfValue;
+clearChild();
+for (DictNode child : children) {
+addChild(child);
+}
+this.id = -1;
+}
+
+void clearChild() {
+this.children.clear();
+int childrenCountDelta = this.childrenCount - 1;
+for (DictNode p = this; p != null; p = p.parent) {
+p.childrenCount -= childrenCountDelta;
+}
+}
+
+void addChild(DictNode child) {
+addChild(-1, child);
+}
+
+void addChild(int index, DictNode child) {
+child.parent = this;
+if (index < 0) {
+this.children.add(child);
+} else {
+this.children.add(index, child);
+}
+for (DictNode p = this; p != null; p = p.parent) {
+p.childrenCount += child.childrenCount;
+}
+}
+
+private DictNode removeChild(int index) {
+DictNode child = children.remove(index);
+child.parent = null;
+for (DictNode p = this; p != null; p = p.parent) {
+p.childrenCount -= child.childrenCount;
+}
+return child;
+}
+
+private DictNode duplicateNode() {
+DictNode newChild = new DictNode(part, false);
+newChild.parent = parent;
+if (parent != null) {
+int index = parent.children.indexOf(this);
+parent.addChild(index + 1, newChild);
+}
+return newChild;
+}
+
+public byte[] firstValue() {
+ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+DictNode p = this;
+while (true) {
+bytes.write(p.part, 0, p.part.length);
+if (p.isEndOfValue || p.children.size() == 0) {
+break;
+}
+p = p.children.get(0);
+}
+return bytes.toByteArray();
+}
+
+public static DictNode splitNodeTree(final DictNode splitNode) {
+if (splitNode == null) {
+return null;
+}
+DictNode current = splitNode;
+DictNode p = current.parent;
+while (p != null) {
+int index = p.children.indexOf(current);
+assert index != -1;
+DictNode newParent = p.duplicateNode();
+for (int i = p.children.size() - 1; i >= index; i--) {
+DictNode child = p.removeChild(i);
+newParent.addChild(0, child);
+}
+current = newParent;
+p = p.parent;
+}
+return current;
+}
+
+public byte[] buildTrieBytes() {
+  

[08/50] [abbrv] kylin git commit: KYLIN-2521 upgrade calcite to 1.12

2017-04-13 Thread kangkaisen
http://git-wip-us.apache.org/repos/asf/kylin/blob/19d5b3de/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
--
diff --git 
a/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java 
b/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
index 2c308f5..c199c31 100644
--- 
a/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
+++ 
b/atopcalcite/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
@@ -1,12 +1,13 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to you under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,25 +17,6 @@
  */
 package org.apache.calcite.sql2rel;
 
-import static org.apache.calcite.sql.SqlUtil.stripAs;
-import static org.apache.calcite.util.Static.RESOURCE;
-
-import java.lang.reflect.Type;
-import java.math.BigDecimal;
-import java.util.AbstractList;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Deque;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
 import org.apache.calcite.avatica.util.Spaces;
 import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.plan.Convention;
@@ -106,6 +88,7 @@ import org.apache.calcite.schema.ModifiableTable;
 import org.apache.calcite.schema.ModifiableView;
 import org.apache.calcite.schema.Table;
 import org.apache.calcite.schema.TranslatableTable;
+import org.apache.calcite.schema.Wrapper;
 import org.apache.calcite.sql.JoinConditionType;
 import org.apache.calcite.sql.JoinType;
 import org.apache.calcite.sql.SemiJoinType;
@@ -125,6 +108,7 @@ import org.apache.calcite.sql.SqlIntervalQualifier;
 import org.apache.calcite.sql.SqlJoin;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlLiteral;
+import org.apache.calcite.sql.SqlMatchRecognize;
 import org.apache.calcite.sql.SqlMerge;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
@@ -161,6 +145,7 @@ import org.apache.calcite.sql.validate.ListScope;
 import org.apache.calcite.sql.validate.ParameterScope;
 import org.apache.calcite.sql.validate.SelectScope;
 import org.apache.calcite.sql.validate.SqlMonotonicity;
+import org.apache.calcite.sql.validate.SqlNameMatcher;
 import org.apache.calcite.sql.validate.SqlQualified;
 import org.apache.calcite.sql.validate.SqlUserDefinedTableFunction;
 import org.apache.calcite.sql.validate.SqlUserDefinedTableMacro;
@@ -168,6 +153,7 @@ import org.apache.calcite.sql.validate.SqlValidator;
 import org.apache.calcite.sql.validate.SqlValidatorImpl;
 import org.apache.calcite.sql.validate.SqlValidatorNamespace;
 import org.apache.calcite.sql.validate.SqlValidatorScope;
+import org.apache.calcite.sql.validate.SqlValidatorTable;
 import org.apache.calcite.sql.validate.SqlValidatorUtil;
 import org.apache.calcite.tools.RelBuilder;
 import org.apache.calcite.util.ImmutableBitSet;
@@ -178,7 +164,6 @@ import org.apache.calcite.util.NumberUtil;
 import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.Util;
 import org.apache.calcite.util.trace.CalciteTrace;
-import org.slf4j.Logger;
 
 import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
@@ -190,6 +175,28 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
+import org.slf4j.Logger;
+
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.util.AbstractList;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Deque;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import

[03/50] [abbrv] kylin git commit: KYLIN-2525 tolerate job metadata exception in StorageCleanupJob

2017-04-13 Thread kangkaisen
KYLIN-2525 tolerate job metadata exception in StorageCleanupJob


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/fa3ee3ff
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/fa3ee3ff
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/fa3ee3ff

Branch: refs/heads/KYLIN-2506
Commit: fa3ee3ffbbb11ac3d4dc79dbb719f56a7e913857
Parents: c6b4592
Author: Li Yang 
Authored: Wed Mar 29 18:03:59 2017 +0800
Committer: Yang Li 
Committed: Wed Mar 29 21:02:23 2017 +0800

--
 .../java/org/apache/kylin/tool/StorageCleanupJob.java  | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/fa3ee3ff/tool/src/main/java/org/apache/kylin/tool/StorageCleanupJob.java
--
diff --git a/tool/src/main/java/org/apache/kylin/tool/StorageCleanupJob.java 
b/tool/src/main/java/org/apache/kylin/tool/StorageCleanupJob.java
index 477c58a..f1a3ebe 100644
--- a/tool/src/main/java/org/apache/kylin/tool/StorageCleanupJob.java
+++ b/tool/src/main/java/org/apache/kylin/tool/StorageCleanupJob.java
@@ -46,6 +46,7 @@ import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.AbstractApplication;
 import org.apache.kylin.common.util.CliCommandExecutor;
 import org.apache.kylin.common.util.HadoopUtil;
+import org.apache.kylin.common.util.HiveCmdBuilder;
 import org.apache.kylin.common.util.OptionsHelper;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeManager;
@@ -57,7 +58,6 @@ import org.apache.kylin.job.execution.ExecutableManager;
 import org.apache.kylin.job.execution.ExecutableState;
 import org.apache.kylin.metadata.realization.IRealizationConstants;
 import org.apache.kylin.source.hive.HiveClientFactory;
-import org.apache.kylin.common.util.HiveCmdBuilder;
 import org.apache.kylin.source.hive.IHiveClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -276,9 +276,14 @@ public class StorageCleanupJob extends AbstractApplication 
{
 sb.append(jobId).append("(").append(state).append("), ");
 }
 
-String segmentId = getSegmentIdFromJobId(jobId);
-if (segmentId != null) {//some jobs are not cubing jobs 
-segmentId2JobId.put(segmentId, jobId);
+try {
+String segmentId = getSegmentIdFromJobId(jobId);
+if (segmentId != null) {//some jobs are not cubing jobs 
+segmentId2JobId.put(segmentId, jobId);
+}
+} catch (Exception ex) {
+logger.warn("Failed to find segment ID from job ID " + jobId + 
", ignore it");
+// some older version job metadata may fail to read, ignore it
 }
 }
 logger.info("Working jobIDs: " + workingJobList);



[16/50] [abbrv] kylin git commit: KYLIN-2449 skip rewriting if no realiztion in OLAPAggregateRel

2017-04-13 Thread kangkaisen
KYLIN-2449 skip rewriting if no realiztion in OLAPAggregateRel

Signed-off-by: Yang Li 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/4ddcc699
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/4ddcc699
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/4ddcc699

Branch: refs/heads/KYLIN-2506
Commit: 4ddcc699ec807aea73cf4c158550678803f48eef
Parents: 9250d9b
Author: etherge 
Authored: Wed Feb 15 15:18:18 2017 +0800
Committer: Yang Li 
Committed: Sun Apr 2 08:56:34 2017 +0800

--
 .../kylin/metadata/model/ParameterDesc.java |  1 +
 .../resources/query/sql_subquery/query16.sql| 38 
 .../kylin/query/relnode/OLAPAggregateRel.java   |  5 +--
 3 files changed, 42 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/4ddcc699/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
index 5ba2f14..272c4ee 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
@@ -34,6 +34,7 @@ import com.google.common.collect.Sets;
 
 /**
  */
+@SuppressWarnings("serial")
 @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = 
Visibility.NONE, isGetterVisibility = Visibility.NONE, setterVisibility = 
Visibility.NONE)
 public class ParameterDesc implements Serializable {
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/4ddcc699/kylin-it/src/test/resources/query/sql_subquery/query16.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query16.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query16.sql
new file mode 100644
index 000..5477e54
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query16.sql
@@ -0,0 +1,38 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+SELECT
+t1.leaf_categ_id, COUNT(*) AS nums
+FROM
+(SELECT
+f.leaf_categ_id
+FROM
+test_kylin_fact f inner join TEST_CATEGORY_GROUPINGS o on 
f.leaf_categ_id = o.leaf_categ_id and f.LSTG_SITE_ID = o.site_id
+WHERE
+f.lstg_format_name = 'ABIN') t1
+INNER JOIN
+(SELECT
+leaf_categ_id
+FROM
+test_kylin_fact f
+INNER JOIN test_order o ON f.order_id = o.order_id
+WHERE
+buyer_id > 100) t2 ON t1.leaf_categ_id = t2.leaf_categ_id
+GROUP BY t1.leaf_categ_id
+ORDER BY nums, leaf_categ_id
+limit 100
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/4ddcc699/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
--
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
index 2c75a14..d9385e9 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPAggregateRel.java
@@ -279,7 +279,8 @@ public class OLAPAggregateRel extends Aggregate implements 
OLAPRel {
 @Override
 public void implementRewrite(RewriteImplementor implementor) {
 // only rewrite the innermost aggregation
-if (!this.afterAggregate) {
+boolean hasRealization = (null != this.context.realization);
+if (hasRealization && !this.afterAggregate) {
 translateAggregation();
 buildRewriteFieldsAndMetricsColumns();
 }
@@ -287,7 +288,7 @@ public class OLAPAggregateRel extends Aggregate implements 
OLAPRel {
 implementor.visitChild(this, getInput());
 
 // only rewrite the innermost aggregation
-if (!th

[17/50] [abbrv] kylin git commit: KYLIN-2407 fix OLAPTableScan choose exec function issue

2017-04-13 Thread kangkaisen
KYLIN-2407 fix OLAPTableScan choose exec function issue

Signed-off-by: Yang Li 


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/c85a0e73
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/c85a0e73
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/c85a0e73

Branch: refs/heads/KYLIN-2506
Commit: c85a0e73192ea65d5bf12d116a0f791261365753
Parents: 4ddcc69
Author: etherge 
Authored: Wed Feb 15 13:30:44 2017 +0800
Committer: Yang Li 
Committed: Sun Apr 2 09:15:10 2017 +0800

--
 .../resources/query/sql_subquery/query15.sql| 29 
 .../kylin/query/relnode/OLAPTableScan.java  |  2 +-
 2 files changed, 30 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/c85a0e73/kylin-it/src/test/resources/query/sql_subquery/query15.sql
--
diff --git a/kylin-it/src/test/resources/query/sql_subquery/query15.sql 
b/kylin-it/src/test/resources/query/sql_subquery/query15.sql
new file mode 100644
index 000..330dc27
--- /dev/null
+++ b/kylin-it/src/test/resources/query/sql_subquery/query15.sql
@@ -0,0 +1,29 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+SELECT
+week_beg_dt
+FROM
+edw.test_cal_dt t1
+WHERE
+t1.cal_dt IN (SELECT
+cal_dt
+FROM
+test_kylin_fact
+WHERE
+lstg_format_name = 'ABIN')
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/c85a0e73/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
--
diff --git 
a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java 
b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
index 35dd73f..75c9c3e 100644
--- a/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
+++ b/query/src/main/java/org/apache/kylin/query/relnode/OLAPTableScan.java
@@ -283,7 +283,7 @@ public class OLAPTableScan extends TableScan implements 
OLAPRel, EnumerableRel {
 
 private String genExecFunc() {
 // if the table to scan is not the fact table of cube, then it's a 
lookup table
-if (context.hasJoin == false && 
context.realization.getModel().isLookupTable(tableName)) {
+if (context.realization.getModel().isLookupTable(tableName)) {
 return "executeLookupTableQuery";
 } else {
 return "executeOLAPQuery";



[23/50] [abbrv] kylin git commit: KYLIN-2501 pipeline partition results if possible

2017-04-13 Thread kangkaisen
KYLIN-2501 pipeline partition results if possible


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/6f9bce27
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/6f9bce27
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/6f9bce27

Branch: refs/heads/KYLIN-2506
Commit: 6f9bce27545ef185a64c24aff67790150fb469b9
Parents: 7cb88f5
Author: gaodayue 
Authored: Wed Apr 5 13:47:34 2017 +0800
Committer: gaodayue 
Committed: Wed Apr 5 13:56:03 2017 +0800

--
 .../gtrecord/StorageResponseGTScatter.java  | 22 +++-
 1 file changed, 12 insertions(+), 10 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/6f9bce27/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/StorageResponseGTScatter.java
--
diff --git 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/StorageResponseGTScatter.java
 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/StorageResponseGTScatter.java
index f1ab20c..ef12ff0 100644
--- 
a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/StorageResponseGTScatter.java
+++ 
b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/StorageResponseGTScatter.java
@@ -18,6 +18,7 @@
 
 package org.apache.kylin.storage.gtrecord;
 
+import com.google.common.base.Function;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import org.apache.kylin.common.util.ImmutableBitSet;
@@ -69,21 +70,22 @@ public class StorageResponseGTScatter implements IGTScanner 
{
 
 @Override
 public Iterator iterator() {
-List partitionResults = Lists.newArrayList();
-while (blocks.hasNext()) {
-partitionResults.add(new PartitionResultIterator(blocks.next(), 
info, columns));
+Iterator iterators = 
Iterators.transform(blocks, new Function() {
+public PartitionResultIterator apply(byte[] input) {
+return new PartitionResultIterator(input, info, columns);
+}
+});
+
+if (!needSorted) {
+logger.debug("Using Iterators.concat to pipeline partition 
results");
+return Iterators.concat(iterators);
 }
 
+List partitionResults = 
Lists.newArrayList(iterators);
 if (partitionResults.size() == 1) {
 return partitionResults.get(0);
 }
-
-if (!needSorted) {
-logger.debug("Using Iterators.concat to merge partition results");
-return Iterators.concat(partitionResults.iterator());
-}
-
-logger.debug("Using SortMergedPartitionResultIterator to merge 
partition results");
+logger.debug("Using SortMergedPartitionResultIterator to merge {} 
partition results", partitionResults.size());
 return new SortMergedPartitionResultIterator(partitionResults, info, 
GTRecord.getComparator(groupByDims));
 }
 }



[19/50] [abbrv] kylin git commit: KYLIN-2341 report error on unsupported aggr func

2017-04-13 Thread kangkaisen
KYLIN-2341 report error on unsupported aggr func


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/7af5529e
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/7af5529e
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/7af5529e

Branch: refs/heads/KYLIN-2506
Commit: 7af5529ef566434b34131a6b77c0f32e738bb318
Parents: 2057831
Author: Yang Li 
Authored: Mon Apr 3 22:35:21 2017 +0800
Committer: Yang Li 
Committed: Mon Apr 3 22:35:21 2017 +0800

--
 .../kylin/metadata/model/FunctionDesc.java  |  8 +--
 .../kylin/metadata/model/ParameterDesc.java | 57 ++--
 .../apache/kylin/metadata/model/TblColRef.java  | 10 
 .../resources/query/sql_casewhen/query04.sql| 30 ---
 .../kylin/query/relnode/OLAPAggregateRel.java   |  4 +-
 .../kylin/query/relnode/OLAPProjectRel.java |  2 +-
 6 files changed, 44 insertions(+), 67 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/kylin/blob/7af5529e/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
index 61c5fac..e969be2 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
@@ -19,7 +19,6 @@
 package org.apache.kylin.metadata.model;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -41,6 +40,7 @@ import com.google.common.collect.Sets;
 
 /**
  */
+@SuppressWarnings("serial")
 @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = 
Visibility.NONE, isGetterVisibility = Visibility.NONE, setterVisibility = 
Visibility.NONE)
 public class FunctionDesc implements Serializable {
 
@@ -90,17 +90,13 @@ public class FunctionDesc implements Serializable {
 expression = expression.toUpperCase();
 returnDataType = DataType.getType(returnType);
 
-ArrayList colRefs = Lists.newArrayList();
 for (ParameterDesc p = parameter; p != null; p = p.getNextParameter()) 
{
 if (p.isColumnType()) {
 TblColRef colRef = model.findColumn(p.getValue());
 p.setValue(colRef.getIdentity());
-colRefs.add(colRef);
+p.setColRef(colRef);
 }
 }
-
-if (parameter != null)
-parameter.setColRefs(colRefs);
 }
 
 private void reInitMeasureType() {

http://git-wip-us.apache.org/repos/asf/kylin/blob/7af5529e/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
--
diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
index 272c4ee..0cf31b1 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ParameterDesc.java
@@ -20,6 +20,7 @@ package org.apache.kylin.metadata.model;
 
 import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
@@ -28,8 +29,6 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
 
 /**
@@ -49,7 +48,7 @@ public class ParameterDesc implements Serializable {
 TblColRef col = (TblColRef) obj;
 r.type = FunctionDesc.PARAMETER_TYPE_COLUMN;
 r.value = col.getIdentity();
-r.colRefs = ImmutableList.of(col);
+r.colRef = col;
 } else {
 r.type = FunctionDesc.PARAMETER_TYPE_CONSTANT;
 r.value = (String) obj;
@@ -57,12 +56,6 @@ public class ParameterDesc implements Serializable {
 
 if (objs.length >= 2) {
 r.nextParameter = newInstance(Arrays.copyOfRange(objs, 1, 
objs.length));
-if (r.nextParameter.colRefs.size() > 0) {
-if (r.colRefs.isEmpty())
-r.colRefs = r.nextParameter.colRefs;
-else
-r.colRefs = 
ImmutableList.copyOf(Iterables.concat(r.colRefs, r.nextParameter.colR

  1   2   3   4   >