You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2017/07/06 14:05:41 UTC

lens git commit: LENS-1451: Enforcing valid fact tables doesn't filter out segmentations

Repository: lens
Updated Branches:
  refs/heads/master e570e9e33 -> 45521bf2c


LENS-1451: Enforcing valid fact tables doesn't filter out segmentations


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

Branch: refs/heads/master
Commit: 45521bf2c05b2babb2fc96a2000c3dc11fb4329c
Parents: e570e9e
Author: Rajat Khandelwal <pr...@apache.org>
Authored: Thu Jul 6 19:35:15 2017 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Thu Jul 6 19:35:15 2017 +0530

----------------------------------------------------------------------
 .../lens/cube/parse/CandidateTableResolver.java | 26 ++++++++++----------
 1 file changed, 13 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/45521bf2/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
index be3b474..86209bd 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
@@ -104,6 +104,9 @@ class CandidateTableResolver implements ContextRewriter {
 
   private void populateCandidateTables(CubeQueryContext cubeql) throws LensException {
     if (cubeql.getCube() != null) {
+      String str = cubeql.getConf().get(CubeQueryConfUtil.getValidFactTablesKey(cubeql.getCube().getName()));
+      List<String> validFactTables =
+        StringUtils.isBlank(str) ? null : Arrays.asList(StringUtils.split(str.toLowerCase(), ","));
       List<FactTable> factTables = cubeql.getMetastoreClient().getAllFacts(cubeql.getCube());
       if (factTables.isEmpty()) {
         throw new LensException(LensCubeErrorCode.NO_CANDIDATE_FACT_AVAILABLE.getLensErrorInfo(),
@@ -112,11 +115,15 @@ class CandidateTableResolver implements ContextRewriter {
       for (FactTable fact : factTables) {
         if (fact.getUpdatePeriods().isEmpty()) {
           log.info("Not considering fact: {} as it has no update periods", fact.getName());
+        } else if (validFactTables != null && !validFactTables.contains(fact.getName())) {
+          log.info("Not considering fact: {} as it's not valid as per user configuration.", fact.getName());
         } else {
           for (String s : fact.getStorages()) {
             StorageCandidate sc = new StorageCandidate(cubeql.getCube(), fact, s, cubeql);
             if (isStorageSupportedOnDriver(sc.getStorageName())) {
               cubeql.getCandidates().add(sc);
+            } else {
+              log.info("Not considering {} since storage is not supported on driver.", sc.getName());
             }
           }
         }
@@ -125,7 +132,12 @@ class CandidateTableResolver implements ContextRewriter {
       log.info("Populated storage candidates: {}", cubeql.getCandidates());
       List<SegmentationCandidate> segmentationCandidates = Lists.newArrayList();
       for (Segmentation segmentation : cubeql.getMetastoreClient().getAllSegmentations(cubeql.getCube())) {
-        segmentationCandidates.add(new SegmentationCandidate(cubeql, segmentation));
+        if (validFactTables != null && !validFactTables.contains(segmentation.getName())) {
+          log.info("Not considering segmentation: {} as it's not valid as per user configuration.",
+            segmentation.getName());
+        } else {
+          segmentationCandidates.add(new SegmentationCandidate(cubeql, segmentation));
+        }
       }
       cubeql.getCandidates().addAll(segmentationCandidates);
     }
@@ -261,9 +273,6 @@ class CandidateTableResolver implements ContextRewriter {
 
   private void resolveCandidateFactTables(CubeQueryContext cubeql) throws LensException {
     if (cubeql.getCube() != null) {
-      String str = cubeql.getConf().get(CubeQueryConfUtil.getValidFactTablesKey(cubeql.getCube().getName()));
-      List<String> validFactTables =
-          StringUtils.isBlank(str) ? null : Arrays.asList(StringUtils.split(str.toLowerCase(), ","));
 
       Set<QueriedPhraseContext> queriedMsrs = new HashSet<>();
       Set<QueriedPhraseContext> dimExprs = new HashSet<>();
@@ -279,15 +288,6 @@ class CandidateTableResolver implements ContextRewriter {
         Candidate cand = i.next();
         if (cand instanceof StorageCandidate) {
           StorageCandidate sc = (StorageCandidate) cand;
-          if (validFactTables != null) {
-            if (!validFactTables.contains(sc.getFact().getName().toLowerCase())) {
-              log.info("Not considering storage candidate:{} as it is not a valid candidate", sc);
-              cubeql.addStoragePruningMsg(sc, new CandidateTablePruneCause(CandidateTablePruneCode.INVALID));
-              i.remove();
-              continue;
-            }
-          }
-
           // update expression evaluability for this fact
           for (String expr : cubeql.getQueriedExprs()) {
             cubeql.getExprCtx().updateEvaluables(expr, sc);