diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ClosingBinder.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ClosingBinder.java index bd2b40dea484..f5effbd01808 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ClosingBinder.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ClosingBinder.java @@ -85,6 +85,11 @@ public void registerResource(Key key, Consumer close) closeables.addBinding().toProvider(new ResourceCloser(key, close)); } + public void registerCloseable(AutoCloseable instance) + { + closeables.addBinding().toInstance(instance); + } + private static class ResourceCloser implements Provider { diff --git a/testing/trino-server-dev/pom.xml b/testing/trino-server-dev/pom.xml index 4da7b9ed0084..e5f7fab7dfc9 100644 --- a/testing/trino-server-dev/pom.xml +++ b/testing/trino-server-dev/pom.xml @@ -40,6 +40,11 @@ trino-main + + io.trino + trino-plugin-toolkit + + io.trino trino-spi diff --git a/testing/trino-server-dev/src/main/java/io/trino/server/DevelopmentServer.java b/testing/trino-server-dev/src/main/java/io/trino/server/DevelopmentServer.java index 48cc83e4c9de..0f06daddc461 100644 --- a/testing/trino-server-dev/src/main/java/io/trino/server/DevelopmentServer.java +++ b/testing/trino-server-dev/src/main/java/io/trino/server/DevelopmentServer.java @@ -18,8 +18,14 @@ import com.google.inject.Scopes; import io.trino.server.PluginManager.PluginsProvider; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; + import static com.google.inject.multibindings.OptionalBinder.newOptionalBinder; import static io.airlift.configuration.ConfigBinder.configBinder; +import static io.trino.plugin.base.ClosingBinder.closingBinder; public final class DevelopmentServer extends Server @@ -29,11 +35,24 @@ private DevelopmentServer() {} @Override protected Iterable getAdditionalModules() { - return ImmutableList.of(binder -> { - newOptionalBinder(binder, PluginsProvider.class).setBinding() - .to(DevelopmentPluginsProvider.class).in(Scopes.SINGLETON); - configBinder(binder).bindConfig(DevelopmentLoaderConfig.class); - }); + try { + Path pluginPath = Files.createTempDirectory("plugins"); + + return ImmutableList.of(binder -> { + newOptionalBinder(binder, PluginsProvider.class).setBinding() + .to(DevelopmentPluginsProvider.class).in(Scopes.SINGLETON); + configBinder(binder).bindConfig(DevelopmentLoaderConfig.class); + + // Use a temporary directory to satisfy configuration validation + configBinder(binder).bindConfigDefaults(ServerPluginsProviderConfig.class, config -> + config.setInstalledPluginsDirs(ImmutableList.of(pluginPath.toFile()))); + + closingBinder(binder).registerCloseable(() -> Files.deleteIfExists(pluginPath)); + }); + } + catch (IOException e) { + throw new UncheckedIOException(e); + } } public static void main(String[] args)