You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by bi...@apache.org on 2017/03/11 17:17:29 UTC
[12/14] kylin git commit: KYLIN-2384 backward compatible
KYLIN-2384 backward compatible
Signed-off-by: Hongbin Ma <ma...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0cb5032e
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0cb5032e
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0cb5032e
Branch: refs/heads/KYLIN-2360
Commit: 0cb5032ee8da30a91f5ef8914138852daead558d
Parents: f38d871
Author: xiefan46 <95...@qq.com>
Authored: Sat Mar 11 16:46:54 2017 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Sat Mar 11 22:09:55 2017 +0800
----------------------------------------------------------------------
.../kylin/dict/Number2BytesConverter.java | 4 ++
.../org/apache/kylin/dict/NumberDictionary.java | 12 ++++-
.../apache/kylin/dict/NumberDictionary2.java | 7 +++
.../org/apache/kylin/dict/TrieDictionary.java | 48 +++++++++-----------
4 files changed, 44 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/0cb5032e/core-dictionary/src/main/java/org/apache/kylin/dict/Number2BytesConverter.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/Number2BytesConverter.java b/core-dictionary/src/main/java/org/apache/kylin/dict/Number2BytesConverter.java
index 4e40527..814c95a 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/Number2BytesConverter.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/Number2BytesConverter.java
@@ -53,6 +53,10 @@ public class Number2BytesConverter implements BytesConverter<String>, Serializab
this.maxDigitsBeforeDecimalPoint = maxDigitsBeforeDecimalPoint;
}
+ public void setMaxDigitsBeforeDecimalPoint(int maxDigitsBeforeDecimalPoint) {
+ this.maxDigitsBeforeDecimalPoint = maxDigitsBeforeDecimalPoint;
+ }
+
@Override
public byte[] convertToBytes(String v) {
NumberBytesCodec codec = getCodec(this.maxDigitsBeforeDecimalPoint);
http://git-wip-us.apache.org/repos/asf/kylin/blob/0cb5032e/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary.java b/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary.java
index b987eda..1377e8e 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary.java
@@ -19,6 +19,8 @@
package org.apache.kylin.dict;
+import org.apache.kylin.common.util.ClassUtil;
+
/**
* @author yangli9
*
@@ -32,6 +34,7 @@ public class NumberDictionary<T> extends TrieDictionary<T> {
public NumberDictionary() { // default constructor for Writable interface
super();
+
}
public NumberDictionary(byte[] trieBytes) {
@@ -42,6 +45,13 @@ public class NumberDictionary<T> extends TrieDictionary<T> {
protected boolean isNullObjectForm(T value) {
return value == null || value.equals("");
}
-
+
+ @Override
+ protected void setConverterByName(String converterName) throws Exception {
+ converterName = "org.apache.kylin.dict.Number2BytesConverter";
+ this.bytesConvert = ClassUtil.forName(converterName, BytesConverter.class).newInstance();
+ ((Number2BytesConverter)this.bytesConvert).setMaxDigitsBeforeDecimalPoint(Number2BytesConverter.MAX_DIGITS_BEFORE_DECIMAL_POINT_LEGACY);
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/kylin/blob/0cb5032e/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary2.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary2.java b/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary2.java
index 3879d33..0efe936 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary2.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/NumberDictionary2.java
@@ -18,6 +18,8 @@
package org.apache.kylin.dict;
+import org.apache.kylin.common.util.ClassUtil;
+
/**
* This class uses MAX_DIGITS_BEFORE_DECIMAL_POINT (=19) instead of legacy (=16).
*/
@@ -35,5 +37,10 @@ public class NumberDictionary2<T> extends NumberDictionary<T> {
super(trieBytes);
}
+ @Override
+ protected void setConverterByName(String converterName) throws Exception {
+ converterName = "org.apache.kylin.dict.Number2BytesConverter";
+ this.bytesConvert = ClassUtil.forName(converterName, BytesConverter.class).newInstance();
+ }
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/0cb5032e/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionary.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionary.java b/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionary.java
index 9b84734..8849015 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionary.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/TrieDictionary.java
@@ -42,21 +42,21 @@ import com.google.common.base.Preconditions;
/**
* A dictionary based on Trie data structure that maps enumerations of byte[] to
* int IDs.
- *
+ * <p>
* 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.
- *
+ * <p>
* The implementation is thread-safe.
- *
+ *
* @author yangli9
*/
-@SuppressWarnings({ "rawtypes", "unchecked" })
+@SuppressWarnings({"rawtypes", "unchecked"})
public class TrieDictionary<T> extends CacheDictionary<T> {
private static final long serialVersionUID = 1L;
- public static final byte[] MAGIC = new byte[] { 0x54, 0x72, 0x69, 0x65, 0x44, 0x69, 0x63, 0x74 }; // "TrieDict"
+ public static final byte[] MAGIC = new byte[]{0x54, 0x72, 0x69, 0x65, 0x44, 0x69, 0x63, 0x74}; // "TrieDict"
public static final int MAGIC_SIZE_I = MAGIC.length;
public static final int BIT_IS_LAST_CHILD = 0x80;
@@ -104,7 +104,7 @@ public class TrieDictionary<T> extends CacheDictionary<T> {
String converterName = headIn.readUTF();
if (converterName.isEmpty() == false)
- this.bytesConvert = ClassUtil.forName(converterName, BytesConverter.class).newInstance();
+ setConverterByName(converterName);
this.nValues = BytesUtil.readUnsigned(trieBytes, headSize + sizeChildOffset, sizeNoValuesBeneath);
this.sizeOfId = BytesUtil.sizeForValue(baseId + nValues + 1L); // note baseId could raise 1 byte in ID space, +1 to reserve all 0xFF for NULL case
@@ -119,6 +119,10 @@ public class TrieDictionary<T> extends CacheDictionary<T> {
}
}
+ protected void setConverterByName(String converterName) throws Exception {
+ this.bytesConvert = ClassUtil.forName(converterName, BytesConverter.class).newInstance();
+ }
+
@Override
public int getMinId() {
return baseId;
@@ -151,19 +155,14 @@ public class TrieDictionary<T> extends CacheDictionary<T> {
/**
* returns a code point from [0, nValues), preserving order of value
- *
- * @param n
- * -- the offset of current node
- * @param inp
- * -- input value bytes to lookup
- * @param o
- * -- offset in the input value bytes matched so far
- * @param inpEnd
- * -- end of input
- * @param roundingFlag
- * -- =0: return -1 if not found
- * -- <0: return closest smaller if not found, return -1
- * -- >0: return closest bigger if not found, return nValues
+ *
+ * @param n -- the offset of current node
+ * @param inp -- input value bytes to lookup
+ * @param o -- offset in the input value bytes matched so far
+ * @param inpEnd -- end of input
+ * @param roundingFlag -- =0: return -1 if not found
+ * -- <0: return closest smaller if not found, return -1
+ * -- >0: return closest bigger if not found, return nValues
*/
private int lookupSeqNoFromValue(int n, byte[] inp, int o, int inpEnd, int roundingFlag) {
if (o == inpEnd) // special 'empty' value
@@ -257,13 +256,10 @@ public class TrieDictionary<T> extends CacheDictionary<T> {
/**
* returns a code point from [0, nValues), preserving order of value, or -1
* if not found
- *
- * @param n
- * -- the offset of current node
- * @param seq
- * -- the code point under track
- * @param returnValue
- * -- where return value is written to
+ *
+ * @param n -- the offset of current node
+ * @param seq -- the code point under track
+ * @param returnValue -- where return value is written to
*/
private int lookupValueFromSeqNo(int n, int seq, byte[] returnValue, int offset) {
int o = offset;