Author: nextgens
Date: 2008-07-18 16:31:35 +0000 (Fri, 18 Jul 2008)
New Revision: 21212
Modified:
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
Log:
Maybe fix the OOM Coo was encountering, simplify and optimize the code... and
delete revocation files as well
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-07-18 15:50:32 UTC (rev 21211)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-07-18 16:31:35 UTC (rev 21212)
@@ -48,6 +48,7 @@
import freenet.support.SizeUtil;
import freenet.support.io.FileBucket;
import freenet.support.io.RandomAccessFileWrapper;
+import java.io.FileFilter;
/**
* Co-ordinates update over mandatory. Update over mandatory = updating from
your peers, even
@@ -79,6 +80,8 @@
private boolean logMINOR;
private UserAlert alert;
+ private static final Pattern extBuildNumberPattern =
Pattern.compile("^ext(?:-jar)?-(\\d+)\\.fblob$");
+ private static final Pattern mainBuildNumberPattern =
Pattern.compile("^main(?:-jar)?-(\\d+)\\.fblob$");
public UpdateOverMandatoryManager(NodeUpdateManager manager) {
this.updateManager = manager;
@@ -1174,66 +1177,52 @@
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);
+ File[] oldTempFiles = oldTempFilesPeerDir.listFiles(new
FileFilter() {
+ private final int lastGoodMainBuildNumber =
Version.lastGoodBuild();
+ private final int recommendedExtBuildNumber =
NodeStarter.RECOMMENDED_EXT_BUILD_NUMBER;
+
+ public boolean accept(File file) {
+ String fileName = file.getName();
+
+ if(fileName.startsWith("revocation-") &&
fileName.endsWith(".fblob.tmp"))
+ return true;
+
+ String buildNumberStr;
+ int buildNumber;
+ Matcher extBuildNumberMatcher =
extBuildNumberPattern.matcher(fileName);
+ Matcher mainBuildNumberMatcher =
mainBuildNumberPattern.matcher(fileName);
+
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);
- }
- }
+ return true;
}
} 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 true;
}
}
+
+ return false;
}
+ });
+
+ for(File fileToDelete : oldTempFiles) {
+ String fileToDeleteName = fileToDelete.getName();
+ if(!fileToDelete.delete()) {
+ if(fileToDelete.exists())
+ Logger.error(this, "Cannot delete
temporary persistent file " + fileToDeleteName + " even though it exists: must
be TOO persistent :)");
+ else
+ Logger.normal(this, "Temporary
persistent file does not exist when deleting: " + fileToDeleteName);
+ gotError =true;
+ }
}
+
return !gotError;
}
}