Repository: lens
Updated Branches:
  refs/heads/master b63e06c0c -> 22e202208


LENS-888 : Fix limit of 4000 on total string length of dim attribute names of 
derived cube


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

Branch: refs/heads/master
Commit: 22e202208cf6e7f216321f53a5cdc2cbdc113801
Parents: b63e06c
Author: Rajat Khandelwal <pro...@apache.org>
Authored: Thu Dec 10 11:10:08 2015 +0530
Committer: Amareshwari Sriramadasu <amareshw...@apache.org>
Committed: Thu Dec 10 11:10:08 2015 +0530

----------------------------------------------------------------------
 .../apache/lens/cube/metadata/DerivedCube.java  | 27 +++++++++++--------
 .../lens/cube/metadata/MetastoreUtil.java       | 16 ++++++++++-
 .../cube/metadata/TestCubeMetastoreClient.java  | 28 +++++++++++++++++---
 3 files changed, 56 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/22e20220/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java 
b/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java
index 3c30f78..681aa7b 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/DerivedCube.java
@@ -137,16 +137,23 @@ public class DerivedCube extends AbstractCubeTable 
implements CubeInterface {
   @Override
   public void addProperties() {
     super.addProperties();
-    getProperties().put(MetastoreUtil.getCubeMeasureListKey(getName()), 
StringUtils.join(measures, ",").toLowerCase());
-    getProperties().put(MetastoreUtil.getCubeDimensionListKey(getName()),
-      StringUtils.join(dimensions, ",").toLowerCase());
+    updateMeasureProperties();
+    updateDimAttributeProperties();
     getProperties().put(MetastoreUtil.getParentCubeNameKey(getName()), 
parent.getName().toLowerCase());
     getProperties().put(MetastoreUtil.getParentCubeNameKey(getName()), 
parent.getName().toLowerCase());
   }
+  public void updateDimAttributeProperties() {
+    MetastoreUtil.addNameStrings(getProperties(), 
MetastoreUtil.getCubeDimensionListKey(getName()),
+      MetastoreUtil.getNamedSetFromStringSet(dimensions));
+  }
+  public void updateMeasureProperties() {
+    MetastoreUtil.addNameStrings(getProperties(), 
MetastoreUtil.getCubeMeasureListKey(getName()),
+      MetastoreUtil.getNamedSetFromStringSet(measures));
+  }
 
   public static Set<String> getMeasures(String name, Map<String, String> 
props) {
     Set<String> measures = new HashSet<String>();
-    String measureStr = props.get(MetastoreUtil.getCubeMeasureListKey(name));
+    String measureStr = MetastoreUtil.getNamedStringValue(props, 
MetastoreUtil.getCubeMeasureListKey(name));
     measures.addAll(Arrays.asList(StringUtils.split(measureStr, ',')));
     return measures;
   }
@@ -164,7 +171,7 @@ public class DerivedCube extends AbstractCubeTable 
implements CubeInterface {
 
   public static Set<String> getDimensions(String name, Map<String, String> 
props) {
     Set<String> dimensions = new HashSet<String>();
-    String dimStr = props.get(MetastoreUtil.getCubeDimensionListKey(name));
+    String dimStr = MetastoreUtil.getNamedStringValue(props, 
MetastoreUtil.getCubeDimensionListKey(name));
     dimensions.addAll(Arrays.asList(StringUtils.split(dimStr, ',')));
     return dimensions;
   }
@@ -234,7 +241,7 @@ public class DerivedCube extends AbstractCubeTable 
implements CubeInterface {
    */
   public void addMeasure(String measure) throws HiveException {
     measures.add(measure.toLowerCase());
-    getProperties().put(MetastoreUtil.getCubeMeasureListKey(getName()), 
StringUtils.join(measures, ",").toLowerCase());
+    updateMeasureProperties();
   }
 
   /**
@@ -245,8 +252,7 @@ public class DerivedCube extends AbstractCubeTable 
implements CubeInterface {
    */
   public void addDimension(String dimension) throws HiveException {
     dimensions.add(dimension.toLowerCase());
-    getProperties().put(MetastoreUtil.getCubeDimensionListKey(getName()),
-      StringUtils.join(dimensions, ",").toLowerCase());
+    updateDimAttributeProperties();
   }
 
   /**
@@ -256,8 +262,7 @@ public class DerivedCube extends AbstractCubeTable 
implements CubeInterface {
    */
   public void removeDimension(String dimName) {
     dimensions.remove(dimName.toLowerCase());
-    getProperties().put(MetastoreUtil.getCubeDimensionListKey(getName()),
-      StringUtils.join(dimensions, ",").toLowerCase());
+    updateDimAttributeProperties();
   }
 
   /**
@@ -267,7 +272,7 @@ public class DerivedCube extends AbstractCubeTable 
implements CubeInterface {
    */
   public void removeMeasure(String msrName) {
     measures.remove(msrName.toLowerCase());
-    getProperties().put(MetastoreUtil.getCubeMeasureListKey(getName()), 
StringUtils.join(measures, ",").toLowerCase());
+    updateMeasureProperties();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/lens/blob/22e20220/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java 
b/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
index 4b57d95..4ec049c 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/metadata/MetastoreUtil.java
@@ -28,6 +28,8 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 import org.apache.hadoop.hive.ql.metadata.Partition;
 
+import com.google.common.collect.Sets;
+
 public class MetastoreUtil {
   private MetastoreUtil() {
 
@@ -394,11 +396,23 @@ public class MetastoreUtil {
 
   private static final int MAX_PARAM_LENGTH = 3999;
 
+  public static Set<Named> getNamedSetFromStringSet(Set<String> strings) {
+    Set<Named> nameds = Sets.newHashSet();
+    for(final String s: strings) {
+      nameds.add(new Named() {
+        @Override
+        public String getName() {
+          return s;
+        }
+      });
+    }
+    return nameds;
+  }
   public static <E extends Named> void addNameStrings(Map<String, String> 
props, String key, Collection<E> set) {
     addNameStrings(props, key, set, MAX_PARAM_LENGTH);
   }
 
-  static <E extends Named> void addNameStrings(Map<String, String> props, 
String key,
+  public static <E extends Named> void addNameStrings(Map<String, String> 
props, String key,
     Collection<E> set, int maxLength) {
     List<String> namedStrings = getNamedStrs(set, maxLength);
     props.put(key + ".size", String.valueOf(namedStrings.size()));

http://git-wip-us.apache.org/repos/asf/lens/blob/22e20220/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
index e415a5a..e5dbde7 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/metadata/TestCubeMetastoreClient.java
@@ -44,7 +44,10 @@ import 
org.apache.hadoop.hive.metastore.api.AlreadyExistsException;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat;
-import org.apache.hadoop.hive.ql.metadata.*;
+import org.apache.hadoop.hive.ql.metadata.Hive;
+import org.apache.hadoop.hive.ql.metadata.HiveException;
+import org.apache.hadoop.hive.ql.metadata.Partition;
+import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.ql.parse.ParseException;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.hive.serde.serdeConstants;
@@ -176,7 +179,11 @@ public class TestCubeMetastoreClient {
     cubeMeasures.add(new ColumnMeasure(
       new FieldSchema("msrcost2", "bigint", "measure with cost"),
       "Measure With cost2", null, "MAX", null, null, null, 100.0, 0.0, 
999999999999999999999999999.0));
-
+    Set<CubeMeasure> dummyMeasure = Sets.newHashSet();
+    for (int i = 0; i < 5000; i++) {
+      dummyMeasure.add(new ColumnMeasure(new FieldSchema("dummy_msr" + i, 
"bigint", "dummy measure " + i),
+        "", null, "SUM", null, null, null, 100.0, 0.0, 
999999999999999999999999999.0));
+    }
     cubeDimensions = new HashSet<>();
     List<CubeDimAttribute> locationHierarchy = new ArrayList<>();
     locationHierarchy.add(new ReferencedDimAtrribute(new 
FieldSchema("zipcode", "int", "zip"), "Zip refer",
@@ -194,6 +201,11 @@ public class TestCubeMetastoreClient {
     cubeDimensions.add(new BaseDimAttribute(new FieldSchema("dim1", "string", 
"basedim")));
     cubeDimensions.add(new ReferencedDimAtrribute(new FieldSchema("dim2", 
"id", "ref dim"), "Dim2 refer",
       new TableReference("testdim2", "id")));
+    Set<CubeDimAttribute> dummyDimAttributes = Sets.newHashSet();
+    for (int i = 0; i < 5000; i++) {
+      dummyDimAttributes.add(new BaseDimAttribute(new FieldSchema("dummy_dim" 
+ i, "string", "dummy dim " + i),
+        "dummy_dim" + i, null, null, null, null, regions));
+    }
 
     ExprSpec expr1 = new ExprSpec();
     expr1.setExpr("avg(msr1 + msr2)");
@@ -276,9 +288,17 @@ public class TestCubeMetastoreClient {
     joinChains.add(cityChain);
     cubeDimensions.add(new ReferencedDimAtrribute(new 
FieldSchema("zipcityname", "string", "zip city name"),
       "Zip city name", "cityFromZip", "name", null, null, null));
+    cubeMeasures.addAll(dummyMeasure);
+    cubeDimensions.addAll(dummyDimAttributes);
     cube = new Cube(cubeName, cubeMeasures, cubeDimensions, cubeExpressions, 
joinChains, emptyHashMap, 0.0);
     measures = Sets.newHashSet("msr1", "msr2", "msr3");
+    for(CubeMeasure measure: dummyMeasure) {
+      measures.add(measure.getName());
+    }
     dimensions = Sets.newHashSet("dim1", "dim2", "dim3");
+    for(CubeDimAttribute dimAttribute: dummyDimAttributes) {
+      dimensions.add(dimAttribute.getName());
+    }
     derivedCube = new DerivedCube(derivedCubeName, measures, dimensions, cube);
 
     
CUBE_PROPERTIES.put(MetastoreUtil.getCubeTimedDimensionListKey(cubeNameWithProps),
 "dt,mydate");
@@ -1292,16 +1312,18 @@ public class TestCubeMetastoreClient {
         "complete name differs at element " + i);
     }
   }
+
   private void assertTimeline(EndsAndHolesPartitionTimeline 
endsAndHolesPartitionTimeline,
     StoreAllPartitionTimeline storeAllPartitionTimeline, UpdatePeriod 
updatePeriod,
     int firstOffset, int latestOffset, int... holeOffsets) throws 
LensException {
     Date[] holeDates = new Date[holeOffsets.length];
-    for(int i = 0; i < holeOffsets.length; i++) {
+    for (int i = 0; i < holeOffsets.length; i++) {
       holeDates[i] = getDateWithOffset(holeOffsets[i]);
     }
     assertTimeline(endsAndHolesPartitionTimeline, storeAllPartitionTimeline, 
updatePeriod,
       getDateWithOffset(firstOffset), getDateWithOffset(latestOffset), 
holeDates);
   }
+
   private void assertTimeline(EndsAndHolesPartitionTimeline 
endsAndHolesPartitionTimeline,
     StoreAllPartitionTimeline storeAllPartitionTimeline, UpdatePeriod 
updatePeriod,
     Date first, Date latest, Date... holes) throws LensException {

Reply via email to