From 2e6f68bef9c569e214844cc23931a0a071eb8a71 Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Fri, 22 Jul 2022 17:05:16 +0900 Subject: [PATCH] Fix disappearance issue of renamed schema in File metastore Additionally, verify renamed schema existence in BaseConnectorTest.testRenameSchema. --- .../hive/metastore/file/FileHiveMetastore.java | 18 +++++++++++++++++- .../io/trino/testing/BaseConnectorTest.java | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java index d5207d30b4eb..42a36909dcfc 100644 --- a/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java +++ b/plugin/trino-hive/src/main/java/io/trino/plugin/hive/metastore/file/FileHiveMetastore.java @@ -237,8 +237,12 @@ public synchronized void renameDatabase(String databaseName, String newDatabaseN getRequiredDatabase(databaseName); verifyDatabaseNotExists(newDatabaseName); + Path oldDatabaseMetadataDirectory = getDatabaseMetadataDirectory(databaseName); + Path newDatabaseMetadataDirectory = getDatabaseMetadataDirectory(newDatabaseName); try { - if (!metadataFileSystem.rename(getDatabaseMetadataDirectory(databaseName), getDatabaseMetadataDirectory(newDatabaseName))) { + renameSchemaFile(DATABASE, oldDatabaseMetadataDirectory, newDatabaseMetadataDirectory); + + if (!metadataFileSystem.rename(oldDatabaseMetadataDirectory, newDatabaseMetadataDirectory)) { throw new TrinoException(HIVE_METASTORE_ERROR, "Could not rename database metadata directory"); } } @@ -1331,6 +1335,18 @@ private void writeFile(String type, Path path, JsonCodec codec, T value, } } + private void renameSchemaFile(SchemaType type, Path oldMetadataDirectory, Path newMetadataDirectory) + { + try { + if (!metadataFileSystem.rename(getSchemaPath(type, oldMetadataDirectory), getSchemaPath(type, newMetadataDirectory))) { + throw new TrinoException(HIVE_METASTORE_ERROR, "Could not rename " + type + " schema"); + } + } + catch (IOException e) { + throw new TrinoException(HIVE_METASTORE_ERROR, "Could not rename " + type + " schema", e); + } + } + private void deleteSchemaFile(SchemaType type, Path metadataDirectory) { try { diff --git a/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java b/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java index bac049b7d38a..6af8d2c03852 100644 --- a/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java +++ b/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java @@ -1792,6 +1792,7 @@ public void testRenameSchema() try { assertUpdate("CREATE SCHEMA " + schemaName); assertUpdate("ALTER SCHEMA " + schemaName + " RENAME TO " + schemaName + "_renamed"); + assertThat(computeActual("SHOW SCHEMAS").getOnlyColumnAsSet()).contains(schemaName + "_renamed"); } finally { assertUpdate("DROP SCHEMA IF EXISTS " + schemaName);