/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.dqp.internal.process; import java.util.Properties; import org.teiid.PreParser; import org.teiid.client.RequestMessage; import org.teiid.query.util.Options; public class DQPConfiguration{ //Constants static final int DEFAULT_FETCH_SIZE = RequestMessage.DEFAULT_FETCH_SIZE * 10; static final int DEFAULT_PROCESSOR_TIMESLICE = 2000; static final int DEFAULT_MAX_RESULTSET_CACHE_ENTRIES = 1024; static final int DEFAULT_QUERY_THRESHOLD = 600000; static final String PROCESS_PLAN_QUEUE_NAME = "QueryProcessorQueue"; //$NON-NLS-1$ public static final int DEFAULT_MAX_PROCESS_WORKERS = 64; public static final int DEFAULT_MAX_SOURCE_ROWS = -1; public static final int DEFAULT_MAX_ACTIVE_PLANS = 20; public static final int DEFAULT_USER_REQUEST_SOURCE_CONCURRENCY = 0; public static final int DEFAULT_MAX_STALENESS_SECONDS = 0; private int maxThreads = DEFAULT_MAX_PROCESS_WORKERS; private int timeSliceInMilli = DEFAULT_PROCESSOR_TIMESLICE; private int maxRowsFetchSize = DEFAULT_FETCH_SIZE; private int lobChunkSizeInKB = 100; private long queryThresholdInMilli = DEFAULT_QUERY_THRESHOLD; private boolean exceptionOnMaxSourceRows = true; private int maxSourceRows = -1; private int maxActivePlans = DEFAULT_MAX_ACTIVE_PLANS; private int userRequestSourceConcurrency = DEFAULT_USER_REQUEST_SOURCE_CONCURRENCY; private boolean detectingChangeEvents = true; private long queryTimeout; private transient AuthorizationValidator authorizationValidator; private transient PreParser preParser; private Properties properties = System.getProperties(); public int getMaxActivePlans() { return maxActivePlans; } public void setMaxActivePlans(int maxActivePlans) { this.maxActivePlans = maxActivePlans; } public int getUserRequestSourceConcurrency() { return userRequestSourceConcurrency; } public void setUserRequestSourceConcurrency(int userRequestSourceConcurrency) { this.userRequestSourceConcurrency = userRequestSourceConcurrency; } public int getMaxThreads() { return maxThreads; } public void setMaxThreads(int maxThreads) { this.maxThreads = maxThreads; } public int getTimeSliceInMilli() { return timeSliceInMilli; } public void setTimeSliceInMilli(int timeSliceInMilli) { this.timeSliceInMilli = timeSliceInMilli; } public int getMaxRowsFetchSize() { return maxRowsFetchSize; } public void setMaxRowsFetchSize(int maxRowsFetchSize) { this.maxRowsFetchSize = maxRowsFetchSize; } public int getLobChunkSizeInKB() { return this.lobChunkSizeInKB; } public void setLobChunkSizeInKB(int lobChunkSizeInKB) { this.lobChunkSizeInKB = lobChunkSizeInKB; } public int getQueryThresholdInSecs() { return (int)queryThresholdInMilli/1000; } public long getQueryThresholdInMilli() { return queryThresholdInMilli; } public void setQueryThresholdInMilli(long queryThreshold) { this.queryThresholdInMilli = queryThreshold; } public void setQueryThresholdInSecs(int queryThresholdInSecs) { this.queryThresholdInMilli = queryThresholdInSecs * 1000; } /** * Throw exception if there are more rows in the result set than specified in the MaxSourceRows setting. * @return */ public boolean isExceptionOnMaxSourceRows() { return exceptionOnMaxSourceRows; } public void setExceptionOnMaxSourceRows(boolean exceptionOnMaxSourceRows) { this.exceptionOnMaxSourceRows = exceptionOnMaxSourceRows; } /** * Maximum source set rows to fetch * @return */ public int getMaxSourceRows() { return maxSourceRows; } public void setMaxSourceRows(int maxSourceRows) { this.maxSourceRows = maxSourceRows; } public AuthorizationValidator getAuthorizationValidator() { return authorizationValidator; } public void setAuthorizationValidator( AuthorizationValidator authorizationValidator) { this.authorizationValidator = authorizationValidator; } public boolean isDetectingChangeEvents() { return detectingChangeEvents; } public void setDetectingChangeEvents(boolean detectingChangeEvents) { this.detectingChangeEvents = detectingChangeEvents; } public void setQueryTimeout(long queryTimeout) { this.queryTimeout = queryTimeout; } public long getQueryTimeout() { return queryTimeout; } public TeiidExecutor getTeiidExecutor() { return new ThreadReuseExecutor(DQPConfiguration.PROCESS_PLAN_QUEUE_NAME, getMaxThreads()); } public void setPreParser(PreParser preParser) { this.preParser = preParser; } public PreParser getPreParser() { return preParser; } /** * Get the properties used to initialize the engine {@link Options}. Defaults to the System properties. * @param properties */ public Properties getProperties() { return this.properties; } /** * Set the properties used to initialize the engine {@link Options} * @param properties */ public void setProperties(Properties properties) { this.properties = properties; } }