Author: toad
Date: 2008-01-26 17:26:04 +0000 (Sat, 26 Jan 2008)
New Revision: 17303
Modified:
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
Log:
UOM logic:
- Try each node which has offered us the key once. Don't loop indefinitely
trying the first node only.
- Refactoring.
- Logging.
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-01-26 13:04:31 UTC (rev 17302)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2008-01-26 17:26:04 UTC (rev 17303)
@@ -206,7 +206,7 @@
try {
FreenetURI mainJarURI = new
FreenetURI(jarKey).setSuggestedEdition(mainJarVersion);
if(mainJarURI.equals(updateManager.updateURI.setSuggestedEdition(mainJarVersion)))
{
- sendUOMRequestMain(source);
+ sendUOMRequestMain(source, true);
} else {
System.err.println("Node
"+source.userToString()+" offered us a new main jar (version
"+mainJarVersion+") but his key was different to ours:\n"+
"our key:
"+updateManager.updateURI+"\nhis key:"+mainJarURI);
@@ -221,11 +221,12 @@
return true;
}
- protected void sendUOMRequestMain(final PeerNode source) {
+ protected void sendUOMRequestMain(final PeerNode source, boolean
addOnFail) {
synchronized(this) {
- if(nodesAskedSendMainJar.size() +
nodesSendingMainJar.size() >= MAX_NODES_SENDING_MAIN_JAR) {
- if(nodesOfferedMainJar.add(source))
+ if(addOnFail && nodesAskedSendMainJar.size() +
nodesSendingMainJar.size() >= MAX_NODES_SENDING_MAIN_JAR) {
+ if(nodesOfferedMainJar.add(source)) {
System.err.println("Offered main jar by
"+source.userToString()+" (already fetching from
"+nodesSendingMainJar.size()+"), but will use this offer if our current fetches
fail).");
+ }
return;
} else {
if(nodesSendingMainJar.contains(source)) {
@@ -281,18 +282,24 @@
protected void maybeRequestMainJar() {
- while(true) {
- PeerNode pn;
+ PeerNode[] offers;
synchronized(this) {
if(nodesAskedSendMainJar.size() +
nodesSendingMainJar.size()
>= MAX_NODES_SENDING_MAIN_JAR)
return;
if(nodesOfferedMainJar.isEmpty()) return;
- pn = (PeerNode)
(nodesOfferedMainJar.iterator().next());
+ offers = (PeerNode[])
nodesOfferedMainJar.toArray(new PeerNode[nodesOfferedMainJar.size()]);
}
- if(!pn.isConnected()) continue;
- sendUOMRequestMain(pn);
- }
+ for(int i=0;i<offers.length;i++) {
+ if(offers[i].isConnected()) continue;
+ synchronized(this) {
+ if(nodesAskedSendMainJar.size() +
nodesSendingMainJar.size()
+ >=
MAX_NODES_SENDING_MAIN_JAR)
+ return;
+
if(nodesSendingMainJar.contains(offers[i])) continue;
+ }
+ sendUOMRequestMain(offers[i], false);
+ }
}
private void alertUser() {