#
# 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.
#

# Configure plan enumeration pruning.
wayang.core.optimizer.pruning.strategies = org.apache.wayang.core.optimizer.enumeration.LatentOperatorPruningStrategy
# wayang.core.optimizer.pruning.strategies = org.apache.wayang.core.optimizer.enumeration.TopKPruningStrategy
# wayang.core.optimizer.pruning.topk = 5
# wayang.core.optimizer.channels.selection = org.apache.wayang.core.optimizer.channels.ChannelConversionGraph$CostbasedTreeSelectionStrategy
# wayang.core.optimizer.instrumentation = org.apache.wayang.core.profiling.OutboundInstrumentationStrategy
wayang.core.optimizer.enumeration.concatenationprio = plans2
wayang.core.optimizer.enumeration.invertconcatenations = false
wayang.core.optimizer.enumeration.branchesfirst = false

# Configure statistics collection.
wayang.core.log.enabled = true
# wayang.core.log.cardinalities = ~/.wayang/cardinalities.json
# wayang.core.log.executions = ~/.wayang/executions.json

# Configure re-optimization.
wayang.core.optimizer.reoptimize = false
wayang.core.optimizer.reoptimize.proactive = false
wayang.core.optimizer.cardinality.maxspread = 10
wayang.core.optimizer.cardinality.spreadsmoothing = 10000
wayang.core.optimizer.cardinality.minconfidence = 0.5

# Settings for aggressive re-optimization.
#wayang.core.optimizer.instrumentation = org.apache.wayang.core.profiling.FullInstrumentationStrategy
#wayang.core.optimizer.reoptimize = true
#wayang.core.optimizer.reoptimize.proactive = true
#wayang.core.optimizer.cardinality.maxspread = 1
#wayang.core.optimizer.cardinality.spreadsmoothing = 1
#wayang.core.optimizer.cardinality.minconfidence = 1

# Configure fallback estimates.
wayang.core.fallback.udf.cpu.lower = 100
wayang.core.fallback.udf.cpu.upper = 1000
wayang.core.fallback.udf.cpu.confidence = 0.2
wayang.core.fallback.udf.ram.lower = 100
wayang.core.fallback.udf.ram.upper = 1000
wayang.core.fallback.udf.ram.confidence = 0.2
wayang.core.fallback.operator.cpu.lower = 100
wayang.core.fallback.operator.cpu.upper = 1000
wayang.core.fallback.operator.cpu.confidence = 0.2
wayang.core.fallback.operator.ram.lower = 100
wayang.core.fallback.operator.ram.upper = 1000
wayang.core.fallback.operator.ram.confidence = 0.2

# Configure Monitor.
wayang.core.monitor.enabled = false

# Configure parallelism.
wayang.core.optimizer.enumeration.parallel-tasks = false


