diff options
author | Simon Rettberg | 2015-09-28 18:01:53 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-09-28 18:01:53 +0200 |
commit | 2469aaed02281c58173d3cfbde88482690c3d6af (patch) | |
tree | 223fba7da5c455809794545060aed2e1292b293b /src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java | |
parent | [mount-store] Beefed up retry logic (diff) | |
download | tmlite-bwlp-2469aaed02281c58173d3cfbde88482690c3d6af.tar.gz tmlite-bwlp-2469aaed02281c58173d3cfbde88482690c3d6af.tar.xz tmlite-bwlp-2469aaed02281c58173d3cfbde88482690c3d6af.zip |
Allow only one running instance of critical tasks
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java')
-rw-r--r-- | src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java b/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java index 70ae195..f3ebc82 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java +++ b/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.commons.io.FileUtils; import org.apache.log4j.Logger; @@ -29,6 +30,8 @@ public class CompileIPxe extends AbstractTask private Output status = new Output(); + private static AtomicBoolean isRunning = new AtomicBoolean(); + @Override protected boolean initTask() { @@ -49,12 +52,20 @@ public class CompileIPxe extends AbstractTask @Override protected boolean execute() { - boolean ret = true; - if ( !updateMenu() ) - ret = false; - if ( !updateIpxe() ) - ret = false; - return ret; + if (!isRunning.compareAndSet( false, true )) { + status.error = "Another operation is already in progress."; + return false; + } + try { + boolean ret = true; + if ( !updateMenu() ) + ret = false; + if ( !updateIpxe() ) + ret = false; + return ret; + } finally { + isRunning.set( false ); + } } private boolean updateMenu() |