use of io.trino.plugin.resourcegroups.ResourceGroupManagerPlugin in project trino by trinodb.
the class TestResourceGroupIntegration method testMemoryFraction.
@Test
public void testMemoryFraction() throws Exception {
try (DistributedQueryRunner queryRunner = TpchQueryRunnerBuilder.builder().build()) {
queryRunner.installPlugin(new ResourceGroupManagerPlugin());
getResourceGroupManager(queryRunner).setConfigurationManager("file", ImmutableMap.of("resource-groups.config-file", getResourceFilePath("resource_groups_memory_percentage.json")));
queryRunner.execute("SELECT COUNT(*), clerk FROM orders GROUP BY clerk");
waitForGlobalResourceGroup(queryRunner);
}
}
use of io.trino.plugin.resourcegroups.ResourceGroupManagerPlugin in project trino by trinodb.
the class TestResourceGroupIntegration method testPathToRoot.
@Test
public void testPathToRoot() throws Exception {
try (DistributedQueryRunner queryRunner = TpchQueryRunnerBuilder.builder().build()) {
queryRunner.installPlugin(new ResourceGroupManagerPlugin());
InternalResourceGroupManager<?> manager = getResourceGroupManager(queryRunner);
manager.setConfigurationManager("file", ImmutableMap.of("resource-groups.config-file", getResourceFilePath("resource_groups_config_dashboard.json")));
queryRunner.execute(testSessionBuilder().setCatalog("tpch").setSchema("tiny").setSource("dashboard-foo").build(), "SELECT COUNT(*), clerk FROM orders GROUP BY clerk");
List<ResourceGroupInfo> path = manager.tryGetPathToRoot(new ResourceGroupId(new ResourceGroupId(new ResourceGroupId("global"), "user-user"), "dashboard-user")).orElseThrow(() -> new IllegalStateException("Resource group not found"));
assertEquals(path.size(), 3);
assertThat(path.get(1).getSubGroups()).isPresent();
assertEquals(path.get(2).getId(), new ResourceGroupId("global"));
assertEquals(path.get(2).getHardConcurrencyLimit(), 100);
assertThat(path.get(2).getRunningQueries()).isNotPresent();
}
}
use of io.trino.plugin.resourcegroups.ResourceGroupManagerPlugin in project trino by trinodb.
the class TestEventListenerBasic method createQueryRunner.
@Override
protected QueryRunner createQueryRunner() throws Exception {
Session session = testSessionBuilder().setSystemProperty("task_concurrency", "1").setCatalog("tpch").setSchema("tiny").setClientInfo("{\"clientVersion\":\"testVersion\"}").build();
DistributedQueryRunner queryRunner = DistributedQueryRunner.builder(session).setNodeCount(1).build();
queryRunner.installPlugin(new TpchPlugin());
queryRunner.installPlugin(new TestingEventListenerPlugin(generatedEvents));
queryRunner.installPlugin(new ResourceGroupManagerPlugin());
queryRunner.createCatalog("tpch", "tpch");
queryRunner.installPlugin(new Plugin() {
@Override
public Iterable<ConnectorFactory> getConnectorFactories() {
MockConnectorFactory connectorFactory = MockConnectorFactory.builder().withListTables((session, s) -> ImmutableList.of(new SchemaTableName("default", "tests_table"))).withGetColumns(schemaTableName -> ImmutableList.of(new ColumnMetadata("test_varchar", createVarcharType(15)), new ColumnMetadata("test_bigint", BIGINT))).withGetTableHandle((session, schemaTableName) -> {
if (!schemaTableName.getTableName().startsWith("create")) {
return new MockConnectorTableHandle(schemaTableName);
}
return null;
}).withApplyProjection((session, handle, projections, assignments) -> {
if (((MockConnectorTableHandle) handle).getTableName().getTableName().equals("tests_table")) {
throw new RuntimeException("Throw from apply projection");
}
return Optional.empty();
}).withGetViews((connectorSession, prefix) -> {
ConnectorViewDefinition definition = new ConnectorViewDefinition("SELECT nationkey AS test_column FROM tpch.tiny.nation", Optional.empty(), Optional.empty(), ImmutableList.of(new ConnectorViewDefinition.ViewColumn("test_column", BIGINT.getTypeId())), Optional.empty(), Optional.empty(), true);
SchemaTableName viewName = new SchemaTableName("default", "test_view");
return ImmutableMap.of(viewName, definition);
}).withGetMaterializedViews((connectorSession, prefix) -> {
ConnectorMaterializedViewDefinition definition = new ConnectorMaterializedViewDefinition("SELECT nationkey AS test_column FROM tpch.tiny.nation", Optional.empty(), Optional.empty(), Optional.empty(), ImmutableList.of(new Column("test_column", BIGINT.getTypeId())), Optional.empty(), Optional.of("alice"), ImmutableMap.of());
SchemaTableName materializedViewName = new SchemaTableName("default", "test_materialized_view");
return ImmutableMap.of(materializedViewName, definition);
}).withRowFilter(schemaTableName -> {
if (schemaTableName.getTableName().equals("test_table_with_row_filter")) {
return new ViewExpression("user", Optional.of("tpch"), Optional.of("tiny"), "EXISTS (SELECT 1 FROM nation WHERE name = test_varchar)");
}
return null;
}).withColumnMask((schemaTableName, columnName) -> {
if (schemaTableName.getTableName().equals("test_table_with_column_mask") && columnName.equals("test_varchar")) {
return new ViewExpression("user", Optional.of("tpch"), Optional.of("tiny"), "(SELECT cast(max(orderkey) AS varchar(15)) FROM orders)");
}
return null;
}).build();
return ImmutableList.of(connectorFactory);
}
});
queryRunner.createCatalog("mock", "mock", ImmutableMap.of());
queryRunner.getCoordinator().getResourceGroupManager().get().setConfigurationManager("file", ImmutableMap.of("resource-groups.config-file", getResourceFilePath("resource_groups_config_simple.json")));
queries = new EventsAwaitingQueries(generatedEvents, queryRunner, Duration.ofSeconds(1));
return queryRunner;
}
use of io.trino.plugin.resourcegroups.ResourceGroupManagerPlugin in project trino by trinodb.
the class TestEventListenerWithSplits method createQueryRunner.
@Override
protected QueryRunner createQueryRunner() throws Exception {
Session session = testSessionBuilder().setSystemProperty("task_concurrency", "1").setCatalog("tpch").setSchema("tiny").setClientInfo("{\"clientVersion\":\"testVersion\"}").build();
DistributedQueryRunner queryRunner = DistributedQueryRunner.builder(session).setNodeCount(1).build();
queryRunner.installPlugin(new TpchPlugin());
queryRunner.installPlugin(new TestingEventListenerPlugin(generatedEvents));
queryRunner.installPlugin(new ResourceGroupManagerPlugin());
queryRunner.createCatalog("tpch", "tpch", ImmutableMap.of(TPCH_SPLITS_PER_NODE, Integer.toString(SPLITS_PER_NODE)));
queryRunner.installPlugin(new Plugin() {
@Override
public Iterable<ConnectorFactory> getConnectorFactories() {
MockConnectorFactory connectorFactory = MockConnectorFactory.builder().withListTables((session, s) -> ImmutableList.of(new SchemaTableName("default", "test_table"))).withApplyProjection((session, handle, projections, assignments) -> {
throw new RuntimeException("Throw from apply projection");
}).build();
return ImmutableList.of(connectorFactory);
}
});
queryRunner.createCatalog("mock", "mock", ImmutableMap.of());
queryRunner.getCoordinator().getResourceGroupManager().get().setConfigurationManager("file", ImmutableMap.of("resource-groups.config-file", getResourceFilePath("resource_groups_config_simple.json")));
queries = new EventsAwaitingQueries(generatedEvents, queryRunner, Duration.ofSeconds(1));
return queryRunner;
}
use of io.trino.plugin.resourcegroups.ResourceGroupManagerPlugin in project trino by trinodb.
the class TestExecutionJmxMetrics method testQueryStats.
@Test(timeOut = 30_000)
public void testQueryStats() throws Exception {
try (DistributedQueryRunner queryRunner = TpchQueryRunnerBuilder.builder().setAdditionalModule(new PrefixObjectNameGeneratorModule("io.trino")).build()) {
queryRunner.installPlugin(new ResourceGroupManagerPlugin());
InternalResourceGroupManager<?> resourceGroupManager = queryRunner.getCoordinator().getResourceGroupManager().orElseThrow(() -> new IllegalStateException("Resource manager not configured"));
resourceGroupManager.setConfigurationManager("file", ImmutableMap.of("resource-groups.config-file", getClass().getClassLoader().getResource("resource_groups_single_query.json").getPath()));
MBeanServer mbeanServer = queryRunner.getCoordinator().getMbeanServer();
QueryId firstDashboardQuery = createQuery(queryRunner, dashboardSession(), LONG_RUNNING_QUERY);
waitForQueryState(queryRunner, firstDashboardQuery, RUNNING);
assertEquals(getMbeanAttribute(mbeanServer, "RunningQueries"), 1);
assertEquals(getMbeanAttribute(mbeanServer, "QueuedQueries"), 0);
// the second "dashboard" query can't run right away because the resource group has a hardConcurrencyLimit of 1
QueryId secondDashboardQuery = createQuery(queryRunner, dashboardSession(), LONG_RUNNING_QUERY);
waitForQueryState(queryRunner, secondDashboardQuery, QUEUED);
assertEquals(getMbeanAttribute(mbeanServer, "RunningQueries"), 1);
assertEquals(getMbeanAttribute(mbeanServer, "QueuedQueries"), 1);
cancelQuery(queryRunner, secondDashboardQuery);
waitForQueryState(queryRunner, secondDashboardQuery, FAILED);
assertEquals(getMbeanAttribute(mbeanServer, "RunningQueries"), 1);
assertEquals(getMbeanAttribute(mbeanServer, "QueuedQueries"), 0);
// cancel the running query to avoid polluting the logs with meaningless stack traces
try {
cancelQuery(queryRunner, firstDashboardQuery);
waitForQueryState(queryRunner, firstDashboardQuery, FAILED);
} catch (Exception ignore) {
}
}
}
Aggregations