You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2021/09/13 17:46:17 UTC
[iceberg] branch master updated: Core: Fix HadoopCatalog drop table
behavior (#3097)
This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/master by this push:
new 9156464 Core: Fix HadoopCatalog drop table behavior (#3097)
9156464 is described below
commit 9156464b4018c4d2d184c2eafa4983c7a488e423
Author: itachi-sharingan <gu...@gmail.com>
AuthorDate: Mon Sep 13 23:16:10 2021 +0530
Core: Fix HadoopCatalog drop table behavior (#3097)
Dropping a table should return false if it does not exist.
Co-authored-by: adityasingh <gu...@gmail.com>
---
.../org/apache/iceberg/hadoop/HadoopCatalog.java | 24 ++++++++++------------
.../apache/iceberg/hadoop/TestHadoopCatalog.java | 18 ++++++++++++++++
2 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/core/src/main/java/org/apache/iceberg/hadoop/HadoopCatalog.java b/core/src/main/java/org/apache/iceberg/hadoop/HadoopCatalog.java
index 9d06c08..7aa4349 100644
--- a/core/src/main/java/org/apache/iceberg/hadoop/HadoopCatalog.java
+++ b/core/src/main/java/org/apache/iceberg/hadoop/HadoopCatalog.java
@@ -252,21 +252,19 @@ public class HadoopCatalog extends BaseMetastoreCatalog implements Closeable, Su
Path tablePath = new Path(defaultWarehouseLocation(identifier));
TableOperations ops = newTableOps(identifier);
- TableMetadata lastMetadata;
- if (purge && ops.current() != null) {
- lastMetadata = ops.current();
- } else {
- lastMetadata = null;
- }
-
+ TableMetadata lastMetadata = ops.current();
try {
- if (purge && lastMetadata != null) {
- // Since the data files and the metadata files may store in different locations,
- // so it has to call dropTableData to force delete the data file.
- CatalogUtil.dropTableData(ops.io(), lastMetadata);
+ if (lastMetadata == null) {
+ LOG.debug("Not an iceberg table: {}", identifier);
+ return false;
+ } else {
+ if (purge) {
+ // Since the data files and the metadata files may store in different locations,
+ // so it has to call dropTableData to force delete the data file.
+ CatalogUtil.dropTableData(ops.io(), lastMetadata);
+ }
+ return fs.delete(tablePath, true /* recursive */);
}
- fs.delete(tablePath, true /* recursive */);
- return true;
} catch (IOException e) {
throw new RuntimeIOException(e, "Failed to delete file: %s", tablePath);
}
diff --git a/core/src/test/java/org/apache/iceberg/hadoop/TestHadoopCatalog.java b/core/src/test/java/org/apache/iceberg/hadoop/TestHadoopCatalog.java
index bebf5b5..9d71ea4 100644
--- a/core/src/test/java/org/apache/iceberg/hadoop/TestHadoopCatalog.java
+++ b/core/src/test/java/org/apache/iceberg/hadoop/TestHadoopCatalog.java
@@ -238,6 +238,24 @@ public class TestHadoopCatalog extends HadoopTableTestBase {
}
@Test
+ public void testDropNonIcebergTable() throws Exception {
+ Configuration conf = new Configuration();
+ String warehousePath = temp.newFolder().getAbsolutePath();
+ HadoopCatalog catalog = new HadoopCatalog(conf, warehousePath);
+ TableIdentifier testTable = TableIdentifier.of("db", "ns1", "ns2", "tbl");
+ String metaLocation = catalog.defaultWarehouseLocation(testTable);
+ //testing with non existent directory
+ Assert.assertFalse(catalog.dropTable(testTable));
+
+ FileSystem fs = Util.getFs(new Path(metaLocation), conf);
+ fs.mkdirs(new Path(metaLocation));
+ Assert.assertTrue(fs.isDirectory(new Path(metaLocation)));
+
+ Assert.assertFalse(catalog.dropTable(testTable));
+ Assert.assertTrue(fs.isDirectory(new Path(metaLocation)));
+ }
+
+ @Test
public void testRenameTable() throws Exception {
Configuration conf = new Configuration();
String warehousePath = temp.newFolder().getAbsolutePath();