Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/Http/Controllers/RemoteProcessingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

use App\Http\Submission\Handlers\RetryHandler;
use App\Jobs\ProcessSubmission;
use CDash\Model\PendingSubmissions;
use App\Models\PendingSubmissions;
use Exception;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\Response;
Expand Down Expand Up @@ -111,7 +111,7 @@ public function requeueSubmissionFile(): Response
Storage::move("inprogress/{$filename}", "inbox/{$filename}");

// Requeue the file with exponential backoff.
PendingSubmissions::IncrementForBuildId($buildid);
PendingSubmissions::where('buildid', $buildid)->increment('numfiles');
$delay = ((int) config('cdash.retry_base')) ** $retry_handler->Retries;
ProcessSubmission::dispatch($filename, $projectid, $buildid, $md5)->delay(now()->addSeconds($delay));
return response('OK', Response::HTTP_OK);
Expand Down
13 changes: 7 additions & 6 deletions app/Http/Controllers/SubmissionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
use App\Enums\SubmissionValidationType;
use App\Exceptions\BadSubmissionException;
use App\Jobs\ProcessSubmission;
use App\Models\PendingSubmissions;
use App\Models\Site;
use App\Utils\AuthTokenUtil;
use App\Utils\SubmissionUtils;
use App\Utils\UnparsedSubmissionProcessor;
use CDash\Model\Build;
use CDash\Model\PendingSubmissions;
use CDash\Model\Project;
use Exception;
use Illuminate\Contracts\Encryption\DecryptException;
Expand Down Expand Up @@ -190,7 +190,6 @@ private function submitProcess(): Response
}

// Check if CTest provided us enough info to assign a buildid.
$pendingSubmissions = new PendingSubmissions();
$buildid = null;
if (isset($_GET['build']) && isset($_GET['site']) && isset($_GET['stamp'])) {
$build = new Build();
Expand All @@ -205,20 +204,22 @@ private function submitProcess(): Response
}

$build->SiteId = Site::firstOrCreate(['name' => $_GET['site']], ['name' => $_GET['site']])->id;
$pendingSubmissions->Build = $build;

if ($build->AddBuild()) {
// Insert row to keep track of how many submissions are waiting to be
// processed for this build. This value will be incremented
// (and decremented) later on.
$pendingSubmissions->NumFiles = 0;
$pendingSubmissions->Save();
PendingSubmissions::upsert([
'buildid' => $build->Id,
'numfiles' => 0,
'recheck' => false,
], 'buildid');
}
$buildid = $build->Id;
}

if ($buildid !== null) {
$pendingSubmissions->Increment();
PendingSubmissions::where('buildid', (int) $buildid)->increment('numfiles');
}
ProcessSubmission::dispatch($filename, $this->project->Id, $buildid, $expected_md5);
fclose($fp);
Expand Down
15 changes: 6 additions & 9 deletions app/Http/Submission/Handlers/DoneHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,20 @@
PURPOSE. See the above copyright notices for more information.
=========================================================================*/

use App\Models\PendingSubmissions;
use CDash\Model\Build;
use CDash\Model\PendingSubmissions;
use CDash\Model\Repository;

