]> mj.ucw.cz Git - bex.git/commitdiff
Updates of job status are atomic
authorMartin Mares <mj@ucw.cz>
Mon, 31 Oct 2011 13:47:54 +0000 (14:47 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 31 Oct 2011 13:47:54 +0000 (14:47 +0100)
TODO
lib/BEX/Queue.pm

diff --git a/TODO b/TODO
index 637c805c96db6aa8cab16f510a09af92fd5ca901..e6fca02d2e93777661a3479c72b2cadfdb49e3f8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -3,5 +3,3 @@
 - bprun --curses
 - Terminology: machine vs. host
 - Detector of orphans (unused queue dirs, jobs on non-existent machines, non-queued jobs)
-- job failed => give a more explanatory message
-- write_job_status should be atomic
index 84e8590d85a075a1c475a6f595d3588b68d80c6b..355f6491b03a67516087031522f14db735790582 100644 (file)
@@ -151,11 +151,12 @@ sub read_job_status($$$) {
 sub write_job_status($$$$) {
        my ($queue, $machine, $jid, $stat) = @_;
        my $sf = $queue->status_file($machine, $jid);
-       open S, '>', $sf or die "Cannot create $sf: $!";
+       open S, '>', "$sf.$$" or die "Cannot create $sf.$$: $!";
        for my $k (sort keys %$stat) {
                print S "$k: ", $stat->{$k}, "\n" if defined $stat->{$k};
        }
        close S;
+       rename "$sf.$$", $sf or die "Cannot rename $sf.$$ to $sf: $!";
 }
 
 sub lock_name($$$) {