diff --git a/changelog.html b/changelog.html index 97fd30b477..b7ef58be40 100644 --- a/changelog.html +++ b/changelog.html @@ -43,6 +43,8 @@ Upcoming changes
  • Fixed a bug in crontab "day of week" handling in locales where a week starts from Monday. (issue 8401) +
  • + If a master fails to ping a slave, it should be hard-disconnected. diff --git a/core/src/main/java/hudson/TcpSlaveAgentListener.java b/core/src/main/java/hudson/TcpSlaveAgentListener.java index d9c37f9ece..990ebd28b4 100644 --- a/core/src/main/java/hudson/TcpSlaveAgentListener.java +++ b/core/src/main/java/hudson/TcpSlaveAgentListener.java @@ -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) { diff --git a/core/src/main/java/hudson/node_monitors/ResponseTimeMonitor.java b/core/src/main/java/hudson/node_monitors/ResponseTimeMonitor.java index 2b2873a8c6..764056db59 100644 --- a/core/src/main/java/hudson/node_monitors/ResponseTimeMonitor.java +++ b/core/src/main/java/hudson/node_monitors/ResponseTimeMonitor.java @@ -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; } diff --git a/core/src/main/resources/hudson/node_monitors/Messages.properties b/core/src/main/resources/hudson/node_monitors/Messages.properties index dd39f4e857..1aa5daa78c 100644 --- a/core/src/main/resources/hudson/node_monitors/Messages.properties +++ b/core/src/main/resources/hudson/node_monitors/Messages.properties @@ -25,7 +25,7 @@ ClockMonitor.DisplayName=Clock Difference DiskSpaceMonitor.MarkedOffline=Making {0} offline temporarily due to the lack of disk space DiskSpaceMonitor.DisplayName=Free Disk Space ResponseTimeMonitor.DisplayName=Response Time -ResponseTimeMonitor.MarkedOffline=Making {0} offline temporarily because it''s not responding +ResponseTimeMonitor.MarkedOffline=Making {0} offline because it''s not responding ResponseTimeMonitor.TimeOut=Time out for last {0} try SwapSpaceMonitor.DisplayName=Free Swap Space TemporarySpaceMonitor.DisplayName=Free Temp Space \ No newline at end of file