Manual:Maxlag parameter/uk

Якщо ви використовуєте MediaWiki в кластері реплікованих баз даних (наприклад, у Вікімедіа), то висока швидкість редагування може призвести до затримки серверів-реплік. Одним із способів зменшення затримки реплікації є автоматичне зупинення всіх ботів і завдань обслуговування щоразу, коли затримка перевищує певне значення. У MediaWiki 1.10 був представлений параметр maxlag, який дозволяє робити те саме в клієнтських сценаріях. У 1.27 він був оновлений, щоб працювати тільки для запитів.

Параметр maxlag може передаватися до api.php через параметр URL або дані POST. Він задається цілим числом секунд. Наприклад, [/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=1 це посилання] показує метадані про сторінку "MediaWiki", тільки якщо затримка перевищує 1 секунду, тоді як [/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1 це] (з -1 у кінці) показує фактичну затримку без метаданих.

Якщо вказаний лаг перевищено під час запиту, то повертається код стану 503 (або 200 при запитах API, див. ), з тілом відповіді у такому форматі:

Встановлено такі заголовки HTTP:


 * Retry-After: рекомендована мінімальна кількість секунд, яку клієнт повинен почекати, перш ніж повторити спробу
 * X-Database-Lag: кількість секунд затримки найбільш відсталої репліки

Рекомендоване використання для вікі Вікімедіа:


 * Використовуйте maxlag=5 (5 секунд). Це відповідне неагресивне значення, встановлене як значення за замовчуванням у Pywikibot.  Вищі значення означають агресивнішу поведінку, нижчі значення — прийнятнішу.
 * Якщо ви отримали помилку затримки (lag error), призупиніть сценарій принаймні на 5 секунд, перш ніж повторити спробу. Будьте обережні, щоб не потрапити в цикл активного очікування.
 * Можливо, що з цим значенням ви можете отримати повільний робочий цикл під час великого завантаження бази даних. Це нормально, просто перечекайте пік.  Ми надаємо людям пріоритет під час великих навантажень, оскільки ми не хочемо тратити їхній час, відкидаючи їхні редагування.
 * Про незвично високу або постійну затримку треба повідомити на IRC.
 * В інтерактивних завданнях (коли користувач чекає на результат) параметр maxlag може бути опущений. Неінтерактивні завдання завжди повинні його використовувати. Див. також API:Etiquette/uk#Параметр_maxlag.

Зауважте, що рівень кешування (Varnish або squid) також може генерувати повідомлення про помилки з кодом стану 503 через блокування за часом вищого сервера. Клієнти повинні по-різному ставитися до цих помилок, оскільки вони можуть виникати постійно, коли ви намагаєтесь виконати довготривалу затратну операцію. Повторення операції з тайм-аутом буде використовувати надмірні ресурси сервера і може залишити вашого клієнта в нескінченному циклі. Ви можете розрізняти помилки шару кешу та умови затримки MediaWiki, використовуючи будь-що з наведеного нижче:


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

Для цілей тестування ви можете навмисно розробити програмне забезпечення, що відмовляється від запиту, передаючи від'ємне значення, наприклад, у такій URL-адресі: [/w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1 /w/api.php?action=query&titles=MediaWiki&format=json&maxlag=-1].