[17/25] testbot: Move reference logs to the task and prepare for having more than one.

Francois Gouget fgouget at codeweavers.com
Tue Jan 14 09:42:37 CST 2020


The old reference report filename format was '<vmname>_<reportname>'
which means there could only be one per report. Each job should only
have one report of a given type per VM so add it to the reference
filename.
Also the use of an underscore as the separator made it hard to split the
components apart as <reportname> could contain underscores too such as
in 'win32_fr_FR.report'. Dashes are a better choice since they are not
allowed in either the VM name nor in the report name.
So the new refeence filename format is
'<vmname>-job<jobid>-<reportname>'.

Note: This requires running UpdateTaskLogs to move and rename the
existing reference reports.
---
 testbot/bin/Janitor.pl                |  2 +-
 testbot/bin/UpdateTaskLogs            | 71 ++++++++++++++++++++++++---
 testbot/bin/WineSendLog.pl            |  2 +-
 testbot/lib/WineTestBot/LogUtils.pm   |  5 +-
 testbot/lib/WineTestBot/StepsTasks.pm |  2 +-
 testbot/lib/WineTestBot/Tasks.pm      |  2 +-
 testbot/web/JobDetails.pl             |  4 +-
 7 files changed, 73 insertions(+), 15 deletions(-)

diff --git a/testbot/bin/Janitor.pl b/testbot/bin/Janitor.pl
index 579a43275..ecae5be5a 100755
--- a/testbot/bin/Janitor.pl
+++ b/testbot/bin/Janitor.pl
@@ -314,7 +314,7 @@ if (opendir(my $dh, "$DataDir/latest"))
     my $Age = int((-M $FileName) + 0.5);
     my $TTL = $JobPurgeDays ? $JobPurgeDays - $Age : undef;
 
-    if ($Entry =~ /^([a-zA-Z0-9_]+)_(?:exe|win|wow)(?:32|64)[a-zA-Z0-9_]*\.report(?:\.err)?$/)
+    if ($Entry =~ /^([a-zA-Z0-9_]+)-job[0-9]+-[a-zA-Z0-9_]+\.report(?:\.err)?$/)
     {
       # Keep the reference WineTest reports for all VMs even if they are
       # retired or scheduled for deletion.
diff --git a/testbot/bin/UpdateTaskLogs b/testbot/bin/UpdateTaskLogs
index 2ce192f0b..70a3dd2c1 100755
--- a/testbot/bin/UpdateTaskLogs
+++ b/testbot/bin/UpdateTaskLogs
@@ -242,6 +242,46 @@ sub DoUpdateLatestReport($$$)
   return $Rc;
 }
 
