Repository: hive Updated Branches: refs/heads/branch-2 dec4efd3c -> 53dc1ff76
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/53dc1ff7 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/53dc1ff7 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/53dc1ff7 Branch: refs/heads/branch-2 Commit: 53dc1ff7622a38821dc3ec06375bd5b0bbf88c3e Parents: dec4efd Author: Mithun RK <mit...@apache.org> Authored: Wed Sep 6 17:25:04 2017 -0700 Committer: Mithun RK <mit...@apache.org> Committed: Thu Sep 21 11:10:34 2017 -0700 ---------------------------------------------------------------------- .../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/53dc1ff7/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 4ac9269..387da3c 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -3170,8 +3170,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/53dc1ff7/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/53dc1ff7/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