If a master fails to ping a slave, it should be hard-disconnected.

This commit is contained in:
Kohsuke Kawaguchi committed 2011-01-24 13:40:59 -08:00
1 parent 3356f4da29
commit 52c21f2df7
4 files changed
+17 -2

No files matched your search

@@ -116,6 +116,12 @@ public final class TcpSlaveAgentListener extends Thread {
// the loop eventually terminates when the socket is closed.
while (true) {
Socket s = serverSocket.accept();
// this prevents a connection from silently terminated by the router in between or the other peer
// and that goes without unnoticed. However, the time out is often very long (for example 2 hours
// by default in Linux) that this alone is enough to prevent that.
s.setKeepAlive(true);
new ConnectionHandler(s).start();
}
} catch (IOException e) {
@@ -25,6 +25,7 @@ package hudson.node_monitors;
import hudson.Util;
import hudson.Extension;
import hudson.model.Descriptor.FormException;
import hudson.slaves.OfflineCause;
import hudson.model.Computer;
import hudson.remoting.Callable;
@@ -67,8 +68,14 @@ public class ResponseTimeMonitor extends NodeMonitor {
d = new Data(old,-1L);
}
if(d.hasTooManyTimeouts() && markOffline(c,d))
if(d.hasTooManyTimeouts() && !isIgnored()) {
// unlike other monitors whose failure still allow us to communicate with the slave,
// the failure in this monitor indicates that we are just unable to make any requests
// to this slave. So we should severe the connection, as opposed to marking it temporarily
// off line, which still keeps the underlying channel open.
c.disconnect(d);
LOGGER.warning(Messages.ResponseTimeMonitor_MarkedOffline(c.getName()));
}
return d;
}