diff --git a/core/trino-main/src/main/java/io/trino/connector/ConnectorContextInstance.java b/core/trino-main/src/main/java/io/trino/connector/ConnectorContextInstance.java index 7ab865c527a8..6adff308c539 100644 --- a/core/trino-main/src/main/java/io/trino/connector/ConnectorContextInstance.java +++ b/core/trino-main/src/main/java/io/trino/connector/ConnectorContextInstance.java @@ -23,6 +23,8 @@ import io.trino.spi.connector.MetadataProvider; import io.trino.spi.type.TypeManager; +import javax.management.MBeanServer; + import static java.util.Objects.requireNonNull; public class ConnectorContextInstance @@ -36,6 +38,7 @@ public class ConnectorContextInstance private final MetadataProvider metadataProvider; private final PageSorter pageSorter; private final PageIndexerFactory pageIndexerFactory; + private final MBeanServer mbeanServer; public ConnectorContextInstance( OpenTelemetry openTelemetry, @@ -45,7 +48,8 @@ public ConnectorContextInstance( TypeManager typeManager, MetadataProvider metadataProvider, PageSorter pageSorter, - PageIndexerFactory pageIndexerFactory) + PageIndexerFactory pageIndexerFactory, + MBeanServer mbeanServer) { this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); this.tracer = requireNonNull(tracer, "tracer is null"); @@ -55,6 +59,7 @@ public ConnectorContextInstance( this.metadataProvider = requireNonNull(metadataProvider, "metadataProvider is null"); this.pageSorter = requireNonNull(pageSorter, "pageSorter is null"); this.pageIndexerFactory = requireNonNull(pageIndexerFactory, "pageIndexerFactory is null"); + this.mbeanServer = requireNonNull(mbeanServer, "mbeanServer is null"); } @Override @@ -104,4 +109,10 @@ public PageIndexerFactory getPageIndexerFactory() { return pageIndexerFactory; } + + @Override + public MBeanServer getMBeanServer() + { + return mbeanServer; + } } diff --git a/core/trino-main/src/main/java/io/trino/connector/DefaultCatalogFactory.java b/core/trino-main/src/main/java/io/trino/connector/DefaultCatalogFactory.java index f1f575536d11..5c3e82a1635c 100644 --- a/core/trino-main/src/main/java/io/trino/connector/DefaultCatalogFactory.java +++ b/core/trino-main/src/main/java/io/trino/connector/DefaultCatalogFactory.java @@ -40,6 +40,8 @@ import io.trino.sql.planner.OptimizerConfig; import io.trino.transaction.TransactionManager; +import javax.management.MBeanServer; + import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; @@ -72,6 +74,7 @@ public class DefaultCatalogFactory private final ConcurrentMap connectorFactories = new ConcurrentHashMap<>(); private final SecretsResolver secretsResolver; + private final MBeanServer mbeanServer; @Inject public DefaultCatalogFactory( @@ -87,7 +90,8 @@ public DefaultCatalogFactory( TypeManager typeManager, NodeSchedulerConfig nodeSchedulerConfig, OptimizerConfig optimizerConfig, - SecretsResolver secretsResolver) + SecretsResolver secretsResolver, + MBeanServer mbeanServer) { this.metadata = requireNonNull(metadata, "metadata is null"); this.accessControl = requireNonNull(accessControl, "accessControl is null"); @@ -102,6 +106,7 @@ public DefaultCatalogFactory( this.schedulerIncludeCoordinator = nodeSchedulerConfig.isIncludeCoordinator(); this.maxPrefetchedInformationSchemaPrefixes = optimizerConfig.getMaxPrefetchedInformationSchemaPrefixes(); this.secretsResolver = requireNonNull(secretsResolver, "secretsResolver is null"); + this.mbeanServer = requireNonNull(mbeanServer, "mbeanServer is null"); } @Override @@ -192,7 +197,8 @@ private Connector createConnector(CatalogName catalogName, ConnectorFactory conn typeManager, new InternalMetadataProvider(metadata, typeManager), pageSorter, - pageIndexerFactory); + pageIndexerFactory, + mbeanServer); try (ThreadContextClassLoader _ = new ThreadContextClassLoader(connectorFactory.getClass().getClassLoader())) { // TODO: connector factory should take CatalogName diff --git a/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerContextInstance.java b/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerContextInstance.java index 86eaeab141d8..33c12bc569d8 100644 --- a/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerContextInstance.java +++ b/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerContextInstance.java @@ -17,20 +17,24 @@ import io.opentelemetry.api.trace.Tracer; import io.trino.spi.eventlistener.EventListenerFactory; +import javax.management.MBeanServer; + import static java.util.Objects.requireNonNull; public class EventListenerContextInstance implements EventListenerFactory.EventListenerContext { private final OpenTelemetry openTelemetry; + private final MBeanServer mbeanServer; private final Tracer tracer; private final String version; - public EventListenerContextInstance(String version, OpenTelemetry openTelemetry, Tracer tracer) + public EventListenerContextInstance(String version, OpenTelemetry openTelemetry, Tracer tracer, MBeanServer mbeanServer) { this.version = requireNonNull(version, "version is null"); this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); this.tracer = requireNonNull(tracer, "tracer is null"); + this.mbeanServer = requireNonNull(mbeanServer, "mbeanServer is null"); } @Override @@ -50,4 +54,10 @@ public Tracer getTracer() { return tracer; } + + @Override + public MBeanServer getMBeanServer() + { + return this.mbeanServer; + } } diff --git a/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerManager.java b/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerManager.java index b655a26c6d99..f0f4378b005f 100644 --- a/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerManager.java +++ b/core/trino-main/src/main/java/io/trino/eventlistener/EventListenerManager.java @@ -31,6 +31,8 @@ import org.weakref.jmx.Managed; import org.weakref.jmx.Nested; +import javax.management.MBeanServer; + import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; @@ -71,11 +73,17 @@ public class EventListenerManager private final EventListenerContextInstance context; @Inject - public EventListenerManager(EventListenerConfig config, SecretsResolver secretsResolver, OpenTelemetry openTelemetry, Tracer tracer, NodeVersion version) + public EventListenerManager( + EventListenerConfig config, + SecretsResolver secretsResolver, + OpenTelemetry openTelemetry, + Tracer tracer, + MBeanServer mbeanServer, + NodeVersion version) { this.configFiles = ImmutableList.copyOf(config.getEventListenerFiles()); this.secretsResolver = requireNonNull(secretsResolver, "secretsResolver is null"); - this.context = new EventListenerContextInstance(version.toString(), openTelemetry, tracer); + this.context = new EventListenerContextInstance(version.toString(), openTelemetry, tracer, mbeanServer); } public void addEventListenerFactory(EventListenerFactory eventListenerFactory) diff --git a/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerContextInstance.java b/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerContextInstance.java index 681a19dd5e93..da23870d9410 100644 --- a/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerContextInstance.java +++ b/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerContextInstance.java @@ -17,6 +17,8 @@ import io.opentelemetry.api.trace.Tracer; import io.trino.spi.exchange.ExchangeManagerContext; +import javax.management.MBeanServer; + import static java.util.Objects.requireNonNull; public class ExchangeManagerContextInstance @@ -24,13 +26,16 @@ public class ExchangeManagerContextInstance { private final OpenTelemetry openTelemetry; private final Tracer tracer; + private final MBeanServer mbeanServer; public ExchangeManagerContextInstance( OpenTelemetry openTelemetry, - Tracer tracer) + Tracer tracer, + MBeanServer mbeanServer) { this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); this.tracer = requireNonNull(tracer, "tracer is null"); + this.mbeanServer = requireNonNull(mbeanServer, "mbeanServer is null"); } @Override @@ -44,4 +49,10 @@ public Tracer getTracer() { return tracer; } + + @Override + public MBeanServer getMBeanServer() + { + return mbeanServer; + } } diff --git a/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerRegistry.java b/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerRegistry.java index 241978fe74cc..2331280262a6 100644 --- a/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerRegistry.java +++ b/core/trino-main/src/main/java/io/trino/exchange/ExchangeManagerRegistry.java @@ -24,6 +24,8 @@ import io.trino.spi.exchange.ExchangeManagerFactory; import jakarta.annotation.PreDestroy; +import javax.management.MBeanServer; + import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; @@ -49,6 +51,7 @@ public class ExchangeManagerRegistry private final OpenTelemetry openTelemetry; private final Tracer tracer; + private final MBeanServer mbeanServer; private final Map exchangeManagerFactories = new ConcurrentHashMap<>(); private volatile ExchangeManager exchangeManager; @@ -59,11 +62,13 @@ public class ExchangeManagerRegistry public ExchangeManagerRegistry( OpenTelemetry openTelemetry, Tracer tracer, + MBeanServer mbeanServer, SecretsResolver secretsResolver, ExchangeManagerConfig config) { this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); this.tracer = requireNonNull(tracer, "tracer is null"); + this.mbeanServer = requireNonNull(mbeanServer, "mbeanServer is null"); this.secretsResolver = requireNonNull(secretsResolver, "secretsResolver is null"); this.configFile = config.getExchangeManagerConfigFile(); } @@ -101,7 +106,7 @@ public synchronized void loadExchangeManager(String name, Map pr ExchangeManager exchangeManager; try (ThreadContextClassLoader _ = new ThreadContextClassLoader(factory.getClass().getClassLoader())) { - exchangeManager = factory.create(secretsResolver.getResolvedConfiguration(properties), new ExchangeManagerContextInstance(openTelemetry, tracer)); + exchangeManager = factory.create(secretsResolver.getResolvedConfiguration(properties), new ExchangeManagerContextInstance(openTelemetry, tracer, mbeanServer)); } log.info("-- Loaded exchange manager %s --", name); diff --git a/core/trino-main/src/main/java/io/trino/server/protocol/spooling/SpoolingManagerRegistry.java b/core/trino-main/src/main/java/io/trino/server/protocol/spooling/SpoolingManagerRegistry.java index 9cc01f52f152..9a3f90c1352d 100644 --- a/core/trino-main/src/main/java/io/trino/server/protocol/spooling/SpoolingManagerRegistry.java +++ b/core/trino-main/src/main/java/io/trino/server/protocol/spooling/SpoolingManagerRegistry.java @@ -27,6 +27,8 @@ import io.trino.spi.spool.SpoolingManagerContext; import io.trino.spi.spool.SpoolingManagerFactory; +import javax.management.MBeanServer; + import java.io.File; import java.io.IOException; import java.io.UncheckedIOException; @@ -56,17 +58,25 @@ public class SpoolingManagerRegistry private final boolean coordinator; private final OpenTelemetry openTelemetry; private final Tracer tracer; + private final MBeanServer mbeanServer; private final Node currentNode; private volatile SpoolingManager spoolingManager; @Inject - public SpoolingManagerRegistry(InternalNode currentNode, ServerConfig serverConfig, SpoolingEnabledConfig config, OpenTelemetry openTelemetry, Tracer tracer) + public SpoolingManagerRegistry( + InternalNode currentNode, + ServerConfig serverConfig, + SpoolingEnabledConfig config, + OpenTelemetry openTelemetry, + Tracer tracer, + MBeanServer mbeanServer) { this.currentNode = requireNonNull(currentNode, "currentNode is null"); this.enabled = config.isEnabled(); this.coordinator = serverConfig.isCoordinator(); this.openTelemetry = requireNonNull(openTelemetry, "openTelemetry is null"); this.tracer = requireNonNull(tracer, "tracer is null"); + this.mbeanServer = requireNonNull(mbeanServer, "mbeanServer is null"); } public void addSpoolingManagerFactory(SpoolingManagerFactory factory) @@ -125,6 +135,12 @@ public Tracer getTracer() return tracer; } + @Override + public MBeanServer getMBeanServer() + { + return mbeanServer; + } + @Override public boolean isCoordinator() { diff --git a/core/trino-main/src/main/java/io/trino/testing/PlanTester.java b/core/trino-main/src/main/java/io/trino/testing/PlanTester.java index 0e66e86c26e2..950a796c9b01 100644 --- a/core/trino-main/src/main/java/io/trino/testing/PlanTester.java +++ b/core/trino-main/src/main/java/io/trino/testing/PlanTester.java @@ -211,6 +211,7 @@ import io.trino.type.TypeDeserializer; import io.trino.util.FinalizerService; import org.intellij.lang.annotations.Language; +import org.weakref.jmx.testing.TestingMBeanServer; import java.io.Closeable; import java.io.IOException; @@ -392,7 +393,7 @@ private PlanTester(Session defaultSession, int nodeCountForStats) this.joinCompiler = new JoinCompiler(typeOperators); this.hashStrategyCompiler = new FlatHashStrategyCompiler(typeOperators, new NullSafeHashCompiler(typeOperators)); PageIndexerFactory pageIndexerFactory = new GroupByHashPageIndexerFactory(hashStrategyCompiler); - EventListenerManager eventListenerManager = new EventListenerManager(new EventListenerConfig(), secretsResolver, noop(), tracer, CURRENT_NODE.getNodeVersion()); + EventListenerManager eventListenerManager = new EventListenerManager(new EventListenerConfig(), secretsResolver, noop(), tracer, new TestingMBeanServer(), CURRENT_NODE.getNodeVersion()); this.accessControl = new TestingAccessControlManager(transactionManager, eventListenerManager, secretsResolver); accessControl.loadSystemAccessControl(AllowAllSystemAccessControl.NAME, ImmutableMap.of()); @@ -410,7 +411,8 @@ private PlanTester(Session defaultSession, int nodeCountForStats) typeManager, nodeSchedulerConfig, optimizerConfig, - secretsResolver)); + secretsResolver, + new TestingMBeanServer())); this.splitManager = new SplitManager(createSplitManagerProvider(catalogManager), tracer, new QueryManagerConfig()); this.pageSourceManager = new PageSourceManager(createPageSourceProviderFactory(catalogManager)); this.pageSinkManager = new PageSinkManager(createPageSinkProvider(catalogManager)); @@ -475,13 +477,14 @@ private PlanTester(Session defaultSession, int nodeCountForStats) ImmutableSet.of(), ImmutableSet.of(new ExcludeColumnsFunction())); - exchangeManagerRegistry = new ExchangeManagerRegistry(noop(), noopTracer(), secretsResolver, new ExchangeManagerConfig()); + exchangeManagerRegistry = new ExchangeManagerRegistry(noop(), noopTracer(), new TestingMBeanServer(), secretsResolver, new ExchangeManagerConfig()); SpoolingManagerRegistry spoolingManagerRegistry = new SpoolingManagerRegistry( new InternalNode("nodeId", URI.create("http://localhost:8080"), NodeVersion.UNKNOWN, false), new ServerConfig(), new SpoolingEnabledConfig(), noop(), - noopTracer()); + noopTracer(), + new TestingMBeanServer()); this.pluginManager = new PluginManager( (loader, createClassLoader) -> {}, Optional.empty(), diff --git a/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerContext.java b/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerContext.java index 0bd8c56ba392..bf464da0fa05 100644 --- a/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerContext.java +++ b/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerContext.java @@ -17,6 +17,9 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; import io.trino.spi.eventlistener.EventListenerFactory; +import org.weakref.jmx.testing.TestingMBeanServer; + +import javax.management.MBeanServer; public class TestingEventListenerContext implements EventListenerFactory.EventListenerContext @@ -38,4 +41,10 @@ public Tracer getTracer() { return Tracing.noopTracer(); } + + @Override + public MBeanServer getMBeanServer() + { + return new TestingMBeanServer(); + } } diff --git a/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerManager.java b/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerManager.java index 23368fdd2d28..0f0288b13359 100644 --- a/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerManager.java +++ b/core/trino-main/src/main/java/io/trino/testing/TestingEventListenerManager.java @@ -27,6 +27,7 @@ import io.trino.spi.eventlistener.EventListenerFactory; import io.trino.spi.eventlistener.QueryCompletedEvent; import io.trino.spi.eventlistener.QueryCreatedEvent; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.Collections; import java.util.HashSet; @@ -45,7 +46,7 @@ public static TestingEventListenerManager emptyEventListenerManager() @Inject public TestingEventListenerManager(EventListenerConfig config, SecretsResolver secretsResolver) { - super(config, secretsResolver, OpenTelemetry.noop(), Tracing.noopTracer(), new NodeVersion("test-version")); + super(config, secretsResolver, OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new NodeVersion("test-version")); } @Override diff --git a/core/trino-main/src/test/java/io/trino/dispatcher/TestLocalDispatchQuery.java b/core/trino-main/src/test/java/io/trino/dispatcher/TestLocalDispatchQuery.java index 377e6965580e..4a38e8545496 100644 --- a/core/trino-main/src/test/java/io/trino/dispatcher/TestLocalDispatchQuery.java +++ b/core/trino-main/src/test/java/io/trino/dispatcher/TestLocalDispatchQuery.java @@ -64,6 +64,7 @@ import io.trino.sql.tree.Statement; import io.trino.transaction.TransactionManager; import org.junit.jupiter.api.Test; +import org.weakref.jmx.testing.TestingMBeanServer; import java.net.URI; import java.util.List; @@ -129,7 +130,7 @@ public void testSubmittedForDispatchedQuery() JsonCodec.jsonCodec(OperatorStats.class), JsonCodec.jsonCodec(ExecutionFailureInfo.class), JsonCodec.jsonCodec(StatsAndCosts.class), - new EventListenerManager(new EventListenerConfig(), new SecretsResolver(ImmutableMap.of()), noop(), noopTracer(), new NodeVersion("test")), + new EventListenerManager(new EventListenerConfig(), new SecretsResolver(ImmutableMap.of()), noop(), noopTracer(), new TestingMBeanServer(), new NodeVersion("test")), new NodeInfo("node"), new NodeVersion("version"), new SessionPropertyManager(), diff --git a/core/trino-main/src/test/java/io/trino/eventlistener/TestEventListenerManager.java b/core/trino-main/src/test/java/io/trino/eventlistener/TestEventListenerManager.java index 45cfb5bc7b17..1af9b0248b43 100644 --- a/core/trino-main/src/test/java/io/trino/eventlistener/TestEventListenerManager.java +++ b/core/trino-main/src/test/java/io/trino/eventlistener/TestEventListenerManager.java @@ -19,6 +19,7 @@ import io.trino.spi.eventlistener.EventListener; import io.trino.spi.eventlistener.QueryCompletedEvent; import org.junit.jupiter.api.Test; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.concurrent.atomic.AtomicBoolean; @@ -31,7 +32,7 @@ class TestEventListenerManager @Test public void testShutdownIsForwardedToListeners() { - EventListenerManager eventListenerManager = new EventListenerManager(new EventListenerConfig(), new SecretsResolver(ImmutableMap.of()), noop(), noopTracer(), new NodeVersion("test-version")); + EventListenerManager eventListenerManager = new EventListenerManager(new EventListenerConfig(), new SecretsResolver(ImmutableMap.of()), noop(), noopTracer(), new TestingMBeanServer(), new NodeVersion("test-version")); AtomicBoolean wasCalled = new AtomicBoolean(false); EventListener listener = new EventListener() { diff --git a/core/trino-main/src/test/java/io/trino/exchange/TestLazyExchangeDataSource.java b/core/trino-main/src/test/java/io/trino/exchange/TestLazyExchangeDataSource.java index cfd8fa3099c8..5f108eaa742d 100644 --- a/core/trino-main/src/test/java/io/trino/exchange/TestLazyExchangeDataSource.java +++ b/core/trino-main/src/test/java/io/trino/exchange/TestLazyExchangeDataSource.java @@ -24,6 +24,7 @@ import io.trino.spi.QueryId; import io.trino.spi.exchange.ExchangeId; import org.junit.jupiter.api.Test; +import org.weakref.jmx.testing.TestingMBeanServer; import static io.trino.memory.context.AggregatedMemoryContext.newSimpleAggregatedMemoryContext; import static org.assertj.core.api.Assertions.assertThat; @@ -45,7 +46,7 @@ public void testIsBlockedCancellationIsolationInInitializationPhase() throw new UnsupportedOperationException(); }, RetryPolicy.NONE, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()))) { + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()))) { ListenableFuture first = source.isBlocked(); ListenableFuture second = source.isBlocked(); assertThat(first) diff --git a/core/trino-main/src/test/java/io/trino/execution/BaseTestSqlTaskManager.java b/core/trino-main/src/test/java/io/trino/execution/BaseTestSqlTaskManager.java index 6f1354825fb0..9fdda667208b 100644 --- a/core/trino-main/src/test/java/io/trino/execution/BaseTestSqlTaskManager.java +++ b/core/trino-main/src/test/java/io/trino/execution/BaseTestSqlTaskManager.java @@ -58,6 +58,7 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.parallel.Execution; +import org.weakref.jmx.testing.TestingMBeanServer; import java.net.URI; import java.util.List; @@ -337,7 +338,7 @@ private SqlTaskManager createSqlTaskManager(TaskManagerConfig taskManagerConfig, new NodeSpillConfig(), new TestingGcMonitor(), noopTracer(), - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig())); + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig())); } private TaskInfo createTask(SqlTaskManager sqlTaskManager, TaskId taskId, Set splits, OutputBuffers outputBuffers) diff --git a/core/trino-main/src/test/java/io/trino/execution/MockRemoteTaskFactory.java b/core/trino-main/src/test/java/io/trino/execution/MockRemoteTaskFactory.java index 0181c3fe1767..7e11cd5ab738 100644 --- a/core/trino-main/src/test/java/io/trino/execution/MockRemoteTaskFactory.java +++ b/core/trino-main/src/test/java/io/trino/execution/MockRemoteTaskFactory.java @@ -58,6 +58,7 @@ import io.trino.sql.planner.plan.PlanNodeId; import io.trino.sql.planner.plan.TableScanNode; import io.trino.testing.TestingMetadata.TestingColumnHandle; +import org.weakref.jmx.testing.TestingMBeanServer; import java.net.URI; import java.time.Instant; @@ -236,7 +237,7 @@ public MockRemoteTask( DataSize.ofBytes(1), () -> new SimpleLocalMemoryContext(newSimpleAggregatedMemoryContext(), "test"), () -> {}, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig())); + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig())); this.fragment = requireNonNull(fragment, "fragment is null"); this.nodeId = requireNonNull(nodeId, "nodeId is null"); diff --git a/core/trino-main/src/test/java/io/trino/execution/TaskTestUtils.java b/core/trino-main/src/test/java/io/trino/execution/TaskTestUtils.java index 4e9ce41a4dd4..ab9c8aad9b91 100644 --- a/core/trino-main/src/test/java/io/trino/execution/TaskTestUtils.java +++ b/core/trino-main/src/test/java/io/trino/execution/TaskTestUtils.java @@ -59,6 +59,7 @@ import io.trino.testing.TestingMetadata.TestingColumnHandle; import io.trino.testing.TestingSplit; import io.trino.type.BlockTypeOperators; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.List; import java.util.Optional; @@ -184,7 +185,7 @@ public static LocalExecutionPlanner createTestingPlanner() PLANNER_CONTEXT.getTypeOperators(), hashCompiler, new TableExecuteContextManager(), - new ExchangeManagerRegistry(noop(), noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(noop(), noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new NodeVersion("test"), new CompilerConfig()); } diff --git a/core/trino-main/src/test/java/io/trino/execution/TestMemoryRevokingScheduler.java b/core/trino-main/src/test/java/io/trino/execution/TestMemoryRevokingScheduler.java index c96e93a49c26..0bc77d32406c 100644 --- a/core/trino-main/src/test/java/io/trino/execution/TestMemoryRevokingScheduler.java +++ b/core/trino-main/src/test/java/io/trino/execution/TestMemoryRevokingScheduler.java @@ -45,6 +45,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; +import org.weakref.jmx.testing.TestingMBeanServer; import java.net.URI; import java.util.Collection; @@ -283,7 +284,7 @@ private SqlTask newSqlTask(QueryId queryId) sqlTask -> {}, DataSize.of(32, MEGABYTE), DataSize.of(200, MEGABYTE), - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new CounterStat()); } diff --git a/core/trino-main/src/test/java/io/trino/execution/TestSqlTask.java b/core/trino-main/src/test/java/io/trino/execution/TestSqlTask.java index 0fb3248bf145..c69949fc3d82 100644 --- a/core/trino-main/src/test/java/io/trino/execution/TestSqlTask.java +++ b/core/trino-main/src/test/java/io/trino/execution/TestSqlTask.java @@ -49,6 +49,7 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.parallel.Execution; +import org.weakref.jmx.testing.TestingMBeanServer; import java.net.URI; import java.util.Optional; @@ -455,7 +456,7 @@ private SqlTask createInitialTask() sqlTask -> {}, DataSize.of(32, MEGABYTE), DataSize.of(200, MEGABYTE), - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new CounterStat()); } } diff --git a/core/trino-main/src/test/java/io/trino/execution/TestSqlTaskManagerRaceWithCatalogPrune.java b/core/trino-main/src/test/java/io/trino/execution/TestSqlTaskManagerRaceWithCatalogPrune.java index 45be29f63eaf..42cfd6126c86 100644 --- a/core/trino-main/src/test/java/io/trino/execution/TestSqlTaskManagerRaceWithCatalogPrune.java +++ b/core/trino-main/src/test/java/io/trino/execution/TestSqlTaskManagerRaceWithCatalogPrune.java @@ -63,6 +63,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.parallel.Execution; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.List; import java.util.Optional; @@ -270,7 +271,7 @@ private static SqlTaskManager getWorkerTaskManagerWithConnectorServiceProvider(C new NodeSpillConfig(), new TestingGcMonitor(), noopTracer(), - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), ignore -> true); } diff --git a/core/trino-main/src/test/java/io/trino/execution/TestTaskExecutorStuckSplits.java b/core/trino-main/src/test/java/io/trino/execution/TestTaskExecutorStuckSplits.java index 8686b8a08fe3..a219177332fe 100644 --- a/core/trino-main/src/test/java/io/trino/execution/TestTaskExecutorStuckSplits.java +++ b/core/trino-main/src/test/java/io/trino/execution/TestTaskExecutorStuckSplits.java @@ -43,6 +43,7 @@ import io.trino.spiller.NodeSpillConfig; import io.trino.util.EmbedVersion; import org.junit.jupiter.api.Test; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.List; import java.util.OptionalInt; @@ -138,7 +139,7 @@ private SqlTaskManager createSqlTaskManager( new NodeSpillConfig(), new TestingGcMonitor(), noopTracer(), - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), stuckSplitStackTracePredicate); } diff --git a/core/trino-main/src/test/java/io/trino/operator/TestDeduplicatingDirectExchangeBuffer.java b/core/trino-main/src/test/java/io/trino/operator/TestDeduplicatingDirectExchangeBuffer.java index f18e8edb9b40..fedca55a8e2b 100644 --- a/core/trino-main/src/test/java/io/trino/operator/TestDeduplicatingDirectExchangeBuffer.java +++ b/core/trino-main/src/test/java/io/trino/operator/TestDeduplicatingDirectExchangeBuffer.java @@ -38,6 +38,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.parallel.Execution; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.HashSet; import java.util.List; @@ -69,7 +70,7 @@ public class TestDeduplicatingDirectExchangeBuffer @BeforeAll public void beforeClass() { - exchangeManagerRegistry = new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()); + exchangeManagerRegistry = new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()); exchangeManagerRegistry.addExchangeManagerFactory(new FileSystemExchangeManagerFactory()); exchangeManagerRegistry.loadExchangeManager("filesystem", ImmutableMap.of( "exchange.base-directories", System.getProperty("java.io.tmpdir") + "/trino-local-file-system-exchange-manager")); @@ -450,7 +451,7 @@ public void testExchangeManagerNotConfigured() directExecutor(), DataSize.of(100, BYTE), RetryPolicy.QUERY, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new QueryId("query"), Span.getInvalid(), createRandomExchangeId())) { @@ -474,7 +475,7 @@ public void testExchangeManagerNotConfigured() directExecutor(), DataSize.of(100, BYTE), RetryPolicy.QUERY, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new QueryId("query"), Span.getInvalid(), createRandomExchangeId())) { diff --git a/core/trino-main/src/test/java/io/trino/operator/TestDirectExchangeClient.java b/core/trino-main/src/test/java/io/trino/operator/TestDirectExchangeClient.java index 92c302303c08..ac94d67448f4 100644 --- a/core/trino-main/src/test/java/io/trino/operator/TestDirectExchangeClient.java +++ b/core/trino-main/src/test/java/io/trino/operator/TestDirectExchangeClient.java @@ -51,6 +51,7 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.parallel.Execution; +import org.weakref.jmx.testing.TestingMBeanServer; import java.net.URI; import java.util.ArrayList; @@ -493,7 +494,7 @@ public void testDeduplicationTaskFailure() scheduler, DataSize.of(1, Unit.MEGABYTE), RetryPolicy.QUERY, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new QueryId("query"), Span.getInvalid(), createRandomExchangeId()); @@ -554,7 +555,7 @@ public void testDeduplication() scheduler, DataSize.of(1, Unit.KILOBYTE), RetryPolicy.QUERY, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), new QueryId("query"), Span.getInvalid(), createRandomExchangeId()), diff --git a/core/trino-main/src/test/java/io/trino/operator/TestExchangeOperator.java b/core/trino-main/src/test/java/io/trino/operator/TestExchangeOperator.java index a7671b12a006..6aef7f80138e 100644 --- a/core/trino-main/src/test/java/io/trino/operator/TestExchangeOperator.java +++ b/core/trino-main/src/test/java/io/trino/operator/TestExchangeOperator.java @@ -43,6 +43,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.parallel.Execution; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.ArrayList; import java.util.List; @@ -271,7 +272,7 @@ private SourceOperator createExchangeOperator() directExchangeClientSupplier, SERDE_FACTORY, RetryPolicy.NONE, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig()), TYPES); DriverContext driverContext = createTaskContext(scheduler, scheduledExecutor, TEST_SESSION) diff --git a/core/trino-main/src/test/java/io/trino/operator/TestMergeOperator.java b/core/trino-main/src/test/java/io/trino/operator/TestMergeOperator.java index 401caa0422f7..d83690f8f5cf 100644 --- a/core/trino-main/src/test/java/io/trino/operator/TestMergeOperator.java +++ b/core/trino-main/src/test/java/io/trino/operator/TestMergeOperator.java @@ -44,6 +44,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; +import org.weakref.jmx.testing.TestingMBeanServer; import java.util.ArrayList; import java.util.List; @@ -102,7 +103,7 @@ public void setUp() httpClient, new HttpClientConfig(), executor, - new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig())); + new ExchangeManagerRegistry(OpenTelemetry.noop(), Tracing.noopTracer(), new TestingMBeanServer(), new SecretsResolver(ImmutableMap.of()), new ExchangeManagerConfig())); orderingCompiler = new OrderingCompiler(new TypeOperators()); } diff --git a/core/trino-spi/pom.xml b/core/trino-spi/pom.xml index 1ccfd06015ac..c7fb21792bb6 100644 --- a/core/trino-spi/pom.xml +++ b/core/trino-spi/pom.xml @@ -686,6 +686,12 @@ method void io.trino.spi.type.TypeNotFoundException::<init>(io.trino.spi.type.TypeSignature, java.lang.Throwable) Remove TypeSignature dependency from + + true + java.method.addedToInterface + method javax.management.MBeanServer io.trino.spi.eventlistener.EventListenerFactory.EventListenerContext::getMBeanServer() + MBeanServer provided by the engine + diff --git a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorContext.java b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorContext.java index 3b20bf5d7756..9be944dc987f 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorContext.java +++ b/core/trino-spi/src/main/java/io/trino/spi/connector/ConnectorContext.java @@ -22,6 +22,8 @@ import io.trino.spi.VersionEmbedder; import io.trino.spi.type.TypeManager; +import javax.management.MBeanServer; + public interface ConnectorContext { default OpenTelemetry getOpenTelemetry() @@ -81,4 +83,9 @@ default PageIndexerFactory getPageIndexerFactory() { throw new UnsupportedOperationException(); } + + default MBeanServer getMBeanServer() + { + throw new UnsupportedOperationException(); + } } diff --git a/core/trino-spi/src/main/java/io/trino/spi/eventlistener/EventListenerFactory.java b/core/trino-spi/src/main/java/io/trino/spi/eventlistener/EventListenerFactory.java index b873768d4627..d1f0dd61a419 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/eventlistener/EventListenerFactory.java +++ b/core/trino-spi/src/main/java/io/trino/spi/eventlistener/EventListenerFactory.java @@ -16,6 +16,8 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; +import javax.management.MBeanServer; + import java.util.Map; public interface EventListenerFactory @@ -31,5 +33,7 @@ interface EventListenerContext OpenTelemetry getOpenTelemetry(); Tracer getTracer(); + + MBeanServer getMBeanServer(); } } diff --git a/core/trino-spi/src/main/java/io/trino/spi/exchange/ExchangeManagerContext.java b/core/trino-spi/src/main/java/io/trino/spi/exchange/ExchangeManagerContext.java index 10c597e2f240..7ea3e094dcc1 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/exchange/ExchangeManagerContext.java +++ b/core/trino-spi/src/main/java/io/trino/spi/exchange/ExchangeManagerContext.java @@ -16,6 +16,8 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; +import javax.management.MBeanServer; + public interface ExchangeManagerContext { default OpenTelemetry getOpenTelemetry() @@ -27,4 +29,9 @@ default Tracer getTracer() { throw new UnsupportedOperationException(); } + + default MBeanServer getMBeanServer() + { + throw new UnsupportedOperationException(); + } } diff --git a/core/trino-spi/src/main/java/io/trino/spi/spool/SpoolingManagerContext.java b/core/trino-spi/src/main/java/io/trino/spi/spool/SpoolingManagerContext.java index 3cf039ea640e..28a425a679ba 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/spool/SpoolingManagerContext.java +++ b/core/trino-spi/src/main/java/io/trino/spi/spool/SpoolingManagerContext.java @@ -17,6 +17,8 @@ import io.opentelemetry.api.trace.Tracer; import io.trino.spi.Node; +import javax.management.MBeanServer; + public interface SpoolingManagerContext { default OpenTelemetry getOpenTelemetry() @@ -29,6 +31,11 @@ default Tracer getTracer() throw new UnsupportedOperationException(); } + default MBeanServer getMBeanServer() + { + throw new UnsupportedOperationException(); + } + default boolean isCoordinator() { throw new UnsupportedOperationException(); diff --git a/core/trino-spi/src/main/java/module-info.java b/core/trino-spi/src/main/java/module-info.java index 10f9218e0934..9a26c062f4fb 100644 --- a/core/trino-spi/src/main/java/module-info.java +++ b/core/trino-spi/src/main/java/module-info.java @@ -18,6 +18,7 @@ requires jakarta.annotation; requires transitive slice; requires jdk.incubator.vector; + requires java.management; exports io.trino.spi; exports io.trino.spi.block; diff --git a/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java b/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java index 44fff919c843..fc12668b3aeb 100644 --- a/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java +++ b/lib/trino-hdfs/src/main/java/io/trino/filesystem/hdfs/HdfsFileSystemManager.java @@ -26,10 +26,7 @@ import io.trino.hdfs.gcs.HiveGcsModule; import io.trino.hdfs.s3.HiveS3Module; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.ConnectorContext; -import org.weakref.jmx.guice.MBeanModule; import java.util.ArrayList; import java.util.List; @@ -53,15 +50,11 @@ public HdfsFileSystemManager( { List modules = new ArrayList<>(); - modules.add(new MBeanModule()); - modules.add(new MBeanServerModule()); - modules.add(new ConnectorObjectNameGeneratorModule("", "")); - modules.add(new HdfsFileSystemModule()); modules.add(new HdfsModule()); modules.add(new HdfsAuthenticationModule()); modules.add(new HiveCosModule()); - modules.add(new ConnectorContextModule(catalogName, context)); + modules.add(new ConnectorContextModule("hdfs", catalogName, context)); if (azureEnabled) { modules.add(new HiveAzureModule()); diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java index ee61a5d51e40..d88cee3a5a2e 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/ConnectorContextModule.java @@ -14,9 +14,11 @@ package io.trino.plugin.base; import com.google.inject.Binder; -import com.google.inject.Module; +import io.airlift.configuration.AbstractConfigurationAwareModule; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; +import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; +import io.trino.plugin.base.jmx.RebindSafeMBeanServer; import io.trino.spi.Node; import io.trino.spi.NodeManager; import io.trino.spi.NodeVersion; @@ -27,24 +29,36 @@ import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.MetadataProvider; import io.trino.spi.type.TypeManager; +import org.weakref.jmx.guice.MBeanModule; + +import javax.management.MBeanServer; import static java.util.Objects.requireNonNull; public class ConnectorContextModule - implements Module + extends AbstractConfigurationAwareModule { private final String catalogName; + private final String connectorName; private final ConnectorContext context; - public ConnectorContextModule(String catalogName, ConnectorContext context) + public ConnectorContextModule(String connectorName, String catalogName, ConnectorContext context) { + this.connectorName = requireNonNull(connectorName, "connectorName is null"); this.catalogName = requireNonNull(catalogName, "catalogName is null"); this.context = requireNonNull(context, "context is null"); } @Override - public void configure(Binder binder) + public void setup(Binder binder) { + // Export all managed beans + install(new MBeanModule()); + // in a separate domain + install(new ConnectorObjectNameGeneratorModule("io.trino.plugin." + connectorName, "trino.plugin." + connectorName)); + // while using MBeanServer provided by the engine + binder.bind(MBeanServer.class).toInstance(new RebindSafeMBeanServer(context.getMBeanServer())); + binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/eventlistener/testing/TestingEventListenerContext.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/eventlistener/testing/TestingEventListenerContext.java index 90ce49c2b90f..7311c628037a 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/eventlistener/testing/TestingEventListenerContext.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/eventlistener/testing/TestingEventListenerContext.java @@ -16,6 +16,9 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; import io.trino.spi.eventlistener.EventListenerFactory; +import org.weakref.jmx.testing.TestingMBeanServer; + +import javax.management.MBeanServer; import static java.util.Objects.requireNonNull; @@ -51,4 +54,10 @@ public Tracer getTracer() { return OpenTelemetry.noop().getTracer("TEST_TRACER"); } + + @Override + public MBeanServer getMBeanServer() + { + return new TestingMBeanServer(); + } } diff --git a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/jmx/ConnectorObjectNameGeneratorModule.java b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/jmx/ConnectorObjectNameGeneratorModule.java index 011a7501738c..06a1de079f65 100644 --- a/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/jmx/ConnectorObjectNameGeneratorModule.java +++ b/lib/trino-plugin-toolkit/src/main/java/io/trino/plugin/base/jmx/ConnectorObjectNameGeneratorModule.java @@ -72,7 +72,7 @@ public String generatedNameOf(Class type) return new ObjectNameBuilder(toDomain(type)) .withProperties(ImmutableMap.builder() .put("type", type.getSimpleName()) - .put("name", catalogName) + .put("catalog", catalogName) .buildOrThrow()) .build(); } @@ -83,6 +83,7 @@ public String generatedNameOf(Class type, Map properties) return new ObjectNameBuilder(toDomain(type)) .withProperties(ImmutableMap.builder() .putAll(properties) + .put("type", type.getSimpleName()) .put("catalog", catalogName) .buildOrThrow()) .build(); diff --git a/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java b/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java index 3a407f120198..f458bd3bdf03 100644 --- a/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java +++ b/plugin/trino-ai-functions/src/main/java/io/trino/plugin/ai/functions/AiConnectorFactory.java @@ -27,10 +27,12 @@ public class AiConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "ai"; + @Override public String getName() { - return "ai"; + return CONNECTOR_NAME; } @Override @@ -41,7 +43,7 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new AiModule(), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java index af4d9df0a78d..ee13b54e0b26 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcConnectorFactory.java @@ -56,7 +56,7 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(name, catalogName, context), new JdbcModule(), module.get()); diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcDiagnosticModule.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcDiagnosticModule.java index de4e45e9de85..294983f68b11 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcDiagnosticModule.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcDiagnosticModule.java @@ -15,17 +15,14 @@ import com.google.inject.Binder; import com.google.inject.Module; -import com.google.inject.Provider; import com.google.inject.Provides; import com.google.inject.Scopes; import com.google.inject.Singleton; import io.airlift.log.Logger; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.util.LoggingInvocationHandler; import io.trino.plugin.jdbc.jmx.StatisticsAwareConnectionFactory; import io.trino.plugin.jdbc.jmx.StatisticsAwareJdbcClient; import io.trino.spi.catalog.CatalogName; -import org.weakref.jmx.guice.MBeanModule; import static com.google.common.reflect.Reflection.newProxy; import static java.lang.String.format; @@ -37,17 +34,13 @@ public class JdbcDiagnosticModule @Override public void configure(Binder binder) { - binder.install(new MBeanServerModule()); - binder.install(new MBeanModule()); binder.bind(StatisticsAwareConnectionFactory.class).in(Scopes.SINGLETON); - - Provider catalogName = binder.getProvider(CatalogName.class); newExporter(binder).export(StatisticsAwareJdbcClient.class) - .as(generator -> generator.generatedNameOf(JdbcClient.class, catalogName.get().toString())); + .as(generator -> generator.generatedNameOf(JdbcClient.class)); newExporter(binder).export(StatisticsAwareConnectionFactory.class) - .as(generator -> generator.generatedNameOf(ConnectionFactory.class, catalogName.get().toString())); + .as(generator -> generator.generatedNameOf(ConnectionFactory.class)); newExporter(binder).export(JdbcClient.class) - .as(generator -> generator.generatedNameOf(CachingJdbcClient.class, catalogName.get().toString())); + .as(generator -> generator.generatedNameOf(CachingJdbcClient.class)); } @Provides diff --git a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java index 64466863cf95..8c210b339639 100644 --- a/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java +++ b/plugin/trino-base-jdbc/src/main/java/io/trino/plugin/jdbc/JdbcModule.java @@ -87,9 +87,7 @@ public void setup(Binder binder) bindSessionPropertiesProvider(binder, JdbcDynamicFilteringSessionProperties.class); binder.bind(DynamicFilteringStats.class).in(Scopes.SINGLETON); - Provider catalogName = binder.getProvider(CatalogName.class); - newExporter(binder).export(DynamicFilteringStats.class) - .as(generator -> generator.generatedNameOf(DynamicFilteringStats.class, catalogName.get().toString())); + newExporter(binder).export(DynamicFilteringStats.class).as(generator -> generator.generatedNameOf(DynamicFilteringStats.class)); binder.bind(JdbcClient.class).annotatedWith(ForCaching.class).to(Key.get(RetryingJdbcClient.class)).in(Scopes.SINGLETON); binder.bind(CachingJdbcClient.class).in(Scopes.SINGLETON); diff --git a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJmxStats.java b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJmxStats.java index e6235f7895eb..a28d7e36c022 100644 --- a/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJmxStats.java +++ b/plugin/trino-base-jdbc/src/test/java/io/trino/plugin/jdbc/TestJmxStats.java @@ -29,7 +29,6 @@ import static com.google.common.collect.Iterables.getOnlyElement; import static java.lang.String.format; -import static java.lang.management.ManagementFactory.getPlatformMBeanServer; import static org.assertj.core.api.Assertions.assertThat; public class TestJmxStats @@ -40,19 +39,20 @@ public void testJmxStatsExposure() { Plugin plugin = new JdbcPlugin("base_jdbc", TestingH2JdbcModule::new); ConnectorFactory factory = getOnlyElement(plugin.getConnectorFactories()); + TestingConnectorContext connectorContext = new TestingConnectorContext(); Connector connector = factory.create( - "test", + "test_catalog", ImmutableMap.of( "connection-url", "jdbc:driver:", "bootstrap.quiet", "true"), - new TestingConnectorContext()); - MBeanServer mbeanServer = getPlatformMBeanServer(); + connectorContext); + MBeanServer mbeanServer = connectorContext.getMBeanServer(); Set objectNames = mbeanServer.queryNames(new ObjectName("io.trino.plugin.jdbc:*"), null); assertThat(objectNames.containsAll( ImmutableSet.of( - new ObjectName("io.trino.plugin.jdbc:type=ConnectionFactory,name=test"), - new ObjectName("io.trino.plugin.jdbc:type=JdbcClient,name=test")))).isTrue(); + new ObjectName("io.trino.plugin.jdbc:type=ConnectionFactory,catalog=test_catalog"), + new ObjectName("io.trino.plugin.jdbc:type=JdbcClient,catalog=test_catalog")))).isTrue(); for (ObjectName objectName : objectNames) { MBeanInfo mbeanInfo = mbeanServer.getMBeanInfo(objectName); diff --git a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java index f8a30f451591..93b7adf2ce2e 100644 --- a/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java +++ b/plugin/trino-bigquery/src/main/java/io/trino/plugin/bigquery/BigQueryConnectorFactory.java @@ -17,12 +17,9 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -32,10 +29,12 @@ public class BigQueryConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "bigquery"; + @Override public String getName() { - return "bigquery"; + return CONNECTOR_NAME; } @Override @@ -49,10 +48,7 @@ public Connector create(String catalogName, Map config, Connecto "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new BigQueryConnectorModule(), - new MBeanServerModule(), - new MBeanModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.bigquery", "trino.plugin.bigquery"), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-cassandra/pom.xml b/plugin/trino-cassandra/pom.xml index 7fd897583f2f..e05df37ea625 100644 --- a/plugin/trino-cassandra/pom.xml +++ b/plugin/trino-cassandra/pom.xml @@ -116,11 +116,6 @@ jakarta.validation-api - - org.weakref - jmxutils - - com.fasterxml.jackson.core jackson-annotations diff --git a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java index 273427eac06a..fa4f77b4d018 100644 --- a/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java +++ b/plugin/trino-cassandra/src/main/java/io/trino/plugin/cassandra/CassandraConnectorFactory.java @@ -17,11 +17,9 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -31,10 +29,12 @@ public class CassandraConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "cassandra"; + @Override public String getName() { - return "cassandra"; + return CONNECTOR_NAME; } @Override @@ -45,11 +45,9 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new ConnectorContextModule(catalogName, context), - new MBeanModule(), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new JsonModule(), - new CassandraClientModule(), - new MBeanServerModule()); + new CassandraClientModule()); Injector injector = app.doNotInitializeLogging() .disableSystemProperties() diff --git a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java index dd3723767ae5..2c91bd2d21f1 100644 --- a/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java +++ b/plugin/trino-delta-lake/src/main/java/io/trino/plugin/deltalake/DeltaLakeConnectorFactory.java @@ -27,8 +27,6 @@ import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager; import io.trino.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.deltalake.metastore.DeltaLakeMetastoreModule; import io.trino.plugin.hive.HiveConfig; @@ -45,7 +43,6 @@ import io.trino.spi.function.FunctionProvider; import io.trino.spi.function.table.ConnectorTableFunction; import io.trino.spi.procedure.Procedure; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; import java.util.Optional; @@ -84,16 +81,13 @@ public static Connector createConnector( try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) { Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.deltalake", "trino.plugin.deltalake"), new JsonModule(), - new MBeanServerModule(), metastoreModule.orElse(new DeltaLakeMetastoreModule()), new DeltaLakeModule(), new DeltaLakeSecurityModule(), new DeltaLakeSynchronizerModule(), new FileSystemModule(catalogName, context, false), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), module); Injector injector = app diff --git a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java index 655faa079291..4894345d51c6 100644 --- a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java +++ b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/TestDeltaLakeMetadata.java @@ -186,7 +186,7 @@ public void setUp() Bootstrap app = new Bootstrap( // connector dependencies new JsonModule(), - new ConnectorContextModule("test", context), + new ConnectorContextModule("deltalake", "test", context), // connector modules new DeltaLakeSecurityModule(), new DeltaLakeMetastoreModule(), diff --git a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java index b326af431e7b..4e5fcc016f60 100644 --- a/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java +++ b/plugin/trino-delta-lake/src/test/java/io/trino/plugin/deltalake/metastore/glue/TestDeltaLakeGlueMetastore.java @@ -112,7 +112,7 @@ public void setUp() Bootstrap app = new Bootstrap( // connector dependencies new JsonModule(), - new ConnectorContextModule("test", context), + new ConnectorContextModule("deltalake", "test", context), // connector modules new DeltaLakeMetastoreModule(), new DeltaLakeModule(), diff --git a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java index 6864a9500210..e1b3d6fdfc2f 100644 --- a/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java +++ b/plugin/trino-elasticsearch/src/main/java/io/trino/plugin/elasticsearch/ElasticsearchConnectorFactory.java @@ -18,12 +18,9 @@ import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -33,12 +30,14 @@ public class ElasticsearchConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "elasticsearch"; + ElasticsearchConnectorFactory() {} @Override public String getName() { - return "elasticsearch"; + return CONNECTOR_NAME; } @Override @@ -50,13 +49,10 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new MBeanServerModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.elasticsearch", "trino.plugin.elasticsearch"), new JsonModule(), new TypeDeserializerModule(), new ElasticsearchConnectorModule(), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java b/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java index c605d3f3216a..4b8efaa76d6b 100644 --- a/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java +++ b/plugin/trino-example-http/src/main/java/io/trino/plugin/example/ExampleConnectorFactory.java @@ -30,10 +30,12 @@ public class ExampleConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "example_http"; + @Override public String getName() { - return "example_http"; + return CONNECTOR_NAME; } @Override @@ -47,7 +49,7 @@ public Connector create(String catalogName, Map requiredConfig, "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new TypeDeserializerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new ExampleModule()); Injector injector = app diff --git a/plugin/trino-exchange-filesystem/src/main/java/io/trino/plugin/exchange/filesystem/FileSystemExchangeManagerFactory.java b/plugin/trino-exchange-filesystem/src/main/java/io/trino/plugin/exchange/filesystem/FileSystemExchangeManagerFactory.java index 4ed38311a5ac..2c1a34871b1b 100644 --- a/plugin/trino-exchange-filesystem/src/main/java/io/trino/plugin/exchange/filesystem/FileSystemExchangeManagerFactory.java +++ b/plugin/trino-exchange-filesystem/src/main/java/io/trino/plugin/exchange/filesystem/FileSystemExchangeManagerFactory.java @@ -17,13 +17,15 @@ import io.airlift.bootstrap.Bootstrap; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.jmx.PrefixObjectNameGeneratorModule; +import io.trino.plugin.base.jmx.RebindSafeMBeanServer; import io.trino.spi.exchange.ExchangeManager; import io.trino.spi.exchange.ExchangeManagerContext; import io.trino.spi.exchange.ExchangeManagerFactory; import org.weakref.jmx.guice.MBeanModule; +import javax.management.MBeanServer; + import java.util.Map; import static java.util.Objects.requireNonNull; @@ -47,7 +49,7 @@ public ExchangeManager create(Map config, ExchangeManagerContext Bootstrap app = new Bootstrap( "io.trino.bootstrap.exchange.filesystem", new MBeanModule(), - new MBeanServerModule(), + binder -> binder.bind(MBeanServer.class).toInstance(new RebindSafeMBeanServer(context.getMBeanServer())), new PrefixObjectNameGeneratorModule("io.trino.plugin.exchange.filesystem", "trino.plugin.exchange.filesystem"), new FileSystemExchangeModule(), binder -> { diff --git a/plugin/trino-exchange-filesystem/src/test/java/io/trino/plugin/exchange/filesystem/TestExchangeManagerContext.java b/plugin/trino-exchange-filesystem/src/test/java/io/trino/plugin/exchange/filesystem/TestExchangeManagerContext.java index 625ba1b23ab9..879f3b06f15b 100644 --- a/plugin/trino-exchange-filesystem/src/test/java/io/trino/plugin/exchange/filesystem/TestExchangeManagerContext.java +++ b/plugin/trino-exchange-filesystem/src/test/java/io/trino/plugin/exchange/filesystem/TestExchangeManagerContext.java @@ -17,6 +17,9 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; import io.trino.spi.exchange.ExchangeManagerContext; +import org.weakref.jmx.testing.TestingMBeanServer; + +import javax.management.MBeanServer; public class TestExchangeManagerContext implements ExchangeManagerContext @@ -32,4 +35,10 @@ public Tracer getTracer() { return Tracing.noopTracer(); } + + @Override + public MBeanServer getMBeanServer() + { + return new TestingMBeanServer(); + } } diff --git a/plugin/trino-exchange-hdfs/src/main/java/io/trino/plugin/exchange/hdfs/HdfsExchangeManagerFactory.java b/plugin/trino-exchange-hdfs/src/main/java/io/trino/plugin/exchange/hdfs/HdfsExchangeManagerFactory.java index eb7746ddd9b3..035babc60fc7 100644 --- a/plugin/trino-exchange-hdfs/src/main/java/io/trino/plugin/exchange/hdfs/HdfsExchangeManagerFactory.java +++ b/plugin/trino-exchange-hdfs/src/main/java/io/trino/plugin/exchange/hdfs/HdfsExchangeManagerFactory.java @@ -17,14 +17,16 @@ import io.airlift.bootstrap.Bootstrap; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Tracer; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.jmx.PrefixObjectNameGeneratorModule; +import io.trino.plugin.base.jmx.RebindSafeMBeanServer; import io.trino.plugin.exchange.filesystem.FileSystemExchangeManager; import io.trino.spi.exchange.ExchangeManager; import io.trino.spi.exchange.ExchangeManagerContext; import io.trino.spi.exchange.ExchangeManagerFactory; import org.weakref.jmx.guice.MBeanModule; +import javax.management.MBeanServer; + import java.util.Map; import static java.util.Objects.requireNonNull; @@ -48,7 +50,7 @@ public ExchangeManager create(Map config, ExchangeManagerContext Bootstrap app = new Bootstrap( "io.trino.bootstrap.exchange.hdfs", new MBeanModule(), - new MBeanServerModule(), + binder -> binder.bind(MBeanServer.class).toInstance(new RebindSafeMBeanServer(context.getMBeanServer())), new PrefixObjectNameGeneratorModule("io.trino.plugin.exchange.hdfs", "trino.plugin.exchange.hdfs"), new HdfsExchangeModule(), binder -> { diff --git a/plugin/trino-faker/src/main/java/io/trino/plugin/faker/FakerConnectorFactory.java b/plugin/trino-faker/src/main/java/io/trino/plugin/faker/FakerConnectorFactory.java index f7d9120419aa..328864d3af28 100644 --- a/plugin/trino-faker/src/main/java/io/trino/plugin/faker/FakerConnectorFactory.java +++ b/plugin/trino-faker/src/main/java/io/trino/plugin/faker/FakerConnectorFactory.java @@ -51,7 +51,7 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(name, catalogName, context), new FakerModule()); Injector injector = app diff --git a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java index 7a7f5fe522e1..7767c74ce146 100644 --- a/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java +++ b/plugin/trino-google-sheets/src/main/java/io/trino/plugin/google/sheets/SheetsConnectorFactory.java @@ -30,10 +30,12 @@ public class SheetsConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "gsheets"; + @Override public String getName() { - return "gsheets"; + return CONNECTOR_NAME; } @Override @@ -46,7 +48,7 @@ public Connector create(String catalogName, Map config, Connecto "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new TypeDeserializerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new SheetsModule()); Injector injector = app diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java index 08ca158ec9c4..a98d215e62ed 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/HiveConnectorFactory.java @@ -30,8 +30,6 @@ import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager; import io.trino.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.hive.metastore.HiveMetastoreModule; import io.trino.plugin.hive.procedure.HiveProcedureModule; @@ -48,7 +46,6 @@ import io.trino.spi.connector.ConnectorSplitManager; import io.trino.spi.connector.TableProcedureMetadata; import io.trino.spi.procedure.Procedure; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; import java.util.Optional; @@ -61,10 +58,12 @@ public class HiveConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "hive"; + @Override public String getName() { - return "hive"; + return CONNECTOR_NAME; } @Override @@ -87,8 +86,6 @@ public static Connector createConnector( try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) { Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.hive", "trino.plugin.hive"), new JsonModule(), new TypeDeserializerModule(), new HiveModule(), @@ -98,8 +95,7 @@ public static Connector createConnector( .map(factory -> (Module) binder -> binder.bind(TrinoFileSystemFactory.class).toInstance(factory)) .orElseGet(() -> new FileSystemModule(catalogName, context, false)), new HiveProcedureModule(), - new MBeanServerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), binder -> newSetBinder(binder, SessionPropertiesProvider.class).addBinding().to(HiveSessionProperties.class).in(Scopes.SINGLETON), module); diff --git a/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java b/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java index bf3b140dfe11..a6d4ccc0d2b5 100644 --- a/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java +++ b/plugin/trino-hudi/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java @@ -25,7 +25,6 @@ import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager; import io.trino.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.hive.metastore.HiveMetastoreModule; import io.trino.spi.classloader.ThreadContextClassLoader; @@ -35,7 +34,6 @@ import io.trino.spi.connector.ConnectorNodePartitioningProvider; import io.trino.spi.connector.ConnectorPageSourceProvider; import io.trino.spi.connector.ConnectorSplitManager; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; import java.util.Optional; @@ -47,10 +45,12 @@ public class HudiConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "hudi"; + @Override public String getName() { - return "hudi"; + return CONNECTOR_NAME; } @Override @@ -70,14 +70,12 @@ public static Connector createConnector( try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) { Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), new JsonModule(), new HudiModule(), new HiveMetastoreModule(Optional.empty(), false), new FileSystemModule(catalogName, context, false), - new MBeanServerModule(), module.orElse(EMPTY_MODULE), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java index a4ea9e39de38..815c96414856 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergConnectorFactory.java @@ -22,15 +22,12 @@ import io.airlift.json.JsonModule; import io.trino.filesystem.manager.FileSystemModule; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.hive.HiveConfig; import io.trino.plugin.iceberg.catalog.IcebergCatalogModule; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; import java.util.Optional; @@ -43,10 +40,12 @@ public class IcebergConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "iceberg"; + @Override public String getName() { - return "iceberg"; + return CONNECTOR_NAME; } @Override @@ -67,15 +66,12 @@ public static Connector createConnector( try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) { Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.iceberg", "trino.plugin.iceberg"), new JsonModule(), new IcebergModule(), new IcebergSecurityModule(), icebergCatalogModule.orElse(new IcebergCatalogModule()), - new MBeanServerModule(), new IcebergFileSystemModule(catalogName, context), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), binder -> { binder.bind(ClassLoader.class).toInstance(IcebergConnectorFactory.class.getClassLoader()); }, diff --git a/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java b/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java index 28b57b67e5f6..147a2706b37a 100644 --- a/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java +++ b/plugin/trino-jmx/src/main/java/io/trino/plugin/jmx/JmxConnectorFactory.java @@ -17,7 +17,6 @@ import com.google.inject.Scopes; import io.airlift.bootstrap.Bootstrap; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; @@ -34,10 +33,12 @@ public class JmxConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "jmx"; + @Override public String getName() { - return "jmx"; + return CONNECTOR_NAME; } @Override @@ -47,8 +48,7 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanServerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), binder -> { configBinder(binder).bindConfig(JmxConnectorConfig.class); binder.bind(JmxConnector.class).in(Scopes.SINGLETON); diff --git a/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxQueries.java b/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxQueries.java index 14ab12022db0..e43d8e9e68db 100644 --- a/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxQueries.java +++ b/plugin/trino-jmx/src/test/java/io/trino/plugin/jmx/TestJmxQueries.java @@ -52,13 +52,11 @@ public void teardown() assertions = null; } - private static final Set STANDARD_NAMES = ImmutableSet.builder() - .add("java.lang:type=ClassLoading") - .add("java.lang:type=Memory") - .add("java.lang:type=OperatingSystem") - .add("java.lang:type=Runtime") - .add("java.lang:type=Threading") - .add("java.util.logging:type=Logging") + // Since tests run with TestingMBeanServer we can only query beans exposed by Trino but not the platform ones + private static final Set STANDARD_TRINO_NAMES = ImmutableSet.builder() + .add("trino.type:name=typeoperatorscache") + .add("trino.server:name=statementhttpexecutionmbean") + .add("io.airlift.http.client:name=forexchange,type=httpclient") .build(); @Test @@ -71,7 +69,7 @@ public void testShowSchemas() @Test public void testShowTables() { - Set standardNamesLower = STANDARD_NAMES.stream() + Set standardNamesLower = STANDARD_TRINO_NAMES.stream() .map(name -> name.toLowerCase(Locale.ENGLISH)) .collect(toImmutableSet()); @@ -82,7 +80,7 @@ public void testShowTables() @Test public void testQuery() { - for (String name : STANDARD_NAMES) { + for (String name : STANDARD_TRINO_NAMES) { assertThat(assertions.query("SELECT * FROM \"%s\"".formatted(name))) .succeeds(); } @@ -91,15 +89,15 @@ public void testQuery() @Test public void testNodeCount() { - assertThat(assertions.query("SELECT DISTINCT node FROM \"%s\"".formatted(STANDARD_NAMES.iterator().next()))) + assertThat(assertions.query("SELECT DISTINCT node FROM \"%s\"".formatted(STANDARD_TRINO_NAMES.iterator().next()))) .matches("SELECT node_id FROM system.runtime.nodes"); } @Test public void testOrderOfParametersIsIgnored() { - assertThat(assertions.query("SELECT node FROM \"java.nio:type=bufferpool,name=direct\"")) - .matches("SELECT node FROM \"java.nio:name=direct,type=bufferpool\""); + assertThat(assertions.query("SELECT node FROM \"trino.sql.planner.iterative:name=iterativeoptimizer,rule=transformuncorrelatedsubquerytojoin\"")) + .matches("SELECT node FROM \"trino.sql.planner.iterative:rule=transformuncorrelatedsubquerytojoin,name=iterativeoptimizer\""); } @Test @@ -108,13 +106,10 @@ public void testQueryCumulativeTable() assertThat(assertions.query("SELECT * FROM \"*:*\"")) .succeeds(); - assertThat(assertions.query("SELECT * FROM \"java.util.logging:*\"")) + assertThat(assertions.query("SELECT * FROM \"trino.type:*\"")) .succeeds(); - assertThat(assertions.query("SELECT * FROM \"java.lang:*\"")) - .result().rowCount().isGreaterThan(1); - - assertThat(assertions.query("SELECT * FROM \"jAVA.LANg:*\"")) + assertThat(assertions.query("SELECT * FROM \"trIno.typE:*\"")) .result().rowCount().isGreaterThan(1); } } diff --git a/plugin/trino-kafka-event-listener/src/main/java/io/trino/plugin/eventlistener/kafka/KafkaEventListenerFactory.java b/plugin/trino-kafka-event-listener/src/main/java/io/trino/plugin/eventlistener/kafka/KafkaEventListenerFactory.java index 22cd56772962..77667944001d 100644 --- a/plugin/trino-kafka-event-listener/src/main/java/io/trino/plugin/eventlistener/kafka/KafkaEventListenerFactory.java +++ b/plugin/trino-kafka-event-listener/src/main/java/io/trino/plugin/eventlistener/kafka/KafkaEventListenerFactory.java @@ -18,11 +18,13 @@ import com.google.inject.Scopes; import io.airlift.bootstrap.Bootstrap; import io.opentelemetry.api.OpenTelemetry; -import io.trino.plugin.base.jmx.MBeanServerModule; +import io.trino.plugin.base.jmx.RebindSafeMBeanServer; import io.trino.spi.eventlistener.EventListener; import io.trino.spi.eventlistener.EventListenerFactory; import org.weakref.jmx.guice.MBeanModule; +import javax.management.MBeanServer; + import java.util.Map; import static io.airlift.configuration.ConfigBinder.configBinder; @@ -43,7 +45,7 @@ public EventListener create(Map config, EventListenerContext con Bootstrap app = new Bootstrap( "io.trino.bootstrap.listener." + getName(), new MBeanModule(), - new MBeanServerModule(), + binder -> binder.bind(MBeanServer.class).toInstance(new RebindSafeMBeanServer(context.getMBeanServer())), new KafkaProducerModule(), binder -> { binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); diff --git a/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java b/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java index 55835544f781..dcb6a9e3d021 100644 --- a/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java +++ b/plugin/trino-kafka/src/main/java/io/trino/plugin/kafka/KafkaConnectorFactory.java @@ -35,6 +35,7 @@ public class KafkaConnectorFactory implements ConnectorFactory { private final Supplier extensions; + static final String CONNECTOR_NAME = "kafka"; public KafkaConnectorFactory(Supplier extensions) { @@ -44,7 +45,7 @@ public KafkaConnectorFactory(Supplier extensions) @Override public String getName() { - return "kafka"; + return CONNECTOR_NAME; } @Override @@ -62,7 +63,7 @@ public Connector create(String catalogName, Map config, Connecto .add(new KafkaConnectorModule()) .add(new KafkaClientsModule()) .add(new KafkaSecurityModule()) - .add(new ConnectorContextModule(catalogName, context)) + .add(new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)) .add(binder -> { binder.bind(ClassLoader.class).toInstance(KafkaConnectorFactory.class.getClassLoader()); }) diff --git a/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java b/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java index e58f61511ed1..99c1ed2ebbae 100644 --- a/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java +++ b/plugin/trino-lakehouse/src/main/java/io/trino/plugin/lakehouse/LakehouseConnectorFactory.java @@ -18,14 +18,11 @@ import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.hive.security.HiveSecurityModule; import io.trino.spi.classloader.ThreadContextClassLoader; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -34,6 +31,8 @@ public class LakehouseConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "lakehouse"; + @Override public String getName() { @@ -47,9 +46,6 @@ public Connector create(String catalogName, Map config, Connecto try (var _ = new ThreadContextClassLoader(getClass().getClassLoader())) { Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new MBeanServerModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin", "trino.plugin"), new JsonModule(), new TypeDeserializerModule(), new LakehouseModule(), @@ -59,7 +55,7 @@ public Connector create(String catalogName, Map config, Connecto new LakehouseHudiModule(), new HiveSecurityModule(), new LakehouseFileSystemModule(catalogName, context), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java b/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java index dc6aef83015f..d2c175c299b6 100644 --- a/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java +++ b/plugin/trino-loki/src/main/java/io/trino/plugin/loki/LokiConnectorFactory.java @@ -31,10 +31,12 @@ public class LokiConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "loki"; + @Override public String getName() { - return "loki"; + return CONNECTOR_NAME; } @Override @@ -49,7 +51,7 @@ public Connector create(String catalogName, Map requiredConfig, "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new TypeDeserializerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new LokiModule()); Injector injector = app diff --git a/plugin/trino-memory/src/main/java/io/trino/plugin/memory/MemoryConnectorFactory.java b/plugin/trino-memory/src/main/java/io/trino/plugin/memory/MemoryConnectorFactory.java index d40fddfd4a49..6461b1b7f795 100644 --- a/plugin/trino-memory/src/main/java/io/trino/plugin/memory/MemoryConnectorFactory.java +++ b/plugin/trino-memory/src/main/java/io/trino/plugin/memory/MemoryConnectorFactory.java @@ -29,6 +29,8 @@ public class MemoryConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "memory"; + @Override public String getName() { @@ -45,7 +47,7 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new MemoryModule()); Injector injector = app diff --git a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java index f5babefaa252..f8cd042d478c 100644 --- a/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java +++ b/plugin/trino-mongodb/src/main/java/io/trino/plugin/mongodb/MongoConnectorFactory.java @@ -31,6 +31,8 @@ public class MongoConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "mongo"; + private final String name; public MongoConnectorFactory(String name) @@ -55,7 +57,7 @@ public Connector create(String catalogName, Map config, Connecto "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new MongoClientModule(), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java b/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java index c0d2b33b35df..643ae8057a36 100644 --- a/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java +++ b/plugin/trino-opensearch/src/main/java/io/trino/plugin/opensearch/OpenSearchConnectorFactory.java @@ -18,12 +18,9 @@ import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -33,12 +30,14 @@ public class OpenSearchConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "opensearch"; + OpenSearchConnectorFactory() {} @Override public String getName() { - return "opensearch"; + return CONNECTOR_NAME; } @Override @@ -50,13 +49,10 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new MBeanServerModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.opensearch", "trino.plugin.opensearch"), new JsonModule(), new TypeDeserializerModule(), new OpenSearchConnectorModule(), - new ConnectorContextModule(catalogName, context)); + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)); Injector injector = app .doNotInitializeLogging() diff --git a/plugin/trino-pinot/pom.xml b/plugin/trino-pinot/pom.xml index cb53f6ed6eb6..93185bce7b79 100644 --- a/plugin/trino-pinot/pom.xml +++ b/plugin/trino-pinot/pom.xml @@ -328,11 +328,6 @@ RoaringBitmap - - org.weakref - jmxutils - - com.fasterxml.jackson.core jackson-annotations diff --git a/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java b/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java index ab3b21bbe1a2..fa1e2d97ac9b 100755 --- a/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java +++ b/plugin/trino-pinot/src/main/java/io/trino/plugin/pinot/PinotConnectorFactory.java @@ -20,12 +20,10 @@ import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; import io.trino.plugin.base.TypeDeserializerModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.plugin.pinot.auth.PinotAuthenticationModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; import java.util.Optional; @@ -36,6 +34,8 @@ public class PinotConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "pinot"; + private final Optional extension; public PinotConnectorFactory(Optional extension) @@ -46,7 +46,7 @@ public PinotConnectorFactory(Optional extension) @Override public String getName() { - return "pinot"; + return CONNECTOR_NAME; } @Override @@ -58,10 +58,8 @@ public Connector create(String catalogName, Map config, Connecto ImmutableList.Builder modulesBuilder = ImmutableList.builder() .add(new JsonModule()) - .add(new MBeanModule()) - .add(new MBeanServerModule()) .add(new TypeDeserializerModule()) - .add(new ConnectorContextModule(catalogName, context)) + .add(new ConnectorContextModule(CONNECTOR_NAME, catalogName, context)) .add(new PinotModule(catalogName)) .add(new PinotAuthenticationModule()); diff --git a/plugin/trino-postgresql/pom.xml b/plugin/trino-postgresql/pom.xml index ea9bfbd42278..2c93abd153a8 100644 --- a/plugin/trino-postgresql/pom.xml +++ b/plugin/trino-postgresql/pom.xml @@ -148,6 +148,12 @@ runtime + + org.weakref + jmxutils + runtime + + io.airlift configuration-testing diff --git a/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestingPostgreSqlConnectorContext.java b/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestingPostgreSqlConnectorContext.java index aee733c8e957..c83df038b660 100644 --- a/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestingPostgreSqlConnectorContext.java +++ b/plugin/trino-postgresql/src/test/java/io/trino/plugin/postgresql/TestingPostgreSqlConnectorContext.java @@ -36,6 +36,9 @@ import io.trino.spi.type.TypeOperators; import io.trino.type.InternalTypeManager; import io.trino.util.EmbedVersion; +import org.weakref.jmx.testing.TestingMBeanServer; + +import javax.management.MBeanServer; import static io.trino.node.TestingInternalNodeManager.CURRENT_NODE; import static io.trino.spi.connector.MetadataProvider.NOOP_METADATA_PROVIDER; @@ -105,4 +108,10 @@ public PageIndexerFactory getPageIndexerFactory() { return pageIndexerFactory; } + + @Override + public MBeanServer getMBeanServer() + { + return new TestingMBeanServer(); + } } diff --git a/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java b/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java index 1da069b15af1..453b1f18e1f4 100644 --- a/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java +++ b/plugin/trino-prometheus/src/main/java/io/trino/plugin/prometheus/PrometheusConnectorFactory.java @@ -31,6 +31,8 @@ public class PrometheusConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "prometheus"; + @Override public String getName() { @@ -49,7 +51,7 @@ public Connector create(String catalogName, Map requiredConfig, "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new TypeDeserializerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new PrometheusModule()); Injector injector = app diff --git a/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java b/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java index e23228763fb5..99deb0e718af 100644 --- a/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java +++ b/plugin/trino-redis/src/main/java/io/trino/plugin/redis/RedisConnectorFactory.java @@ -35,6 +35,8 @@ public class RedisConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "redis"; + private final Optional>> tableDescriptionSupplier; RedisConnectorFactory(Optional>> tableDescriptionSupplier) @@ -45,7 +47,7 @@ public class RedisConnectorFactory @Override public String getName() { - return "redis"; + return CONNECTOR_NAME; } @Override @@ -59,7 +61,7 @@ public Connector create(String catalogName, Map config, Connecto "io.trino.bootstrap.catalog." + catalogName, new JsonModule(), new TypeDeserializerModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new RedisConnectorModule(), binder -> { if (tableDescriptionSupplier.isPresent()) { diff --git a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java index 445abe90164c..cb736bf4eee0 100644 --- a/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java +++ b/plugin/trino-redshift/src/main/java/io/trino/plugin/redshift/RedshiftConnectorFactory.java @@ -31,6 +31,8 @@ public class RedshiftConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "redshift"; + @Override public String getName() { @@ -45,7 +47,7 @@ public Connector create(String catalogName, Map requiredConfig, Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new JdbcModule(), new CredentialProviderModule(), new ExtraCredentialsBasedIdentityCacheMappingModule(), diff --git a/plugin/trino-spooling-filesystem/src/main/java/io/trino/spooling/filesystem/FileSystemSpoolingManagerFactory.java b/plugin/trino-spooling-filesystem/src/main/java/io/trino/spooling/filesystem/FileSystemSpoolingManagerFactory.java index 492d6cdd00cb..b9633a967da6 100644 --- a/plugin/trino-spooling-filesystem/src/main/java/io/trino/spooling/filesystem/FileSystemSpoolingManagerFactory.java +++ b/plugin/trino-spooling-filesystem/src/main/java/io/trino/spooling/filesystem/FileSystemSpoolingManagerFactory.java @@ -16,13 +16,15 @@ import com.google.inject.Injector; import io.airlift.bootstrap.Bootstrap; import io.opentelemetry.api.OpenTelemetry; -import io.trino.plugin.base.jmx.MBeanServerModule; +import io.trino.plugin.base.jmx.RebindSafeMBeanServer; import io.trino.spi.Node; import io.trino.spi.spool.SpoolingManager; import io.trino.spi.spool.SpoolingManagerContext; import io.trino.spi.spool.SpoolingManagerFactory; import org.weakref.jmx.guice.MBeanModule; +import javax.management.MBeanServer; + import java.util.Map; import static java.util.Objects.requireNonNull; @@ -44,7 +46,7 @@ public SpoolingManager create(Map config, SpoolingManagerContext "io.trino.bootstrap.spooling." + getName(), new FileSystemSpoolingModule(context.isCoordinator()), new MBeanModule(), - new MBeanServerModule(), + binder -> binder.bind(MBeanServer.class).toInstance(new RebindSafeMBeanServer(context.getMBeanServer())), binder -> { binder.bind(SpoolingManagerContext.class).toInstance(context); binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); diff --git a/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java b/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java index 575b46a1c1fd..4aea8f78f901 100644 --- a/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java +++ b/plugin/trino-thrift/src/main/java/io/trino/plugin/thrift/ThriftConnectorFactory.java @@ -18,12 +18,9 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.drift.transport.netty.client.DriftNettyClientModule; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.ConnectorObjectNameGeneratorModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; import java.util.function.Supplier; @@ -56,11 +53,8 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new MBeanModule(), - new MBeanServerModule(), - new ConnectorObjectNameGeneratorModule("io.trino.plugin.thrift", "trino.plugin.thrift"), new DriftNettyClientModule(), - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(name, catalogName, context), locationModule.get(), new ThriftModule()); diff --git a/plugin/trino-tpcds/src/main/java/io/trino/plugin/tpcds/TpcdsConnectorFactory.java b/plugin/trino-tpcds/src/main/java/io/trino/plugin/tpcds/TpcdsConnectorFactory.java index 3363b849a4ec..88c6008faa37 100644 --- a/plugin/trino-tpcds/src/main/java/io/trino/plugin/tpcds/TpcdsConnectorFactory.java +++ b/plugin/trino-tpcds/src/main/java/io/trino/plugin/tpcds/TpcdsConnectorFactory.java @@ -27,10 +27,12 @@ public class TpcdsConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "tpcds"; + @Override public String getName() { - return "tpcds"; + return CONNECTOR_NAME; } @Override @@ -40,7 +42,7 @@ public Connector create(String catalogName, Map config, Connecto Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new ConnectorContextModule(catalogName, context), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new TpcdsModule()); Injector injector = app diff --git a/plugin/trino-tpch/pom.xml b/plugin/trino-tpch/pom.xml index 295a465b09d2..401f537665a1 100644 --- a/plugin/trino-tpch/pom.xml +++ b/plugin/trino-tpch/pom.xml @@ -60,11 +60,6 @@ tpch - - org.weakref - jmxutils - - com.fasterxml.jackson.core jackson-annotations diff --git a/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java b/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java index 8ccbcaa354a3..1318590c597f 100644 --- a/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java +++ b/plugin/trino-tpch/src/main/java/io/trino/plugin/tpch/TpchConnectorFactory.java @@ -17,11 +17,9 @@ import io.airlift.bootstrap.Bootstrap; import io.airlift.json.JsonModule; import io.trino.plugin.base.ConnectorContextModule; -import io.trino.plugin.base.jmx.MBeanServerModule; import io.trino.spi.connector.Connector; import io.trino.spi.connector.ConnectorContext; import io.trino.spi.connector.ConnectorFactory; -import org.weakref.jmx.guice.MBeanModule; import java.util.Map; @@ -30,6 +28,8 @@ public class TpchConnectorFactory implements ConnectorFactory { + static final String CONNECTOR_NAME = "tpch"; + private final int defaultSplitsPerNode; private final boolean predicatePushdownEnabled; @@ -52,7 +52,7 @@ public TpchConnectorFactory(int defaultSplitsPerNode, boolean predicatePushdownE @Override public String getName() { - return "tpch"; + return CONNECTOR_NAME; } @Override @@ -62,11 +62,9 @@ public Connector create(String catalogName, Map properties, Conn Bootstrap app = new Bootstrap( "io.trino.bootstrap.catalog." + catalogName, - new ConnectorContextModule(catalogName, context), - new MBeanModule(), + new ConnectorContextModule(CONNECTOR_NAME, catalogName, context), new JsonModule(), - new TpchModule(defaultSplitsPerNode, predicatePushdownEnabled), - new MBeanServerModule()); + new TpchModule(defaultSplitsPerNode, predicatePushdownEnabled)); Injector injector = app .doNotInitializeLogging()