/*
* Licensed 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 com.facebook.presto.sql.analyzer;
import com.google.common.collect.ImmutableMap;
import io.airlift.configuration.testing.ConfigAssertions;
import io.airlift.units.DataSize;
import io.airlift.units.Duration;
import org.testng.annotations.Test;
import java.util.Map;
import static com.facebook.presto.sql.analyzer.RegexLibrary.JONI;
import static com.facebook.presto.sql.analyzer.RegexLibrary.RE2J;
import static io.airlift.configuration.testing.ConfigAssertions.assertDeprecatedEquivalence;
import static io.airlift.configuration.testing.ConfigAssertions.assertFullMapping;
import static io.airlift.configuration.testing.ConfigAssertions.assertRecordedDefaults;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
public class TestFeaturesConfig
{
@Test
public void testDefaults()
{
assertRecordedDefaults(ConfigAssertions.recordDefaults(FeaturesConfig.class)
.setResourceGroupsEnabled(false)
.setDistributedIndexJoinsEnabled(false)
.setDistributedJoinsEnabled(true)
.setFastInequalityJoins(true)
.setColocatedJoinsEnabled(false)
.setJoinReorderingEnabled(true)
.setRedistributeWrites(true)
.setOptimizeMetadataQueries(false)
.setOptimizeHashGeneration(true)
.setOptimizeSingleDistinct(true)
.setPushTableWriteThroughUnion(true)
.setDictionaryAggregation(false)
.setLegacyArrayAgg(false)
.setLegacyMapSubscript(false)
.setRegexLibrary(JONI)
.setRe2JDfaStatesLimit(Integer.MAX_VALUE)
.setRe2JDfaRetries(5)
.setSpillEnabled(false)
.setOperatorMemoryLimitBeforeSpill(DataSize.valueOf("4MB"))
.setSpillerSpillPaths("")
.setSpillerThreads(4)
.setSpillMaxUsedSpaceThreshold(0.9)
.setOptimizeMixedDistinctAggregations(false)
.setLegacyOrderBy(false)
.setIterativeOptimizerEnabled(true)
.setIterativeOptimizerTimeout(new Duration(3, MINUTES))
.setExchangeCompressionEnabled(false)
.setEnableIntermediateAggregations(false));
}
@Test
public void testExplicitPropertyMappings()
{
Map<String, String> propertiesLegacy = new ImmutableMap.Builder<String, String>()
.put("experimental.resource-groups-enabled", "true")
.put("experimental.iterative-optimizer-enabled", "false")
.put("experimental.iterative-optimizer-timeout", "10s")
.put("deprecated.legacy-array-agg", "true")
.put("deprecated.legacy-order-by", "true")
.put("deprecated.legacy-map-subscript", "true")
.put("distributed-index-joins-enabled", "true")
.put("distributed-joins-enabled", "false")
.put("fast-inequality-joins", "false")
.put("colocated-joins-enabled", "true")
.put("reorder-joins", "false")
.put("redistribute-writes", "false")
.put("optimizer.optimize-metadata-queries", "true")
.put("optimizer.optimize-hash-generation", "false")
.put("optimizer.optimize-single-distinct", "false")
.put("optimizer.optimize-mixed-distinct-aggregations", "true")
.put("optimizer.push-table-write-through-union", "false")
.put("optimizer.dictionary-aggregation", "true")
.put("regex-library", "RE2J")
.put("re2j.dfa-states-limit", "42")
.put("re2j.dfa-retries", "42")
.put("experimental.spill-enabled", "true")
.put("experimental.operator-memory-limit-before-spill", "100MB")
.put("experimental.spiller-spill-path", "/tmp/custom/spill/path1,/tmp/custom/spill/path2")
.put("experimental.spiller-threads", "42")
.put("experimental.spiller-max-used-space-threshold", "0.8")
.put("exchange.compression-enabled", "true")
.put("optimizer.enable-intermediate-aggregations", "true")
.build();
Map<String, String> properties = new ImmutableMap.Builder<String, String>()
.put("experimental.resource-groups-enabled", "true")
.put("experimental.iterative-optimizer-enabled", "false")
.put("experimental.iterative-optimizer-timeout", "10s")
.put("deprecated.legacy-array-agg", "true")
.put("deprecated.legacy-order-by", "true")
.put("deprecated.legacy-map-subscript", "true")
.put("distributed-index-joins-enabled", "true")
.put("distributed-joins-enabled", "false")
.put("fast-inequality-joins", "false")
.put("colocated-joins-enabled", "true")
.put("reorder-joins", "false")
.put("redistribute-writes", "false")
.put("optimizer.optimize-metadata-queries", "true")
.put("optimizer.optimize-hash-generation", "false")
.put("optimizer.optimize-single-distinct", "false")
.put("optimizer.optimize-mixed-distinct-aggregations", "true")
.put("optimizer.push-table-write-through-union", "false")
.put("optimizer.dictionary-aggregation", "true")
.put("regex-library", "RE2J")
.put("re2j.dfa-states-limit", "42")
.put("re2j.dfa-retries", "42")
.put("experimental.spill-enabled", "true")
.put("experimental.operator-memory-limit-before-spill", "100MB")
.put("experimental.spiller-spill-path", "/tmp/custom/spill/path1,/tmp/custom/spill/path2")
.put("experimental.spiller-threads", "42")
.put("experimental.spiller-max-used-space-threshold", "0.8")
.put("exchange.compression-enabled", "true")
.put("optimizer.enable-intermediate-aggregations", "true")
.build();
FeaturesConfig expected = new FeaturesConfig()
.setResourceGroupsEnabled(true)
.setIterativeOptimizerEnabled(false)
.setIterativeOptimizerTimeout(new Duration(10, SECONDS))
.setDistributedIndexJoinsEnabled(true)
.setDistributedJoinsEnabled(false)
.setFastInequalityJoins(false)
.setColocatedJoinsEnabled(true)
.setJoinReorderingEnabled(false)
.setRedistributeWrites(false)
.setOptimizeMetadataQueries(true)
.setOptimizeHashGeneration(false)
.setOptimizeSingleDistinct(false)
.setOptimizeMixedDistinctAggregations(true)
.setPushTableWriteThroughUnion(false)
.setDictionaryAggregation(true)
.setLegacyArrayAgg(true)
.setLegacyMapSubscript(true)
.setRegexLibrary(RE2J)
.setRe2JDfaStatesLimit(42)
.setRe2JDfaRetries(42)
.setSpillEnabled(true)
.setOperatorMemoryLimitBeforeSpill(DataSize.valueOf("100MB"))
.setSpillerSpillPaths("/tmp/custom/spill/path1,/tmp/custom/spill/path2")
.setSpillerThreads(42)
.setSpillMaxUsedSpaceThreshold(0.8)
.setLegacyOrderBy(true)
.setExchangeCompressionEnabled(true)
.setEnableIntermediateAggregations(true);
assertFullMapping(properties, expected);
assertDeprecatedEquivalence(FeaturesConfig.class, properties, propertiesLegacy);
}
}