Page MenuHomePhabricator

Wikibase Cloud Discovery page broken due to api error
Closed, ResolvedPublic

Description

Wikibase Cloud discovery page fails with the error: Failed to collect Wikibase stats. This was first reported by a user on telegram on April 9th.

See screen shot:

image.png (267×1 px, 16 KB)

This is due to a 500 from the platform api from the request to https://api.wikibase.cloud/wiki?sort=pages&direction=desc&is_active=1&page=1&per_page=24

What I can see in the logs is entries like

https://console.cloud.google.com/logs/query;cursorTimestamp=2024-04-16T14:15:04.928251464Z;duration=PT1H;query=resource.labels.container_name%3D%22api-web%22%0Atimestamp%3D%222024-04-16T14:15:04.928251464Z%22%0AinsertId%3D%22no2a3g5k58xj6qjw%22?project=wikibase-cloud

[2024-04-16 14:15:04] production.ERROR: SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row (Connection: mysql, SQL: select * from `wikis` where exists (select * from `wiki_site_stats` where `wikis`.`id` = `wiki_site_stats`.`wiki_id` and `pages` >= 2) and `wikis`.`deleted_at` is null order by (select `pages` from `wiki_site_stats` where `wiki_site_stats`.`wiki_id` = `wikis`.`id`) desc limit 24 offset 0) {"exception":"[object] (Illuminate\\Database\\QueryException(code: 21000): SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row (Connection: mysql, SQL: select * from `wikis` where exists (select * from `wiki_site_stats` where `wikis`.`id` = `wiki_site_stats`.`wiki_id` and `pages` >= 2) and `wikis`.`deleted_at` is null order by (select `pages` from `wiki_site_stats` where `wiki_site_stats`.`wiki_id` = `wikis`.`id`) desc limit 24 offset 0) at

Event Timeline

First occurrence was 4 April 2024 at 22:02:00 UTC+1

WikiSiteStats objects 808/809 and 811/812 have duplicate wiki ids

Found using

$duplicateWikiIds = WikiSiteStats::selectRaw('wiki_id, count(*) as count')
    ->groupBy('wiki_id')
    ->havingRaw('count(*) > 1')
    ->pluck('wiki_id');

$duplicateRecords = WikiSiteStats::whereIn('wiki_id', $duplicateWikiIds)->get();

return $duplicateRecords;

Ran

> WikiSiteStats::find(812)->delete()
= true

> WikiSiteStats::find(809)->delete()
= true

Pull Request for making API more robust regarding this kind of error: https://github.com/wbstack/api/pull/785