/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.lens.regression.throttling; import java.lang.reflect.Method; import java.util.*; import javax.ws.rs.client.WebTarget; import org.apache.lens.api.query.LensQuery; import org.apache.lens.api.query.QueryHandle; import org.apache.lens.api.query.QueryStatus; import org.apache.lens.cube.parse.CubeQueryConfUtil; import org.apache.lens.regression.core.constants.DriverConfig; import org.apache.lens.regression.core.constants.QueryInventory; import org.apache.lens.regression.core.helpers.ServiceManagerHelper; import org.apache.lens.regression.core.testHelper.BaseTestClass; import org.apache.lens.regression.util.Util; import org.apache.lens.server.api.util.LensUtil; import org.apache.log4j.Logger; import org.testng.Assert; import org.testng.annotations.*; public class ITQueueNumberTests extends BaseTestClass { private WebTarget servLens; private String sessionHandleString; public static final String COST_95 = QueryInventory.getQueryFromInventory("HIVE.COST_95"); public static final String COST_60 = QueryInventory.getQueryFromInventory("HIVE.COST_60"); public static final String COST_30 = QueryInventory.getQueryFromInventory("HIVE.COST_30"); public static final String COST_20 = QueryInventory.getQueryFromInventory("HIVE.COST_20"); public static final String COST_10 = QueryInventory.getQueryFromInventory("HIVE.COST_10"); public static final String COST_5 = QueryInventory.getQueryFromInventory("HIVE.COST_5"); public static final String COST_3 = QueryInventory.getQueryFromInventory("HIVE.COST_3"); public static final String COST_2 = QueryInventory.getQueryFromInventory("HIVE.COST_2"); public static final String JDBC_QUERY1 = QueryInventory.getQueryFromInventory("JDBC.QUERY1"); private String hiveDriverSitePath = lens.getServerDir() + "/conf/drivers/hive/hive1/hivedriver-site.xml"; private static Logger logger = Logger.getLogger(ITQueueNumberTests.class); @BeforeClass(alwaysRun = true) public void initialize() throws Exception { servLens = ServiceManagerHelper.init(); logger.info("Creating a new Session"); sessionHandleString = sHelper.openSession(lens.getCurrentDB()); sHelper.setAndValidateParam(CubeQueryConfUtil.FAIL_QUERY_ON_PARTIAL_DATA, "false"); } @BeforeMethod(alwaysRun = true) public void setUp(Method method) throws Exception { logger.info("Test Name: " + method.getName()); } @AfterMethod(alwaysRun = true) public void afterMethod(Method method) throws Exception { logger.info("Test Name: " + method.getName()); qHelper.killQuery(null, "QUEUED", "all"); qHelper.killQuery(null, "RUNNING", "all"); qHelper.killQuery(null, "EXECUTED", "all"); } @AfterClass(alwaysRun = true) public void closeSession() throws Exception { logger.info("Closing Session"); sHelper.closeSession(); } /* * LENS-995 : Queue number shouldn't change with in the same prority */ @Test(enabled = true) public void queueNumberChangeWithInSamePriority() throws Exception { String longRunningQuery = String.format(QueryInventory.getQueryFromInventory("HIVE.SLEEP_COST_95"), "20"); HashMap<String, String> map = LensUtil.getHashMap(DriverConfig.MAX_CONCURRENT_QUERIES, "1"); String[] queries = {longRunningQuery, COST_5, COST_5, COST_3, COST_2}; try { Util.changeConfig(map, hiveDriverSitePath); lens.restart(); List<QueryHandle> handleList = new ArrayList<>(); for(String query : queries){ handleList.add((QueryHandle) qHelper.executeQuery(query).getData()); } LensQuery lq1 = qHelper.getLensQuery(sessionHandleString, handleList.get(1)); LensQuery lq2 = qHelper.getLensQuery(sessionHandleString, handleList.get(2)); LensQuery lq3 = qHelper.getLensQuery(sessionHandleString, handleList.get(3)); LensQuery lq4 = qHelper.getLensQuery(sessionHandleString, handleList.get(4)); Assert.assertEquals(lq1.getStatus().getQueueNumber().intValue(), 1); Assert.assertEquals(lq2.getStatus().getQueueNumber().intValue(), 2); Assert.assertEquals(lq3.getStatus().getQueueNumber().intValue(), 3); Assert.assertEquals(lq4.getStatus().getQueueNumber().intValue(), 4); LensQuery lq0 = qHelper.waitForCompletion(handleList.get(0)); lq1 = qHelper.getLensQuery(sessionHandleString, handleList.get(1)); lq2 = qHelper.getLensQuery(sessionHandleString, handleList.get(2)); lq3 = qHelper.getLensQuery(sessionHandleString, handleList.get(3)); lq4 = qHelper.getLensQuery(sessionHandleString, handleList.get(4)); Assert.assertEquals(lq0.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); Assert.assertEquals(lq2.getStatus().getQueueNumber().intValue(), 1); Assert.assertEquals(lq3.getStatus().getQueueNumber().intValue(), 2); Assert.assertEquals(lq4.getStatus().getQueueNumber().intValue(), 3); lq1 = qHelper.waitForCompletion(handleList.get(1)); lq2 = qHelper.getLensQuery(sessionHandleString, handleList.get(2)); lq3 = qHelper.getLensQuery(sessionHandleString, handleList.get(3)); lq4 = qHelper.getLensQuery(sessionHandleString, handleList.get(4)); Assert.assertEquals(lq1.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL); Assert.assertEquals(lq3.getStatus().getQueueNumber().intValue(), 1); Assert.assertEquals(lq4.getStatus().getQueueNumber().intValue(), 2); }finally { Util.changeConfig(hiveDriverSitePath); lens.restart(); } } @Test(enabled = true) public void queueNumberChangeDifferentPriority() throws Exception { String longRunningQuery = String.format(QueryInventory.getQueryFromInventory("HIVE.SLEEP_COST_95"), "20"); HashMap<String, String> map = LensUtil.getHashMap(DriverConfig.MAX_CONCURRENT_QUERIES, "1"); try { Util.changeConfig(map, hiveDriverSitePath); lens.restart(); QueryHandle q0 = (QueryHandle) qHelper.executeQuery(longRunningQuery).getData(); QueryHandle q1 = (QueryHandle) qHelper.executeQuery(COST_20).getData(); QueryHandle q2 = (QueryHandle) qHelper.executeQuery(COST_2).getData(); LensQuery normal1 = qHelper.getLensQuery(sessionHandleString, q1); LensQuery high1 = qHelper.getLensQuery(sessionHandleString, q2); Assert.assertEquals(normal1.getStatus().getQueueNumber().intValue(), 2); Assert.assertEquals(high1.getStatus().getQueueNumber().intValue(), 1); QueryHandle q3 = (QueryHandle) qHelper.executeQuery(COST_5).getData(); LensQuery high2 = qHelper.getLensQuery(sessionHandleString, q3); high1 = qHelper.getLensQuery(sessionHandleString, q2); normal1 = qHelper.getLensQuery(sessionHandleString, q1); Assert.assertEquals(normal1.getStatus().getQueueNumber().intValue(), 3); Assert.assertEquals(high1.getStatus().getQueueNumber().intValue(), 1); Assert.assertEquals(high2.getStatus().getQueueNumber().intValue(), 2); QueryHandle q4 = (QueryHandle) qHelper.executeQuery(COST_20).getData(); LensQuery normal2 = qHelper.getLensQuery(sessionHandleString, q4); normal1 = qHelper.getLensQuery(sessionHandleString, q1); high1 = qHelper.getLensQuery(sessionHandleString, q2); high2 = qHelper.getLensQuery(sessionHandleString, q3); Assert.assertEquals(high1.getStatus().getQueueNumber().intValue(), 1); Assert.assertEquals(high2.getStatus().getQueueNumber().intValue(), 2); Assert.assertEquals(normal1.getStatus().getQueueNumber().intValue(), 3); Assert.assertEquals(normal2.getStatus().getQueueNumber().intValue(), 4); }finally { Util.changeConfig(hiveDriverSitePath); lens.restart(); } } @Test(enabled = true) public void queueNumberChangeDifferentPriorityWithJdbc() throws Exception { String longRunningQuery = String.format(QueryInventory.getQueryFromInventory("HIVE.SLEEP_COST_95"), "20"); HashMap<String, String> map = LensUtil.getHashMap(DriverConfig.MAX_CONCURRENT_QUERIES, "1"); List<QueryHandle> handleList = new ArrayList<>(); try { Util.changeConfig(map, hiveDriverSitePath); lens.restart(); String[] queries = {COST_20, COST_2, COST_3, COST_60, COST_5, COST_10, COST_3}; // Queue order is determined from priority and order in which queries are fired. int[] queueNo = {5, 1, 2, 7, 3, 6, 4}; qHelper.executeQuery(longRunningQuery); for(String query : queries){ handleList.add((QueryHandle) qHelper.executeQuery(query).getData()); qHelper.executeQuery(JDBC_QUERY1).getData(); } List<LensQuery> lqList = new ArrayList<>(); for(QueryHandle qh : handleList){ lqList.add(qHelper.getLensQuery(sessionHandleString, qh)); } for(int i = 0; i < lqList.size(); i++) { Assert.assertEquals(lqList.get(i).getStatus().getQueueNumber().intValue(), queueNo[i]); } }finally { Util.changeConfig(hiveDriverSitePath); lens.restart(); } } }