+sub MoveRefReport($$;$)
+{
+  my ($RefDir, $RefName, $NewDir) = @_;
+
+  my $RefPath = "$RefDir/$RefName";
+
+  my $Rc = 0;
+  if (-f $RefPath)
+  {
+    $NewDir ||= $RefDir;
+    my $NewName = $RefName;
+    if ($RefName =~ /^([a-zA-Z0-9_]+)_((?:exe|win|wow)(?:32|64)[a-zA-Z0-9_]*\.report(?:\.err)?)$/)
+    {
+      # We don't know which job generated this reference log.
+      # So use a fixed, arbitrary JobId.
+      $NewName = "$1-job000000-$2";
+    }
+
+    my $NewPath = "$NewDir/$NewName";
+    if (-f $NewPath)
+    {
+      Error "Could not move '$RefName' because the '$NewPath' target already exists\n";
+      $Rc = 1;
+    }
+    elsif ($RefPath ne $NewPath)
+    {
+      my $TaskKey = Path2TaskKey($NewDir);
+      my $RelRefDir = ($RefDir eq $NewDir) ? "" : "../";
+      Debug("$TaskKey: $RelRefDir$RefName -> $NewName\n");
+      if (!rename($RefPath, $NewPath))
+      {
+        Error "Could not move '$RefPath' to '$NewName': $!\n";
+        $Rc = 1;
+      }
+    }
+  }
+
+  return $Rc;
+}
+
 sub ProcessTaskLogs($$$)
 {
   my ($Step, $Task, $CollectOnly) = @_;
@@ -250,6 +290,20 @@ sub ProcessTaskLogs($$$)
   my $StepDir = $Step->GetDir();
   my $TaskDir = $Task->GetDir();
 
+  if (!$CollectOnly)
+  {
+    # Upgrade the naming scheme of the task's old reference reports
+    foreach my $LogName (@{GetLogFileNames($TaskDir)})
+    {
+      next if ($LogName !~ /\.report$/);
+      my $StepReportName = $Task->VM->Name ."_$LogName";
+      foreach my $Suffix ("", ".err")
+      {
+        $Rc += MoveRefReport($StepDir, "$StepReportName$Suffix", $TaskDir);
+      }
+    }
+  }
+
   if (($OptDelete or $OptRebuild) and !$CollectOnly)
   {
     # Save / delete the task's reference reports... all of them,
@@ -263,7 +317,7 @@ sub ProcessTaskLogs($$$)
     foreach my $ReportName (@$ReportNames)
     {
       my $RefReportName = $Task->GetRefReportName($ReportName);
-      my $RefReportPath = "$StepDir/$RefReportName";
+      my $RefReportPath = "$TaskDir/$RefReportName";
 
       if (-f $RefReportPath or -f "$RefReportPath.err")
       {
@@ -283,7 +337,7 @@ sub ProcessTaskLogs($$$)
         # (this would be the case for the oldest tasks with --rebuild)
         $Rc += DoUpdateLatestReport($Task, $ReportName, $RefReportPath);
 
-        Debug(TaskKeyStr($Task) .": Deleting ../$RefReportName\n");
+        Debug(TaskKeyStr($Task) .": Deleting $RefReportName*\n");
       }
       foreach my $Suffix ("", ".err")
       {
@@ -311,7 +365,7 @@ sub ProcessTaskLogs($$$)
     {
       next if ($LogName !~ /\.report$/);
       my $RefReportName = $Task->GetRefReportName($LogName);
-      next if (-f "$StepDir/$RefReportName");
+      next if (-f "$TaskDir/$RefReportName");
 
       my $LatestReportPath = $LatestReports{$RefReportName};
       if (!defined $LatestReportPath)
@@ -324,9 +378,9 @@ sub ProcessTaskLogs($$$)
         Debug(TaskKeyStr($Task) .": Snapshotting $RefReportName from ". Path2TaskKey($LatestReportPath) ."\n");
         foreach my $Suffix ("", ".err")
         {
-          unlink "$StepDir/$RefReportName$Suffix";
+          unlink "$TaskDir/$RefReportName$Suffix";
           if (-f "$LatestReportPath$Suffix" and
-              !link("$LatestReportPath$Suffix", "$StepDir/$RefReportName$Suffix"))
+              !link("$LatestReportPath$Suffix", "$TaskDir/$RefReportName$Suffix"))
           {
             Error "Could not link '$RefReportName$Suffix': $!\n";
             $Rc = 1;
@@ -396,7 +450,7 @@ sub ProcessLatestReports()
 
     if ($OptDelete or $OptRebuild)
     {
-      # Delete the reports so they are rebuilt from scratch if appropriate
+      # Delete the reports that should be deleted / rebuilt
       foreach my $Suffix ("", ".err")
       {
         next if (!-f "$LatestReportPath$Suffix");
@@ -425,6 +479,11 @@ sub ProcessLatestReports()
         $Rc = 1;
       }
     }
+    else
+    {
+      # Upgrade the naming scheme of the task's old reference reports
+      $Rc += MoveRefReport("$DataDir/latest", $RefReportName);
+    }
   }
 
   return $Rc;
diff --git a/testbot/bin/WineSendLog.pl b/testbot/bin/WineSendLog.pl
index b31d1f5d3..393c76a0e 100755
--- a/testbot/bin/WineSendLog.pl
+++ b/testbot/bin/WineSendLog.pl
@@ -292,7 +292,7 @@ EOF
       next if (!$LogInfo->{ErrCount});
 
       my $AllNew;
-      my $RefReportPath = $StepTask->GetFullFileName($StepTask->GetRefReportName($LogName));
+      my $RefReportPath = "$TaskDir/". $StepTask->GetRefReportName($LogName);
       TagNewErrors($RefReportPath, $LogInfo);
       if ($LogInfo->{NoRef})
       {
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index 764330281..08c9911d9 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -1064,11 +1064,10 @@ sub SnapshotLatestReport($$)
   {
     next if (!-f "$DataDir/latest/$RefReportName$Suffix");
 
-    # FIXME: The reference reports are stored at the step level!
     if (!link("$DataDir/latest/$RefReportName$Suffix",
-              "$TaskDir/../$RefReportName$Suffix"))
+              "$TaskDir/$RefReportName$Suffix"))
     {
-      push @ErrMessages, "Could not create the '../$RefReportName$Suffix' link: $!";
+      push @ErrMessages, "Could not create the '$RefReportName$Suffix' link: $!";
     }
   }
 
diff --git a/testbot/lib/WineTestBot/StepsTasks.pm b/testbot/lib/WineTestBot/StepsTasks.pm
index bad0e2437..f65e6a632 100644
--- a/testbot/lib/WineTestBot/StepsTasks.pm
+++ b/testbot/lib/WineTestBot/StepsTasks.pm
@@ -71,7 +71,7 @@ sub GetTaskDir($)
 sub GetRefReportName($$)
 {
   my ($self, $ReportName) = @_;
-  return $self->VM->Name ."_$ReportName";
+  return $self->VM->Name ."-job000000-$ReportName";
 }
 
 sub GetTitle($)
diff --git a/testbot/lib/WineTestBot/Tasks.pm b/testbot/lib/WineTestBot/Tasks.pm
index 1a46f0d57..7b9ac9b81 100644
--- a/testbot/lib/WineTestBot/Tasks.pm
+++ b/testbot/lib/WineTestBot/Tasks.pm
@@ -141,7 +141,7 @@ sub GetReportNames($)
 sub GetRefReportName($$)
 {
   my ($self, $ReportName) = @_;
-  return $self->VM->Name ."_$ReportName";
+  return $self->VM->Name ."-job000000-$ReportName";
 }
 
 sub _SetupTask($$)
diff --git a/testbot/web/JobDetails.pl b/testbot/web/JobDetails.pl
index fc18c866f..a4179c705 100644
--- a/testbot/web/JobDetails.pl
+++ b/testbot/web/JobDetails.pl
@@ -494,7 +494,7 @@ EOF
         if ($LogInfo->{ErrCount})
         {
           # Identify new errors in test reports
-          my $RefReportPath = $StepTask->GetFullFileName($StepTask->GetRefReportName($MoreInfo->{Full}));
+          my $RefReportPath = "$TaskDir/". $StepTask->GetRefReportName($MoreInfo->{Full});
           TagNewErrors($RefReportPath, $LogInfo);
         }
       }
@@ -563,7 +563,7 @@ EOF
         if ($LogName =~ /\.report$/)
         {
           # For test reports try to identify the new errors
-          my $RefReportPath = $StepTask->GetFullFileName($StepTask->GetRefReportName($LogName));
+          my $RefReportPath = "$TaskDir/". $StepTask->GetRefReportName($LogName);
           TagNewErrors($RefReportPath, $LogInfo);
         }
 
-- 
2.20.1




More information about the wine-devel mailing list