Manuel:$wgPoolCounterConf

This page is a translated version of the page Manual:$wgPoolCounterConf and the translation is 84% complete.
Contournements des performances et limites: $wgPoolCounterConf
Configuration pour le contrôle du pool de traitement.
Introduit dans la version :1.16.0 (r52888)
Retiré dans la version :Encore utilisé
Valeurs autorisées :(tableau) ou $1
Valeur par défaut :null

Détails

Configuration pour le contrôle du pool de traitement, pour une utilisation dans les wikis à fort trafic.

Ce tableau de configuration associe les types de pool aux configurations des clients. Une configuration client est un tableau associatif avec une clé class'' donnant le nom de classe du client (qui devrait être une sous-classe de PoolCounter), et tous les autres éléments qui sont passés au constructeur de classe. Le constructeur reçoit trois arguments : le tableau de configuration, le type pool et un nom de file d’attente. (Le type de pool est utilisé pour identifier le type de travail. Le nom de la file d’attente détermine les requêtes qui tentent de faire le même travail. Par exemple, le pool type pourrait être le rendu d’article, et le nom de la file d’attente l’ID de la révision qui est rendue.)

Une implémentation utilisant Redis (code>PoolCounterRedis/code>) est incluse avec MediaWiki, et une autre utilisant un démon C (code>PoolCounter_Client/code>) est disponible dans Extension:PoolCounter .

Types de pool

Types de pool qui peuvent être utilisés comme clés pour le tableau $wgPoolCounterConf. Plus de types peuvent être offerts par des extensions:

ArticleView
Lors du rendu du contenu d’une page qui n’est pas dans le cache de l’analyseur (y compris les anciennes versions d’une page).
GetLocalFileCopy
Lors de la récupération d’un fichier de plus de 10 Mo vers le chemin local pour thumbnailing.
diff
Lors du rendu d’un diff, si la taille de l’ancien et du nouveau texte est supérieure à 20000 caractères.

Options de configuration partagées par tous les clients

timeout
Délai d’attente en secondes.
workers
Nombre maximum de threads actifs dans chaque pool. D’autres travailleurs attendront qu’une place soit libérée.
maxqueue
Nombre maximum de threads totaux dans chaque pool. (Si ce nombre de travailleurs est déjà au travail/en attente, échouer au lieu d’attendre)
slots
Nombre maximal de travailleurs travaillant sur ce type de tâche, peu importe le nom de la file d’attente. 0 signifie illimité. La valeur maximale autorisée est 65536. La façon dont la limite de logement est appliquée est trop zélée - cette option devrait être utilisée avec prudence.

Options de configuration supplémentaires pour l’implémentation de Redis

servers
Liste des adresses de serveur Redis.
redisConfig
Tableau de configuration supplémentaire pour RedisConnectionPool.

Utilisation

Pour utiliser PoolCounter, sous-classe la classe PoolCounterWork (ou utilisez PoolCounterWorkViaCallback> qui peut implémenter des fonctionnalités arbitraires avec des fonctions anonymes). Trois méthodes/rappels peuvent être mis en œuvre:

doWork()
appelé lorsque le worker est le premier à travailler sur la tâche donnée (également lorsque le serveur PoolCounter est en panne). Renvoie le résultat du travail.
getCachedWork()
called when the worker had to wait on another worker and that worker has finished. Can be used to get a result that has been cached by doWork(). If not implemented or returns false, doWork() will be called.
fallback()
called on wait timeout or when there are too many workers waiting already. Can be used to return some not so good but cheap result (e.g. showing a cached older revision instead of rendering the new one). If not implemented or returns false, error() will be called.
error()
Can be used to show an error.

Exemple

Exemple de configurationː

$wgPoolCounterConf = [
    'ArticleView' => [
        'class' => MediaWiki\Extension\PoolCounter\Client::class,
        'timeout' => 15, // wait timeout in seconds
        'workers' => 5, // maximum number of active threads in each pool
        'maxqueue' => 50, // maximum number of total threads in each pool
    ]
];

Exemple d’utilisation de PoolCounter:

// get a thumbnail for $file
$work = new PoolCounterWorkViaCallback( 'FileRender', sha1( $file->getName() ), [
    'doWork' => function () use ( $file, $params ) {
        return $file->transform( $params, File::RENDER_NOW );
    },
    'doCachedWork' => function () use ( $file, $params, $thumbPath ) {
        return $file->getRepo()->fileExists( $thumbPath ) ? $file->transform( $params, File::RENDER_NOW ) : false;
    },
    'error' => function ( Status $status ) {
        return wfMessage( 'generic-pool-error' )->parse() . '<hr>' . $status->getHTML();
    }
] );
$result = $work->execute();

Voir aussi