/* * 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); } }