class DoneHandler extends AbstractXmlHandler
{
private bool $FinalAttempt = false;
private PendingSubmissions $PendingSubmissions;
private bool $Requeue = false;
public string $backupFileName;
protected static ?string $schema_file = '/app/Validators/Schemas/Done.xsd';

public function __construct(Build $build)
{
parent::__construct($build);
$this->PendingSubmissions = new PendingSubmissions();
}

public function startElement($parser, $name, $attributes): void
Expand All @@ -49,9 +47,10 @@ public function endElement($parser, $name): void
{
parent::endElement($parser, $name);
if ($name === 'DONE') {
$pendingSubmissionsModel = PendingSubmissions::firstWhere('buildid', (int) $this->Build->Id);

// Check pending submissions and requeue this file if necessary.
$this->PendingSubmissions->Build = $this->Build;
if ($this->PendingSubmissions->GetNumFiles() > 1) {
if ($pendingSubmissionsModel !== null && $pendingSubmissionsModel->numfiles > 1) {
// There are still pending submissions.
if (!$this->FinalAttempt) {
// Requeue this Done.xml file so that we can attempt to parse
Expand All @@ -66,14 +65,12 @@ public function endElement($parser, $name): void

// Should we re-run any checks that were previously marked
// as pending?
if ($this->PendingSubmissions->Recheck) {
if ($pendingSubmissionsModel !== null && $pendingSubmissionsModel->recheck) {
$revision = \App\Models\Build::findOrFail((int) $this->Build->Id)->updates()->first()->revision ?? '';
Repository::createOrUpdateCheck($revision);
}

if ($this->PendingSubmissions->Exists()) {
$this->PendingSubmissions->Delete();
}
$pendingSubmissionsModel?->delete();

// Set the status of this build on our repository.
Repository::setStatus($this->Build, true);
Expand Down
10 changes: 3 additions & 7 deletions app/Jobs/ProcessSubmission.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use App\Http\Submission\Handlers\RetryHandler;
use App\Http\Submission\Handlers\UpdateHandler;
use App\Models\BuildFile;
use App\Models\PendingSubmissions;
use App\Models\Site;
use App\Models\SuccessfulJob;
use App\Utils\SubmissionUtils;
Expand All @@ -22,7 +23,6 @@
use CDash\Model\Build;
use CDash\Model\BuildEmail;
use CDash\Model\BuildGroup;
use CDash\Model\PendingSubmissions;
use CDash\Model\Project;
use CDash\Model\Repository;
use Illuminate\Bus\Queueable;
Expand Down Expand Up @@ -130,7 +130,7 @@ private function requeueSubmissionFile($buildid): bool
Storage::move("inprogress/{$this->filename}", "inbox/{$this->filename}");

// Requeue the file with exponential backoff.
PendingSubmissions::IncrementForBuildId($this->buildid);
PendingSubmissions::where('buildid', $this->buildid)->increment('numfiles');
$delay = ((int) config('cdash.retry_base')) ** $retry_handler->Retries;
if (config('queue.default') === 'sqs-fifo') {
// Special handling for sqs-fifo, which does not support per-message delays.
Expand Down Expand Up @@ -257,11 +257,7 @@ private function doSubmit($filename, \App\Models\Project $project, $buildid = nu
}

$build = $handler->getBuild();
$pendingSubmissions = new PendingSubmissions();
$pendingSubmissions->Build = $build;
if ($pendingSubmissions->Exists()) {
$pendingSubmissions->Decrement();
}
PendingSubmissions::where('buildid', $build->Id ?? -1)->decrement('numfiles');

// Set status on repository.
if ($handler instanceof UpdateHandler
Expand Down
4 changes: 2 additions & 2 deletions app/Models/PendingSubmissions.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
/**
* @property int $buildid
* @property int $numfiles
* @property int $recheck // TODO: convert to a boolean
* @property bool $recheck
*
* @mixin Builder<PendingSubmissions>
*/
Expand All @@ -31,6 +31,6 @@ class PendingSubmissions extends Model
protected $casts = [
'buildid' => 'integer',
'numfiles' => 'integer',
'recheck' => 'integer',
'recheck' => 'boolean',
];
}
14 changes: 6 additions & 8 deletions app/Utils/UnparsedSubmissionProcessor.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@

use App\Jobs\ProcessSubmission;
use App\Models\BuildFile;
use App\Models\PendingSubmissions;
use App\Models\Site;
use CDash\Model\Build;
use CDash\Model\PendingSubmissions;
use CDash\Model\Project;
use Exception;
use Illuminate\Http\JsonResponse;
Expand Down Expand Up @@ -332,13 +332,11 @@ public function populateBuildFileRow(): void
$buildfile->save();

// Increment the count of pending submission files for this build.
$pendingSubmissions = new PendingSubmissions();
$pendingSubmissions->Build = $this->build;
if (!$pendingSubmissions->Exists()) {
$pendingSubmissions->NumFiles = 0;
$pendingSubmissions->Save();
}
$pendingSubmissions->Increment();
DB::transaction(function (): void {
PendingSubmissions::updateOrCreate([
'buildid' => (int) $this->build->Id,
])->increment('numfiles');
});
}

public function parseDataFileParameters(): void
Expand Down
6 changes: 4 additions & 2 deletions app/cdash/app/Lib/Repository/GitHub.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@
namespace CDash\Lib\Repository;

use App\Models\BuildUpdateFile;
use App\Models\PendingSubmissions;
use CDash\Database;
use CDash\Model\Build;
use CDash\Model\BuildUpdate;
use CDash\Model\PendingSubmissions;
use CDash\Model\Project;
use DateTime;
use DateTimeImmutable;
Expand Down Expand Up @@ -454,7 +454,9 @@ public function getCheckSummaryForBuildRow(array $row): ?string
$this->numPending++;
// Schedule this check to re-run when the build
// is finished.
PendingSubmissions::RecheckForBuildId($row['id']);
PendingSubmissions::where('buildid', (int) $row['id'])->update([
'recheck' => true,
]);
}
}
$build_summary = "[$build_name]($build_url) | $icon | [$msg]($details_url)";
Expand Down
141 changes: 0 additions & 141 deletions app/cdash/app/Model/PendingSubmissions.php

This file was deleted.

12 changes: 5 additions & 7 deletions app/cdash/tests/test_branchcoverage.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
//
require_once dirname(__FILE__) . '/cdash_test_case.php';

use App\Models\PendingSubmissions;
use App\Utils\DatabaseCleanupUtils;
use CDash\Database;
use CDash\Model\Build;
use CDash\Model\PendingSubmissions;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;

Expand Down Expand Up @@ -148,10 +147,9 @@ protected function verifyResults()
}

// Verify that this pending submission was recorded for this build.
$pending = new PendingSubmissions();
$build = new Build();
$build->Id = $this->buildid;
$pending->Build = $build;
$this->assertEqual($pending->GetNumFiles(), 0);
$this->assertEqual(
PendingSubmissions::where('buildid', $this->buildid)->first()?->numfiles,
false
);
}
}
Loading