[2/6] testbot/build: Clean up FatalError() and stop abusing it.

Francois Gouget fgouget at codeweavers.com
Wed Mar 13 10:51:01 CDT 2013


If not given an error file and a task it's equivalent to a simple LogMsg() + exit().
---
 testbot/bin/WineRunBuild.pl    |   91 +++++++++++++++++++---------------------
 testbot/bin/WineRunReconfig.pl |   85 ++++++++++++++++++-------------------
 testbot/bin/WineRunTask.pl     |   90 ++++++++++++++++++---------------------
 3 files changed, 125 insertions(+), 141 deletions(-)

diff --git a/testbot/bin/WineRunBuild.pl b/testbot/bin/WineRunBuild.pl
index 728777a..7fd87b2 100755
--- a/testbot/bin/WineRunBuild.pl
+++ b/testbot/bin/WineRunBuild.pl
@@ -4,6 +4,7 @@
 # See the bin/build/Build.pl script.
 #
 # Copyright 2009 Ge van Geldorp
+# Copyright 2013 Francois Gouget
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -41,38 +42,29 @@ use WineTestBot::Jobs;
 use WineTestBot::Log;
 use WineTestBot::Engine::Notify;
 
-sub FatalError
+sub FatalError($$$$)
 {
-  my ($ErrMessage, $RptFileName, $Job, $Step, $Task) = @_;
-
-  my $JobKey = defined($Job) ? $Job->GetKey() : "0";
-  my $StepKey = defined($Step) ? $Step->GetKey() : "0";
-  my $TaskKey = defined($Task) ? $Task->GetKey() : "0";
+  my ($ErrMessage, $FullErrFileName, $Job, $Task) = @_;
 
+  my ($JobKey, $StepKey, $TaskKey) = @{$Task->GetMasterKey()};
   LogMsg "$JobKey/$StepKey/$TaskKey $ErrMessage";
-  if ($RptFileName)
-  {
-    my $RPTFILE;
-    if (open RPTFILE, ">>$RptFileName")
-    {
-      print RPTFILE $ErrMessage;
-      close RPTFILE;
-    }
-  }
 
-  if ($Task)
+  if (open(my $ErrFile, ">>", $FullErrFileName))
   {
-    $Task->Status("failed");
-    $Task->Ended(time);
-    $Task->Save();
-    $Job->UpdateStatus();
+    print $ErrFile $ErrMessage;
+    close($ErrFile);
+  }
 
-    $Task->VM->Status('dirty');
-    $Task->VM->Save();
+  $Task->Status("failed");
+  $Task->Ended(time);
+  $Task->Save();
+  $Job->UpdateStatus();
 
-    TaskComplete($JobKey, $StepKey, $TaskKey);
-  }
+  my $VM = $Task->VM;
+  $VM->Status('dirty');
+  $VM->Save();
 
+  TaskComplete($JobKey, $StepKey, $TaskKey);
   exit 1;
 }
 
