Spec-Zone.ru › MariaDB

Схема базы данных Buildbot

Эта страница описывает схему базы данных, используемую Buildbot для сохранения результатов тестовых запусков.

Идея заключается в том, чтобы иметь возможность использовать эти данные за пределами Buildbot для таких задач, как дополнительные веб-страницы с результатами тестов или инструменты поиска/обработки данных для поиска сбоев тестов.

Доступ к базе данных

Планируется предоставить членам сообщества удаленные подключения к базе данных. Для этого необходимо настроить сервер-расположение, реплицирующий основную базу данных Buildbot (что, в любом случае, будет полезно для изоляции работающего Buildbot от потенциально высокой нагрузки от запросов).

Однако пока доступ к базе данных доступен только локально на машине (hasky), на которой работает мастер Buildbot.

Схема

Самая свежая информация о используемой схеме доступна в файле buildbot/process/mtrlogobserver.py в исходном коде Buildbot. По мере развития кода и предоставления большего количества типов информации в базе данных схема может быть расширена, но описание схемы в исходном коде всегда должно быть актуальным.

Таблица test_run

В этой таблице содержится по одной строке для каждого тестового запуска, выполняемого Buildbot. Таким образом, каждая строка соответствует одной ячейке в [http://askmonty.org/buildbot/waterfall Waterfall display]. Формат таблицы следующий:

CREATE TABLE test_run(
    id INT PRIMARY KEY AUTO_INCREMENT,
    branch VARCHAR(100),
    revision VARCHAR(32) NOT NULL,
    platform VARCHAR(100) NOT NULL,
    dt TIMESTAMP NOT NULL,
    bbnum INT NOT NULL,
    typ VARCHAR(32) NOT NULL,
    info VARCHAR(255),
    KEY (branch, revision),
    KEY (dt),
    KEY (platform, bbnum)
) ENGINE=innodb
  • id: Первичный ключ, просто идентификатор с автоинкрементом.
  • branch: Это имя ветки bzr тестового запуска.
  • revision: Номер ревизии Bzr, которая тестировалась.
  • platform: Название билдера, который выполнил тест.
  • dt: Дата начала запуска Buildbot.
  • bbnum: Номер сборки Buildbot, который вместе с platform уникально идентифицирует сборку в Buildbot.
  • typ: Краткий аббревиатурный способ описания типа теста. Например, pr для --ps-protocol со строчной репликацией или nm для обычного запуска с репликацией в смешанном режиме.
  • info: Краткое текстовое описание типа тестового запуска.

Таблица test_failure

В этой таблице содержится по одной строке для каждого сбоя теста:

CREATE TABLE test_failure(
    test_run_id INT NOT NULL,
    test_name VARCHAR(100) NOT NULL,
    test_variant VARCHAR(16) NOT NULL,
    info_text VARCHAR(255),
    failure_text TEXT,
    PRIMARY KEY (test_run_id, test_name, test_variant)
) ENGINE=innodb
  • test_run_id: Идентифицирует тестовый запуск, в котором произошел сбой теста (например, это внешний ключ для id в таблице test_run).
  • test_name: Название теста, который завершился сбоем, например, main.information_schema.
  • test_variant: Некоторые тесты выполняются несколько раз в разных вариантах. Например, многие тесты репликации выполняются при использовании репликации на основе утверждений, смешанного режима и репликации на основе строк. Вариант соответственно будет 'stmt', 'mix' или 'row'. Для тестов, которые не имеют нескольких вариантов, значение будет пустой строкой (т.е. не значение NULL).
  • info_text: Это короткое описание, которое иногда предоставляет mysql-test-run.pl для некоторых видов сбоев тестов (например, "timeout").
  • failure_text: Это весь вывод mysql-test-run.pl, касающийся данного сбоя теста. Обычно он содержит разницу с результатами файла, стек-трейс для сбоя и т. д. Это полезно для выполнения LIKE запросов при поиске сбоев тестов, похожих на тот, который исследуется.

Таблица test_warnings

Эта таблица содержит информацию о проблемах с тестами, которые были обнаружены после выполнения тестового случая, во время перезагрузки сервера (обычно путем поиска сообщения об ошибке или предупреждении в файлах журнала ошибок сервера). Типичным примером этого является утечка памяти или сбой при завершении работы сервера.

Такой сбой нельзя отнести к конкретному тестовому случаю, так как он может быть вызван любым из тестов, выполненных на сервере с момента последней перезагрузки, или это может быть общая проблема, не вызванная никаким тестовым случаем. Вместо этого для каждого случая эта таблица предоставляет список имен тестов, которые выполнялись сервером до обнаружения ошибки или предупреждения.

CREATE TABLE test_warnings(
    test_run_id INT NOT NULL,
    list_id INT NOT NULL,
    list_idx INT NOT NULL,
    test_name VARCHAR(100) NOT NULL,
    PRIMARY KEY (test_run_id, list_id, list_idx)
) ENGINE=innodb
  • test_run_id: Идентифицирует соответствующую строку в таблице <code>test_run</code>.
  • list_id: Это счётчик случаев предупреждений в каждом тестовом запуске (т.е. он начинается с 0 снова для каждого значения <code>test_run_id</code>).
  • list_idx: Это счётчик для каждого имени теста (т.е. он начинается с 0 снова для каждого значения <code>test_run_id</code> и <code>list_id</code>).
  • test_name: Имя тестового запуска, выполненного сервером до появления предупреждения.

Примеры запросов

Показать все платформы, которые завершились сбоем для определенной ревизии определенной ветки:

select platform
  from test_run r
where branch = 'mysql-6.0-testing2'
  and revision = '2819'
  and (exists (select * from test_failure f where f.test_run_id = r.id)
    or exists (select * from test_warnings w where w.test_run_id = r.id));

Найти сбои, похожие на заданный, который исследуется:

select branch, revision, platform, test_name, test_variant, failure_text
  from  test_failure f
  inner join test_run r on (f.test_run_id = r.id)
  where failure_text LIKE "%--protocol=TCP' failed%";

Проверить, в каких ветках произошел конкретный тип сбоя:

select branch, count(*)
  from test_failure f
  inner join test_run r on (f.test_run_id = r.id)
  where failure_text LIKE "%--protocol=TCP' failed%"
  group by branch;

Найти все тестовые запуски, где данный тест выполнялся на сервере, который позже имел предупреждения в журнале ошибок, и также подсчитать количество случаев этого события в каждом запуске:

select branch, revision, platform, count(*)
  from test_warnings w
  inner join test_run r on (w.test_run_id = r.id)
  where test_name = 'rpl.rpl_plugin_load'
  group by r.id;
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/buildbot-buildbot-database-schema/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API