diff --git a/src/main/java/org/apache/drill/upgrade/Upgrade_12_13.java b/src/main/java/org/apache/drill/upgrade/Upgrade_12_13.java index aae229f..1f05465 100644 --- a/src/main/java/org/apache/drill/upgrade/Upgrade_12_13.java +++ b/src/main/java/org/apache/drill/upgrade/Upgrade_12_13.java @@ -46,12 +46,13 @@ private void init() throws IOException { } //get a list of files to process - private void getFiles(String path, List fileStatuses) throws IOException { + private void getFiles(String path, List fileStatuses, List dirs) throws IOException { Path p = Path.getPathWithoutSchemeAndAuthority(new Path(path)); FileStatus fileStatus = fs.getFileStatus(p); if (fileStatus.isDirectory()) { + dirs.add(fileStatus); for (FileStatus f : fs.listStatus(p, new UpgradePathFilter())) { - getFiles(f.getPath().toString(), fileStatuses); + getFiles(f.getPath().toString(), fileStatuses, dirs); } } else { if (fileStatus.isFile()) { @@ -150,6 +151,17 @@ private void removeBackupFile(FileStatus fileStatus) throws IOException { fs.delete(new Path(tmpFileDir + "/" + fileStatus.getPath().getName())); } + private void touchDirs(List dirs){ + long ts = System.currentTimeMillis(); + for(FileStatus d : dirs){ + try { + fs.setTimes(d.getPath(), ts, ts); + } catch (IOException e) { + logger.debug("Unable to update directory timestamp [ {} ].", d.toString()); + } + } + } + private boolean upgradeFile(FileStatus fileStatus, ParquetMetadata metadata) throws IOException { backupFile(fileStatus); boolean ret = updateFile(fileStatus, metadata); @@ -217,8 +229,9 @@ public static void main(String[] args) { for (String path : dirs) { logger.info("Executing Upgrade_12_13 on " + path); List fileStatuses = new ArrayList(); + List dirStatuses = new ArrayList(); try { - upgrade_12_13.getFiles(path, fileStatuses); + upgrade_12_13.getFiles(path, fileStatuses, dirStatuses); } catch (IOException e) { logger.error("Failed to get list of file(s). Skipping. (" + e.getMessage() + ")"); } @@ -252,6 +265,8 @@ public static void main(String[] args) { .println("FAILURE : " + fileStatus.getPath().toString() + ". Cause: " + e.getMessage()); } } + logger.debug("Updating directory timestamps"); + upgrade_12_13.touchDirs(dirStatuses); } System.out.println("Done"); } else {