From cd3e0d6f03b72a4f8f2e35bb4e36163021fc544d Mon Sep 17 00:00:00 2001 From: orbiter Date: Sat, 2 Feb 2008 21:36:19 +0000 Subject: [PATCH] tried to fix another eco bug git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4429 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- htroot/LogStatistics_p.java | 4 ++-- .../anomic/kelondro/kelondroBufferedEcoFS.java | 15 +++++++-------- source/de/anomic/kelondro/kelondroEcoFS.java | 10 ++++++---- source/de/anomic/kelondro/kelondroEcoTable.java | 17 +++++++++++------ 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/htroot/LogStatistics_p.java b/htroot/LogStatistics_p.java index 28b663c90..4b37e8b95 100644 --- a/htroot/LogStatistics_p.java +++ b/htroot/LogStatistics_p.java @@ -60,7 +60,7 @@ public class LogStatistics_p { private static final String RESULTS = "results_"; - @SuppressWarnings("unchecked") + @SuppressWarnings({ "unchecked", "boxing" }) public static serverObjects respond(httpHeader header, serverObjects post, serverSwitch env) { final serverObjects prop = new serverObjects(); @@ -89,7 +89,7 @@ public class LogStatistics_p { prop.put("results", "1"); String[] t; float l; - prop.put(RESULTS + LogParserPLASMA.DHT_DISTANCE_AVERAGE, (String) r.get(LogParserPLASMA.DHT_DISTANCE_AVERAGE)); + prop.put(RESULTS + LogParserPLASMA.DHT_DISTANCE_AVERAGE, (Double) r.get(LogParserPLASMA.DHT_DISTANCE_AVERAGE)); prop.put(RESULTS + LogParserPLASMA.DHT_DISTANCE_MAX, (String) r.get(LogParserPLASMA.DHT_DISTANCE_MAX)); prop.put(RESULTS + LogParserPLASMA.DHT_DISTANCE_MIN, (String) r.get(LogParserPLASMA.DHT_DISTANCE_MIN)); prop.put(RESULTS + LogParserPLASMA.DHT_REJECTED, (String) r.get(LogParserPLASMA.DHT_REJECTED)); diff --git a/source/de/anomic/kelondro/kelondroBufferedEcoFS.java b/source/de/anomic/kelondro/kelondroBufferedEcoFS.java index b9b285c70..d87549080 100644 --- a/source/de/anomic/kelondro/kelondroBufferedEcoFS.java +++ b/source/de/anomic/kelondro/kelondroBufferedEcoFS.java @@ -93,7 +93,7 @@ public class kelondroBufferedEcoFS { public synchronized void put(long index, byte[] b, int start) throws IOException { assert b.length - start >= efs.recordsize; - if (index > size()) throw new IndexOutOfBoundsException("kelondroEcoFS.put(" + index + ") outside bounds (" + this.size() + ")"); + if (index > size()) throw new IndexOutOfBoundsException("kelondroBufferedEcoFS.put(" + index + ") outside bounds (" + this.size() + ")"); if (index == efs.size()) { efs.put(index, b, start); } else { @@ -107,7 +107,7 @@ public class kelondroBufferedEcoFS { public synchronized void add(byte[] b, int start) throws IOException { put(size(), b, start); } - +/* public synchronized void clean(long index, byte[] b, int start) throws IOException { assert b.length - start >= efs.recordsize; if (index >= size()) throw new IndexOutOfBoundsException("kelondroBufferedEcoFS.clean(" + index + ") outside bounds (" + this.size() + ")"); @@ -126,24 +126,23 @@ public class kelondroBufferedEcoFS { buffer.remove(new Long(index)); efs.clean(index); } - +*/ public synchronized void cleanLast(byte[] b, int start) throws IOException { assert b.length - start >= efs.recordsize; Long i = new Long(size() - 1); - byte[] bb = buffer.get(i); + byte[] bb = buffer.remove(i); if (bb == null) { - efs.clean(i.intValue(), b, start); + efs.cleanLast(b, start); } else { System.arraycopy(bb, 0, b, start, efs.recordsize); - buffer.remove(i); - efs.clean(i.intValue()); + efs.cleanLast(); } } public synchronized void cleanLast() throws IOException { Long i = new Long(size() - 1); buffer.remove(i); - efs.clean(i.intValue()); + efs.cleanLast(); } } diff --git a/source/de/anomic/kelondro/kelondroEcoFS.java b/source/de/anomic/kelondro/kelondroEcoFS.java index a391dbacf..c71cb422f 100644 --- a/source/de/anomic/kelondro/kelondroEcoFS.java +++ b/source/de/anomic/kelondro/kelondroEcoFS.java @@ -225,10 +225,12 @@ public class kelondroEcoFS { assert b.length - start >= this.recordsize; if (index > size()) throw new IndexOutOfBoundsException("kelondroEcoFS.put(" + index + ") outside bounds (" + this.size() + ")"); // check if this is an empty entry + /* if (isClean(b , start, this.recordsize)) { clean(index); return; } + */ // check if index is inside of cache int p = inCache(index); int q = (p >= 0) ? -1 : inBuffer(index); @@ -304,7 +306,7 @@ public class kelondroEcoFS { assert false; return false; } - + /* public synchronized void clean(long index, byte[] b, int start) throws IOException { // removes an entry by cleaning (writing zero bytes to the file) // the entry that had been at the specific place before is copied to the given array b @@ -376,7 +378,7 @@ public class kelondroEcoFS { raf.seek((long) index * (long) this.recordsize); raf.write(zero, 0, this.recordsize); } - + */ public synchronized void cleanLast(byte[] b, int start) throws IOException { cleanLast0(b, start); long i; @@ -472,7 +474,7 @@ public class kelondroEcoFS { t.add("=======2".getBytes(), 0); t.cleanLast(b, 0); System.out.println(new String(b)); - t.clean(2, b, 0); + //t.clean(2, b, 0); System.out.println(new String(b)); t.get(1, b, 0); System.out.println(new String(b)); @@ -484,7 +486,7 @@ public class kelondroEcoFS { t.get(4, b, 0); System.out.println(new String(b)); System.out.println("size = " + t.size()); - t.clean(t.size() - 2); + //t.clean(t.size() - 2); t.cleanLast(); long start = System.currentTimeMillis(); long c = 0; diff --git a/source/de/anomic/kelondro/kelondroEcoTable.java b/source/de/anomic/kelondro/kelondroEcoTable.java index 8dea37d30..b1b4f21cd 100644 --- a/source/de/anomic/kelondro/kelondroEcoTable.java +++ b/source/de/anomic/kelondro/kelondroEcoTable.java @@ -375,7 +375,7 @@ public class kelondroEcoTable implements kelondroIndex { byte[] p = new byte[rowdef.objectsize]; if (table == null) { if (i == index.size() - 1) { - file.clean(i); + file.cleanLast(); } else { file.cleanLast(p, 0); file.put(i, p, 0); @@ -387,7 +387,7 @@ public class kelondroEcoTable implements kelondroIndex { if (i == index.size() - 1) { // special handling if the entry is the last entry in the file table.removeRow(i, false); - file.clean(i); + file.cleanLast(); } else { // switch values kelondroRow.Entry te = table.removeOne(); @@ -413,12 +413,17 @@ public class kelondroEcoTable implements kelondroIndex { byte[] b = new byte[rowdef.objectsize]; byte[] p = new byte[rowdef.objectsize]; int sb = index.size(); + int ix; + assert i < index.size(); if (table == null) { if (i == index.size() - 1) { - index.removei(key); - file.clean(i, b, 0); + ix = index.removei(key); + assert ix == i; + file.cleanLast(b, 0); } else { - index.removei(key); + assert i < index.size() - 1; + ix = index.removei(key); + assert ix == i; file.get(i, b, 0); file.cleanLast(p, 0); file.put(i, p, 0); @@ -437,7 +442,7 @@ public class kelondroEcoTable implements kelondroIndex { // special handling if the entry is the last entry in the file index.removei(key); table.removeRow(i, false); - file.clean(i); + file.cleanLast(); } else { // switch values index.removei(key);