in src/main/java/org/apache/paimon/trino/TrinoConnectorFactory.java [79:152]
public Connector create(
String catalogName,
Map<String, String> config,
ConnectorContext context,
Module module) {
config = new HashMap<>(config);
if (config.containsKey(HADOOP_CONF_FILES_KEY)) {
for (String hadoopXml : config.get(HADOOP_CONF_FILES_KEY).split(",")) {
try {
readHadoopXml(hadoopXml, config);
} catch (Exception e) {
LOG.warn(
"Failed to read hadoop xml file " + hadoopXml + ", skipping this file.",
e);
}
}
}
ClassLoader classLoader = TrinoConnectorFactory.class.getClassLoader();
try (ThreadContextClassLoader ignored = new ThreadContextClassLoader(classLoader)) {
Bootstrap app =
new Bootstrap(
new JsonModule(),
new TrinoModule(config),
new HdfsModule(),
new HdfsAuthenticationModule(),
// bind the trino file system module
newFileSystemModule(catalogName, context),
binder -> {
binder.bind(NodeVersion.class)
.toInstance(
new NodeVersion(
context.getNodeManager()
.getCurrentNode()
.getVersion()));
binder.bind(TypeManager.class).toInstance(context.getTypeManager());
binder.bind(OpenTelemetry.class)
.toInstance(context.getOpenTelemetry());
binder.bind(Tracer.class).toInstance(context.getTracer());
binder.bind(OrcReaderConfig.class)
.toInstance(new OrcReaderConfig());
},
module);
Injector injector =
app.doNotInitializeLogging()
.setRequiredConfigurationProperties(Map.of())
.setOptionalConfigurationProperties(config)
.initialize();
TrinoMetadata trinoMetadata = injector.getInstance(TrinoMetadataFactory.class).create();
TrinoSplitManager trinoSplitManager = injector.getInstance(TrinoSplitManager.class);
TrinoPageSourceProvider trinoPageSourceProvider =
injector.getInstance(TrinoPageSourceProvider.class);
TrinoPageSinkProvider trinoPageSinkProvider =
injector.getInstance(TrinoPageSinkProvider.class);
TrinoNodePartitioningProvider trinoNodePartitioningProvider =
injector.getInstance(TrinoNodePartitioningProvider.class);
TrinoSessionProperties trinoSessionProperties =
injector.getInstance(TrinoSessionProperties.class);
TrinoTableOptions trinoTableOptions = injector.getInstance(TrinoTableOptions.class);
return new TrinoConnector(
new ClassLoaderSafeConnectorMetadata(trinoMetadata, classLoader),
new ClassLoaderSafeConnectorSplitManager(trinoSplitManager, classLoader),
new ClassLoaderSafeConnectorPageSourceProvider(
trinoPageSourceProvider, classLoader),
new ClassLoaderSafeConnectorPageSinkProvider(
trinoPageSinkProvider, classLoader),
trinoNodePartitioningProvider,
trinoTableOptions,
trinoSessionProperties);
}
}