Об этом проекте

ChaosSQL — это инструмент для тестирования, направленный на поиск дефектов конкурентности в базах данных. Согласно README, он выполняет детерминированное тестирование конкурентности и инвариантов для PostgreSQL, MySQL и SQLite с целью выявления скрытого повреждения данных, write skew и потерянных обновлений в CI/CD до того, как они попадут в продакшн. Принцип работы Проект планирует выполнение параллельных транзакций рабочих потоков (worker transactions) относительно схемы и начального набора данных, проверяет определенные пользователем инварианты после выполнения и, при обнаружении нарушения, создает минимальный воспроизводимый пример. Он сообщает детерминированный seed и синтезирует файл теста на Go (repro_test.go), который можно добавить в тестовый набор. В README указано, что вывод включает классификацию аномалий, таких как потерянное обновление (P4) и write skew (A5B). Интерфейсы CLI: автономный бинарный файл устанавливается с помощью go install github.com/bregaldahq/chaossql/cmd/chaossql и не имеет зависимостей CGO. Документированные подкоманды включают run, demo, ui, diff, mutate, swarm и proxy. Демо: десять упакованных сценариев охватывают потерю обновлений в банковской сфере, перепродажу запасов, write skew в больницах, read skew, грязную запись (dirty write), циклический поток информации, грязное чтение (dirty read), антизависимость, циклы взаимных блокировок (deadlock cycles) и взаимные блокировки каскадных внешних ключей. UI: локальный визуализатор трассировки с временной шкалой дорожек рабочих потоков, интерактивным графом зависимостей Adya, сравнением полного трейса с сокращенным минимальным воспроизведением и инспектором операторов, отображающим SQL, параметры и задержки. SDK: пакет Go (pkg/chaostest) интегрируется с go test; пакет Python, устанавливаемый через pip, работает с pytest и unittest и предлагает фикстуру pytest; пакет TypeScript (at-chaossql-test в npm) предназначен для Vitest, Jest и Node.js test runner. Отчетность: экспорт в формате SARIF 2.1.0 для GitHub Code Scanning с правилами, сопоставленными с CWE-362. CI: GitHub Action (bregaldahq/chaossql, в README указана версия v1.5.0) может блокировать pull-запросы при нарушении инвариантов, публиковать комментарии к PR и выводить сводку шага, содержащую минимальный трейс выполнения. Функции многодвижковости и мутации Команда mutate генерирует варианты сценария путем изменения задержек, внедрения вложенных точек сохранения (savepoints), перемешивания причинно-следственных шагов транзакций и инвертирования порядка получения блокировок; она поддерживает флаги вариантов, выходного каталога, seed и JSON. Команда swarm запускает наборы сценариев через несколько драйверов (sqlite, mock, postgres, mysql) с ограниченной конкурентностью, опциональными сводками в Markdown и выводом в JSON. DSN драйверов определяются из переменных окружения POSTGRES_DSN и MYSQL_DSN. Описан безголовый механизм стресс-тестирования на WebAssembly и Web Worker через цель make, с целями по ограничению линейной памяти и неблокирующей компоновке графа во время длительных прогонов. Прокси-сервер уровня 7 chaossql proxy располагается между приложением и базой данных, используя протоколы PostgreSQL 3.0 или MySQL, и внедряет микро-джиттер и барьеры перед коммитом, одновременно выстраивая живой теневой граф сериализации зависимостей, который классифицирует аномалии в реальном времени. Он может экспортировать SARIF и предоставлять веб-интерфейс с JSON-телеметрией на настраиваемом порту. В README указано, что код приложения не требует модификации для его использования. Детали проекта Написан на Go (1.22 или новее, согласно бейджам), лицензия MIT, имеет портал документации, браузерную песочницу на WebAssembly и каталог примеров, на который ссылаются в командах. В README также упоминается облачный сервис с отслеживанием базовых показателей и комментариями к pull-запросам в режиме раннего доступа, а также коммерческий аудит конкурентности от вендора; это услуги поставщика, а не компоненты открытого репозитория.