fix for not-deleted .gap and .idx files

see also: http://forum.yacy-websuche.de/viewtopic.php?p=22128#p22128

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7605 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
orbiter 2011-03-17 17:09:19 +00:00
parent a6935e7dc8
commit a35d513bd8
3 changed files with 38 additions and 27 deletions

View File

@ -457,7 +457,7 @@ public class ArrayStack implements BLOB {
for (blobItem bi: blobs) { for (blobItem bi: blobs) {
bi.blob.clear(); bi.blob.clear();
bi.blob.close(false); bi.blob.close(false);
FileUtils.deletedelete(bi.location); HeapWriter.delete(bi.location);
} }
blobs.clear(); blobs.clear();
} }
@ -903,15 +903,15 @@ public class ArrayStack implements BLOB {
} }
if (!i1.hasNext()) { if (!i1.hasNext()) {
if (i2.hasNext()) { if (i2.hasNext()) {
FileUtils.deletedelete(f1); HeapWriter.delete(f1);
if (f2.renameTo(newFile)) return newFile; if (f2.renameTo(newFile)) return newFile;
return f2; return f2;
} }
FileUtils.deletedelete(f1); HeapWriter.delete(f1);
FileUtils.deletedelete(f2); HeapWriter.delete(f2);
return null; return null;
} else if (!i2.hasNext()) { } else if (!i2.hasNext()) {
FileUtils.deletedelete(f2); HeapWriter.delete(f2);
if (f1.renameTo(newFile)) return newFile; if (f1.renameTo(newFile)) return newFile;
return f1; return f1;
} }
@ -924,18 +924,18 @@ public class ArrayStack implements BLOB {
writer.close(true); writer.close(true);
} catch (IOException e) { } catch (IOException e) {
Log.logSevere("ArrayStack", "cannot writing or close writing merge, newFile = " + newFile.toString() + ", tmpFile = " + tmpFile.toString() + ": " + e.getMessage(), e); Log.logSevere("ArrayStack", "cannot writing or close writing merge, newFile = " + newFile.toString() + ", tmpFile = " + tmpFile.toString() + ": " + e.getMessage(), e);
FileUtils.deletedelete(tmpFile); HeapWriter.delete(tmpFile);
FileUtils.deletedelete(newFile); HeapWriter.delete(newFile);
return null; return null;
} catch (RowSpaceExceededException e) { } catch (RowSpaceExceededException e) {
Log.logSevere("ArrayStack", "cannot merge because of memory failure: " + e.getMessage(), e); Log.logSevere("ArrayStack", "cannot merge because of memory failure: " + e.getMessage(), e);
FileUtils.deletedelete(tmpFile); HeapWriter.delete(tmpFile);
FileUtils.deletedelete(newFile); HeapWriter.delete(newFile);
return null; return null;
} }
// we don't need the old files any more // we don't need the old files any more
FileUtils.deletedelete(f1); HeapWriter.delete(f1);
FileUtils.deletedelete(f2); HeapWriter.delete(f2);
return newFile; return newFile;
} }

View File

