Skip to content

Commit

Permalink
deleting downloaded releases after x days (default 30)
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4724 6c8d7289-2bf4-0310-a012-ef5d649a1542
  • Loading branch information
danielr committed Apr 22, 2008
1 parent 763f9d4 commit 79a3ede
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
3 changes: 3 additions & 0 deletions defaults/yacy.init
Expand Up @@ -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
Expand Down
55 changes: 55 additions & 0 deletions source/de/anomic/yacy/yacyVersion.java
Expand Up @@ -34,6 +34,7 @@
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;
Expand Down Expand Up @@ -497,5 +498,59 @@ public static void main(String[] args) {
System.out.println(test + " is " + ((test.matches(blacklist)) ? "blacklisted" : " not blacklisted"));
}
}

/**
* 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());
}
}
}
}

}
4 changes: 4 additions & 0 deletions source/yacy.java
Expand Up @@ -322,6 +322,10 @@ private static void startup(File homePath, long startupMemFree, long startupMemT

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 {
Expand Down

0 comments on commit 79a3ede

Please sign in to comment.