Author: toad
Date: 2005-12-01 17:16:30 +0000 (Thu, 01 Dec 2005)
New Revision: 7647
Modified:
trunk/freenet/src/freenet/client/BlockFetcher.java
trunk/freenet/src/freenet/client/BlockInserter.java
trunk/freenet/src/freenet/client/StdSplitfileBlock.java
trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
trunk/freenet/src/freenet/node/InsertSender.java
trunk/freenet/src/freenet/node/Version.java
Log:
258:
Logging.
Minor BlockTransmitter fixes (was hanging).
Overload sendAborted to let the receiver cancel the transfer.
Modified: trunk/freenet/src/freenet/client/BlockFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockFetcher.java 2005-12-01 15:01:33 UTC
(rev 7646)
+++ trunk/freenet/src/freenet/client/BlockFetcher.java 2005-12-01 17:16:30 UTC
(rev 7647)
@@ -25,6 +25,10 @@
this.dontEnterImplicitArchives = dontEnterImplicitArchives;
}
+ public String getName() {
+ return "BlockFetcher for "+getNumber();
+ }
+
public void run() {
Logger.minor(this, "Running: "+this);
// Already added to runningFetches.
Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 15:01:33 UTC
(rev 7646)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 17:16:30 UTC
(rev 7647)
@@ -49,6 +49,10 @@
return uri;
}
+ public String getName() {
+ return "BlockInserter for "+this.getNumber();
+ }
+
public void run() {
try {
Logger.minor(this, "Running "+this);
Modified: trunk/freenet/src/freenet/client/StdSplitfileBlock.java
===================================================================
--- trunk/freenet/src/freenet/client/StdSplitfileBlock.java 2005-12-01
15:01:33 UTC (rev 7646)
+++ trunk/freenet/src/freenet/client/StdSplitfileBlock.java 2005-12-01
17:16:30 UTC (rev 7647)
@@ -39,7 +39,7 @@
checkStartable();
Logger.minor(this, "Starting "+this);
try {
- Thread t = new Thread(this);
+ Thread t = new Thread(this, getName());
t.setDaemon(true);
t.start();
} catch (Throwable error) {
@@ -48,5 +48,7 @@
}
}
+ public abstract String getName();
+
protected abstract void checkStartable();
}
Modified: trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java
===================================================================
--- trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java 2005-12-01
15:01:33 UTC (rev 7646)
+++ trunk/freenet/src/freenet/io/xfer/BlockTransmitter.java 2005-12-01
17:16:30 UTC (rev 7647)
@@ -117,6 +117,7 @@
if(_unsent.size() != 0) break;
// No
unsent packets
if(getNumSent() == _prb.getNumPackets()) {
+
Logger.minor(this, "Sent all blocks, none unsent");
timeAllSent = System.currentTimeMillis();
}
}
@@ -254,8 +255,10 @@
public boolean send() {
_receiverThread = Thread.currentThread();
+ PartiallyReceivedBlock.PacketReceivedListener myListener;
+
try {
- _unsent = _prb.addListener(new
PartiallyReceivedBlock.PacketReceivedListener() {;
+ _unsent = _prb.addListener(myListener = new
PartiallyReceivedBlock.PacketReceivedListener() {;
public void packetReceived(int packetNo) {
_unsent.addLast(new Integer(packetNo));
@@ -285,8 +288,12 @@
}
Message msg;
try {
- msg =
_usm.waitFor(MessageFilter.create().setTimeout(SEND_TIMEOUT).setType(DMT.missingPacketNotification).setField(DMT.UID,
_uid).or(MessageFilter.create().setType(DMT.allReceived).setField(DMT.UID,
_uid)));
+ msg =
_usm.waitFor(MessageFilter.create().setTimeout(SEND_TIMEOUT).setType(DMT.missingPacketNotification).setField(DMT.UID,
_uid).or(MessageFilter.create().setType(DMT.allReceived).setField(DMT.UID,
_uid).setTimeout(SEND_TIMEOUT)).or(MessageFilter.create().setType(DMT.sendAborted).setField(DMT.UID,
_uid).setTimeout(SEND_TIMEOUT)));
} catch (DisconnectedException e) {
+ // Ignore, see below
+ msg = null;
+ }
+ if(!_destination.isConnected()) {
Logger.normal(this, "Terminating send "+_uid+" to
"+_destination+" from "+_usm.getPortNumber()+" because node disconnected while
waiting");
synchronized(_senderThread) {
_sendComplete = true;
@@ -294,9 +301,10 @@
}
return false;
}
- if(_sendComplete || !_destination.isConnected()) return
false;
+ if(_sendComplete)
+ return false;
if (msg == null) {
- if(timeAllSent > 0 &&
System.currentTimeMillis() - timeAllSent > SEND_TIMEOUT &&
+ if(timeAllSent > 0 &&
(System.currentTimeMillis() - timeAllSent) > SEND_TIMEOUT &&
getNumSent() ==
_prb.getNumPackets()) {
synchronized(_senderThread) {
_sendComplete = true;
@@ -304,7 +312,10 @@
}
Logger.error(this, "Terminating send
"+_uid+" to "+_destination+" from "+_usm.getPortNumber()+" as we haven't heard
from receiver in "+SEND_TIMEOUT+"ms.");
return false;
- } else continue;
+ } else {
+ Logger.minor(this, "Ignoring timeout:
timeAllSent="+timeAllSent+" ("+(System.currentTimeMillis() - timeAllSent)+"),
getNumSent="+getNumSent()+"/"+_prb.getNumPackets());
+ continue;
+ }
} else if
(msg.getSpec().equals(DMT.missingPacketNotification)) {
LinkedList missing = (LinkedList)
msg.getObject(DMT.MISSING);
for (Iterator i = missing.iterator();
i.hasNext();) {
@@ -325,6 +336,17 @@
_senderThread.notifyAll();
}
return true;
+ } else if (msg.getSpec().equals(DMT.sendAborted)) {
+ // Overloaded: receiver no longer wants the data
+ // Do NOT abort PRB, it's none of its business.
+ // And especially, we don't want a downstream
node to
+ // be able to abort our sends to all the others!
+ _prb.removeListener(myListener);
+ synchronized(_senderThread) {
+ _sendComplete = true;
+ _senderThread.notifyAll();
+ }
+ return false;
} else if(_sendComplete) {
// Terminated abnormally
return false;
@@ -365,7 +387,7 @@
synchronized(_senderThread) {
while(!_sendComplete) {
try {
- _senderThread.wait(10*1000);
+ _senderThread.wait(10*1000);
} catch (InterruptedException e) {
// Ignore
}
Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java 2005-12-01 15:01:33 UTC
(rev 7646)
+++ trunk/freenet/src/freenet/node/InsertSender.java 2005-12-01 17:16:30 UTC
(rev 7647)
@@ -251,7 +251,7 @@
Logger.minor(this, "Sending data");
if(receiveFailed) return;
Sender s = new Sender(bt);
- Thread senderThread = new Thread(s);
+ Thread senderThread = new Thread(s, "Sender for "+uid+" to
"+next.getPeer());
senderThread.setDaemon(true);
senderThread.start();
senderThreads.add(senderThread);
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-01 15:01:33 UTC (rev
7646)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-01 17:16:30 UTC (rev
7647)
@@ -20,10 +20,10 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 257;
+ public static final int buildNumber = 258;
/** Oldest build of Fred we will talk to */
- public static final int lastGoodBuild = 257;
+ public static final int lastGoodBuild = 258;
/** The highest reported build of fred */
public static int highestSeenBuild = buildNumber;