HIVE-17472: Drop-partition for multi-level partition fails, if data does not exist. (Chris Drome, reviewed by Mithun Radhakrishnan)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/f3dc6a97 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f3dc6a97 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f3dc6a97 Branch: refs/heads/branch-2.3 Commit: f3dc6a9774912257bb9ecdc9fe19ee32698fded0 Parents: b8bd459 Author: Mithun RK <mit...@apache.org> Authored: Wed Sep 6 17:25:04 2017 -0700 Committer: Sahil Takiar <stak...@cloudera.com> Committed: Tue Nov 7 08:15:47 2017 -0800 ---------------------------------------------------------------------- .../hadoop/hive/metastore/HiveMetaStore.java | 6 +- .../clientpositive/drop_deleted_partitions.q | 18 +++++ .../drop_deleted_partitions.q.out | 74 ++++++++++++++++++++ 3 files changed, 96 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/f3dc6a97/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 6f2b727..616314c 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -3158,8 +3158,10 @@ public class HiveMetaStore extends ThriftHiveMetastore { } private void deleteParentRecursive(Path parent, int depth, boolean mustPurge) throws IOException, MetaException { - if (depth > 0 && parent != null && wh.isWritable(parent) && wh.isEmpty(parent)) { - wh.deleteDir(parent, true, mustPurge); + if (depth > 0 && parent != null && wh.isWritable(parent)) { + if (wh.isDir(parent) && wh.isEmpty(parent)) { + wh.deleteDir(parent, true, mustPurge); + } deleteParentRecursive(parent.getParent(), depth - 1, mustPurge); } } http://git-wip-us.apache.org/repos/asf/hive/blob/f3dc6a97/ql/src/test/queries/clientpositive/drop_deleted_partitions.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/drop_deleted_partitions.q b/ql/src/test/queries/clientpositive/drop_deleted_partitions.q new file mode 100644 index 0000000..a758b1b --- /dev/null +++ b/ql/src/test/queries/clientpositive/drop_deleted_partitions.q @@ -0,0 +1,18 @@ +create database dmp; + +create table dmp.mp (a string) partitioned by (b string, c string) location '/tmp/dmp_mp'; + +alter table dmp.mp add partition (b='1', c='1'); + +show partitions dmp.mp; + +dfs -rm -R /tmp/dmp_mp/b=1; + +explain extended alter table dmp.mp drop partition (b='1'); +alter table dmp.mp drop partition (b='1'); + +show partitions dmp.mp; + +drop table dmp.mp; + +drop database dmp; http://git-wip-us.apache.org/repos/asf/hive/blob/f3dc6a97/ql/src/test/results/clientpositive/drop_deleted_partitions.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/drop_deleted_partitions.q.out b/ql/src/test/results/clientpositive/drop_deleted_partitions.q.out new file mode 100644 index 0000000..e543158 --- /dev/null +++ b/ql/src/test/results/clientpositive/drop_deleted_partitions.q.out @@ -0,0 +1,74 @@ +PREHOOK: query: create database dmp +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:dmp +POSTHOOK: query: create database dmp +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:dmp +#### A masked pattern was here #### +PREHOOK: type: CREATETABLE +#### A masked pattern was here #### +PREHOOK: Output: database:dmp +PREHOOK: Output: dmp@mp +#### A masked pattern was here #### +POSTHOOK: type: CREATETABLE +#### A masked pattern was here #### +POSTHOOK: Output: database:dmp +POSTHOOK: Output: dmp@mp +PREHOOK: query: alter table dmp.mp add partition (b='1', c='1') +PREHOOK: type: ALTERTABLE_ADDPARTS +PREHOOK: Output: dmp@mp +POSTHOOK: query: alter table dmp.mp add partition (b='1', c='1') +POSTHOOK: type: ALTERTABLE_ADDPARTS +POSTHOOK: Output: dmp@mp +POSTHOOK: Output: dmp@mp@b=1/c=1 +PREHOOK: query: show partitions dmp.mp +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: dmp@mp +POSTHOOK: query: show partitions dmp.mp +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: dmp@mp +b=1/c=1 +#### A masked pattern was here #### +PREHOOK: query: explain extended alter table dmp.mp drop partition (b='1') +PREHOOK: type: ALTERTABLE_DROPPARTS +POSTHOOK: query: explain extended alter table dmp.mp drop partition (b='1') +POSTHOOK: type: ALTERTABLE_DROPPARTS +STAGE DEPENDENCIES: + Stage-0 is a root stage + +STAGE PLANS: + Stage: Stage-0 + Drop Table Operator: + Drop Table + table: dmp.mp + +PREHOOK: query: alter table dmp.mp drop partition (b='1') +PREHOOK: type: ALTERTABLE_DROPPARTS +PREHOOK: Input: dmp@mp +PREHOOK: Output: dmp@mp@b=1/c=1 +POSTHOOK: query: alter table dmp.mp drop partition (b='1') +POSTHOOK: type: ALTERTABLE_DROPPARTS +POSTHOOK: Input: dmp@mp +POSTHOOK: Output: dmp@mp@b=1/c=1 +PREHOOK: query: show partitions dmp.mp +PREHOOK: type: SHOWPARTITIONS +PREHOOK: Input: dmp@mp +POSTHOOK: query: show partitions dmp.mp +POSTHOOK: type: SHOWPARTITIONS +POSTHOOK: Input: dmp@mp +PREHOOK: query: drop table dmp.mp +PREHOOK: type: DROPTABLE +PREHOOK: Input: dmp@mp +PREHOOK: Output: dmp@mp +POSTHOOK: query: drop table dmp.mp +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: dmp@mp +POSTHOOK: Output: dmp@mp +PREHOOK: query: drop database dmp +PREHOOK: type: DROPDATABASE +PREHOOK: Input: database:dmp +PREHOOK: Output: database:dmp +POSTHOOK: query: drop database dmp +POSTHOOK: type: DROPDATABASE +POSTHOOK: Input: database:dmp +POSTHOOK: Output: database:dmp