You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2017/01/30 07:12:32 UTC

lens git commit: LENS-773: Include dimension table partitions in FactPartitionBasedQueryCostCalculator

Repository: lens
Updated Branches:
  refs/heads/master d46e78cff -> 6af57fb67


LENS-773: Include dimension table partitions in FactPartitionBasedQueryCostCalculator


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

Branch: refs/heads/master
Commit: 6af57fb6748eaf2501258d1f9756c3476a6e3087
Parents: d46e78c
Author: Amareshwari Sriramadasu <am...@apache.org>
Authored: Mon Jan 30 12:42:14 2017 +0530
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Mon Jan 30 12:42:14 2017 +0530

----------------------------------------------------------------------
 .../FactPartitionBasedQueryCostCalculator.java  |  3 +++
 ...stFactPartitionBasedQueryCostCalculator.java | 21 +++++++++++++++-----
 2 files changed, 19 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/6af57fb6/lens-cube/src/main/java/org/apache/lens/cube/query/cost/FactPartitionBasedQueryCostCalculator.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/query/cost/FactPartitionBasedQueryCostCalculator.java b/lens-cube/src/main/java/org/apache/lens/cube/query/cost/FactPartitionBasedQueryCostCalculator.java
index 9fecdbc..3c157ee 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/query/cost/FactPartitionBasedQueryCostCalculator.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/query/cost/FactPartitionBasedQueryCostCalculator.java
@@ -67,6 +67,9 @@ public class FactPartitionBasedQueryCostCalculator implements QueryCostCalculato
           }
           cost += allTableWeights * getNormalizedUpdatePeriodCost(partition.getPeriod(), driver);
         }
+      } else {
+        // increase cost for every dimtable partition
+        cost += 1.0;
       }
     }
     return cost;

http://git-wip-us.apache.org/repos/asf/lens/blob/6af57fb6/lens-cube/src/test/java/org/apache/lens/cube/query/cost/TestFactPartitionBasedQueryCostCalculator.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/query/cost/TestFactPartitionBasedQueryCostCalculator.java b/lens-cube/src/test/java/org/apache/lens/cube/query/cost/TestFactPartitionBasedQueryCostCalculator.java
index 262d452..b5e73fd 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/query/cost/TestFactPartitionBasedQueryCostCalculator.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/query/cost/TestFactPartitionBasedQueryCostCalculator.java
@@ -25,6 +25,7 @@ import static org.apache.lens.cube.metadata.UpdatePeriod.*;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.testng.Assert.*;
 
 import java.util.HashMap;
 import java.util.Set;
@@ -43,12 +44,12 @@ import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
-import junit.framework.Assert;
 
 public class TestFactPartitionBasedQueryCostCalculator {
   AbstractQueryContext queryContext;
   FactPartitionBasedQueryCostCalculator calculator = new FactPartitionBasedQueryCostCalculator();
   LensDriver driver;
+  private static String latest = "latest";
 
   @BeforeTest
   public void setUp() {
@@ -68,6 +69,7 @@ public class TestFactPartitionBasedQueryCostCalculator {
     HashMap<String, Set<?>> partitions = new HashMap<>();
     partitions.put("st1", Sets.newHashSet(fp1, fp2));
     partitions.put("st2", Sets.newHashSet(fp3, fp4));
+    partitions.put("st3", Sets.newHashSet(latest));
     DriverQueryPlan plan = mock(DriverQueryPlan.class);
     when(queryContext.getDriverRewriterPlan(driver)).thenReturn(plan);
     when(plan.getPartitions()).thenReturn(partitions);
@@ -85,12 +87,21 @@ public class TestFactPartitionBasedQueryCostCalculator {
   @Test
   public void testCalculateCost() throws Exception {
     QueryCost cost = calculator.calculateCost(queryContext, driver);
-    Assert.assertTrue(cost.getEstimatedResourceUsage() > 18.0);
-    Assert.assertTrue(cost.getEstimatedResourceUsage() < 19.0);
+    assertTrue(cost.getEstimatedResourceUsage() > 19.0, "Estimated resource usage:" + cost.getEstimatedResourceUsage());
+    assertTrue(cost.getEstimatedResourceUsage() < 20.0, "Estimated resource usage:" + cost.getEstimatedResourceUsage());
   }
 
   @Test
-  public void testGetAllPartitions() throws Exception {
-
+  public void testDimensionCost() throws Exception {
+    AbstractQueryContext queryContext2 = mock(AbstractQueryContext.class);
+    HashMap<String, Set<?>> partitions = new HashMap<>();
+    partitions.put("st1", Sets.newHashSet(latest));
+    partitions.put("st2", Sets.newHashSet(latest));
+    DriverQueryPlan plan = mock(DriverQueryPlan.class);
+    when(queryContext2.getDriverRewriterPlan(driver)).thenReturn(plan);
+    when(plan.getPartitions()).thenReturn(partitions);
+    when(calculator.getAllPartitions(queryContext2, driver)).thenReturn(partitions);
+    QueryCost cost = calculator.calculateCost(queryContext2, driver);
+    assertTrue(cost.getEstimatedResourceUsage() == 2.0, "Estimated resource usage:" + cost.getEstimatedResourceUsage());
   }
 }