@ -157,9 +157,9 @@ public class HeapReader {
Log.logSevere("HeapReader", "cannot generate a fingerprint for " + this.heapFile + ": null"); Log.logSevere("HeapReader", "cannot generate a fingerprint for " + this.heapFile + ": null");
return false; return false;
} }
this.fingerprintFileIdx = fingerprintIndexFile(this.heapFile, fingerprint); this.fingerprintFileIdx = HeapWriter.fingerprintIndexFile(this.heapFile, fingerprint);
if (!this.fingerprintFileIdx.exists()) this.fingerprintFileIdx = new File(this.fingerprintFileIdx.getAbsolutePath() + ".gz"); if (!this.fingerprintFileIdx.exists()) this.fingerprintFileIdx = new File(this.fingerprintFileIdx.getAbsolutePath() + ".gz");
this.fingerprintFileGap = fingerprintGapFile(this.heapFile, fingerprint); this.fingerprintFileGap = HeapWriter.fingerprintGapFile(this.heapFile, fingerprint);
if (!this.fingerprintFileGap.exists()) this.fingerprintFileGap = new File(this.fingerprintFileGap.getAbsolutePath() + ".gz"); if (!this.fingerprintFileGap.exists()) this.fingerprintFileGap = new File(this.fingerprintFileGap.getAbsolutePath() + ".gz");
if (!this.fingerprintFileIdx.exists() || !this.fingerprintFileGap.exists()) { if (!this.fingerprintFileIdx.exists() || !this.fingerprintFileGap.exists()) {
deleteAllFingerprints(this.heapFile, this.fingerprintFileIdx.getName(), this.fingerprintFileGap.getName()); deleteAllFingerprints(this.heapFile, this.fingerprintFileIdx.getName(), this.fingerprintFileGap.getName());
@ -194,16 +194,6 @@ public class HeapReader {
return !this.index.isEmpty(); return !this.index.isEmpty();
} }
protected static File fingerprintIndexFile(File f, String fingerprint) {
assert f != null;
return new File(f.getParentFile(), f.getName() + "." + fingerprint + ".idx");
}
protected static File fingerprintGapFile(File f, String fingerprint) {
assert f != null;
return new File(f.getParentFile(), f.getName() + "." + fingerprint + ".gap");
}
/** /**
* deletion of the fingerprint: this should happen if the heap is written or entries are deleted * deletion of the fingerprint: this should happen if the heap is written or entries are deleted
* if the files are not deleted then it may be possible that they are not used anyway because the * if the files are not deleted then it may be possible that they are not used anyway because the
@ -569,7 +559,7 @@ public class HeapReader {
if (fingerprint == null) { if (fingerprint == null) {
Log.logSevere("HeapReader", "cannot write a dump for " + heapFile.getName()+ ": fingerprint is null"); Log.logSevere("HeapReader", "cannot write a dump for " + heapFile.getName()+ ": fingerprint is null");
} else { } else {
File newFingerprintFileGap = fingerprintGapFile(this.heapFile, fingerprint); File newFingerprintFileGap = HeapWriter.fingerprintGapFile(this.heapFile, fingerprint);
if (this.fingerprintFileGap != null && if (this.fingerprintFileGap != null &&
this.fingerprintFileGap.getName().equals(newFingerprintFileGap.getName()) && this.fingerprintFileGap.getName().equals(newFingerprintFileGap.getName()) &&
this.fingerprintFileGap.exists()) { this.fingerprintFileGap.exists()) {
@ -583,7 +573,7 @@ public class HeapReader {
free.clear(); free.clear();
free = null; free = null;
if (fingerprint != null) { if (fingerprint != null) {
File newFingerprintFileIdx = fingerprintIndexFile(this.heapFile, fingerprint); File newFingerprintFileIdx = HeapWriter.fingerprintIndexFile(this.heapFile, fingerprint);
if (this.fingerprintFileIdx != null && if (this.fingerprintFileIdx != null &&
this.fingerprintFileIdx.getName().equals(newFingerprintFileIdx.getName()) && this.fingerprintFileIdx.getName().equals(newFingerprintFileIdx.getName()) &&
this.fingerprintFileIdx.exists()) { this.fingerprintFileIdx.exists()) {

View File

@ -141,8 +141,8 @@ public final class HeapWriter {
if (fingerprint == null) { if (fingerprint == null) {
Log.logSevere("kelondroBLOBHeapWriter", "cannot write a dump for " + heapFileREADY.getName()+ ": fingerprint is null"); Log.logSevere("kelondroBLOBHeapWriter", "cannot write a dump for " + heapFileREADY.getName()+ ": fingerprint is null");
} else { } else {
new Gap().dump(HeapReader.fingerprintGapFile(this.heapFileREADY, fingerprint)); new Gap().dump(fingerprintGapFile(this.heapFileREADY, fingerprint));
index.dump(HeapReader.fingerprintIndexFile(this.heapFileREADY, fingerprint)); index.dump(fingerprintIndexFile(this.heapFileREADY, fingerprint));
Log.logInfo("kelondroBLOBHeapWriter", "wrote a dump for the " + this.index.size() + " index entries of " + heapFileREADY.getName()+ " in " + (System.currentTimeMillis() - start) + " milliseconds."); Log.logInfo("kelondroBLOBHeapWriter", "wrote a dump for the " + this.index.size() + " index entries of " + heapFileREADY.getName()+ " in " + (System.currentTimeMillis() - start) + " milliseconds.");
} }
index.close(); index.close();
@ -154,4 +154,25 @@ public final class HeapWriter {
} }
} }
public static void delete(File f) {
File p = f.getParentFile();
String n = f.getName() + ".";
String[] l = p.list();
FileUtils.deletedelete(f);
for (String s: l) {
if (s.startsWith(n) &&
(s.endsWith(".idx") || s.endsWith(".gap")))
FileUtils.deletedelete(new File(p, s));
}
}
protected static File fingerprintIndexFile(File f, String fingerprint) {
assert f != null;
return new File(f.getParentFile(), f.getName() + "." + fingerprint + ".idx");
}
protected static File fingerprintGapFile(File f, String fingerprint) {
assert f != null;
return new File(f.getParentFile(), f.getName() + "." + fingerprint + ".gap");
}
} }