From 72483aeca9e47ebd94d87a9354c0e0e96af5fa6d Mon Sep 17 00:00:00 2001 From: Dat Date: Thu, 30 Jul 2026 17:13:12 +0200 Subject: [PATCH 1/2] fix(api): make PollForMediaWikiJobsJob skip soft-deleted wikis --- app/Jobs/PollForMediaWikiJobsJob.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/Jobs/PollForMediaWikiJobsJob.php b/app/Jobs/PollForMediaWikiJobsJob.php index 6e3ad016..0f2486f6 100644 --- a/app/Jobs/PollForMediaWikiJobsJob.php +++ b/app/Jobs/PollForMediaWikiJobsJob.php @@ -3,6 +3,7 @@ namespace App\Jobs; use App\Services\MediaWikiHostResolver; +use App\Services\UnknownWikiDomainException; use App\Wiki; use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; @@ -16,7 +17,7 @@ class PollForMediaWikiJobsJob extends Job implements ShouldBeUnique, ShouldQueue public function handle(MediaWikiHostResolver $mwHostResolver): void { $this->mwHostResolver = $mwHostResolver; - $allWikiDomains = Wiki::all()->pluck('domain'); + $allWikiDomains = Wiki::whereNull('deleted_at')->pluck('domain'); foreach ($allWikiDomains as $wikiDomain) { if ($this->hasPendingJobs($wikiDomain)) { $this->enqueueWiki($wikiDomain); @@ -25,11 +26,17 @@ public function handle(MediaWikiHostResolver $mwHostResolver): void { } private function hasPendingJobs(string $wikiDomain): bool { - $response = Http::withHeaders([ - 'host' => $wikiDomain, - ])->get( - $this->mwHostResolver->getBackendUrlForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json' - ); + try { + $response = Http::withHeaders([ + 'host' => $wikiDomain, + ])->get( + $this->mwHostResolver->getBackendUrlForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json' + ); + } catch (UnknownWikiDomainException $e) { + Log::warning('Skipping wiki ' . $wikiDomain . ' for pending MediaWiki jobs: ' . $e->getMessage()); + + return false; + } if ($response->failed()) { $this->job->markAsFailed(); From 3a7351f221a5fac86f62619874835c7083367758 Mon Sep 17 00:00:00 2001 From: Dat Date: Thu, 30 Jul 2026 17:13:12 +0200 Subject: [PATCH 2/2] fix(api): make PollForMediaWikiJobsJob skip soft-deleted wikis --- app/Jobs/PollForMediaWikiJobsJob.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app/Jobs/PollForMediaWikiJobsJob.php b/app/Jobs/PollForMediaWikiJobsJob.php index 6e3ad016..0f2486f6 100644 --- a/app/Jobs/PollForMediaWikiJobsJob.php +++ b/app/Jobs/PollForMediaWikiJobsJob.php @@ -3,6 +3,7 @@ namespace App\Jobs; use App\Services\MediaWikiHostResolver; +use App\Services\UnknownWikiDomainException; use App\Wiki; use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; @@ -16,7 +17,7 @@ class PollForMediaWikiJobsJob extends Job implements ShouldBeUnique, ShouldQueue public function handle(MediaWikiHostResolver $mwHostResolver): void { $this->mwHostResolver = $mwHostResolver; - $allWikiDomains = Wiki::all()->pluck('domain'); + $allWikiDomains = Wiki::whereNull('deleted_at')->pluck('domain'); foreach ($allWikiDomains as $wikiDomain) { if ($this->hasPendingJobs($wikiDomain)) { $this->enqueueWiki($wikiDomain); @@ -25,11 +26,17 @@ public function handle(MediaWikiHostResolver $mwHostResolver): void { } private function hasPendingJobs(string $wikiDomain): bool { - $response = Http::withHeaders([ - 'host' => $wikiDomain, - ])->get( - $this->mwHostResolver->getBackendUrlForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json' - ); + try { + $response = Http::withHeaders([ + 'host' => $wikiDomain, + ])->get( + $this->mwHostResolver->getBackendUrlForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json' + ); + } catch (UnknownWikiDomainException $e) { + Log::warning('Skipping wiki ' . $wikiDomain . ' for pending MediaWiki jobs: ' . $e->getMessage()); + + return false; + } if ($response->failed()) { $this->job->markAsFailed();