Update of /cvsroot/freenet/freenet/src/freenet/node
In directory sc8-pr-cvs1:/tmp/cvs-serv7338/freenet/src/freenet/node
Modified Files:
FailureTable.java
Log Message:
6300:
The removal of the functional checkpointing code in the FailureTable made things
_very_ unhappy, so I put it back.
This may not be the best way to handle it, but I think it'll be pretty effective for
now.
If it needs to be taken back out, at least make sure it doesn't run-away checkpoint
itself.
Index: FailureTable.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/node/FailureTable.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -w -r1.20 -r1.21
--- FailureTable.java 2 Nov 2003 03:18:46 -0000 1.20
+++ FailureTable.java 3 Nov 2003 00:40:49 -0000 1.21
@@ -81,6 +81,7 @@
protected int maxSize;
protected int maxItemsSize;
protected long maxMillis;
+ protected long cpMillis;
protected long lastCp = 0;
protected Hashtable failedKeys; // of FailureEntry's
@@ -98,10 +99,12 @@
public FailureTable(int size, int itemSize, long millis) {
maxSize = size;
maxMillis = millis;
+ cpMillis = millis;
maxItemsSize = itemSize;
failedKeys = new Hashtable();
entries = new DoublyLinkedListImpl();
items = new DoublyLinkedListImpl();
+ lastCp = System.currentTimeMillis();
}
/**
@@ -125,15 +128,6 @@
fe.failed(hopsToLive, time);
entries.push(fe);
}
- while (entries.size() > maxSize) {
- fe = (FailureEntry) entries.shift();
- failedKeys.remove(fe.key);
- Core.diagnostics.occurrenceContinuous("failureTableBlocks",
- (double) fe.blocks);
- }
- while (items.size() > maxItemsSize) {
- FailItem fi = (FailItem) items.shift();
- }
}
/**
@@ -179,19 +173,26 @@
* Purges the queue.
*/
public synchronized void checkpoint() {
- // Will need old stuff later, don't bother
-// lastCp = System.currentTimeMillis();
-// long thresh = lastCp - maxMillis;
-// while (queue.size() > 0) {
-// FailureEntry fe = (FailureEntry) queue.top();
-// if (fe.time > thresh) {
-// break;
-// }
-// queue.pop();
-// failedKeys.remove(fe.key);
-// Core.diagnostics.occurrenceContinuous("failureTableBlocks",
-// (double) fe.blocks);
-// }
+ long lastCp = System.currentTimeMillis();
+ int numEntries = 0;
+ int numItems = 0;
+ FailureEntry fe;
+ while (entries.size() > maxSize) {
+ numEntries++;
+ fe = (FailureEntry) entries.shift();
+ failedKeys.remove(fe.key);
+ Core.diagnostics.occurrenceContinuous("failureTableBlocks",
+
(double) fe.blocks);
+ }
+ while (items.size() > maxItemsSize) {
+ numItems++;
+ FailItem fi = (FailItem) items.shift();
+ }
+ long itemSubtract = (long)(( numItems - maxItemsSize*.10 ) * 1000);
+ long entrySubtract = (long)(( numEntries - maxSize*.10 ) * 1000);
+ long subtract = Math.max(Math.max(0,itemSubtract),entrySubtract);
+ cpMillis-=subtract==0?-1000:subtract;
+ cpMillis = Math.min(maxMillis,cpMillis);
}
public String getCheckpointName() {
@@ -199,14 +200,14 @@
}
public long nextCheckpoint() {
- return Math.max(System.currentTimeMillis(),
- lastCp + maxMillis / 10);
+ return lastCp + cpMillis;
}
public synchronized void writeHtml(PrintWriter pw) {
pw.println("<b>max size:</b> " + maxSize + "<br>");
pw.println("<b>current size:</b> " + failedKeys.size() + "<br>");
- pw.println("<b>seconds it lasts:</b> " + maxMillis / 1000 + "<br>");
+ pw.println("<b>seconds entries last:</b> " + maxMillis / 1000 +
"<br>");
+ pw.println("<b>seconds between cleanings:</b> " + cpMillis / 1000 +
"<br>");
pw.println("<table border=1>");
pw.println("<tr><th>Key</th><th>Blocked HTL</th>"
+ "<th>Age</th><th># of Blocks</th>"
_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs