From: Martin Mares Date: Mon, 31 Oct 2011 13:47:54 +0000 (+0100) Subject: Updates of job status are atomic X-Git-Tag: v3.0~38 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=e765cc1ed217c063766f0f3abf0112edb432df3d;p=bex.git Updates of job status are atomic --- diff --git a/TODO b/TODO index 637c805..e6fca02 100644 --- 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 diff --git a/lib/BEX/Queue.pm b/lib/BEX/Queue.pm index 84e8590..355f649 100644 --- a/lib/BEX/Queue.pm +++ b/lib/BEX/Queue.pm @@ -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($$$) {