Manual:Maxlag parameter/fr

Si vous utilisez MediaWiki sur un cluster de base de données répliquée (tout comme Wikimedia), alors un taux de modifications élevé peut se traduire par des ralentissements sur les serveurs esclaves. Un moyen de limiter le ralentissement de l'esclave est d'avoir tous les bots et toutes les tâches de maintenance qui s'arrêtent automatiquement si le ralentissement dépasse une certaine valeur. Dans MediaWiki 1.10, le paramètre maxlag a été introduit. Il permet que la même chose soit faite dans des scripts du côté client. Dans 1.27, il a été mise à jour pour ne fonctionner que pour les requêtes.

Le paramètre maxlag peut être passé à api.php via un paramètre d'URL ou une donnée POST. Il s'agit d'un nombre entier de secondes. Par exemple, [/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=1 ce lien] montre des métadonnées sur la page « MediaWiki » à moins que le ralentissement soit supérieur à 1 seconde tandis que [/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1 celui-là] (avec -1 à la fin) vous montre le ralentissement actuel sans métadonnées..

Si le ralentissement indiqué excède le temps de la requête, un code 503 est renvoyé (ou 200 pendant des requêtes API, voirT33156), avec un réponse qui suit le format suivant :

Les en-têtes HTTP suivants sont réglés :


 * Retry-After : un nombre minimum de secondes recommandé que le client doit attendre avec de réessayer
 * X-Database-Lag : le nombre de secondes de ralentissement de l’esclave le plus ralenti

Un usage recommandé pour les wikis de Wikimedia est le suivant :


 * Utiliser maxlag=5 (5 secondes). Il s'agit d'une valeur appropriée non-agressive, réglé par défaut pour Pywikibot. Des valeurs plus grandes signifie un comportement plus agressif, des valeurs plus faibles sont plus sympas.
 * Si vous obtenez une erreur de ralentissement, mettez en pause votre script pour au moins 5 secondes avant de réessayer. Soyez attentif de ne pas entrer dans une boucle sans cesse occupée.
 * Il est possible qu’avec cette valeur vous obteniez un court délai d’attente lorsque la base de données subit une forte activité. C’est normal, laissez la simplement requête attendre une baisse d’activité. En période de forte activité, nous donnons la priorité aux humains parce que nous ne voulons pas faire perdre leur temps en rejetant leurs modifications.
 * Un délai de ralentissement inhabituellement élevé ou persistant devrait être signalé sur irc.freenode.net.

Notez qu’un serveur frontal de cache (Varnish ou squid) peut également générer des messages d’erreur avec un code de statut 503, à cause de dépassement du délai maximal d’attente d’un serveur en amont. Les clients devraient traiter ces erreurs différemment, parce qu’elles peuvent survenir de façon systématique lorsque vous tentez une opération intensive longue à exécuter. La répétition automatique de l’opération suite à un dépassement de délai provoquerait un usage excessif du serveur et pourrait conduire votre client à entrer dans une boucle infinie d’attente. Vous pouvez distinguer les erreurs provenant d’un frontal de cache et les conditions normales de ralentissement de MediaWiki en utilisant un de ces moyens :


 * X-Database-Lag header is distinctive to slave lag errors in MediaWiki
 * No Retry-After in Varnish errors
 * X-Squid-Error header should be present in squid errors
 * The response body in slave lag errors will match the regex

For testing purposes, you may intentionally make the software refuse a request by passing a negative value, such as in the following URL: [/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1 /w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1].

The maxlag parameter is checked in Wiki.php, and also applies to the action API.