From 8caa1a04f2ac625cec0af164590b5f6e55e55908 Mon Sep 17 00:00:00 2001 From: Christoph Kutzinski Date: Tue, 25 Jun 2013 21:48:35 +0200 Subject: [PATCH] Minimal refactoring for a8c3a031c068d3a356c105af42c2819dc3962124 IMO this needs further refactoring - respect separation of concerns: it's not AbstractProject's call to trigger a node offline --- .../java/hudson/model/AbstractProject.java | 2 +- .../AbstractDiskSpaceMonitor.java | 29 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index f996d78cf4..9e032b2bd6 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -1376,7 +1376,7 @@ public abstract class AbstractProject

,R extends A workspace.mkdirs(); } catch (IOException e) { // Can't create workspace dir - Is slave disk full ? - new DiskSpaceMonitor().data(build.getBuiltOn().toComputer()); + new DiskSpaceMonitor().markNodeOfflineIfDiskspaceIsTooLow(build.getBuiltOn().toComputer()); throw e; } diff --git a/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java b/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java index e667cd5db5..be90b91d0e 100644 --- a/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java +++ b/core/src/main/java/hudson/node_monitors/AbstractDiskSpaceMonitor.java @@ -2,6 +2,9 @@ package hudson.node_monitors; import hudson.model.Computer; import hudson.node_monitors.DiskSpaceMonitorDescriptor.DiskSpace; + +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.DataBoundConstructor; import java.text.ParseException; @@ -40,18 +43,32 @@ public abstract class AbstractDiskSpaceMonitor extends NodeMonitor { @Override public Object data(Computer c) { - DiskSpace size = (DiskSpace) super.data(c); + DiskSpace size = markNodeOfflineIfDiskspaceIsTooLow(c); + + // mark online (again), if free space is over threshold + if(size!=null && size.size > getThresholdBytes() && c.isOffline() && c.getOfflineCause() instanceof DiskSpace) + if(this.getClass().equals(((DiskSpace)c.getOfflineCause()).getTrigger())) + if(getDescriptor().markOnline(c)) { + LOGGER.warning(Messages.DiskSpaceMonitor_MarkedOnline(c.getName())); + } + return size; + } + + /** + * Marks the given node as offline if free disk space is below the configured threshold. + * @param c the node + * @return the free space + * @since 1.521 + */ + @Restricted(NoExternalUse.class) + public DiskSpace markNodeOfflineIfDiskspaceIsTooLow(Computer c) { + DiskSpace size = (DiskSpace) super.data(c); if(size!=null && size.size < getThresholdBytes()) { size.setTriggered(this.getClass(), true); if(getDescriptor().markOffline(c,size)) { LOGGER.warning(Messages.DiskSpaceMonitor_MarkedOffline(c.getName())); } } - if(size!=null && size.size > getThresholdBytes() && c.isOffline() && c.getOfflineCause() instanceof DiskSpace) - if(this.getClass().equals(((DiskSpace)c.getOfflineCause()).getTrigger())) - if(getDescriptor().markOnline(c)) { - LOGGER.warning(Messages.DiskSpaceMonitor_MarkedOnline(c.getName())); - } return size; } -- GitLab