KYLIN-2240 Add a toggle to ignore all cube signature inconsistency temporally
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/80018874 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/80018874 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/80018874 Branch: refs/heads/yang21-hbase102 Commit: 80018874c26d17f57bd288654996d3b6508d8294 Parents: 076c77a Author: Hongbin Ma <mahong...@apache.org> Authored: Thu Dec 1 11:35:34 2016 +0800 Committer: Hongbin Ma <mahong...@apache.org> Committed: Thu Dec 1 11:35:34 2016 +0800 ---------------------------------------------------------------------- .../apache/kylin/common/KylinConfigBase.java | 39 ++++++--- .../org/apache/kylin/cube/model/CubeDesc.java | 90 +++++++++++--------- 2 files changed, 76 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/80018874/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 a91e42b..f35f969 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 @@ -18,6 +18,13 @@ package org.apache.kylin.common; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.lang.StringUtils; +import org.apache.kylin.common.util.CliCommandExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; import java.io.IOException; import java.io.Serializable; @@ -28,14 +35,6 @@ import java.util.SortedSet; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang.StringUtils; -import org.apache.kylin.common.util.CliCommandExecutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - /** * An abstract class to encapsulate access to a set of 'properties'. * Subclass can override methods in this class to extend the content of the 'properties', @@ -174,19 +173,25 @@ abstract public class KylinConfigBase implements Serializable { setProperty("kylin.storage.url", storageUrl); } - /** was for route to hive, not used any more */ + /** + * was for route to hive, not used any more + */ @Deprecated public String getHiveUrl() { return getOptional("hive.url", ""); } - /** was for route to hive, not used any more */ + /** + * was for route to hive, not used any more + */ @Deprecated public String getHiveUser() { return getOptional("hive.user", ""); } - /** was for route to hive, not used any more */ + /** + * was for route to hive, not used any more + */ @Deprecated public String getHivePassword() { return getOptional("hive.password", ""); @@ -202,7 +207,7 @@ abstract public class KylinConfigBase implements Serializable { public String[] getRealizationProviders() { return getOptionalStringArray("kylin.realization.providers", // - new String[] { "org.apache.kylin.cube.CubeManager", "org.apache.kylin.storage.hybrid.HybridManager" }); + new String[]{"org.apache.kylin.cube.CubeManager", "org.apache.kylin.storage.hybrid.HybridManager"}); } public CliCommandExecutor getCliCommandExecutor() throws IOException { @@ -427,6 +432,10 @@ abstract public class KylinConfigBase implements Serializable { return Integer.parseInt(getOptional("kylin.cube.algorithm.auto.mapper.limit", "500")); } + public boolean isIgnoreCubeSignatureInconsistency() { + return Boolean.parseBoolean(getOptional("kylin.cube.ignore-signature-inconsistency", "false")); + } + @Deprecated public int getCubeAggrGroupMaxSize() { return Integer.parseInt(getOptional("kylin.cube.aggrgroup.max.size", "12")); @@ -480,10 +489,11 @@ abstract public class KylinConfigBase implements Serializable { public float getCubeVisitTimeoutTimes() { return Float.parseFloat(getOptional("kylin.query.cube.visit.timeout.times", "1")); } - + public int getDerivedInThreshold() { return Integer.parseInt(getOptional("kylin.query.filter.derived_in.max", "20")); } + public int getBadQueryStackTraceDepth() { return Integer.parseInt(getOptional("kylin.query.badquery.stacktrace.depth", "10")); } @@ -569,7 +579,7 @@ abstract public class KylinConfigBase implements Serializable { } public int[] getQueryMetricsPercentilesIntervals() { - String[] dft = { "60", "300", "3600" }; + String[] dft = {"60", "300", "3600"}; return getOptionalIntArray("kylin.query.metrics.percentiles.intervals", dft); } @@ -591,6 +601,7 @@ abstract public class KylinConfigBase implements Serializable { /** * HBase region cut size, in GB + * * @return */ public float getKylinHBaseRegionCut() { http://git-wip-us.apache.org/repos/asf/kylin/blob/80018874/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java index c914ebb..00bfbc9 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java @@ -18,27 +18,16 @@ package org.apache.kylin.cube.model; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.TreeSet; - -import javax.annotation.Nullable; - +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.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.base.Function; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ArrayUtils; @@ -67,16 +56,25 @@ import org.apache.kylin.metadata.model.TblColRef; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -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.fasterxml.jackson.core.JsonProcessingException; -import com.google.common.base.Function; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; +import javax.annotation.Nullable; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.TreeSet; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; /** */ @@ -199,7 +197,7 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { } /** - * @return dimension columns excluding derived + * @return dimension columns excluding derived */ public List<TblColRef> listDimensionColumnsExcludingDerived(boolean alsoExcludeExtendedCol) { List<TblColRef> result = new ArrayList<TblColRef>(); @@ -467,11 +465,17 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { /** * this method is to prevent malicious metadata change by checking the saved signature * with the calculated signature. - * + * <p> * if you're comparing two cube descs, prefer to use consistentWith() + * * @return */ public boolean checkSignature() { + if (this.getConfig().isIgnoreCubeSignatureInconsistency()) { + logger.info("Skip checking cube signature"); + return true; + } + if (KylinVersion.getCurrentVersion().isCompatibleWith(new KylinVersion(getVersion())) && !KylinVersion.getCurrentVersion().isSignatureCompatibleWith(new KylinVersion(getVersion()))) { logger.info("checkSignature on {} is skipped as the its version is {} (not signature compatible but compatible) ", getName(), getVersion()); return true; @@ -752,7 +756,7 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { int find = ArrayUtils.indexOf(dimColArray, fk[i]); if (find >= 0) { TblColRef derivedCol = initDimensionColRef(pk[i]); - initDerivedMap(new TblColRef[] { dimColArray[find] }, DeriveType.PK_FK, dim, new TblColRef[] { derivedCol }, null); + initDerivedMap(new TblColRef[]{dimColArray[find]}, DeriveType.PK_FK, dim, new TblColRef[]{derivedCol}, null); } } /** disable this code as we don't need fk be derived from pk @@ -782,7 +786,7 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { extra[i] = ""; } } - return new String[][] { cols, extra }; + return new String[][]{cols, extra}; } private void initDerivedMap(TblColRef[] hostCols, DeriveType type, DimensionDesc dimension, TblColRef[] derivedCols, String[] extra) { @@ -1011,7 +1015,9 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { this.partitionDateEnd = partitionDateEnd; } - /** Get columns that have dictionary */ + /** + * Get columns that have dictionary + */ public Set<TblColRef> getAllColumnsHaveDictionary() { Set<TblColRef> result = Sets.newLinkedHashSet(); @@ -1040,7 +1046,9 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { return result; } - /** Get columns that need dictionary built on it. Note a column could reuse dictionary of another column. */ + /** + * Get columns that need dictionary built on it. Note a column could reuse dictionary of another column. + */ public Set<TblColRef> getAllColumnsNeedDictionaryBuilt() { Set<TblColRef> result = getAllColumnsHaveDictionary(); @@ -1057,7 +1065,9 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { return result; } - /** A column may reuse dictionary of another column, find the dict column, return same col if there's no reuse column*/ + /** + * A column may reuse dictionary of another column, find the dict column, return same col if there's no reuse column + */ public TblColRef getDictionaryReuseColumn(TblColRef col) { if (dictionaries == null) { return col; @@ -1070,7 +1080,9 @@ public class CubeDesc extends RootPersistentEntity implements IEngineAware { return col; } - /** Get a column which can be used in distributing the source table */ + /** + * Get a column which can be used in distributing the source table + */ public TblColRef getDistributedByColumn() { Set<TblColRef> shardBy = getShardByColumns(); if (shardBy != null && shardBy.size() > 0) {