deleting downloaded releases after x days (default 30)

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4724 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
danielr 2008-04-22 16:53:53 +00:00
parent 763f9d4f5d
commit 79a3edeeef
3 changed files with 62 additions and 0 deletions

View File

@ -99,6 +99,9 @@ update.time.lookup = 0
update.time.download = 0
# the deploy time when the last update was done; milliseconds since epoch
update.time.deploy = 0
# delete old downloaded files after this amount of days to free disk space
# the latest release is always kept
update.deleteOld = 30
# restart-option
# a peer can be re-started periodically

View File

@ -34,6 +34,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@ -498,4 +499,58 @@ public final class yacyVersion implements Comparator<yacyVersion>, Comparable<ya
}
}
/**
* keep only releases of last month (minimum latest and 1 main (maybe the same))
*
* @param filesPath where all downloaded files reside
* @param deleteAfterDays
*/
public static void deleteOldDownloads(File filesPath, int deleteAfterDays) {
serverLog.logFine("STARTUP", "deleting downloaded releases older than "+ deleteAfterDays +" days");
final long deleteAfterMillis = deleteAfterDays * 24 * 60 * 60000l;
// list downloaded releases
yacyVersion release;
String[] downloaded = filesPath.list();
// parse all filenames and put them in a sorted set
TreeSet<yacyVersion> downloadedreleases = new TreeSet<yacyVersion>();
for (int j = 0; j < downloaded.length; j++) {
try {
release = new yacyVersion(downloaded[j]);
downloadedreleases.add(release);
} catch (RuntimeException e) {
// not a valid release
}
}
// keep latest version
final yacyVersion latest = downloadedreleases.last();
downloadedreleases.remove(latest);
// if latest is a developer release, we also keep a main release
boolean keepMain = !latest.mainRelease;
// remove old files
long now = System.currentTimeMillis();
System.out.println("+-+ DEBUG now is "+ new Date(now));
final Iterator<yacyVersion> iter = downloadedreleases.descendingIterator();
while (iter.hasNext()) {
release = iter.next();
if(keepMain && release.mainRelease) {
// we found the latest main release
keepMain = false;
continue;
}
File downloadedFile = new File(filesPath + File.separator + release.name);
System.out.println("+-+ DEBUG lastModified of "+ downloadedFile.getName() +" is "+ new Date(downloadedFile.lastModified()) +" delta="+ (now-downloadedFile.lastModified()) +" > "+ deleteAfterMillis);
if(now - downloadedFile.lastModified() > deleteAfterMillis) {
if(!downloadedFile.delete()) {
serverLog.logWarning("STARTUP", "cannot delete old release "+ downloadedFile.getAbsolutePath());
}
}
}
}
}

View File

@ -322,6 +322,10 @@ public final class yacy {
migration.migrate(sb, oldRev, newRev);
// delete old release files
int deleteOldDownloadsAfterDays = (int) sb.getConfigLong("update.deleteOld", 30);
yacyVersion.deleteOldDownloads(sb.releasePath, deleteOldDownloadsAfterDays );
// start main threads
final String port = sb.getConfig("port", "8080");
try {