From: Martin Mares Date: Wed, 15 Feb 2012 22:03:17 +0000 (+0100) Subject: Use configured home and library dirs consistently and carefully X-Git-Tag: v3.0~20 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=e714edbb2b247daf3195be0361765b9e7cf53c01;p=bex.git Use configured home and library dirs consistently and carefully --- diff --git a/bex b/bex index faf9de7..02084e0 100755 --- a/bex +++ b/bex @@ -43,6 +43,9 @@ if (!-d $bex_home) { if (!-d "$bex_home/BEX") { die "BEX home directory $bex_home does not contain the BEX subdirectory.\n"; } +if (!-f "$bex_lib/perl/BEX.pm") { + die "BEX library directory $bex_lib misconfigured.\n"; +} @ARGV or die "Missing subcommand.\n"; my $sub = shift @ARGV; diff --git a/lib/perl/BEX/Config.pm b/lib/perl/BEX/Config.pm index 6a2efdd..e3cf277 100644 --- a/lib/perl/BEX/Config.pm +++ b/lib/perl/BEX/Config.pm @@ -16,16 +16,16 @@ our %machines = ( ); # Home directory in which everything resides -our $bex_home = $ENV{"BEX_HOME"} // "."; +our $home = $ENV{"BEX_HOME"} // "."; # Configuration directory -our $bex_cf_dir = $bex_home . "/BEX"; +our $cf_dir = $home . "/BEX"; # A file whose contents should be prepended before the job. Should start with the "#!" line. -our $job_prolog = $bex_cf_dir . '/prolog'; +our $job_prolog = $cf_dir . '/prolog'; # A file whose contents should be appended to the job -our $job_epilog = $bex_cf_dir . '/epilog'; +our $job_epilog = $cf_dir . '/epilog'; # Keep history of successfully completed jobs our $keep_history = 1; @@ -89,6 +89,6 @@ sub host_name($) { return $machines{$mach}->{'Host'} // $mach; } -require $bex_cf_dir . '/config'; +require $cf_dir . '/config'; 42; diff --git a/lib/perl/BEX/Job.pm b/lib/perl/BEX/Job.pm index a459cc3..920685b 100644 --- a/lib/perl/BEX/Job.pm +++ b/lib/perl/BEX/Job.pm @@ -79,8 +79,9 @@ sub dump($) { sub save($;$) { my ($job, $fn) = @_; - -d "tmp" or mkdir "tmp" or die "Cannot create directory tmp: $!"; - $fn //= 'tmp/' . $job->id; + my $tmp = $BEX::Config::home . "/tmp"; + -d $tmp or mkdir $tmp or die "Cannot create directory $tmp: $!"; + $fn //= $tmp . '/' . $job->id; open T, '>', $fn or die "Cannot create $fn: $!"; for my $k (sort grep { /^[A-Z]/ } keys %$job) { print T "$k: ", $job->{$k}, "\n"; diff --git a/lib/perl/BEX/Queue.pm b/lib/perl/BEX/Queue.pm index 6ae9240..b716509 100644 --- a/lib/perl/BEX/Queue.pm +++ b/lib/perl/BEX/Queue.pm @@ -15,12 +15,14 @@ use POSIX (); sub new($;$) { my ($class, $name) = @_; $name //= 'queue'; - -d $name or die "Queue directory $name does not exist\n"; + my $path = $BEX::Config::home . '/' . $name; + -d $path or die "Queue directory $path does not exist\n"; for my $d ("hosts", "jobs") { - -d "$name/$d" or mkdir "$name/$d" or die "Cannot create directory $name/$d: $!"; + -d "$path/$d" or mkdir "$path/$d" or die "Cannot create directory $path/$d: $!"; } my $queue = { 'Name' => $name, + 'Path' => $path, 'MetaCache' => {}, }; return bless $queue; @@ -38,7 +40,7 @@ sub log($$$$;$) { my $m = join(" ", $t, $mach, $jid, $stat); $m .= " $msg" if defined $msg; - my $fh = $queue->{'LogFH'} //= new IO::File $queue->{'Name'} . '/log', '>>' or die "Cannot open log: $!"; + my $fh = $queue->{'LogFH'} //= new IO::File $queue->{'Path'} . '/log', '>>' or die "Cannot open log: $!"; print $fh "$m\n"; # Append to the per-job log file @@ -50,7 +52,7 @@ sub log($$$$;$) { sub host_dir($$) { my ($queue, $machine) = @_; - return $queue->{'Name'} . '/hosts/' . $machine; + return $queue->{'Path'} . '/hosts/' . $machine; } sub queue_file($$) { @@ -70,7 +72,7 @@ sub temp_file($$) { sub job_file($$) { my ($queue, $jid) = @_; - return $queue->{'Name'} . '/jobs/' . $jid. '.job'; + return $queue->{'Path'} . '/jobs/' . $jid. '.job'; } sub enqueue($$$) { @@ -104,8 +106,8 @@ sub scan($$) { sub remove($$;$) { my ($queue, $machine, $jid, $force_remove) = @_; if ($BEX::Config::keep_history && !$force_remove) { - my $s = $queue->{'Name'} . '/hosts/' . $machine; - my $d = $queue->{'Name'} . '/history/' . $machine; + my $s = $queue->{'Path'} . '/hosts/' . $machine; + my $d = $queue->{'Path'} . '/history/' . $machine; File::Path::mkpath($d); for my $suff ('job', 'stat', 'log') { my $src = "$s/$jid.$suff"; @@ -178,7 +180,7 @@ sub update_job_status($$$$;$) { sub lock_name($$$) { my ($queue, $machine, $jid) = @_; - my $lock = $queue->{'Name'}; + my $lock = $queue->{'Path'}; if (defined $jid) { $lock .= "/hosts/$machine/$jid.lock"; } elsif (defined $machine) {