Author: zothar
Date: 2008-03-13 23:55:58 +0000 (Thu, 13 Mar 2008)
New Revision: 18525
Modified:
trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
Log:
Implement bug #1974: clean up left over UoM downloads from persistent-temp on
startup
Modified: trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
2008-03-13 23:20:14 UTC (rev 18524)
+++ trunk/freenet/src/freenet/node/updater/NodeUpdateManager.java
2008-03-13 23:55:58 UTC (rev 18525)
@@ -153,6 +153,7 @@
this.revocationChecker = new RevocationChecker(this, new
File(node.clientCore.getPersistentTempDir(), "revocation-key.fblob"));
this.uom = new UpdateOverMandatoryManager(this);
+ this.uom.removeOldTempFiles();
}
public void start() throws InvalidConfigValueException {
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-03-13 23:20:14 UTC (rev 18524)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-03-13 23:55:58 UTC (rev 18525)
@@ -12,6 +12,8 @@
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import freenet.client.FetchContext;
import freenet.client.FetchException;
@@ -35,6 +37,7 @@
import freenet.keys.FreenetURI;
import freenet.l10n.L10n;
import freenet.node.Node;
+import freenet.node.NodeStarter;
import freenet.node.PeerNode;
import freenet.node.RequestStarter;
import freenet.node.Version;
@@ -1157,5 +1160,76 @@
}
}
-
+
+ protected boolean removeOldTempFiles() {
+ File oldTempFilesPeerDir =
updateManager.node.clientCore.getPersistentTempDir();
+ if(!oldTempFilesPeerDir.exists()) {
+ return false;
+ }
+ if(!oldTempFilesPeerDir.isDirectory()) {
+ Logger.error(this, "Persistent temporary files location
is not a directory: "+oldTempFilesPeerDir.getPath());
+ return false;
+ }
+ File[] oldTempFiles = oldTempFilesPeerDir.listFiles();
+ if(oldTempFiles == null) {
+ return false;
+ }
+ boolean gotError = false;
+ File oldTempFile;
+ String oldTempFileName;
+ String extBuildNumberRegexStr = "^ext(?:-jar)?-(\\d+)\\.fblob$";
+ String mainBuildNumberRegexStr =
"^main(?:-jar)?-(\\d+)\\.fblob$";
+ Pattern extBuildNumberPattern =
Pattern.compile(extBuildNumberRegexStr);
+ Pattern mainBuildNumberPattern =
Pattern.compile(mainBuildNumberRegexStr);
+ Matcher extBuildNumberMatcher;
+ Matcher mainBuildNumberMatcher;
+ String buildNumberStr;
+ int buildNumber;
+ int lastGoodMainBuildNumber = Version.lastGoodBuild();
+ int recommendedExtBuildNumber =
NodeStarter.RECOMMENDED_EXT_BUILD_NUMBER;
+ for (int i = 0; i < oldTempFiles.length; i++) {
+ oldTempFile = oldTempFiles[i];
+ oldTempFileName = oldTempFile.getName();
+ if(oldTempFileName.endsWith(".fblob.tmp")) {
+ if(oldTempFileName.startsWith("ext-jar-") ||
oldTempFileName.startsWith("main-jar-") ||
oldTempFileName.startsWith("revocation-") ||
oldTempFileName.startsWith("main-")) {
+ if(!oldTempFile.delete()) {
+ if(oldTempFile.exists()) {
+ Logger.error(this,
"Cannot delete temporary persistent file "+oldTempFileName+" even though it
exists: must be TOO persistent :)");
+ } else {
+ Logger.normal(this,
"Temporary persistent file does not exist when deleting: "+oldTempFileName);
+ }
+ }
+ }
+ } else if(oldTempFileName.endsWith(".fblob")) {
+ mainBuildNumberMatcher =
mainBuildNumberPattern.matcher(oldTempFileName);
+ extBuildNumberMatcher =
extBuildNumberPattern.matcher(oldTempFileName);
+ if(mainBuildNumberMatcher.matches()) {
+ buildNumberStr =
mainBuildNumberMatcher.group(1);
+ buildNumber =
Integer.parseInt(buildNumberStr);
+ if(buildNumber <
lastGoodMainBuildNumber) {
+ if(!oldTempFile.delete()) {
+
if(oldTempFile.exists()) {
+
Logger.error(this, "Cannot delete temporary persistent file "+oldTempFileName+"
even though it exists: must be TOO persistent :)");
+ } else {
+
Logger.normal(this, "Temporary persistent file does not exist when deleting:
"+oldTempFileName);
+ }
+ }
+ }
+ } else if(extBuildNumberMatcher.matches()) {
+ buildNumberStr =
extBuildNumberMatcher.group(1);
+ buildNumber =
Integer.parseInt(buildNumberStr);
+ if(buildNumber <
recommendedExtBuildNumber) {
+ if(!oldTempFile.delete()) {
+
if(oldTempFile.exists()) {
+
Logger.error(this, "Cannot delete temporary persistent file "+oldTempFileName+"
even though it exists: must be TOO persistent :)");
+ } else {
+
Logger.normal(this, "Temporary persistent file does not exist when deleting:
"+oldTempFileName);
+ }
+ }
+ }
+ }
+ }
+ }
+ return !gotError;
+ }
}