2004-10-05 jrandom
* Display how much time is left before the graceful shutdown is complete. * Debug some improperly failed messages on timeout or disconnection.
This commit is contained in:
@ -0,0 +1,34 @@
|
|||||||
|
package net.i2p.router.web;
|
||||||
|
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
|
import net.i2p.router.RouterContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple helper to query the appropriate router for data necessary to render
|
||||||
|
* any emergency notices
|
||||||
|
*/
|
||||||
|
public class NoticeHelper {
|
||||||
|
private RouterContext _context;
|
||||||
|
/**
|
||||||
|
* Configure this bean to query a particular router context
|
||||||
|
*
|
||||||
|
* @param contextId begging few characters of the routerHash, or null to pick
|
||||||
|
* the first one we come across.
|
||||||
|
*/
|
||||||
|
public void setContextId(String contextId) {
|
||||||
|
try {
|
||||||
|
_context = ContextHelper.getContext(contextId);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
t.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSystemNotice() {
|
||||||
|
if (_context.router().gracefulShutdownInProgress()) {
|
||||||
|
return "Graceful shutdown in "
|
||||||
|
+ DataHelper.formatDuration(_context.router().getShutdownTimeRemaining());
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -25,3 +25,7 @@
|
|||||||
<jsp:setProperty name="navhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
<jsp:setProperty name="navhelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||||
<jsp:getProperty name="navhelper" property="clientAppLinks" />
|
<jsp:getProperty name="navhelper" property="clientAppLinks" />
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
|
<jsp:useBean class="net.i2p.router.web.NoticeHelper" id="noticehelper" scope="request" />
|
||||||
|
<jsp:setProperty name="noticehelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
|
||||||
|
<b><jsp:getProperty name="noticehelper" property="systemNotice" /></b>
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
$Id: history.txt,v 1.32 2004/10/04 12:30:23 jrandom Exp $
|
$Id: history.txt,v 1.33 2004/10/05 10:38:37 jrandom Exp $
|
||||||
|
|
||||||
|
2004-10-05 jrandom
|
||||||
|
* Display how much time is left before the graceful shutdown is complete.
|
||||||
|
* Debug some improperly failed messages on timeout or disconnection.
|
||||||
|
|
||||||
2004-10-05 jrandom
|
2004-10-05 jrandom
|
||||||
* Don't go into a fast busy if an I2PTunnel 'server' is explicitly killed
|
* Don't go into a fast busy if an I2PTunnel 'server' is explicitly killed
|
||||||
|
@ -660,6 +660,14 @@ public class Router {
|
|||||||
public boolean gracefulShutdownInProgress() {
|
public boolean gracefulShutdownInProgress() {
|
||||||
return (null != _config.getProperty(PROP_SHUTDOWN_IN_PROGRESS));
|
return (null != _config.getProperty(PROP_SHUTDOWN_IN_PROGRESS));
|
||||||
}
|
}
|
||||||
|
/** How long until the graceful shutdown will kill us? */
|
||||||
|
public long getShutdownTimeRemaining() {
|
||||||
|
long exp = _context.tunnelManager().getLastParticipatingExpiration();
|
||||||
|
if (exp < 0)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return exp - _context.clock().now();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple thread that sits and waits forever, managing the
|
* Simple thread that sits and waits forever, managing the
|
||||||
|
@ -67,4 +67,7 @@ public interface TunnelManagerFacade extends Service {
|
|||||||
public int getFreeTunnelCount();
|
public int getFreeTunnelCount();
|
||||||
/** how many outbound tunnels do we have available? */
|
/** how many outbound tunnels do we have available? */
|
||||||
public int getOutboundTunnelCount();
|
public int getOutboundTunnelCount();
|
||||||
|
|
||||||
|
/** When does the last tunnel we are participating in expire? */
|
||||||
|
public long getLastParticipatingExpiration();
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,8 @@ public class TCPConnection {
|
|||||||
if (_socket != null) try { _socket.close(); } catch (IOException ioe) {}
|
if (_socket != null) try { _socket.close(); } catch (IOException ioe) {}
|
||||||
List msgs = clearPendingMessages();
|
List msgs = clearPendingMessages();
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage msg = (OutNetMessage)msgs.get(0);
|
OutNetMessage msg = (OutNetMessage)msgs.get(i);
|
||||||
|
msg.timestamp("closeConnection");
|
||||||
_transport.afterSend(msg, false, true, -1);
|
_transport.afterSend(msg, false, true, -1);
|
||||||
}
|
}
|
||||||
_context.profileManager().commErrorOccurred(_ident.getHash());
|
_context.profileManager().commErrorOccurred(_ident.getHash());
|
||||||
|
@ -274,7 +274,9 @@ public class TCPTransport extends TransportImpl {
|
|||||||
_context.shitlist().shitlistRouter(con.getAttemptedPeer(), "Changed identities");
|
_context.shitlist().shitlistRouter(con.getAttemptedPeer(), "Changed identities");
|
||||||
if (changedMsgs != null) {
|
if (changedMsgs != null) {
|
||||||
for (int i = 0; i < changedMsgs.size(); i++) {
|
for (int i = 0; i < changedMsgs.size(); i++) {
|
||||||
afterSend((OutNetMessage)changedMsgs.get(i), false, false, 0);
|
OutNetMessage cur = (OutNetMessage)changedMsgs.get(i);
|
||||||
|
cur.timestamp("changedIdents");
|
||||||
|
afterSend(cur, false, false, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -587,6 +589,7 @@ public class TCPTransport extends TransportImpl {
|
|||||||
_context.netDb().fail(peer);
|
_context.netDb().fail(peer);
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
||||||
|
cur.timestamp("no TCP addresses");
|
||||||
afterSend(cur, false, false, 0);
|
afterSend(cur, false, false, 0);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@ -600,6 +603,7 @@ public class TCPTransport extends TransportImpl {
|
|||||||
_context.netDb().fail(peer);
|
_context.netDb().fail(peer);
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
||||||
|
cur.timestamp("invalid addresses");
|
||||||
afterSend(cur, false, false, 0);
|
afterSend(cur, false, false, 0);
|
||||||
}
|
}
|
||||||
continue; // invalid
|
continue; // invalid
|
||||||
@ -613,6 +617,7 @@ public class TCPTransport extends TransportImpl {
|
|||||||
_context.netDb().fail(peer);
|
_context.netDb().fail(peer);
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
||||||
|
cur.timestamp("points at us");
|
||||||
afterSend(cur, false, false, 0);
|
afterSend(cur, false, false, 0);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@ -624,6 +629,7 @@ public class TCPTransport extends TransportImpl {
|
|||||||
_context.netDb().fail(peer);
|
_context.netDb().fail(peer);
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
||||||
|
cur.timestamp("points at our ip");
|
||||||
afterSend(cur, false, false, 0);
|
afterSend(cur, false, false, 0);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@ -637,6 +643,7 @@ public class TCPTransport extends TransportImpl {
|
|||||||
_context.netDb().fail(peer);
|
_context.netDb().fail(peer);
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
OutNetMessage cur = (OutNetMessage)msgs.get(i);
|
||||||
|
cur.timestamp("points at an illegal address");
|
||||||
afterSend(cur, false, false, 0);
|
afterSend(cur, false, false, 0);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@ -675,6 +682,7 @@ public class TCPTransport extends TransportImpl {
|
|||||||
// connectionEstablished clears them otherwise)
|
// connectionEstablished clears them otherwise)
|
||||||
for (int i = 0; i < msgs.size(); i++) {
|
for (int i = 0; i < msgs.size(); i++) {
|
||||||
OutNetMessage msg = (OutNetMessage)msgs.get(i);
|
OutNetMessage msg = (OutNetMessage)msgs.get(i);
|
||||||
|
msg.timestamp("establishmentComplete(failed)");
|
||||||
afterSend(msg, false);
|
afterSend(msg, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,5 +234,15 @@ public class PoolingTunnelManagerFacade implements TunnelManagerFacade {
|
|||||||
if (_pool != null)
|
if (_pool != null)
|
||||||
_pool.renderStatusHTML(out);
|
_pool.renderStatusHTML(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getLastParticipatingExpiration() {
|
||||||
|
long last = -1;
|
||||||
|
for (Iterator iter = _pool.getParticipatingTunnels().iterator(); iter.hasNext(); ) {
|
||||||
|
TunnelId id = (TunnelId)iter.next();
|
||||||
|
TunnelInfo info = _pool.getParticipatingTunnel(id);
|
||||||
|
if ( (info != null) && (info.getSettings().getExpiration() > last) )
|
||||||
|
last = info.getSettings().getExpiration();
|
||||||
|
}
|
||||||
|
return last;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user