You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2016/02/04 03:06:59 UTC

kylin git commit: KYLIN-1366 Bind metadata version with release version(chen hao)

Repository: kylin
Updated Branches:
  refs/heads/2.x-staging 36e26528e -> e2a0d1d82


KYLIN-1366 Bind metadata version with release version(chen hao)


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

Branch: refs/heads/2.x-staging
Commit: e2a0d1d821b0650a201370e0964a43207a744c21
Parents: 36e2652
Author: honma <ho...@ebay.com>
Authored: Thu Feb 4 10:06:47 2016 +0800
Committer: honma <ho...@ebay.com>
Committed: Thu Feb 4 10:06:47 2016 +0800

----------------------------------------------------------------------
 .../apache/kylin/common/KylinConfigBase.java    |  8 ++++
 .../org/apache/kylin/common/KylinVersion.java   | 40 ++++++++++++++++++++
 .../persistence/RootPersistentEntity.java       | 36 +++++++++++++++---
 .../org/apache/kylin/cube/CubeInstance.java     | 14 +------
 .../org/apache/kylin/cube/model/CubeDesc.java   |  2 +-
 .../org/apache/kylin/dict/DictionaryInfo.java   |  4 +-
 .../kylin/dict/lookup/SnapshotManager.java      |  2 +-
 .../kylin/metadata/model/DataModelDesc.java     |  2 +-
 .../kylin/metadata/project/ProjectInstance.java |  2 +-
 .../kylin/metadata/project/ProjectManager.java  |  2 +-
 .../kylin/storage/hybrid/HybridInstance.java    |  2 +-
 .../metadata/cube/kylin_sales_cube.json         |  2 +-
 .../cube_desc/kylin_sales_cube_desc.json        |  1 +
 .../metadata/model_desc/kylin_sales_model.json  |  1 +
 .../metadata/project/learn_kylin.json           |  1 +
 .../metadata/table/DEFAULT.KYLIN_CAL_DT.json    |  1 +
 .../table/DEFAULT.KYLIN_CATEGORY_GROUPINGS.json |  1 +
 .../metadata/table/DEFAULT.KYLIN_SALES.json     |  1 +
 .../test_kylin_cube_with_slr_1_new_segment.json |  2 +-
 .../cube/test_kylin_cube_with_slr_empty.json    |  2 +-
 ...est_kylin_cube_with_slr_left_join_empty.json |  2 +-
 ...est_kylin_cube_with_slr_left_join_ready.json |  2 +-
 .../cube/test_kylin_cube_with_slr_ready.json    |  2 +-
 ...st_kylin_cube_with_slr_ready_2_segments.json |  2 +-
 .../cube/test_kylin_cube_without_slr_empty.json |  2 +-
 ..._kylin_cube_without_slr_left_join_empty.json |  2 +-
 ..._kylin_cube_without_slr_left_join_ready.json |  2 +-
 ..._without_slr_left_join_ready_2_segments.json |  2 +-
 .../cube/test_kylin_cube_without_slr_ready.json |  2 +-
 .../cube/test_streaming_table_cube.json         |  2 +-
 .../test_kylin_cube_with_slr_desc.json          |  1 +
 ...test_kylin_cube_with_slr_left_join_desc.json |  1 +
 .../test_kylin_cube_without_slr_desc.json       |  2 +
 ...t_kylin_cube_without_slr_left_join_desc.json |  1 +
 .../test_streaming_table_cube_desc.json         |  1 +
 .../hybrid/test_kylin_hybrid_inner_join.json    |  1 +
 .../hybrid/test_kylin_hybrid_left_join.json     |  1 +
 .../hybrid/test_kylin_hybrid_ready.json         |  1 +
 .../invertedindex/test_kylin_ii_inner_join.json |  1 +
 .../invertedindex/test_kylin_ii_left_join.json  |  2 +-
 .../invertedindex/test_streaming_table_ii.json  |  2 +-
 .../test_kylin_ii_inner_join_desc.json          |  1 +
 .../test_kylin_ii_left_join_desc.json           |  1 +
 .../test_streaming_table_ii_desc.json           |  1 +
 .../localmeta/kafka/kafka_test.json             |  1 +
 .../kafka/test_streaming_table_cube.json        |  1 +
 .../kafka/test_streaming_table_ii.json          |  1 +
 .../test_kylin_inner_join_model_desc.json       |  1 +
 .../test_kylin_left_join_model_desc.json        |  1 +
 .../test_streaming_table_model_desc.json        |  1 +
 .../localmeta/project/default.json              |  1 +
 .../localmeta/streaming/kafka_test.json         |  1 +
 .../streaming/test_streaming_table_cube.json    |  1 +
 .../streaming/test_streaming_table_ii.json      |  1 +
 .../table/DEFAULT.STREAMING_TABLE.json          |  1 +
 .../table/DEFAULT.TEST_CATEGORY_GROUPINGS.json  |  1 +
 .../table/DEFAULT.TEST_KYLIN_FACT.json          |  1 +
 .../localmeta/table/EDW.TEST_CAL_DT.json        |  1 +
 .../table/EDW.TEST_SELLER_TYPE_DIM.json         |  1 +
 .../localmeta/table/EDW.TEST_SITES.json         |  1 +
 .../apache/kylin/invertedindex/IIInstance.java  | 12 +-----
 .../kylin/rest/controller/CubeController.java   |  4 +-
 .../hbase/util/ExtendCubeToHybridCLI.java       |  4 +-
 63 files changed, 143 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/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 bfad306..a44831d 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
