in wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Configuration.java [528:581]
private static void bootstrapPruningProviders(Configuration configuration) {
{
// By default, load pruning from the wayang.core.optimizer.pruning.strategies property.
CollectionProvider<Class<PlanEnumerationPruningStrategy>> propertyBasedProvider =
new FunctionalCollectionProvider<>(
config -> {
final String strategyClassNames = config.getStringProperty("wayang.core.optimizer.pruning.strategies");
if (strategyClassNames == null || strategyClassNames.isEmpty()) {
return Collections.emptySet();
}
Collection<Class<PlanEnumerationPruningStrategy>> strategyClasses = new LinkedList<>();
for (String strategyClassName : strategyClassNames.split(",")) {
try {
@SuppressWarnings("unchecked")
final Class<PlanEnumerationPruningStrategy> strategyClass = (Class<PlanEnumerationPruningStrategy>) Class.forName(strategyClassName);
strategyClasses.add(strategyClass);
} catch (ClassNotFoundException e) {
logger.warn("Illegal pruning strategy class name: \"{}\".", strategyClassName);
}
}
return strategyClasses;
},
configuration
);
CollectionProvider<Class<PlanEnumerationPruningStrategy>> overrideProvider =
new ExplicitCollectionProvider<>(configuration, propertyBasedProvider);
configuration.setPruningStrategyClassProvider(overrideProvider);
}
{
ValueProvider<ToDoubleFunction<ProbabilisticDoubleInterval>> defaultProvider =
new ConstantValueProvider<>(ProbabilisticDoubleInterval::getGeometricMeanEstimate, configuration);
ValueProvider<ToDoubleFunction<ProbabilisticDoubleInterval>> overrideProvider =
new ConstantValueProvider<>(defaultProvider);
configuration.setCostSquasherProvider(overrideProvider);
}
{
ValueProvider<InstrumentationStrategy> defaultProvider =
new ConstantValueProvider<>(new OutboundInstrumentationStrategy(), configuration);
ValueProvider<InstrumentationStrategy> configProvider =
new FunctionalValueProvider<>(
requestee -> {
Optional<String> optInstrumentationtStrategyClass =
requestee.getConfiguration().getOptionalStringProperty("wayang.core.optimizer.instrumentation");
if (!optInstrumentationtStrategyClass.isPresent()) {
return null;
}
return instantiateDefault(optInstrumentationtStrategyClass.get());
},
defaultProvider
);
ValueProvider<InstrumentationStrategy> overrideProvider = new ConstantValueProvider<>(configProvider);
configuration.setInstrumentationStrategyProvider(overrideProvider);
}
}