diff --git a/history.txt b/history.txt index 67660e993e..02b562bdba 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,10 @@ +2013-01-12 zzz + * EepGet: Don't retry if proxy isn't there + * I2CP: Failsafe check for delivery job requeueing forever (ticket #819) + * jobs.jsp: Add table of pending jobs + * NetDB: Split up files into subdirectories + * SAM: Force i2cp.messageReliability=None (ticket #819) + 2013-01-02 zzz * DataHelper: new getASCII() method * DataStructures: @@ -6,7 +13,7 @@ * I2CP: - Remove unused equals() methods for message classes - Remove static logs - - Fix leak if nonce = 0 but reliability != none + - Fix leak if nonce = 0 but reliability != none (ticket #819) - More work on failure codes (ticket #788) * Logs: Fix setting log filename (ticket #805) * SAM: Synchronize dissector diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index f6e6df3a5c..4e28a2c8d2 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 4; + public final static long BUILD = 5; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index bce06ab811..e13b2bd717 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -628,11 +628,13 @@ class ClientConnectionRunner { * */ private final static long REQUEUE_DELAY = 500; + private static final int MAX_REQUEUE = 60; // 30 sec. private class MessageDeliveryStatusUpdate extends JobImpl { private final MessageId _messageId; private final int _status; private long _lastTried; + private int _requeueCount; /** * Do not use for status = STATUS_SEND_ACCEPTED; use ackSendMessage() for that. @@ -662,12 +664,20 @@ class ClientConnectionRunner { msg.setStatus(_status); if (!alreadyAccepted(_messageId)) { - _log.warn("Almost send an update for message " + _messageId + " to " + if (_requeueCount++ > MAX_REQUEUE) { + // bug requeueing forever? failsafe + _log.error("Abandon update for message " + _messageId + " to " + MessageStatusMessage.getStatusString(msg.getStatus()) - + " for session " + _sessionId.getSessionId() + + " for session " + _sessionId.getSessionId()); + } else { + if (_log.shouldLog(Log.WARN)) + _log.warn("Almost send an update for message " + _messageId + " to " + + MessageStatusMessage.getStatusString(msg.getStatus()) + + " for session " + _sessionId.getSessionId() + " before they knew the messageId! delaying .5s"); - _lastTried = _context.clock().now(); - requeue(REQUEUE_DELAY); + _lastTried = _context.clock().now(); + requeue(REQUEUE_DELAY); + } return; }