@@ -61,6 +61,14 @@ public class KylinConfigBase implements Serializable {
         return kylinHome;
     }
 
+    /**
+     * @see KylinVersion
+     * @return current kylin version
+     */
+    public static String getKylinVersion(){
+        return KylinVersion.getCurrentVersion();
+    }
+
     // ============================================================================
 
     private volatile Properties properties = new Properties();

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java b/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java
new file mode 100644
index 0000000..d711b38
--- /dev/null
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinVersion.java
@@ -0,0 +1,40 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.common;
+
+/**
+ * Current version is: 2.1
+ *
+ * @since 2.1
+ */
+class KylinVersion {
+    /**
+     * Require MANUAL updating kylin version per ANY upgrading.
+     */
+    private static final String CURRENT_KYLIN_VERSION = "2.1";
+
+    /**
+     * Get current Kylin version
+     *
+     * Currently the implementation is reading directly from constant variable
+     *
+     * @return current kylin version in String
+     */
+    public static String getCurrentVersion(){
+        return CURRENT_KYLIN_VERSION;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
----------------------------------------------------------------------
diff --git a/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java b/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
index c8177e6..327ddcc 100644
--- a/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
+++ b/core-common/src/main/java/org/apache/kylin/common/persistence/RootPersistentEntity.java
@@ -30,6 +30,7 @@ import org.apache.commons.lang.time.FastDateFormat;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import org.apache.kylin.common.KylinConfig;
 
 /**
  * Marks the root entity of JSON persistence. Unit of read, write, cache, and
@@ -71,6 +72,24 @@ abstract public class RootPersistentEntity implements AclEntity, Serializable {
     @JsonProperty("last_modified")
     protected long lastModified;
 
+    /**
+     * Metadata model version
+     *
+     * User info only, we don't do version control
+     *
+     * For example: 2.1
+     */
+    @JsonProperty("version")
+    protected String version;
+
+    public String getVersion() {
+      return version;
+    }
+
+    public void setVersion(String version) {
+      this.version = version;
+    }
+
     public String getUuid() {
         return uuid;
     }
@@ -90,10 +109,15 @@ abstract public class RootPersistentEntity implements AclEntity, Serializable {
     public void setLastModified(long lastModified) {
         this.lastModified = lastModified;
     }
-    
-    
 
-    public void updateRandomUuid() {
+    /**
+     * Update entity's "model_version" with current kylin version and "uuid" with random UUID
+     *
+     * @see KylinConfig#getKylinVersion()
+     * @see UUID#randomUUID()
+     */
+    public void updateVersionAndRandomUuid() {
+        setVersion(KylinConfig.getKylinVersion());
         setUuid(UUID.randomUUID().toString());
     }
 
@@ -103,6 +127,7 @@ abstract public class RootPersistentEntity implements AclEntity, Serializable {
         int result = 1;
         result = prime * result + (int) (lastModified ^ (lastModified >>> 32));
         result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
+        result = prime * result + ((version == null) ? 0 : version.hashCode());
         return result;
     }
 
@@ -115,7 +140,7 @@ abstract public class RootPersistentEntity implements AclEntity, Serializable {
         if (getClass() != obj.getClass())
             return false;
         RootPersistentEntity other = (RootPersistentEntity) obj;
-        if (lastModified != other.lastModified)
+        if (lastModified != other.lastModified || !(version == null || version.equals(other.getVersion())))
             return false;
         if (uuid == null) {
             if (other.uuid != null)
@@ -124,5 +149,4 @@ abstract public class RootPersistentEntity implements AclEntity, Serializable {
             return false;
         return true;
     }
-
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/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 8ca3ebc..c26e2d2 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
@@ -63,7 +63,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
         cubeInstance.setCreateTimeUTC(System.currentTimeMillis());
         cubeInstance.setSegments(new ArrayList<CubeSegment>());
         cubeInstance.setStatus(RealizationStatusEnum.DISABLED);
-        cubeInstance.updateRandomUuid();
+        cubeInstance.updateVersionAndRandomUuid();
 
         return cubeInstance;
     }
@@ -74,8 +74,6 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
     private String name;
     @JsonProperty("owner")
     private String owner;
-    @JsonProperty("version")
-    private String version; // user info only, we don't do version control
     @JsonProperty("descriptor")
     private String descName;
     // Mark cube priority for query
@@ -226,14 +224,6 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
         this.owner = owner;
     }
 
-    public String getVersion() {
-        return version;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
     public String getDescName() {
         return descName.toUpperCase();
     }
@@ -440,7 +430,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization,
         newCube.setVersion(cubeInstance.getVersion());
         newCube.setCost(cubeInstance.getCost());
         newCube.setCreateTimeUTC(System.currentTimeMillis());
-        newCube.updateRandomUuid();
+        newCube.updateVersionAndRandomUuid();
         return newCube;
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/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 2dc04d4..a1a0531 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
@@ -857,7 +857,7 @@ public class CubeDesc extends RootPersistentEntity {
         newCubeDesc.setStorageType(cubeDesc.getStorageType());
         newCubeDesc.setAggregationGroups(cubeDesc.getAggregationGroups());
         newCubeDesc.setConfig(cubeDesc.getConfig());
-        newCubeDesc.updateRandomUuid();
+        newCubeDesc.updateVersionAndRandomUuid();
         return newCubeDesc;
     }
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryInfo.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryInfo.java b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryInfo.java
index 4fba59a..8e41abf 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryInfo.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/DictionaryInfo.java
@@ -53,7 +53,7 @@ public class DictionaryInfo extends RootPersistentEntity {
 
     public DictionaryInfo(String sourceTable, String sourceColumn, int sourceColumnIndex, String dataType, TableSignature input) {
 
-        this.updateRandomUuid();
+        this.updateVersionAndRandomUuid();
 
         this.sourceTable = sourceTable;
         this.sourceColumn = sourceColumn;
@@ -64,7 +64,7 @@ public class DictionaryInfo extends RootPersistentEntity {
 
     public DictionaryInfo(DictionaryInfo other) {
 
-        this.updateRandomUuid();
+        this.updateVersionAndRandomUuid();
 
         this.sourceTable = other.sourceTable;
         this.sourceColumn = other.sourceColumn;

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java
----------------------------------------------------------------------
diff --git a/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java b/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java
index 53bf60d..ccdc79d 100644
--- a/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java
+++ b/core-dictionary/src/main/java/org/apache/kylin/dict/lookup/SnapshotManager.java
@@ -87,7 +87,7 @@ public class SnapshotManager {
 
     public SnapshotTable buildSnapshot(ReadableTable table, TableDesc tableDesc) throws IOException {
         SnapshotTable snapshot = new SnapshotTable(table);
-        snapshot.updateRandomUuid();
+        snapshot.updateVersionAndRandomUuid();
 
         String dup = checkDupByInfo(snapshot);
         if (dup != null) {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-metadata/src/main/java/org/apache/kylin/metadata/model/DataModelDesc.java
----------------------------------------------------------------------
diff --git 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
index 1647707..c042138 100644
--- 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
@@ -348,7 +348,7 @@ public class DataModelDesc extends RootPersistentEntity {
         newDataModelDesc.setLookups(dataModelDesc.getLookups());
         newDataModelDesc.setMetrics(dataModelDesc.getMetrics());
         newDataModelDesc.setPartitionDesc(PartitionDesc.getCopyOf(dataModelDesc.getPartitionDesc()));
-        newDataModelDesc.updateRandomUuid();
+        newDataModelDesc.updateVersionAndRandomUuid();
         return newDataModelDesc;
     }
 }

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectInstance.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectInstance.java b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectInstance.java
index e0ed3d9..20741ee 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectInstance.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectInstance.java
@@ -92,7 +92,7 @@ public class ProjectInstance extends RootPersistentEntity {
     public static ProjectInstance create(String name, String owner, String description, List<RealizationEntry> realizationEntries, List<String> models) {
         ProjectInstance projectInstance = new ProjectInstance();
 
-        projectInstance.updateRandomUuid();
+        projectInstance.updateVersionAndRandomUuid();
         projectInstance.setName(name);
         projectInstance.setOwner(owner);
         projectInstance.setDescription(description);

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
index 37241c3..45bbb1b 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/project/ProjectManager.java
@@ -197,7 +197,7 @@ public class ProjectManager {
             project.setDescription(newDesc);
 
             if (project.getUuid() == null)
-                project.updateRandomUuid();
+                project.updateVersionAndRandomUuid();
 
             updateProject(project);
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java b/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
index 251f7c9..090efce 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/hybrid/HybridInstance.java
@@ -85,7 +85,7 @@ public class HybridInstance extends RootPersistentEntity implements IRealization
         hybridInstance.setConfig(config);
         hybridInstance.setName(name);
         hybridInstance.setRealizationEntries(realizationEntries);
-        hybridInstance.updateRandomUuid();
+        hybridInstance.updateVersionAndRandomUuid();
 
         return hybridInstance;
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/cube/kylin_sales_cube.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/cube/kylin_sales_cube.json b/examples/sample_cube/metadata/cube/kylin_sales_cube.json
index fb8affa..7454019 100644
--- a/examples/sample_cube/metadata/cube/kylin_sales_cube.json
+++ b/examples/sample_cube/metadata/cube/kylin_sales_cube.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "2fbca32a-a33e-4b69-83dd-0bb8b1f8c53b",
+  "version":"2.1",
   "last_modified" : 0,
   "name" : "kylin_sales_cube",
   "owner" : null,
-  "version" : null,
   "descriptor" : "kylin_sales_cube_desc",
   "status" : "DISABLED",
   "segments" : [ ],

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json b/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json
index 732af79..f0d9fca 100644
--- a/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json
+++ b/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "0ef9b7a8-3929-4dff-b59d-2100aadc8dbf",
+  "version":"2.1",
   "name" : "kylin_sales_cube_desc",
   "description" : null,
   "dimensions" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/model_desc/kylin_sales_model.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/model_desc/kylin_sales_model.json b/examples/sample_cube/metadata/model_desc/kylin_sales_model.json
index 586e73a..24ed62d 100644
--- a/examples/sample_cube/metadata/model_desc/kylin_sales_model.json
+++ b/examples/sample_cube/metadata/model_desc/kylin_sales_model.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "0928468a-9fab-4185-9a14-6f2e7c74823f",
+  "version":"2.1",
   "name" : "kylin_sales_model",
   "lookups" : [ {
     "table" : "DEFAULT.KYLIN_CAL_DT",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/project/learn_kylin.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/project/learn_kylin.json b/examples/sample_cube/metadata/project/learn_kylin.json
index cf082f5..a779954 100644
--- a/examples/sample_cube/metadata/project/learn_kylin.json
+++ b/examples/sample_cube/metadata/project/learn_kylin.json
@@ -1,5 +1,6 @@
 {
   "uuid": "1eaca32a-a33e-4b69-83dd-0bb8b1f8c91b",
+  "version":"2.1",
   "name": "learn_kylin",
   "realizations": [
     {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CAL_DT.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CAL_DT.json b/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CAL_DT.json
index 5bdd778..8666feb 100644
--- a/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CAL_DT.json
+++ b/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CAL_DT.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "0ff420eb-79ad-40bd-bca9-12d8cd05c60a",
+  "version":"2.1",
   "name" : "KYLIN_CAL_DT",
   "columns" : [ {
     "id" : "1",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CATEGORY_GROUPINGS.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CATEGORY_GROUPINGS.json b/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CATEGORY_GROUPINGS.json
index d1461b7..e397932 100644
--- a/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CATEGORY_GROUPINGS.json
+++ b/examples/sample_cube/metadata/table/DEFAULT.KYLIN_CATEGORY_GROUPINGS.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "952d11b5-69d9-45d1-92af-227489485e3f",
+  "version":"2.1",
   "name" : "KYLIN_CATEGORY_GROUPINGS",
   "columns" : [ {
     "id" : "1",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/sample_cube/metadata/table/DEFAULT.KYLIN_SALES.json
----------------------------------------------------------------------
diff --git a/examples/sample_cube/metadata/table/DEFAULT.KYLIN_SALES.json b/examples/sample_cube/metadata/table/DEFAULT.KYLIN_SALES.json
index be7cde5..c4a0fb8 100644
--- a/examples/sample_cube/metadata/table/DEFAULT.KYLIN_SALES.json
+++ b/examples/sample_cube/metadata/table/DEFAULT.KYLIN_SALES.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "e286e39e-40d7-44c2-8fa2-41b365522771",
+  "version":"2.1",
   "name" : "KYLIN_SALES",
   "columns" : [ {
     "id" : "1",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_1_new_segment.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_1_new_segment.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_1_new_segment.json
index 95c9231..2851b16 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_1_new_segment.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_1_new_segment.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "111ca32a-a33e-4b69-83dd-0bb8b1f8c53b",
+  "version":"2.1",
   "last_modified" : 1404098141020,
   "name" : "test_kylin_cube_with_slr_1_new_segment",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_with_slr_desc",
   "cost" : 50,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_empty.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_empty.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_empty.json
index 69032bc..71167bd 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_empty.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_empty.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "1eaca32a-a33e-4b69-83dd-0bb8b1f8c53b",
+  "version":"2.1",
   "last_modified" : 0,
   "name" : "test_kylin_cube_with_slr_empty",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_with_slr_desc",
   "segments" : [ ],
   "status" : "DISABLED",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_empty.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_empty.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_empty.json
index e708a86..e20fef8 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_empty.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_empty.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "1eaca32a-a33e-4b69-83dd-0bb8b1f8dddd",
+  "version":"2.1",
   "last_modified" : 0,
   "name" : "test_kylin_cube_with_slr_left_join_empty",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_with_slr_left_join_desc",
   "segments" : [ ],
   "status" : "DISABLED",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_ready.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_ready.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_ready.json
index 7222161..5edaeff 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_ready.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_left_join_ready.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "kkkka32a-a33e-4b69-83dd-0bb8b1f8c53b",
+  "version":"2.1",
   "last_modified" : 1404097095621,
   "name" : "test_kylin_cube_with_slr_left_join_ready",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_with_slr_left_join_desc",
   "cost" : 50,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready.json
index 64aae3f..bcbf538 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "1eaca32a-a33e-4b69-83dd-0bb8b1f8c53b",
+  "version":"2.1",
   "last_modified" : 1404098141020,
   "name" : "test_kylin_cube_with_slr_ready",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_with_slr_desc",
   "cost" : 50,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready_2_segments.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready_2_segments.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready_2_segments.json
index c36b164..ee679f5 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready_2_segments.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_with_slr_ready_2_segments.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "1eaca32a-a33e-4b69-83dd-0bb8b1f8c53c",
+  "version":"2.1",
   "last_modified" : 1404098141020,
   "name" : "test_kylin_cube_with_slr_ready_2_segments",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_with_slr_desc",
   "cost" : 50,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_empty.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_empty.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_empty.json
index fe3c4d7..e971c49 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_empty.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_empty.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "daa53e80-41be-49a5-90ca-9fb7294db186",
+  "version":"2.1",
   "last_modified" : 0,
   "name" : "test_kylin_cube_without_slr_empty",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_without_slr_desc",
   "segments" : [ ],
   "status" : "DISABLED",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_empty.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_empty.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_empty.json
index b4b5fd7..38a9239 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_empty.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_empty.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "dddd3e80-41be-49a5-90ca-9fb7294db186",
+  "version":"2.1",
   "last_modified" : 0,
   "name" : "test_kylin_cube_without_slr_left_join_empty",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_without_slr_left_join_desc",
   "segments" : [ ],
   "status" : "DISABLED",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready.json
index f87dba7..7a8628a 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "mmmm3e80-41be-49a5-90ca-9fb7294db186",
+  "version":"2.1",
   "last_modified" : 1404097288087,
   "name" : "test_kylin_cube_without_slr_left_join_ready",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_without_slr_left_join_desc",
   "cost" : 10,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready_2_segments.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready_2_segments.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready_2_segments.json
index e241008..bd26945 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready_2_segments.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_left_join_ready_2_segments.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "1eaca32a-a33e-4b69-83dd-0bb8b1f8c5ff",
+  "version":"2.1",
   "last_modified" : 1404098141020,
   "name" : "test_kylin_cube_without_slr_left_join_ready_2_segments",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_without_slr_left_join_desc",
   "cost" : 50,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_ready.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_ready.json b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_ready.json
index 75ff690..90bea1b 100644
--- a/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_ready.json
+++ b/examples/test_case_data/localmeta/cube/test_kylin_cube_without_slr_ready.json
@@ -1,9 +1,9 @@
 {
   "uuid" : "daa53e80-41be-49a5-90ca-9fb7294db186",
+  "version":"2.1",
   "last_modified" : 1404098303976,
   "name" : "test_kylin_cube_without_slr_ready",
   "owner" : null,
-  "version" : null,
   "descriptor" : "test_kylin_cube_without_slr_desc",
   "cost" : 10,
   "segments" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube/test_streaming_table_cube.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube/test_streaming_table_cube.json b/examples/test_case_data/localmeta/cube/test_streaming_table_cube.json
index d0cf0d5..a47513d 100644
--- a/examples/test_case_data/localmeta/cube/test_streaming_table_cube.json
+++ b/examples/test_case_data/localmeta/cube/test_streaming_table_cube.json
@@ -1,8 +1,8 @@
 {
   "uuid": "40a27d9d-c5f3-45c4-9b8b-503552419193",
+  "version":"2.1",
   "name": "test_streaming_table_cube",
   "owner": "ADMIN",
-  "version": null,
   "cost": 50,
   "status": "READY",
   "segments": [],

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_desc.json b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_desc.json
index 98b584b..e164e3e 100644
--- a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_desc.json
+++ b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_desc.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "a24ca905-1fc6-4f67-985c-38fa5aeafd92",
+  "version":"2.1",
   "name" : "test_kylin_cube_with_slr_desc",
   "description" : null,
   "dimensions" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
index cc95d28..5e450da 100644
--- a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
+++ b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_with_slr_left_join_desc.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "bbbba905-1fc6-4f67-985c-38fa5aeafd92",
+  "version":"2.1",
   "name" : "test_kylin_cube_with_slr_left_join_desc",
   "description" : null,
   "dimensions" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_desc.json b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_desc.json
index 4d44feb..fbe00d7 100644
--- a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_desc.json
+++ b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_desc.json
@@ -1,4 +1,6 @@
+
 {
+  "version":"2.1",
   "uuid": "9ac9b7a8-3929-4dff-b59d-2100aadc8dbf",
   "name": "test_kylin_cube_without_slr_desc",
   "description": null,

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_left_join_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_left_join_desc.json b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_left_join_desc.json
index 0b82d1e..f7a30e0 100644
--- a/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_left_join_desc.json
+++ b/examples/test_case_data/localmeta/cube_desc/test_kylin_cube_without_slr_left_join_desc.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "9ac9b7a8-3929-4dff-b59d-2100aadc8dbf",
+  "version":"2.1",
   "name" : "test_kylin_cube_without_slr_left_join_desc",
   "description" : null,
   "dimensions" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/cube_desc/test_streaming_table_cube_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/cube_desc/test_streaming_table_cube_desc.json b/examples/test_case_data/localmeta/cube_desc/test_streaming_table_cube_desc.json
index df88aca..2b26eeb 100644
--- a/examples/test_case_data/localmeta/cube_desc/test_streaming_table_cube_desc.json
+++ b/examples/test_case_data/localmeta/cube_desc/test_streaming_table_cube_desc.json
@@ -1,5 +1,6 @@
 {
   "uuid" : "901ed15e-7769-4c66-b7ae-fbdc971cd192",
+  "version":"2.1",
   "name" : "test_streaming_table_cube_desc",
   "description" : "",
   "dimensions" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_inner_join.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_inner_join.json b/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_inner_join.json
index 9e9a826..0bdefe8 100644
--- a/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_inner_join.json
+++ b/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_inner_join.json
@@ -1,5 +1,6 @@
 {
   "uuid": "9iiu8590-64b6-4367-8fb5-7500eb95fd9c",
+  "version":"2.1",
   "name": "test_kylin_hybrid_inner_join",
   "realizations": [
     {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_left_join.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_left_join.json b/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_left_join.json
index 4f0bf98..354863c 100644
--- a/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_left_join.json
+++ b/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_left_join.json
@@ -1,5 +1,6 @@
 {
   "uuid": "5ca78590-64b6-4367-8fb5-7500eb95fd9c",
+  "version":"2.1",
   "name": "test_kylin_hybrid_left_join",
   "realizations": [
     {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_ready.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_ready.json b/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_ready.json
index 0274a69..1d131c1 100644
--- a/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_ready.json
+++ b/examples/test_case_data/localmeta/hybrid/test_kylin_hybrid_ready.json
@@ -1,5 +1,6 @@
 {
   "uuid": "9iiu8590-64b6-4367-8fb5-7500eb95fd9c",
+  "version":"2.1",
   "name": "test_kylin_hybrid_ready",
   "realizations": [
     {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_inner_join.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_inner_join.json b/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_inner_join.json
index 4c0c3ef..5b8614f 100644
--- a/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_inner_join.json
+++ b/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_inner_join.json
@@ -1,4 +1,5 @@
 {
+  "model_version":"2.1",
   "uuid": "dk853e80-41be-49a5-89ca-9fb7294db186",
   "name": "test_kylin_ii_inner_join",
   "owner": null,

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_left_join.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_left_join.json b/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_left_join.json
index 90c21bb..67b4bca 100644
--- a/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_left_join.json
+++ b/examples/test_case_data/localmeta/invertedindex/test_kylin_ii_left_join.json
@@ -1,8 +1,8 @@
 {
+  "version":"2.1",
   "uuid": "daa53e80-41be-49a5-89ca-9fb7294db186",
   "name": "test_kylin_ii_left_join",
   "owner": null,
-  "version": null,
   "cost": 10,
   "status": "DISABLED",
   "segments": [],

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/invertedindex/test_streaming_table_ii.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/invertedindex/test_streaming_table_ii.json b/examples/test_case_data/localmeta/invertedindex/test_streaming_table_ii.json
index 9abe3ed..689f04c 100644
--- a/examples/test_case_data/localmeta/invertedindex/test_streaming_table_ii.json
+++ b/examples/test_case_data/localmeta/invertedindex/test_streaming_table_ii.json
@@ -1,8 +1,8 @@
 {
+  "version":"2.1",
   "uuid": "daa53e80-41be-49a5-89ca-9fb729999812",
   "name": "test_streaming_table_ii",
   "owner": null,
-  "version": null,
   "cost": 10,
   "status": "DISABLED",
   "segments": [],

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_inner_join_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_inner_join_desc.json b/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_inner_join_desc.json
index c78dfad..71549c1 100644
--- a/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_inner_join_desc.json
+++ b/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_inner_join_desc.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "88bf87b5-c7b5-4420-a12a-07f6b37b3187",
   "last_modified": 0,
   "name": "test_kylin_ii_inner_join_desc",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_left_join_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_left_join_desc.json b/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_left_join_desc.json
index d3b4ad7..a630490 100644
--- a/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_left_join_desc.json
+++ b/examples/test_case_data/localmeta/invertedindex_desc/test_kylin_ii_left_join_desc.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "74bf87b5-c7b5-4420-a12a-07f6b37b3187",
   "last_modified": 0,
   "name": "test_kylin_ii_left_join_desc",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/invertedindex_desc/test_streaming_table_ii_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/invertedindex_desc/test_streaming_table_ii_desc.json b/examples/test_case_data/localmeta/invertedindex_desc/test_streaming_table_ii_desc.json
index fe4d885..e5e6202 100644
--- a/examples/test_case_data/localmeta/invertedindex_desc/test_streaming_table_ii_desc.json
+++ b/examples/test_case_data/localmeta/invertedindex_desc/test_streaming_table_ii_desc.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "74bf87b5-c7b5-4420-a12a-07f6b3864789",
   "last_modified": 0,
   "name": "test_streaming_table_ii_desc",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/kafka/kafka_test.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/kafka/kafka_test.json b/examples/test_case_data/localmeta/kafka/kafka_test.json
index 272abd9..a20f71e 100644
--- a/examples/test_case_data/localmeta/kafka/kafka_test.json
+++ b/examples/test_case_data/localmeta/kafka/kafka_test.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "8b2b9dfe-900c-4d39-bf89-8472ec6c3c0d",
   "name": "kafka_test",
   "topic": "kafka_stream_test",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/kafka/test_streaming_table_cube.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/kafka/test_streaming_table_cube.json b/examples/test_case_data/localmeta/kafka/test_streaming_table_cube.json
index 24e5afe..554fa62 100644
--- a/examples/test_case_data/localmeta/kafka/test_streaming_table_cube.json
+++ b/examples/test_case_data/localmeta/kafka/test_streaming_table_cube.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "8b2b9dfe-777c-4d39-bf89-8472ec909193",
   "name": "test_streaming_table_cube",
   "topic": "test_streaming_table_topic_xyz",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/kafka/test_streaming_table_ii.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/kafka/test_streaming_table_ii.json b/examples/test_case_data/localmeta/kafka/test_streaming_table_ii.json
index f678349..b6f18c7 100644
--- a/examples/test_case_data/localmeta/kafka/test_streaming_table_ii.json
+++ b/examples/test_case_data/localmeta/kafka/test_streaming_table_ii.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "8b2b9dfe-900c-4d39-bf89-8472ec909322",
   "name": "test_streaming_table_ii",
   "topic": "test_streaming_table_topic_xyz",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json b/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
index a28684f..d908827 100644
--- a/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
+++ b/examples/test_case_data/localmeta/model_desc/test_kylin_inner_join_model_desc.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid" : "ff527b94-f860-44c3-8452-93b17774c647",
   "name" : "test_kylin_inner_join_model_desc",
   "lookups" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/model_desc/test_kylin_left_join_model_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/model_desc/test_kylin_left_join_model_desc.json b/examples/test_case_data/localmeta/model_desc/test_kylin_left_join_model_desc.json
index c26ffc5..cc413b2 100644
--- a/examples/test_case_data/localmeta/model_desc/test_kylin_left_join_model_desc.json
+++ b/examples/test_case_data/localmeta/model_desc/test_kylin_left_join_model_desc.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "9c0f4ee2-1ccb-4b07-a38e-4c298563e0f7",
   "name": "test_kylin_left_join_model_desc",
   "lookups": [

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/model_desc/test_streaming_table_model_desc.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/model_desc/test_streaming_table_model_desc.json b/examples/test_case_data/localmeta/model_desc/test_streaming_table_model_desc.json
index f35a65e..e7392d6 100644
--- a/examples/test_case_data/localmeta/model_desc/test_streaming_table_model_desc.json
+++ b/examples/test_case_data/localmeta/model_desc/test_streaming_table_model_desc.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "ff527b94-f860-44c3-8452-93b177888732",
   "name": "test_streaming_table_model_desc",
   "dimensions": [

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/project/default.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/project/default.json b/examples/test_case_data/localmeta/project/default.json
index 6cf5747..8d138dd 100644
--- a/examples/test_case_data/localmeta/project/default.json
+++ b/examples/test_case_data/localmeta/project/default.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "1eaca32a-a33e-4b69-83dd-0bb8b1f8c91b",
   "name": "default",
   "realizations": [

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/streaming/kafka_test.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/streaming/kafka_test.json b/examples/test_case_data/localmeta/streaming/kafka_test.json
index 272abd9..a20f71e 100644
--- a/examples/test_case_data/localmeta/streaming/kafka_test.json
+++ b/examples/test_case_data/localmeta/streaming/kafka_test.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "8b2b9dfe-900c-4d39-bf89-8472ec6c3c0d",
   "name": "kafka_test",
   "topic": "kafka_stream_test",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/streaming/test_streaming_table_cube.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/streaming/test_streaming_table_cube.json b/examples/test_case_data/localmeta/streaming/test_streaming_table_cube.json
index b358183..ecf0511 100644
--- a/examples/test_case_data/localmeta/streaming/test_streaming_table_cube.json
+++ b/examples/test_case_data/localmeta/streaming/test_streaming_table_cube.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "8b2b9dfe-777c-4d39-bf89-8472ec909193",
   "name": "test_streaming_table_cube",
   "cubeName": "test_streaming_table_cube",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/streaming/test_streaming_table_ii.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/streaming/test_streaming_table_ii.json b/examples/test_case_data/localmeta/streaming/test_streaming_table_ii.json
index da1a765..022ab70 100644
--- a/examples/test_case_data/localmeta/streaming/test_streaming_table_ii.json
+++ b/examples/test_case_data/localmeta/streaming/test_streaming_table_ii.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "8b2b9dfe-900c-4d39-bf89-8472ec909322",
   "name": "test_streaming_table_ii",
   "iiName": "test_streaming_table_ii",

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/table/DEFAULT.STREAMING_TABLE.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/table/DEFAULT.STREAMING_TABLE.json b/examples/test_case_data/localmeta/table/DEFAULT.STREAMING_TABLE.json
index c9a1f98..6030a5e 100644
--- a/examples/test_case_data/localmeta/table/DEFAULT.STREAMING_TABLE.json
+++ b/examples/test_case_data/localmeta/table/DEFAULT.STREAMING_TABLE.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid": "e286e39e-40d7-44c2-8fa2-41b365123987",
   "name": "STREAMING_TABLE",
   "columns": [

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json b/examples/test_case_data/localmeta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json
index 7bcd092..6929203 100644
--- a/examples/test_case_data/localmeta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json
+++ b/examples/test_case_data/localmeta/table/DEFAULT.TEST_CATEGORY_GROUPINGS.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid" : "952d11b5-69d9-45d1-92af-227489485e3f",
   "name" : "TEST_CATEGORY_GROUPINGS",
   "columns" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/table/DEFAULT.TEST_KYLIN_FACT.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/table/DEFAULT.TEST_KYLIN_FACT.json b/examples/test_case_data/localmeta/table/DEFAULT.TEST_KYLIN_FACT.json
index 7e44205..2e227d6 100644
--- a/examples/test_case_data/localmeta/table/DEFAULT.TEST_KYLIN_FACT.json
+++ b/examples/test_case_data/localmeta/table/DEFAULT.TEST_KYLIN_FACT.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid" : "e286e39e-40d7-44c2-8fa2-41b365522771",
   "name" : "TEST_KYLIN_FACT",
   "columns" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/table/EDW.TEST_CAL_DT.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/table/EDW.TEST_CAL_DT.json b/examples/test_case_data/localmeta/table/EDW.TEST_CAL_DT.json
index 0ad7ee1..7d78673 100644
--- a/examples/test_case_data/localmeta/table/EDW.TEST_CAL_DT.json
+++ b/examples/test_case_data/localmeta/table/EDW.TEST_CAL_DT.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid" : "0ff420eb-79ad-40bd-bca9-12d8cd05c60a",
   "name" : "TEST_CAL_DT",
   "columns" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/table/EDW.TEST_SELLER_TYPE_DIM.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/table/EDW.TEST_SELLER_TYPE_DIM.json b/examples/test_case_data/localmeta/table/EDW.TEST_SELLER_TYPE_DIM.json
index 42f4d9c..6bfd3c4 100644
--- a/examples/test_case_data/localmeta/table/EDW.TEST_SELLER_TYPE_DIM.json
+++ b/examples/test_case_data/localmeta/table/EDW.TEST_SELLER_TYPE_DIM.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid" : "9ecc90c4-55df-436f-8602-2fbd4bca72e1",
   "name" : "TEST_SELLER_TYPE_DIM",
   "columns" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/examples/test_case_data/localmeta/table/EDW.TEST_SITES.json
----------------------------------------------------------------------
diff --git a/examples/test_case_data/localmeta/table/EDW.TEST_SITES.json b/examples/test_case_data/localmeta/table/EDW.TEST_SITES.json
index d451e34..cab1edb 100644
--- a/examples/test_case_data/localmeta/table/EDW.TEST_SITES.json
+++ b/examples/test_case_data/localmeta/table/EDW.TEST_SITES.json
@@ -1,4 +1,5 @@
 {
+  "version":"2.1",
   "uuid" : "338a3325-a947-46d1-9ece-e079b3b8d4a6",
   "name" : "TEST_SITES",
   "columns" : [ {

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/invertedindex/src/main/java/org/apache/kylin/invertedindex/IIInstance.java
----------------------------------------------------------------------
diff --git a/invertedindex/src/main/java/org/apache/kylin/invertedindex/IIInstance.java b/invertedindex/src/main/java/org/apache/kylin/invertedindex/IIInstance.java
index d85746e..117bc02 100644
--- a/invertedindex/src/main/java/org/apache/kylin/invertedindex/IIInstance.java
+++ b/invertedindex/src/main/java/org/apache/kylin/invertedindex/IIInstance.java
@@ -60,7 +60,7 @@ public class IIInstance extends RootPersistentEntity implements IRealization, IB
         iii.setDescName(iiDesc.getName());
         iii.setCreateTimeUTC(System.currentTimeMillis());
         iii.setStatus(RealizationStatusEnum.DISABLED);
-        iii.updateRandomUuid();
+        iii.updateVersionAndRandomUuid();
 
         return iii;
     }
@@ -71,8 +71,6 @@ public class IIInstance extends RootPersistentEntity implements IRealization, IB
     private String name;
     @JsonProperty("owner")
     private String owner;
-    @JsonProperty("version")
-    private String version; // user info only, we don't do version control
     @JsonProperty("descriptor")
     private String descName;
     // Mark cube priority for query
@@ -202,14 +200,6 @@ public class IIInstance extends RootPersistentEntity implements IRealization, IB
         this.owner = owner;
     }
 
-    public String getVersion() {
-        return version;
-    }
-
-    public void setVersion(String version) {
-        this.version = version;
-    }
-
     public String getDescName() {
         return descName;
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git a/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index 9afa750..4741cef 100644
--- a/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -308,7 +308,7 @@ public class CubeController extends BasicController {
                 isStreamingCube = true;
                 newStreamingConfig = streamingConfigs.get(0).clone();
                 newStreamingConfig.setName(newCubeName + "_STREAMING");
-                newStreamingConfig.updateRandomUuid();
+                newStreamingConfig.updateVersionAndRandomUuid();
                 newStreamingConfig.setLastModified(0);
                 newStreamingConfig.setCubeName(newCubeName);
                 try {
@@ -327,7 +327,7 @@ public class CubeController extends BasicController {
                         newKafkaConfig = kafkaConfig.clone();
                         newKafkaConfig.setName(newStreamingConfig.getName());
                         newKafkaConfig.setLastModified(0);
-                        newKafkaConfig.updateRandomUuid();
+                        newKafkaConfig.updateVersionAndRandomUuid();
                     }
                 } catch (IOException e) {
                     throw new InternalErrorException("Failed to get kafka config info. ", e);

http://git-wip-us.apache.org/repos/asf/kylin/blob/e2a0d1d8/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ExtendCubeToHybridCLI.java
----------------------------------------------------------------------
diff --git a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ExtendCubeToHybridCLI.java b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ExtendCubeToHybridCLI.java
index c55bde4..1f46369 100644
--- a/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ExtendCubeToHybridCLI.java
+++ b/storage-hbase/src/main/java/org/apache/kylin/storage/hbase/util/ExtendCubeToHybridCLI.java
@@ -147,7 +147,7 @@ public class ExtendCubeToHybridCLI {
         CubeInstance newCubeInstance = CubeInstance.getCopyOf(cubeInstance);
         newCubeInstance.setName(newCubeInstanceName);
         newCubeInstance.setDescName(newCubeDescName);
-        newCubeInstance.updateRandomUuid();
+        newCubeInstance.updateVersionAndRandomUuid();
         Iterator<CubeSegment> segmentIterator = newCubeInstance.getSegments().iterator();
         CubeSegment currentSeg = null;
         while (segmentIterator.hasNext()) {
@@ -170,7 +170,7 @@ public class ExtendCubeToHybridCLI {
         // create new cube for old segments
         CubeDesc newCubeDesc = CubeDesc.getCopyOf(cubeDesc);
         newCubeDesc.setName(newCubeDescName);
-        newCubeDesc.updateRandomUuid();
+        newCubeDesc.updateVersionAndRandomUuid();
         newCubeDesc.init(kylinConfig, metadataManager.getAllTablesMap());
         newCubeDesc.setPartitionDateEnd(partitionDate);
         newCubeDesc.calculateSignature();