]> mj.ucw.cz Git - bex.git/commitdiff
Use configured home and library dirs consistently and carefully
authorMartin Mares <mj@ucw.cz>
Wed, 15 Feb 2012 22:03:17 +0000 (23:03 +0100)
committerMartin Mares <mj@ucw.cz>
Wed, 15 Feb 2012 22:03:17 +0000 (23:03 +0100)
bex
lib/perl/BEX/Config.pm
lib/perl/BEX/Job.pm
lib/perl/BEX/Queue.pm

diff --git a/bex b/bex
index faf9de71ef1451b96195d13713c8b8884411a00b..02084e02d0e305595ea4179427b7e5317ea3a1c9 100755 (executable)
--- 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;
index 6a2efdd45be6d97ddb815e9d3cd8f73acb734a58..e3cf2779559c5c877d40e0108ac638880797d082 100644 (file)
@@ -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;
index a459cc3a4544625883902ca1b23df0688b110635..920685b7225736d23eb9db50e0fe67dca49bd1e7 100644 (file)
@@ -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";
index 6ae9240c311f13b08a57915be28603b85b98d91f..b7165098cf4171cbd6ee2d4a5726c08884eaad9a 100644 (file)
@@ -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) {