Update of /cvsroot/freenet/freenet/src/freenet
In directory sc8-pr-cvs1:/tmp/cvs-serv20709/src/freenet
Modified Files:
ConnectionHandler.java PeerHandler.java PeerPacket.java
PeerPacketMessage.java Version.java
Log Message:
6222: some major bugfixes, and logging. Probably introduces some major bugs too, but
probably not as major as the ones it eliminates. Will work more on this tomorrow!
Index: ConnectionHandler.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/ConnectionHandler.java,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -r1.166 -r1.167
--- ConnectionHandler.java 4 Oct 2003 22:29:34 -0000 1.166
+++ ConnectionHandler.java 7 Oct 2003 00:47:30 -0000 1.167
@@ -962,7 +962,11 @@
Core.logger.log(this, "Partial notification: "+size+" bytes written
successfully on "+
this, Logger.DEBUG);
lastSizeDone = size;
- sentPacket.jobDone(false, size, peer);
+ if(sentPacket == null)
+ Core.logger.log(this, "sentPacket NULL in jobPartDone! for
"+this,
+ Logger.ERROR);
+ else
+ sentPacket.jobDone(false, size, peer, null);
// if(sentMessages.size() > 0) {
// synchronized(sendLock) { // avoid deadlock
// synchronized(sentMessages) {
@@ -1041,16 +1045,11 @@
lastActiveTime = System.currentTimeMillis();
if(logDEBUG)logDEBUG("CH.jobDone("+size+","+status+") for "+this+
" trailingPresent
"+trailingPresent);
- // Open new conn if necessary
-
- if(identity != null &&
- ocm.needsConnection(identity))
- Main.node.scheduleConnectionOpener(identity);
- //this is an overkill
- //shouldn't it also happen _after_ reducing the counters? --zab
//we should check the status if terminate() is called from elsewhere
if (!status) {
+ if(logDEBUG)
+ logDEBUG("jobDone failed");
//tell everybody they failed
//this is where the PeerHandler will really help
// Locking!
@@ -1059,12 +1058,15 @@
if(sentPacket == null)
Core.logger.log(this, "sentPacket NULL! for
"+this,
new
Exception("debug"), Logger.ERROR);
- else
- sentPacket.jobDone(true, size, peer);
+ else {
+ sentPacket.jobDone(true, size, peer, null);
+ }
+ return;
}
- return;
}
if (sendingTrailerChunk) {
+ if(logDEBUG)
+ logDEBUG("jobDone sending chunk");
if(size == sendingTrailerChunkBytes) {
synchronized(trailerSendLock) {
trailerSentBytes += size;
@@ -1092,12 +1094,52 @@
if(twcb != null) twcb.closed();
return; // closed conn, don't need another packet
}
- } else if(sentPacket != null) {
- sentPacket.jobDone(true, size, peer);
+ } else {
+ if(logDEBUG) logDEBUG("still here - not sending trailer
chunk");
+ TrailerWriter tw = null;
+ PeerPacket packet = null;
+ synchronized(sentPacketLock) {
+ if(logDEBUG)
+ logDEBUG("synchronized");
+ if(sentPacket != null) {
+ packet = sentPacket;
+ if(logDEBUG)
+ logDEBUG("sentPacket != null");
+ sentPacket = null;
+ if(logDEBUG)
+ logDEBUG("Set sentPacket to null");
+ }
+ }
+ if(packet != null) {
+ if(logDEBUG)
+ logDEBUG("Packet not null");
+ if(packet.hasTrailer()) {
+ if(logDEBUG)
+ logDEBUG("packet has trailer");
+ int sendId;
+ synchronized(trailerSendIDCounterLock) {
+ trailerSendIDCounter++;
+ if(trailerSendIDCounter < 0)
+ trailerSendIDCounter = 0;
+ sendId = trailerSendIDCounter;
+ }
+ synchronized(trailerSendLock) {
+ trailerSendID = sendId;
+ trailerSendLength =
packet.trailerLength();
+ trailerSentBytes = 0;
+ }
+ tw = new MyTrailerWriter(sendId);
+ }
+ if(packet != null)
+ packet.jobDone(true, size, peer, tw);
+ }
}
boolean needTerminate = false; // don't terminate while holding locks!
if(sendClosed.state() && !sendingCloseMessage) return;
+ if(logDEBUG)
+ logDEBUG("Trying to send a packet...");
synchronized(sentPacketLock) {
+ logDEBUG("synchronized...");
if(sendingCloseMessage) {
Message cm = p.getCloseMessage();
if(cm != null) {
@@ -2102,7 +2144,7 @@
if(sendClosed.state()) {
Core.logger.log(this, "sendPacket("+packet+","+prio+
") when already closed:
"+this, Logger.NORMAL);
- packet.jobDone(true, 0, peer);
+ packet.jobDone(true, 0, peer, null);
return;
}
synchronized(sentPacketLock) {
@@ -2133,7 +2175,7 @@
sendClosed.change(true);
sendLock.notifyAll();
}
- sentPacket.jobDone(true, 0, peer);
+ sentPacket.jobDone(true, 0, peer, null);
} catch (Throwable t) {
Core.logger.log(this, "Caught "+t+ " trying to send packet "+
sentPacket, t, Logger.ERROR);
@@ -2141,7 +2183,7 @@
sendClosed.change(true);
sendLock.notifyAll();
}
- sentPacket.jobDone(true, 0, peer);
+ sentPacket.jobDone(true, 0, peer, null);
}
}
Index: PeerHandler.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/PeerHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PeerHandler.java 4 Oct 2003 22:35:45 -0000 1.4
+++ PeerHandler.java 7 Oct 2003 00:47:30 -0000 1.5
@@ -35,7 +35,7 @@
public static final int NORMAL = 1;
public String toString() {
- return super.toString() + " ("+id+")";
+ return super.toString() + " ("+id+","+ref+")";
}
/**
@@ -90,22 +90,39 @@
* identity (see *Routing).
*/
public boolean needsConnection() {
+ if(Core.logger.shouldLog(Logger.DEBUG, this))
+ Core.logger.log(this, "needsConnection(): "+
+ this+":
"+connectionHandlers.size(),
+ Logger.DEBUG);
if(messages.isEmpty() &&
(id == null || (!(node.rt.references(id))))) return false;
// FIXME: layering
+ int closedCount = 0;
+ int sendingCount = 0;
synchronized(connectionHandlers) {
for(Iterator e = connectionHandlers.listIterator(0);
e.hasNext();) {
ConnectionHandler ch = (ConnectionHandler)(e.next());
- if(!ch.isOpen()) continue;
- if(ch.sending()) continue;
+ if(!ch.isOpen()) {
+ closedCount++;
+ continue;
+ }
+ if(ch.sending()) {
+ sendingCount++;
+ continue;
+ }
// If it is sending a trailer, it is not available
// if(ch.isSendingPacket()) continue;
// But if it is sending only packets, it *IS* available
return false;
}
}
+ if(Core.logger.shouldLog(Logger.DEBUG, this))
+ Core.logger.log(this, "needsConnection(): "+
+ this+":
"+connectionHandlers.size()+
+ " closed "+closedCount+",
sending "+
+ sendingCount, Logger.DEBUG);
return true;
}
@@ -157,14 +174,14 @@
* Start an asynchronous message send
* Call the callback provided when it is finished
*/
- public synchronized void sendMessageAsync(Message r, MessageSendCallback cb,
+ public void sendMessageAsync(Message r, MessageSendCallback cb,
int msgPrio)
throws SendFailedException {
PeerPacketMessage pm = new PeerPacketMessage(id, r, cb, msgPrio);
innerSendMessageAsync(pm);
}
- protected synchronized void innerSendMessageAsync(PeerPacketMessage pm) {
+ protected void innerSendMessageAsync(PeerPacketMessage pm) {
/* Possibilities:
*
* 1. No ConnectionHandlers (without trailing fields) open.
@@ -330,9 +347,12 @@
new MyMessageSendCallback();
PeerPacketMessage pm = new PeerPacketMessage(id, r, cb, msgPrio);
innerSendMessageAsync(pm);
+ Core.logger.log(this, "Sent "+pm+" async", Logger.DEBUG);
long timeoutAt = System.currentTimeMillis() + timeout;
synchronized(cb) {
+ Core.logger.log(this, "Synced", Logger.DEBUG);
while(!cb.finished) {
+ Core.logger.log(this, "Waiting...", Logger.DEBUG);
try {
long waitTime;
if(timeout > 0) {
@@ -344,6 +364,7 @@
}
}
if(!cb.finished) {
+ Core.logger.log(this, "Not finished", Logger.DEBUG);
// Couldn't send message
unsendMessage(pm);
throw new SendFailedException(null, // FIXME?
@@ -375,6 +396,9 @@
Exception e = null;
TrailerWriter trailer = null;
public void succeeded() {
+ Core.logger.log(this, "Succeeded "+this,
+ new Exception("debug"),
+ Logger.DEBUG);
finished = true;
synchronized(this) {
this.notify();
@@ -382,14 +406,19 @@
}
public void thrown(Exception e) {
+ Core.logger.log(this, "Failed: "+e+" ("+this+")",
+ new Exception("debug"),
+ Logger.DEBUG);
this.e = e;
finished = true;
synchronized(this) {
this.notify();
}
}
-
+
public void setTrailerWriter(TrailerWriter tw) {
+ Core.logger.log(this, "setTrailerWriter("+tw+")",
+ new Exception("debug"),
Logger.DEBUG);
trailer = tw;
}
}
Index: PeerPacket.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/PeerPacket.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PeerPacket.java 4 Oct 2003 22:29:34 -0000 1.4
+++ PeerPacket.java 7 Oct 2003 00:47:30 -0000 1.5
@@ -8,6 +8,7 @@
PeerPacketMessage[] messages;
byte[] encryptedData; // plaintext. Encrypt at send time.
int sentBytes;
+ boolean hasTrailer = false;
/**
* Create a PeerPacket
@@ -22,8 +23,11 @@
PeerPacketMessage m = msgs[i];
m.resolve(p);
totalLength += m.getLength();
- if((i != (msgs.length-1)) && m.hasTrailer())
- throw new IllegalArgumentException("trailers can only be attached to
the LAST message!");
+ if(m.hasTrailer()) {
+ if(i != (msgs.length-1))
+ throw new IllegalArgumentException("trailers can only be attached
to the LAST message!");
+ hasTrailer = true;
+ }
}
encryptedData = new byte[totalLength];
int x = 0;
@@ -46,6 +50,14 @@
return encryptedData;
}
+ public boolean hasTrailer() {
+ return hasTrailer;
+ }
+
+ public long trailerLength() {
+ return messages[messages.length-1].trailerLength();
+ }
+
public int countMessages() {
return messages.length;
}
@@ -55,10 +67,11 @@
* @param finished whether the packet has finished sending. If false,
* we are still sending it.
* @param successfullySentBytes the number of bytes successfully sent.
+ * @param tw the TrailerWriter attached to the final message, if necessary
* Can be zero. Bytes after this number might have been sent, but we got
* an error and can't be sure.
*/
- public void jobDone(boolean finished, int successfullySentBytes, Peer sentTo) {
+ public void jobDone(boolean finished, int successfullySentBytes, Peer sentTo,
TrailerWriter tw) {
int msgStartOffset = 0;
// Could unfold this a bit by keeping the offset in the array on the object
PeerPacketMessage prev = null;
@@ -85,7 +98,7 @@
int diff = successfullySentBytes - msgStartOffset;
if(finished || diff >= prevLen) {
if(diff >= prevLen) {
- prev.notifySuccess();
+ prev.notifySuccess(tw);
} else {
String excuse = "Sent "+
(diff>=0 ? diff : 0) +
@@ -106,7 +119,7 @@
boolean success = (successfullySentBytes == encryptedData.length);
if(finished || success) {
if(success)
- prev.notifySuccess();
+ prev.notifySuccess(tw);
else {
int diff = successfullySentBytes - msgStartOffset;
String excuse = "Sent "+
Index: PeerPacketMessage.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/PeerPacketMessage.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PeerPacketMessage.java 4 Oct 2003 01:16:56 -0000 1.2
+++ PeerPacketMessage.java 7 Oct 2003 00:47:30 -0000 1.3
@@ -92,7 +92,7 @@
/**
* Notify the callback that we successfully sent the message.
*/
- public void notifySuccess() {
+ public void notifySuccess(TrailerWriter tw) {
if(finished) {
Core.logger.log(this, "notifySuccess on "+this+" already finished!",
Logger.ERROR);
@@ -101,6 +101,7 @@
finished = true;
if(cb == null) return;
try {
+ if(tw != null) cb.setTrailerWriter(tw);
cb.succeeded();
} catch (Throwable t) {
Core.logger.log(this, toString()+".notifySuccess() caught "+t,
Index: Version.java
===================================================================
RCS file: /cvsroot/freenet/freenet/src/freenet/Version.java,v
retrieving revision 1.414
retrieving revision 1.415
diff -u -r1.414 -r1.415
--- Version.java 6 Oct 2003 15:20:53 -0000 1.414
+++ Version.java 7 Oct 2003 00:47:30 -0000 1.415
@@ -18,7 +18,7 @@
public static String protocolVersion = "1.46";
/** The build number of the current revision */
- public static final int buildNumber = 6221;
+ public static final int buildNumber = 6222;
// 6028: may 3; ARK retrieval fix
public static final int ignoreBuildsAfter = 6500;
_______________________________________________
cvs mailing list
[EMAIL PROTECTED]
http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs