From e765cc1ed217c063766f0f3abf0112edb432df3d Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 31 Oct 2011 14:47:54 +0100 Subject: [PATCH] Updates of job status are atomic --- TODO | 2 -- lib/BEX/Queue.pm | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) 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($$$) { -- 2.39.2