@@ -141,7 +133,8 @@ if ($JobId =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid JobId $JobId\n";
+  LogMsg "Invalid JobId $JobId\n";
+  exit 1;
 }
 if ($StepNo =~ /^(\d+)$/)
 {
@@ -149,7 +142,8 @@ if ($StepNo =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid StepNo $StepNo\n";
+  LogMsg "Invalid StepNo $StepNo\n";
+  exit 1;
 }
 if ($TaskNo =~ /^(\d+)$/)
 {
@@ -157,23 +151,27 @@ if ($TaskNo =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid TaskNo $TaskNo\n";
+  LogMsg "Invalid TaskNo $TaskNo\n";
+  exit 1;
 }
 
 my $Job = CreateJobs()->GetItem($JobId);
-if (! defined($Job))
+if (!defined $Job)
 {
-  FatalError "Job $JobId doesn't exist\n";
+  LogMsg "Job $JobId doesn't exist\n";
+  exit 1;
 }
 my $Step = $Job->Steps->GetItem($StepNo);
-if (! defined($Step))
+if (!defined $Step)
 {
-  FatalError "Step $StepNo of job $JobId doesn't exist\n";
+  LogMsg "Step $StepNo of job $JobId doesn't exist\n";
+  exit 1;
 }
 my $Task = $Step->Tasks->GetItem($TaskNo);
-if (! defined($Task))
+if (!defined $Task)
 {
-  FatalError "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+  LogMsg "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+  exit 1;
 }
 
 umask(002);
@@ -201,10 +199,10 @@ foreach my $OtherStep (@{$Job->Steps->GetItems()})
     my $OtherFileName = $OtherStep->FileName;
     if ($OtherFileName =~ m/^([\w_\-]+)(|\.exe)_test(|64)\.exe$/)
     {
-      if (defined($BaseName) && $BaseName ne $1)
+      if (defined $BaseName && $BaseName ne $1)
       {
         FatalError "$1 doesn't match previously found $BaseName\n",
-                   $FullErrFileName, $Job, $Step, $Task;
+                   $FullErrFileName, $Job, $Task;
       }
       $BaseName = $1;
       if ($OtherStep->FileType eq "exe64")
@@ -216,15 +214,13 @@ foreach my $OtherStep (@{$Job->Steps->GetItems()})
 }
 if (! defined($BaseName))
 {
-  FatalError "Can't determine base name\n",
-             $FullErrFileName, $Job, $Step, $Task;
+  FatalError "Can't determine base name\n", $FullErrFileName, $Job, $Task;
 }
 
 my $ErrMessage = $Step->HandleStaging($JobId);
 if (defined($ErrMessage))
 {
-  FatalError "$ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+  FatalError "$ErrMessage\n", $FullErrFileName, $Job, $Task;
 }
 
 $VM->Status('running');
@@ -233,14 +229,14 @@ my $ErrProperty;
 if (defined($ErrMessage))
 {
   FatalError "Can't set VM status to running: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 my $FileName = $Step->FileName;
 if (!$TA->SendFile("$StepDir/$FileName", "staging/$FileName", 0))
 {
   $ErrMessage = $TA->GetLastError();
   FatalError "Can't copy patch to VM: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 my $Script = "#!/bin/sh\n" .
              "rm -f Build.log\n" .
@@ -252,7 +248,7 @@ if (!$TA->SendFileFromString($Script, "task", $TestAgent::SENDFILE_EXE))
 {
   $ErrMessage = $TA->GetLastError();
   FatalError "Can't send the script to VM: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 my $Pid = $TA->Run(["./task"], 0);
 if (!$Pid or !defined $TA->Wait($Pid, $Task->Timeout))
@@ -265,14 +261,14 @@ if (defined($ErrMessage))
   $TA->GetFile("Build.log", $FullRawlogFileName);
   ProcessRawlog($FullRawlogFileName, $FullLogFileName, $FullErrFileName);
   FatalError "Failure running script in VM: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 
 if (!$TA->GetFile("Build.log", $FullRawlogFileName))
 {
   $ErrMessage = $TA->GetLastError();
-  FatalError "Can't copy log from VM: $ErrMessage\n", $FullErrFileName,
-             $Job, $Step, $Task;
+  FatalError "Can't copy log from VM: $ErrMessage\n",
+             $FullErrFileName, $Job, $Task;
 }
 my $NewStatus = ProcessRawlog($FullRawlogFileName, $FullLogFileName,
                               $FullErrFileName) ? "completed" : "failed";
@@ -301,7 +297,7 @@ foreach my $OtherStep (@{$Job->Steps->GetItems()})
       {
         $ErrMessage = $TA->GetLastError();
         FatalError "Can't copy generated executable from VM: $ErrMessage\n",
-                   $FullErrFileName, $Job, $Step, $Task;
+                   $FullErrFileName, $Job, $Task;
       }
       chmod 0664, "$OtherStepDir/$OtherFileName";
     }
@@ -324,5 +320,4 @@ $Job = undef;
 TaskComplete($JobId, $StepNo, $TaskNo);
 
 LogMsg "Task $JobId/$StepNo/$TaskNo completed\n";
-
-exit;
+exit 0;
diff --git a/testbot/bin/WineRunReconfig.pl b/testbot/bin/WineRunReconfig.pl
index 18d8c69..7588045 100755
--- a/testbot/bin/WineRunReconfig.pl
+++ b/testbot/bin/WineRunReconfig.pl
@@ -4,6 +4,7 @@
 # See the bin/build/Reconfig.pl script.
 #
 # Copyright 2009 Ge van Geldorp
+# Copyright 2013 Francois Gouget
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -41,38 +42,29 @@ use WineTestBot::Jobs;
 use WineTestBot::Log;
 use WineTestBot::Engine::Notify;
 
-sub FatalError
+sub FatalError($$$$)
 {
-  my ($ErrMessage, $RptFileName, $Job, $Step, $Task) = @_;
-
-  my $JobKey = defined($Job) ? $Job->GetKey() : "0";
-  my $StepKey = defined($Step) ? $Step->GetKey() : "0";
-  my $TaskKey = defined($Task) ? $Task->GetKey() : "0";
+  my ($ErrMessage, $FullErrFileName, $Job, $Task) = @_;
 
+  my ($JobKey, $StepKey, $TaskKey) = @{$Task->GetMasterKey()};
   LogMsg "$JobKey/$StepKey/$TaskKey $ErrMessage";
-  if ($RptFileName)
-  {
-    my $RPTFILE;
-    if (open RPTFILE, ">>$RptFileName")
-    {
-      print RPTFILE $ErrMessage;
-      close RPTFILE;
-    }
-  }
 
-  if ($Task)
+  if (open(my $ErrFile, ">>", $FullErrFileName))
   {
-    $Task->Status("failed");
-    $Task->Ended(time);
-    $Task->Save();
-    $Job->UpdateStatus();
+    print $ErrFile $ErrMessage;
+    close($ErrFile);
+  }
 
-    $Task->VM->Status('dirty');
-    $Task->VM->Save();
+  $Task->Status("failed");
+  $Task->Ended(time);
+  $Task->Save();
+  $Job->UpdateStatus();
 
-    TaskComplete($JobKey, $StepKey, $TaskKey);
-  }
+  my $VM = $Task->VM;
+  $VM->Status('dirty');
+  $VM->Save();
 
+  TaskComplete($JobKey, $StepKey, $TaskKey);
   exit 1;
 }
 
@@ -141,7 +133,8 @@ if ($JobId =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid JobId $JobId\n";
+  LogMsg "Invalid JobId $JobId\n";
+  exit 1;
 }
 if ($StepNo =~ /^(\d+)$/)
 {
@@ -149,7 +142,8 @@ if ($StepNo =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid StepNo $StepNo\n";
+  LogMsg "Invalid StepNo $StepNo\n";
+  exit 1;
 }
 if ($TaskNo =~ /^(\d+)$/)
 {
@@ -157,23 +151,27 @@ if ($TaskNo =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid TaskNo $TaskNo\n";
+  LogMsg "Invalid TaskNo $TaskNo\n";
+  exit 1;
 }
 
 my $Job = CreateJobs()->GetItem($JobId);
-if (! defined($Job))
+if (!defined $Job)
 {
-  FatalError "Job $JobId doesn't exist\n";
+  LogMsg "Job $JobId doesn't exist\n";
+  exit 1;
 }
 my $Step = $Job->Steps->GetItem($StepNo);
-if (! defined($Step))
+if (!defined $Step)
 {
-  FatalError "Step $StepNo of job $JobId doesn't exist\n";
+  LogMsg "Step $StepNo of job $JobId doesn't exist\n";
+  exit 1;
 }
 my $Task = $Step->Tasks->GetItem($TaskNo);
-if (! defined($Task))
+if (!defined $Task)
 {
-  FatalError "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+  LogMsg "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+  exit 1;
 }
 
 umask(002);
@@ -197,7 +195,7 @@ my ($ErrProperty, $ErrMessage) = $VM->Save();
 if (defined($ErrMessage))
 {
   FatalError "Can't set VM status to running: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 my $Script = "#!/bin/sh\n" .
              "rm -f Reconfig.log\n" .
@@ -206,7 +204,7 @@ if (!$TA->SendFileFromString($Script, "task", $TestAgent::SENDFILE_EXE))
 {
   $ErrMessage = $TA->GetLastError();
   FatalError "Can't send the script to VM: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 my $Pid = $TA->Run(["./task"], 0);
 if (!$Pid or !defined $TA->Wait($Pid, $Task->Timeout))
@@ -219,14 +217,14 @@ if (defined($ErrMessage))
   $TA->GetFile("Reconfig.log", $FullRawlogFileName);
   ProcessRawlog($FullRawlogFileName, $FullLogFileName, $FullErrFileName);
   FatalError "Failure running script in VM: $ErrMessage\n",
-             $FullErrFileName, $Job, $Step, $Task;
+             $FullErrFileName, $Job, $Task;
 }
 
 if (!$TA->GetFile("Reconfig.log", $FullRawlogFileName))
 {
   $ErrMessage = $TA->GetLastError();
-  FatalError "Can't copy log from VM: $ErrMessage\n", $FullErrFileName,
-             $Job, $Step, $Task;
+  FatalError "Can't copy log from VM: $ErrMessage\n",
+             $FullErrFileName, $Job, $Task;
 }
 $TA->Disconnect();
 
@@ -237,15 +235,15 @@ if ($Success)
   $ErrMessage = $VM->RemoveSnapshot($VM->IdleSnapshot);
   if (defined($ErrMessage))
   {
-    FatalError "Can't remove snapshot: $ErrMessage\n", $FullErrFileName,
-               $Job, $Step, $Task;
+    FatalError "Can't remove snapshot: $ErrMessage\n",
+               $FullErrFileName, $Job, $Task;
   }
 
   $ErrMessage = $VM->CreateSnapshot($VM->IdleSnapshot);
   if (defined($ErrMessage))
   {
-    FatalError "Can't take snapshot: $ErrMessage\n", $FullErrFileName,
-               $Job, $Step, $Task;
+    FatalError "Can't take snapshot: $ErrMessage\n",
+               $FullErrFileName, $Job, $Task;
   }
 
   $VM->Status("idle");
@@ -270,5 +268,4 @@ $Job = undef;
 TaskComplete($JobId, $StepNo, $TaskNo);
 
 LogMsg "Task $JobId/$StepNo/$TaskNo completed\n";
-
-exit;
+exit 0;
diff --git a/testbot/bin/WineRunTask.pl b/testbot/bin/WineRunTask.pl
index 73d60ba..ffbb421 100755
--- a/testbot/bin/WineRunTask.pl
+++ b/testbot/bin/WineRunTask.pl
@@ -41,53 +41,40 @@ use WineTestBot::Jobs;
 use WineTestBot::Log;
 use WineTestBot::Engine::Notify;
 
-sub FatalError
+sub FatalError($$$$$)
 {
-  my ($ErrMessage, $RptFileName, $Job, $Step, $Task) = @_;
-
-  my $JobKey = defined($Job) ? $Job->GetKey() : "0";
-  my $StepKey = defined($Step) ? $Step->GetKey() : "0";
-  my $TaskKey = defined($Task) ? $Task->GetKey() : "0";
+  my ($ErrMessage, $FullErrFileName, $Job, $Step, $Task) = @_;
 
+  my ($JobKey, $StepKey, $TaskKey) = @{$Task->GetMasterKey()};
   LogMsg "$JobKey/$StepKey/$TaskKey $ErrMessage";
 
-  if ($Task)
+  my $OldUMask = umask(002);
+  if (open(my $ErrFile, ">>", $FullErrFileName))
   {
-    $Task->Status("failed");
-    $Task->Ended(time);
-    $Task->Save();
-    $Job->UpdateStatus();
-
-    if ($Task->VM->Role ne "base")
-    {
-      $Task->VM->PowerOff();
-    }
-    $Task->VM->Status('dirty');
-    $Task->VM->Save();
+    print $ErrFile $ErrMessage;
+    close($ErrFile);
   }
+  umask($OldUMask);
 
-  if ($RptFileName)
+  if ($Step->Type eq "suite")
   {
-    my $RPTFILE;
-    my $OldUMask = umask(002);
-    if (open RPTFILE, ">>$RptFileName")
-    {
-      print RPTFILE $ErrMessage;
-      close RPTFILE;
-    }
-    umask($OldUMask);
-
-    if ($Task && $Step->Type eq "suite")
-    {
-      my $LatestName = "$DataDir/latest/" . $Task->VM->Name . "_" .
-                       ($Step->FileType eq "exe64" ? "64" : "32") . ".err";
-      unlink($LatestName);
-      link($RptFileName, $LatestName);
-    }
+    my $LatestName = "$DataDir/latest/" . $Task->VM->Name . "_" .
+                     ($Step->FileType eq "exe64" ? "64" : "32") . ".err";
+    unlink($LatestName);
+    link($FullErrFileName, $LatestName);
   }
 
-  TaskComplete($JobKey, $StepKey, $TaskKey);
+  $Task->Status("failed");
+  $Task->Ended(time);
+  $Task->Save();
+  $Job->UpdateStatus();
+
+  my $VM = $Task->VM;
+  $VM->PowerOff() if ($VM->Role ne "base");
+  $VM->Status('dirty');
+  $VM->Save();
 
+  TaskComplete($JobKey, $StepKey, $TaskKey);
   exit 1;
 }
 
@@ -158,7 +145,8 @@ if ($JobId =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid JobId $JobId\n";
+  LogMsg "Invalid JobId $JobId\n";
+  exit 1;
 }
 if ($StepNo =~ /^(\d+)$/)
 {
@@ -166,7 +154,8 @@ if ($StepNo =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid StepNo $StepNo\n";
+  LogMsg "Invalid StepNo $StepNo\n";
+  exit 1;
 }
 if ($TaskNo =~ /^(\d+)$/)
 {
@@ -174,23 +163,27 @@ if ($TaskNo =~ /^(\d+)$/)
 }
 else
 {
-  FatalError "Invalid TaskNo $TaskNo\n";
+  LogMsg "Invalid TaskNo $TaskNo\n";
+  exit 1;
 }
 
 my $Job = CreateJobs()->GetItem($JobId);
-if (! defined($Job))
+if (!defined $Job)
 {
-  FatalError "Job $JobId doesn't exist\n";
+  LogMsg "Job $JobId doesn't exist\n";
+  exit 1;
 }
 my $Step = $Job->Steps->GetItem($StepNo);
-if (! defined($Step))
+if (!defined $Step)
 {
-  FatalError "Step $StepNo of job $JobId doesn't exist\n";
+  LogMsg "Step $StepNo of job $JobId doesn't exist\n";
+  exit 1;
 }
 my $Task = $Step->Tasks->GetItem($TaskNo);
-if (! defined($Task))
+if (!defined $Task)
 {
-  FatalError "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+  LogMsg "Step $StepNo task $TaskNo of job $JobId doesn't exist\n";
+  exit 1;
 }
 
 my $oldumask = umask(002);
@@ -333,8 +326,8 @@ if (defined($ErrMessage))
 }
 if (defined($LogErrMessage))
 {
-  FatalError "Can't copy log from VM: $LogErrMessage\n", $FullErrFileName,
-             $Job, $Step, $Task;
+  FatalError "Can't copy log from VM: $LogErrMessage\n",
+             $FullErrFileName, $Job, $Step, $Task;
 }
 $TA->Disconnect();
 
@@ -370,5 +363,4 @@ $Job = undef;
 TaskComplete($JobId, $StepNo, $TaskNo);
 
 LogMsg "Task $JobId/$StepNo/$TaskNo (" . $VM->Name . ") completed\n";
-
-exit;
+exit 0;
-- 
1.7.10.4




More information about the wine-patches mailing list