@Override public StaticQueryCost add(final StaticQueryCost other) { return new StaticQueryCost(staticCost + other.staticCost); }
private QueryCost getTotalQueryCost(final Collection<QueryContext> queries) { if (queries.isEmpty()) { return new StaticQueryCost(0); } Double totalQueryCost = 0d; for (QueryContext query : queries) { Double queryCost = query.getSelectedDriverQueryCost().getEstimatedResourceUsage(); totalQueryCost = totalQueryCost + queryCost; } log.debug("Total Query Cost:{}", totalQueryCost); return new StaticQueryCost(totalQueryCost); }
@Test public void testGetTotalQueryCostForUserWithMoreThanOneLaunchedQueries() throws LensException { QueryCollection mockQueries = mock(QueryCollection.class); Set<QueryContext> mockQueriesSet = createQueriesSetWithUserStubbing(2, MOCK_USER); when(mockQueries.getQueries(MOCK_USER)).thenReturn(mockQueriesSet); final QueryContext query0 = Iterables.get(mockQueriesSet, 0); final QueryContext query1 = Iterables.get(mockQueriesSet, 1); 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(sCost0); when(query1.getSelectedDriverQueryCost()).thenReturn(sCost1); QueryCost actualQueryCost = new DefaultEstimatedQueryCollection(mockQueries).getTotalQueryCost(MOCK_USER); assertEquals(actualQueryCost, expectedCost); }
@Test public void testStaticQueryCostIsSerializable() { new SerializationTest().verifySerializationAndDeserialization(new StaticQueryCost(Double.MAX_VALUE)); } }
@Override public void init(LensDriver lensDriver) throws LensException { QueryCostTypeDecider queryCostTypeDecider = new RangeBasedQueryCostTypeDecider( lensDriver.getConf().get(DRIVER_COST_TYPE_RANGES, DRIVER_QUERY_COST_TYPE_DEFAULT_RANGES)); this.queryCost = new StaticQueryCost(lensDriver.getConf().getDouble(DRIVER_QUERY_COST, DEFAULT_DRIVER_QUERY_COST)); this.queryCost.setQueryCostType(queryCostTypeDecider.decideCostType(this.queryCost)); }
@Test public void testGetTotalQueryCostForUserWithZeroLaunchedQueries() throws LensException { QueryCollection mockQueries = mock(QueryCollection.class); when(mockQueries.getQueries(MOCK_USER)).thenReturn(Sets.<QueryContext>newLinkedHashSet()); EstimatedQueryCollection queries = new DefaultEstimatedQueryCollection(mockQueries); QueryCost actualQueryCost = queries.getTotalQueryCost(MOCK_USER); assertEquals(actualQueryCost, new StaticQueryCost(0)); }
@Test(dataProvider = "dpSubmitTimeCompare") public void testCompareOnQuerySubmitTime(final long submitTimeQuery1, final long submitTimeQuery2, final int expectedResult) { QueryContext query1 = mock(QueryContext.class); when(query1.getPriority()).thenReturn(Priority.HIGH); QueryCost s1 = new StaticQueryCost(0.0); QueryCost s2 = new StaticQueryCost(0.0); when(query1.getSelectedDriverQueryCost()).thenReturn(s1); QueryContext query2 = mock(QueryContext.class); when(query2.getPriority()).thenReturn(Priority.HIGH); when(query2.getSelectedDriverQueryCost()).thenReturn(s2); when(query1.getSubmissionTime()).thenReturn(submitTimeQuery1); when(query2.getSubmissionTime()).thenReturn(submitTimeQuery2); // Cost and Priority both are same, hence the comparison should happen // on query submission time assertEquals(priorityAndFifoComparator.compare(query1, query2), expectedResult); assertEquals(costAndFifoComparator.compare(query1, query2), expectedResult); } }