From 537f11aa1a4a4fdcfbb2c9df0f14e6ac05152ced Mon Sep 17 00:00:00 2001 From: morningman Date: Tue, 3 Feb 2026 12:47:15 +0800 Subject: [PATCH] [fix](kudu) avoid create schema table when no write privc --- .../SchemaEmulationByTableNameConvention.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/plugin/trino-kudu/src/main/java/io/trino/plugin/kudu/schema/SchemaEmulationByTableNameConvention.java b/plugin/trino-kudu/src/main/java/io/trino/plugin/kudu/schema/SchemaEmulationByTableNameConvention.java index c66f08b3a4f..733ee57e7af 100644 --- a/plugin/trino-kudu/src/main/java/io/trino/plugin/kudu/schema/SchemaEmulationByTableNameConvention.java +++ b/plugin/trino-kudu/src/main/java/io/trino/plugin/kudu/schema/SchemaEmulationByTableNameConvention.java @@ -114,8 +114,27 @@ public List listSchemaNames(KuduClientWrapper client) { try { if (rawSchemasTable == null) { - createAndFillSchemasTable(client); - rawSchemasTable = getSchemasTable(client); + // Try to open the schemas table first, only create if it doesn't exist + try { + rawSchemasTable = client.openTable(rawSchemasTableName); + } + catch (KuduException e) { + if (e.getStatus().isNotFound()) { + // Table doesn't exist, try to create it (requires write permission) + // If creation fails due to permission, fall back to scanning table names + try { + createAndFillSchemasTable(client); + rawSchemasTable = getSchemasTable(client); + } + catch (KuduException createException) { + // Fall back to listing schemas from table names directly (read-only) + return listSchemaNamesFromTablets(client); + } + } + else { + throw e; + } + } } KuduScanner scanner = client.newScannerBuilder(rawSchemasTable).build();