diff --git common/src/java/org/apache/hadoop/hive/common/FileUtils.java common/src/java/org/apache/hadoop/hive/common/FileUtils.java index e8a3a7a49e31d02ba7ccb8774ea59c2cf0fea536..9d81a61ed5127c75d2b3c09dee4aa46c52e509f2 100644 --- common/src/java/org/apache/hadoop/hive/common/FileUtils.java +++ common/src/java/org/apache/hadoop/hive/common/FileUtils.java @@ -81,6 +81,25 @@ public boolean accept(Path p) { } }; + public static final PathFilter SNAPSHOT_DIR_PATH_FILTER = new PathFilter() { + @Override + public boolean accept(Path p) { + return ".snapshot".equalsIgnoreCase(p.getName()); + } + }; + + /** + * Check if the path contains a subdirectory named '.snapshot' + * @param p path to check + * @param fs filesystem of the path + * @return true if p contains a subdirectory named '.snapshot' + * @throws IOException + */ + public static boolean pathHasSnapshotSubDir(Path p, FileSystem fs) throws IOException { + final FileStatus[] statuses = fs.listStatus(p, FileUtils.SNAPSHOT_DIR_PATH_FILTER); + return statuses != null && statuses.length != 0; + } + /** * Variant of Path.makeQualified that qualifies the input path against the default file system * indicated by the configuration diff --git metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 6a6fd439d72fd5e24c881554c86480b0b3e19574..e2a7d7df3fc072ca7eb7addb1fff4378d592df77 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -2158,7 +2158,7 @@ public void truncate_table(final String dbName, final String tableName, List