I think we need Computers to treat NodeMonitors as something special. We can have Computers remember the set of NodeMonitors that raising a red flag, and isOffline() would check if this set is empty. This leaves "temporarily offline" concept for administrator's use alone.
This also means NodeMonitors should have a backdoor to raise/drop this red flag, and existing NodeMonitors should be modified to use this mechanism so that automatic on/off and administrative manual on/off will not collide with each other.
I think such a distinction is the only way to make it work correctly in the presence of multiple node monitors reporting problems.
Code changed in jenkins
User: Andrew Bayer
Path:
changelog.html
core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java
core/src/main/java/hudson/node_monitors/AbstractNodeMonitorDescriptor.java
core/src/main/resources/hudson/node_monitors/Messages.properties
http://jenkins-ci.org/commit/jenkins/e38e687d5b66238f406d1e3642a3d5f6a02aaeb2
Log:
[FIXED JENKINS-2548] Slaves taken offline for low disk space will now
come back online when disk space becomes available.