diff --git a/core/trino-main/src/main/java/io/trino/server/PluginInstaller.java b/core/trino-main/src/main/java/io/trino/server/PluginInstaller.java new file mode 100644 index 000000000000..c72390690e16 --- /dev/null +++ b/core/trino-main/src/main/java/io/trino/server/PluginInstaller.java @@ -0,0 +1,21 @@ +/* + * 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 io.trino.server; + +import io.trino.spi.Plugin; + +public interface PluginInstaller +{ + void installPlugin(Plugin plugin); +} diff --git a/core/trino-main/src/main/java/io/trino/server/PluginManager.java b/core/trino-main/src/main/java/io/trino/server/PluginManager.java index 6f8132cc473b..ad3073669e40 100644 --- a/core/trino-main/src/main/java/io/trino/server/PluginManager.java +++ b/core/trino-main/src/main/java/io/trino/server/PluginManager.java @@ -91,6 +91,7 @@ public class PluginManager private final BlockEncodingManager blockEncodingManager; private final HandleResolver handleResolver; private final AtomicBoolean pluginsLoading = new AtomicBoolean(); + private final Set pluginInstallers; @Inject public PluginManager( @@ -108,7 +109,8 @@ public PluginManager( TypeRegistry typeRegistry, BlockEncodingManager blockEncodingManager, HandleResolver handleResolver, - ExchangeManagerRegistry exchangeManagerRegistry) + ExchangeManagerRegistry exchangeManagerRegistry, + Set pluginInstallers) { this.pluginsProvider = requireNonNull(pluginsProvider, "pluginsProvider is null"); this.connectorFactory = requireNonNull(connectorFactory, "connectorFactory is null"); @@ -125,6 +127,7 @@ public PluginManager( this.blockEncodingManager = requireNonNull(blockEncodingManager, "blockEncodingManager is null"); this.handleResolver = requireNonNull(handleResolver, "handleResolver is null"); this.exchangeManagerRegistry = requireNonNull(exchangeManagerRegistry, "exchangeManagerRegistry is null"); + this.pluginInstallers = requireNonNull(pluginInstallers, "pluginInstallers is null"); } public void loadPlugins() @@ -253,6 +256,10 @@ private void installPluginInternal(Plugin plugin, Function urls) diff --git a/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java b/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java index 6ea6bc454e4a..9b35e9d5dc0d 100644 --- a/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java +++ b/core/trino-main/src/main/java/io/trino/server/ServerMainModule.java @@ -438,6 +438,7 @@ protected void setup(Binder binder) newOptionalBinder(binder, PluginsProvider.class).setDefault() .to(ServerPluginsProvider.class).in(Scopes.SINGLETON); configBinder(binder).bindConfig(ServerPluginsProviderConfig.class); + newSetBinder(binder, PluginInstaller.class); // block encodings binder.bind(BlockEncodingManager.class).in(Scopes.SINGLETON); diff --git a/core/trino-main/src/main/java/io/trino/testing/LocalQueryRunner.java b/core/trino-main/src/main/java/io/trino/testing/LocalQueryRunner.java index bd8de3b69d69..2e49a82200e8 100644 --- a/core/trino-main/src/main/java/io/trino/testing/LocalQueryRunner.java +++ b/core/trino-main/src/main/java/io/trino/testing/LocalQueryRunner.java @@ -481,7 +481,8 @@ private LocalQueryRunner( typeRegistry, blockEncodingManager, handleResolver, - exchangeManagerRegistry); + exchangeManagerRegistry, + ImmutableSet.of()); catalogManager.registerGlobalSystemConnector(globalSystemConnector);