Skip to content

Commit c9b333f

Browse files
dati18tarrow
andauthored
Resolve GuzzleHttp\Exception\RequestException error (#1168)
[bumping guzzlehttp/guzzle from 7.10.5 to 7.12.0 ]( #1165) triggered a bunch of [error](https://console.cloud.google.com/errors/detail/CNrO9YzO99qlkQE?project=wikibase-cloud&supportedpurview=project) The stack trace pointed to line 21 and 30 of [PollForMediaWikiJob](https://github.com/wbstack/api/blob/main/app/Jobs/PollForMediaWikiJobsJob.php#L30) The investigation is documented [here](https://phabricator.wikimedia.org/T429593#12058620). Bug: T429593 --------- Co-authored-by: Thomas Arrow <tarrow@users.noreply.github.com>
1 parent a3383af commit c9b333f

16 files changed

Lines changed: 82 additions & 52 deletions

app/Console/Commands/RebuildQueryserviceData.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function handle(MediaWikiHostResolver $mwHostResolver) {
4242
$skippedWikis = 0;
4343
$processedWikis = 0;
4444
foreach ($wikis as $wiki) {
45-
$this->apiUrl = $mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace
45+
$this->apiUrl = $mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace
4646

4747
try {
4848
$entities = $this->getEntitiesForWiki($wiki);

app/Jobs/PlatformStatsSummaryJob.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public function prepareStats(array $allStats, $wikis): array {
8080
$currentTime = CarbonImmutable::now();
8181

8282
foreach ($wikis as $wiki) {
83-
$this->apiUrl = $this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace
83+
$this->apiUrl = $this->mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php'; // used in PageFetcher::fetchPagesInNamespace
8484

8585
if (!is_null($wiki->deleted_at)) {
8686
$deletedWikis[] = $wiki;

app/Jobs/PollForMediaWikiJobsJob.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ private function hasPendingJobs(string $wikiDomain): bool {
2828
$response = Http::withHeaders([
2929
'host' => $wikiDomain,
3030
])->get(
31-
$this->mwHostResolver->getBackendHostForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
31+
$this->mwHostResolver->getBackendUrlForDomain($wikiDomain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
3232
);
3333

3434
if ($response->failed()) {

app/Jobs/UpdateWikiSiteStatsJob.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private function updateSiteStats(Wiki $wiki): void {
5959
$response = Http::withHeaders([
6060
'host' => $wiki->getAttribute('domain'),
6161
])->get(
62-
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
62+
$this->mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php?action=query&meta=siteinfo&siprop=statistics&format=json'
6363
);
6464

6565
if ($response->failed()) {
@@ -81,7 +81,7 @@ private function updateSiteStats(Wiki $wiki): void {
8181

8282
private function getFirstEditedDate(Wiki $wiki): ?CarbonInterface {
8383
$allRevisions = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
84-
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
84+
$this->mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php',
8585
[
8686
'action' => 'query',
8787
'format' => 'json',
@@ -99,7 +99,7 @@ private function getFirstEditedDate(Wiki $wiki): ?CarbonInterface {
9999
}
100100

101101
$revisionInfo = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
102-
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
102+
$this->mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php',
103103
[
104104
'action' => 'query',
105105
'format' => 'json',
@@ -119,7 +119,7 @@ private function getFirstEditedDate(Wiki $wiki): ?CarbonInterface {
119119

120120
private function getLastEditedDate(Wiki $wiki): ?CarbonInterface {
121121
$allRevisions = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
122-
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
122+
$this->mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php',
123123
[
124124
'action' => 'query',
125125
'format' => 'json',
@@ -137,7 +137,7 @@ private function getLastEditedDate(Wiki $wiki): ?CarbonInterface {
137137
}
138138

139139
$revisionInfo = Http::withHeaders(['host' => $wiki->getAttribute('domain')])->get(
140-
$this->mwHostResolver->getBackendHostForDomain($wiki->domain) . '/w/api.php',
140+
$this->mwHostResolver->getBackendUrlForDomain($wiki->domain) . '/w/api.php',
141141
[
142142
'action' => 'query',
143143
'format' => 'json',

app/Jobs/WikiEntityImportJob.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ private static function domainToOrigin(string $domain): string {
7777

7878
private static function acquireCredentials(string $wikiDomain, MediaWikiHostResolver $mwHostResolver): OAuthCredentials {
7979
$response = Http::withHeaders(['host' => $wikiDomain])->asForm()->post(
80-
$mwHostResolver->getBackendHostForDomain($wikiDomain) . '/w/api.php?action=wbstackPlatformOauthGet&format=json',
80+
$mwHostResolver->getBackendUrlForDomain($wikiDomain) . '/w/api.php?action=wbstackPlatformOauthGet&format=json',
8181
[
8282
'consumerName' => 'WikiEntityImportJob',
8383
'ownerOnly' => '1',

app/Metrics/App/WikiMetrics.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,10 @@ protected function getNumOfTriples(): ?int {
7979
return null;
8080
}
8181

82-
$endpoint = $qsNamespace->backend . '/bigdata/namespace/' . $qsNamespace->namespace . '/sparql';
82+
$endpoint = 'http://' . $qsNamespace->backend
83+
. '/bigdata/namespace/'
84+
. $qsNamespace->namespace
85+
. '/sparql';
8386
$query = 'SELECT (COUNT(*) AS ?triples) WHERE { ?s ?p ?o }';
8487

8588
$response = Http::withHeaders([

app/Services/MediaWikiHostResolver.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ public function getBackendHostForDomain(string $domain): string {
3737
return sprintf('mediawiki-%s-app-backend.default.svc.cluster.local', $this->getMwVersionForDomain($domain));
3838
}
3939

40+
/**
41+
* Laravel Http or Guzzle callers need a full backend URL.
42+
*/
43+
public function getBackendUrlForDomain(string $domain): string {
44+
return 'http://' . $this->getBackendHostForDomain($domain);
45+
}
46+
4047
private function getMwVersionForDomain(string $domain): string {
4148
$wiki = Wiki::where('domain', $domain)->first();
4249

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"absszero/laravel-stackdriver-error-reporting": "^1.9",
1212
"firebase/php-jwt": "^7.0",
1313
"google/recaptcha": "^1.2",
14-
"guzzlehttp/guzzle": "^7.8",
14+
"guzzlehttp/guzzle": "^7.13",
1515
"guzzlehttp/psr7": "^2.9",
1616
"hackzilla/password-generator": "^1.6",
1717
"intervention/image": "^2.5",

composer.lock

Lines changed: 33 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/Commands/RebuildQueryserviceDataTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ protected function setUp(): void {
2525
WikiSetting::query()->delete();
2626
QueryserviceNamespace::query()->delete();
2727

28-
$this->mwBackendHost = 'mediawiki.localhost';
28+
$this->mwBackendHost = 'http://mediawiki.localhost';
2929

3030
$mockMwHostResolver = $this->createMock(MediaWikiHostResolver::class);
31-
$mockMwHostResolver->method('getBackendHostForDomain')->willReturn(
31+
$mockMwHostResolver->method('getBackendUrlForDomain')->willReturn(
3232
$this->mwBackendHost
3333
);
3434

0 commit comments

Comments
 (0)