/* * 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.kylin.query; import java.io.File; import java.util.Map; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.QueryContext; import org.apache.kylin.common.exceptions.ResourceLimitExceededException; import org.apache.kylin.metadata.realization.RealizationType; import org.apache.kylin.query.routing.Candidate; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Maps; public class ITFailfastQueryTest extends KylinTestBase { private static final Logger logger = LoggerFactory.getLogger(ITFailfastQueryTest.class); @Rule public ExpectedException thrown = ExpectedException.none(); @BeforeClass public static void setUp() throws Exception { logger.info("setUp in ITFailfastQueryTest"); Map<RealizationType, Integer> priorities = Maps.newHashMap(); priorities.put(RealizationType.HYBRID, 0); priorities.put(RealizationType.CUBE, 0); priorities.put(RealizationType.INVERTED_INDEX, 0); Candidate.setPriorities(priorities); joinType = "left"; setupAll(); } @After public void cleanUp() { QueryContext.reset(); } @AfterClass public static void tearDown() throws Exception { logger.info("tearDown in ITFailfastQueryTest"); Candidate.restorePriorities(); clean(); } @Test public void testPartitionExceedMaxScanBytes() throws Exception { String key = "kylin.storage.partition.max-scan-bytes"; long saved = KylinConfig.getInstanceFromEnv().getPartitionMaxScanBytes(); KylinConfig.getInstanceFromEnv().setProperty(key, "1000");//very low threshold boolean meetExpectedException = false; try { String queryFileName = getQueryFolderPrefix() + "src/test/resources/query/sql/query01.sql"; File sqlFile = new File(queryFileName); try { runSQL(sqlFile, false, false); } catch (Exception e) { if (findRoot(e) instanceof ResourceLimitExceededException) { //expected meetExpectedException = true; } else { throw new RuntimeException(e); } } if (!meetExpectedException) { throw new RuntimeException("Did not meet expected exception"); } } finally { KylinConfig.getInstanceFromEnv().setProperty(key, String.valueOf(saved)); } } @Test public void testPartitionNotExceedMaxScanBytes() throws Exception { String key = "kylin.storage.partition.max-scan-bytes"; long saved = KylinConfig.getInstanceFromEnv().getPartitionMaxScanBytes(); KylinConfig.getInstanceFromEnv().setProperty(key, "100000");//enough threshold try { String queryFileName = getQueryFolderPrefix() + "src/test/resources/query/sql/query01.sql"; File sqlFile = new File(queryFileName); runSQL(sqlFile, false, false); } finally { KylinConfig.getInstanceFromEnv().setProperty(key, String.valueOf(saved)); } } @Test public void testQueryExceedMaxScanBytes() throws Exception { String key = "kylin.query.max-scan-bytes"; long saved = KylinConfig.getInstanceFromEnv().getQueryMaxScanBytes(); KylinConfig.getInstanceFromEnv().setProperty(key, "1000");//very low threshold boolean meetExpectedException = false; try { String queryFileName = getQueryFolderPrefix() + "src/test/resources/query/sql/query01.sql"; File sqlFile = new File(queryFileName); try { runSQL(sqlFile, false, false); } catch (Exception e) { if (findRoot(e) instanceof ResourceLimitExceededException) { //expected meetExpectedException = true; } else { throw new RuntimeException(e); } } if (!meetExpectedException) { throw new RuntimeException("Did not meet expected exception"); } } finally { KylinConfig.getInstanceFromEnv().setProperty(key, String.valueOf(saved)); } } @Test public void testQueryNotExceedMaxScanBytes() throws Exception { String key = "kylin.query.max-scan-bytes"; long saved = KylinConfig.getInstanceFromEnv().getQueryMaxScanBytes(); KylinConfig.getInstanceFromEnv().setProperty(key, "100000");//enough threshold try { String queryFileName = getQueryFolderPrefix() + "src/test/resources/query/sql/query01.sql"; File sqlFile = new File(queryFileName); runSQL(sqlFile, false, false); } finally { KylinConfig.getInstanceFromEnv().setProperty(key, String.valueOf(saved)); } } }