From ce0fd5680c9ae071c34a17f34f63394baa0cb216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BB=9F=E5=BC=8B?= Date: Tue, 12 May 2026 11:08:10 +0800 Subject: [PATCH] [core] Drop global index external path with table --- .../paimon/catalog/AbstractCatalog.java | 11 ++++++- .../paimon/catalog/CatalogTestBase.java | 33 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/paimon-core/src/main/java/org/apache/paimon/catalog/AbstractCatalog.java b/paimon-core/src/main/java/org/apache/paimon/catalog/AbstractCatalog.java index ad51ab1f4dc0..4130c8d5759f 100644 --- a/paimon-core/src/main/java/org/apache/paimon/catalog/AbstractCatalog.java +++ b/paimon-core/src/main/java/org/apache/paimon/catalog/AbstractCatalog.java @@ -62,6 +62,7 @@ import java.util.stream.Collectors; import static org.apache.paimon.CoreOptions.DATA_FILE_EXTERNAL_PATHS; +import static org.apache.paimon.CoreOptions.GLOBAL_INDEX_EXTERNAL_PATH; import static org.apache.paimon.CoreOptions.PATH; import static org.apache.paimon.CoreOptions.TYPE; import static org.apache.paimon.catalog.CatalogUtils.checkNotBranch; @@ -387,7 +388,15 @@ private List getSchemaExternalPaths(List schemas) { return Collections.emptyList(); } return schemas.stream() - .map(schema -> schema.toSchema().options().get(DATA_FILE_EXTERNAL_PATHS.key())) + .flatMap( + schema -> { + Map options = schema.toSchema().options(); + return Arrays.stream( + new String[] { + options.get(DATA_FILE_EXTERNAL_PATHS.key()), + options.get(GLOBAL_INDEX_EXTERNAL_PATH.key()) + }); + }) .filter(Objects::nonNull) .flatMap(externalPath -> Arrays.stream(externalPath.split(","))) .map(Path::new) diff --git a/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java b/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java index 27f614e80eb1..4f4aed63faad 100644 --- a/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java +++ b/paimon-core/src/test/java/org/apache/paimon/catalog/CatalogTestBase.java @@ -68,6 +68,7 @@ import javax.annotation.Nullable; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -1081,6 +1082,38 @@ public void testDropTable() throws Exception { assertThatCode(() -> catalog.dropTable(nonExistingTable, true)).doesNotThrowAnyException(); } + @Test + public void testDropTableWithExternalPaths() throws Exception { + catalog.createDatabase("test_db", false); + Identifier identifier = Identifier.create("test_db", "table_with_external_paths"); + java.nio.file.Path dataExternalPath = tempFile.resolve("data-external-path"); + java.nio.file.Path globalIndexExternalPath = tempFile.resolve("global-index-external-path"); + Files.createDirectories(dataExternalPath.resolve("data")); + Files.createDirectories(globalIndexExternalPath.resolve("index")); + + Map options = new HashMap<>(); + options.put( + CoreOptions.DATA_FILE_EXTERNAL_PATHS.key(), dataExternalPath.toUri().toString()); + options.put( + CoreOptions.GLOBAL_INDEX_EXTERNAL_PATH.key(), + globalIndexExternalPath.toUri().toString()); + Schema schema = + new Schema( + Lists.newArrayList( + new DataField(0, "pk", DataTypes.INT()), + new DataField(1, "col", DataTypes.STRING())), + Collections.emptyList(), + Collections.emptyList(), + options, + ""); + + catalog.createTable(identifier, schema, false); + catalog.dropTable(identifier, false); + + assertThat(Files.exists(dataExternalPath)).isFalse(); + assertThat(Files.exists(globalIndexExternalPath)).isFalse(); + } + @Test public void testRenameTable() throws Exception { catalog.createDatabase("test_db", false);