discard the data ASAP, and make sure we access only the safely cached snippets of it as necessary

This commit is contained in:
jrandom
2004-06-20 00:59:33 +00:00
committed by zzz
parent 1ca615da77
commit bc0a4ee68d
2 changed files with 43 additions and 16 deletions

View File

@ -75,5 +75,7 @@ public class GetBidsJob extends JobImpl {
} }
_context.profileManager().messageFailed(_msg.getTarget().getIdentity().getHash()); _context.profileManager().messageFailed(_msg.getTarget().getIdentity().getHash());
_msg.discardData();
} }
} }

View File

@ -60,8 +60,12 @@ public abstract class TransportImpl implements Transport {
} }
public void afterSend(OutNetMessage msg, boolean sendSuccessful) { public void afterSend(OutNetMessage msg, boolean sendSuccessful) {
afterSend(msg, sendSuccessful, true);
}
public void afterSend(OutNetMessage msg, boolean sendSuccessful, boolean allowRequeue) {
boolean log = false; boolean log = false;
msg.timestamp("afterSend(" + sendSuccessful + ")"); msg.timestamp("afterSend(" + sendSuccessful + ")");
if (!sendSuccessful) if (!sendSuccessful)
msg.transportFailed(getStyle()); msg.transportFailed(getStyle());
@ -76,26 +80,29 @@ public abstract class TransportImpl implements Transport {
if (sendSuccessful) { if (sendSuccessful) {
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("Send message " + msg.getMessage().getClass().getName() + " to " _log.debug("Send message " + msg.getMessageType() + " to "
+ msg.getTarget().getIdentity().getHash().toBase64() + " with transport " + msg.getTarget().getIdentity().getHash().toBase64() + " with transport "
+ getStyle() + " successfully"); + getStyle() + " successfully");
Job j = msg.getOnSendJob(); Job j = msg.getOnSendJob();
if (j != null) if (j != null)
_context.jobQueue().addJob(j); _context.jobQueue().addJob(j);
log = true; log = true;
msg.discardData();
} else { } else {
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info("Failed to send message " + msg.getMessage().getClass().getName() _log.info("Failed to send message " + msg.getMessageType()
+ " to " + msg.getTarget().getIdentity().getHash().toBase64() + " to " + msg.getTarget().getIdentity().getHash().toBase64()
+ " with transport " + getStyle() + " (details: " + msg + ")"); + " with transport " + getStyle() + " (details: " + msg + ")");
if (allowRequeue) {
if ( (msg.getExpiration() <= 0) || (msg.getExpiration() > _context.clock().now()) ) { if ( (msg.getExpiration() <= 0) || (msg.getExpiration() > _context.clock().now()) ) {
// this may not be the last transport available - keep going // this may not be the last transport available - keep going
_context.outNetMessagePool().add(msg); _context.outNetMessagePool().add(msg);
// don't discard the data yet!
} else { } else {
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info("No more time left (" + new Date(msg.getExpiration()) _log.info("No more time left (" + new Date(msg.getExpiration())
+ ", expiring without sending successfully the " + ", expiring without sending successfully the "
+ msg.getMessage().getClass().getName()); + msg.getMessageType());
if (msg.getOnFailedSendJob() != null) if (msg.getOnFailedSendJob() != null)
_context.jobQueue().addJob(msg.getOnFailedSendJob()); _context.jobQueue().addJob(msg.getOnFailedSendJob());
MessageSelector selector = msg.getReplySelector(); MessageSelector selector = msg.getReplySelector();
@ -103,13 +110,29 @@ public abstract class TransportImpl implements Transport {
_context.messageRegistry().unregisterPending(msg); _context.messageRegistry().unregisterPending(msg);
} }
log = true; log = true;
msg.discardData();
}
} else {
if (_log.shouldLog(Log.INFO))
_log.info("Failed and no requeue allowed for a "
+ msg.getMessageSize() + " byte "
+ msg.getMessageType() + " message");
if (msg.getOnFailedSendJob() != null)
_context.jobQueue().addJob(msg.getOnFailedSendJob());
MessageSelector selector = msg.getReplySelector();
if (selector != null)
_context.messageRegistry().unregisterPending(msg);
log = true;
msg.discardData();
} }
} }
if (log) { if (log) {
I2NPMessage dmsg = msg.getMessage(); String type = msg.getMessageType();
String type = dmsg.getClass().getName(); _context.messageHistory().sendMessage(type, msg.getMessageId(),
_context.messageHistory().sendMessage(type, dmsg.getUniqueId(), dmsg.getMessageExpiration(), msg.getTarget().getIdentity().getHash(), sendSuccessful); new Date(msg.getExpiration()),
msg.getTarget().getIdentity().getHash(),
sendSuccessful);
} }
long now = _context.clock().now(); long now = _context.clock().now();
@ -123,11 +146,13 @@ public abstract class TransportImpl implements Transport {
if (allTime > 60*1000) { if (allTime > 60*1000) {
// WTF!!@# // WTF!!@#
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("WTF, more than a minute slow? " + msg.getMessage().getClass().getName() _log.warn("WTF, more than a minute slow? " + msg.getMessageType()
+ " of id " + msg.getMessage().getUniqueId() + " (send begin on " + " of id " + msg.getMessageId() + " (send begin on "
+ new Date(msg.getSendBegin()) + " / created on " + new Date(msg.getSendBegin()) + " / created on "
+ new Date(msg.getCreated()) + "): " + msg, msg.getCreatedBy()); + new Date(msg.getCreated()) + "): " + msg, msg.getCreatedBy());
_context.messageHistory().messageProcessingError(msg.getMessage().getUniqueId(), msg.getMessage().getClass().getName(), "Took too long to send [" + allTime + "ms]"); _context.messageHistory().messageProcessingError(msg.getMessageId(),
msg.getMessageType(),
"Took too long to send [" + allTime + "ms]");
} }
} }