Repository: lens Updated Branches: refs/heads/master 96fc4422a -> 2e1edff87
LENS-1493: TotalQueryCost logic broken Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/2e1edff8 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/2e1edff8 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/2e1edff8 Branch: refs/heads/master Commit: 2e1edff870154933f9a1018927dea880639ca695 Parents: 96fc442 Author: Rajitha R <[email protected]> Authored: Tue Dec 19 17:01:10 2017 +0530 Committer: Puneet Gupta <[email protected]> Committed: Tue Dec 19 17:01:10 2017 +0530 ---------------------------------------------------------------------- .../server/api/query/cost/StaticQueryCost.java | 1 + .../DefaultEstimatedQueryCollection.java | 12 ++++++------ .../DefaultEstimatedQueryCollectionTest.java | 20 ++++++++------------ 3 files changed, 15 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/2e1edff8/lens-server-api/src/main/java/org/apache/lens/server/api/query/cost/StaticQueryCost.java ---------------------------------------------------------------------- diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/query/cost/StaticQueryCost.java b/lens-server-api/src/main/java/org/apache/lens/server/api/query/cost/StaticQueryCost.java index 8cdc254..5377ab2 100644 --- a/lens-server-api/src/main/java/org/apache/lens/server/api/query/cost/StaticQueryCost.java +++ b/lens-server-api/src/main/java/org/apache/lens/server/api/query/cost/StaticQueryCost.java @@ -41,6 +41,7 @@ public class StaticQueryCost implements QueryCost<StaticQueryCost>, Serializable public StaticQueryCost(final double cost) { this.staticCost = cost; + this.queryCostType = QueryCostType.HIGH; } //Added for testcase http://git-wip-us.apache.org/repos/asf/lens/blob/2e1edff8/lens-server/src/main/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollection.java ---------------------------------------------------------------------- diff --git a/lens-server/src/main/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollection.java b/lens-server/src/main/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollection.java index 9a37afd..aa1406e 100644 --- a/lens-server/src/main/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollection.java +++ b/lens-server/src/main/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollection.java @@ -28,6 +28,7 @@ import org.apache.lens.server.api.driver.LensDriver; import org.apache.lens.server.api.query.QueryContext; import org.apache.lens.server.api.query.cost.FactPartitionBasedQueryCost; import org.apache.lens.server.api.query.cost.QueryCost; +import org.apache.lens.server.api.query.cost.StaticQueryCost; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.map.MultiValueMap; @@ -160,18 +161,17 @@ public class DefaultEstimatedQueryCollection implements EstimatedQueryCollection private QueryCost getTotalQueryCost(final Collection<QueryContext> queries) { if (queries.isEmpty()) { - return new FactPartitionBasedQueryCost(0); + return new StaticQueryCost(0); } - QueryContext query0 = Iterables.get(queries, 0); - QueryCost totalQueryCost = query0.getSelectedDriverQueryCost(); + Double totalQueryCost = 0d; for (QueryContext query : queries) { - QueryCost queryCost = query.getSelectedDriverQueryCost(); - totalQueryCost = totalQueryCost.add(queryCost); + Double queryCost = query.getSelectedDriverQueryCost().getEstimatedResourceUsage(); + totalQueryCost = totalQueryCost + queryCost; } log.debug("Total Query Cost:{}", totalQueryCost); - return totalQueryCost; + return new StaticQueryCost(totalQueryCost); } @Override http://git-wip-us.apache.org/repos/asf/lens/blob/2e1edff8/lens-server/src/test/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollectionTest.java ---------------------------------------------------------------------- diff --git a/lens-server/src/test/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollectionTest.java b/lens-server/src/test/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollectionTest.java index 4dde18a..06ac9fb 100644 --- a/lens-server/src/test/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollectionTest.java +++ b/lens-server/src/test/java/org/apache/lens/server/query/collect/DefaultEstimatedQueryCollectionTest.java @@ -30,8 +30,8 @@ import java.util.Set; import org.apache.lens.server.api.driver.LensDriver; import org.apache.lens.server.api.error.LensException; import org.apache.lens.server.api.query.QueryContext; -import org.apache.lens.server.api.query.cost.FactPartitionBasedQueryCost; import org.apache.lens.server.api.query.cost.QueryCost; +import org.apache.lens.server.api.query.cost.StaticQueryCost; import org.testng.annotations.Test; @@ -50,7 +50,7 @@ public class DefaultEstimatedQueryCollectionTest { EstimatedQueryCollection queries = new DefaultEstimatedQueryCollection(mockQueries); QueryCost actualQueryCost = queries.getTotalQueryCost(MOCK_USER); - assertEquals(actualQueryCost, new FactPartitionBasedQueryCost(0)); + assertEquals(actualQueryCost, new StaticQueryCost(0)); } @Test @@ -63,19 +63,15 @@ public class DefaultEstimatedQueryCollectionTest { final QueryContext query0 = Iterables.get(mockQueriesSet, 0); final QueryContext query1 = Iterables.get(mockQueriesSet, 1); - final QueryCost mockCost0 = mock(QueryCost.class); - final QueryCost mockCost1 = mock(QueryCost.class); - final QueryCost mockCost0Plus0 = mock(QueryCost.class); - final QueryCost mockCost0Plus0Plus1 = mock(QueryCost.class); + final QueryCost sCost0 = new StaticQueryCost(1.0); + final QueryCost sCost1 = new StaticQueryCost(1.0); + final QueryCost expectedCost = new StaticQueryCost(2.0); - when(query0.getSelectedDriverQueryCost()).thenReturn(mockCost0); - when(query1.getSelectedDriverQueryCost()).thenReturn(mockCost1); - - when(mockCost0.add(mockCost0)).thenReturn(mockCost0Plus0); - when(mockCost0Plus0.add(mockCost1)).thenReturn(mockCost0Plus0Plus1); + when(query0.getSelectedDriverQueryCost()).thenReturn(sCost0); + when(query1.getSelectedDriverQueryCost()).thenReturn(sCost1); QueryCost actualQueryCost = new DefaultEstimatedQueryCollection(mockQueries).getTotalQueryCost(MOCK_USER); - assertEquals(actualQueryCost, mockCost0Plus0Plus1); + assertEquals(actualQueryCost, expectedCost); } @Test
