protected void deleteOld(File file, long minTime, int depth, boolean delete) { if (file.isDirectory()) { for (File f : file.listFiles()) { deleteOld(f, minTime, depth + 1, delete); } if (depth > 0 && file.list().length == 0) { // empty directory file.delete(); } } else if (file.isFile() && file.canWrite()) { long lastModified = file.lastModified(); long length = file.length(); if (lastModified == 0) { log.error("Cannot read last modified for file: " + file); } else if (lastModified < minTime) { status.sizeBinariesGC += length; status.numBinariesGC++; if (delete && !file.delete()) { log.warn("Cannot gc file: " + file); } } else { status.sizeBinaries += length; status.numBinaries++; } } }
@Override public void stop(boolean delete) { if (startTime == 0) { throw new RuntimeException("Not started"); } deleteOld(binaryManager.getStorageDir(), startTime - TIME_RESOLUTION, 0, delete); status.gcDuration = System.currentTimeMillis() - startTime; startTime = 0; }