À propos du projet
ChaosSQL est un outil de test visant les défauts de concurrence des bases de données. Selon son README, il effectue des tests de concurrence déterministes et de tests d'invariants pour PostgreSQL, MySQL et SQLite, et est destiné à faire remonter la corruption silencieuse des données, le write skew et les mises à jour perdues (lost updates) dans le CI/CD avant qu'ils n'atteignent la production.
Fonctionnement
Le projet planifie des transactions de travailleurs concurrents contre un schéma et un ensemble de données d'amorçage, vérifie les invariants définis par l'utilisateur après l'exécution et, lorsqu'une violation apparaît, produit une reproduction minimale. Il rapporte une graine déterministe et un fichier de test de reproduction Go synthétisé (repro_test.go) qui peut être ajouté à une suite de tests. Le README indique que les sorties incluent la classification des anomalies telles que la mise à jour perdue (P4) et le write skew (A5B).
Interfaces
CLI : le binaire autonome est installé avec go install github.com/bregaldahq/chaossql/cmd/chaossql et n'a aucune dépendance CGO. Les sous-commandes documentées incluent run, demo, ui, diff, mutate, swarm et proxy.
Démos : dix scénarios packagés couvrent les mises à jour perdues bancaires, la survente d'inventaire, le write skew hospitalier, le read skew, l'écriture sale (dirty write), le flux d'informations circulaire, la lecture sale (dirty read), l'anti-dépendance, les cycles de deadlock et les deadlocks de cascade de clés étrangères.
UI : un visualiseur de traces local avec une chronologie de couloirs de travailleurs, un graphe de dépendance Adya interactif, une comparaison entre la trace complète et une reproduction minimale réduite, et un inspecteur d'instructions affichant le SQL, les paramètres et les latences.
SDKs : un package Go (pkg/chaostest) s'intègre à go test ; un package Python installé via pip fonctionne avec pytest et unittest et offre un fixture pytest ; un package TypeScript (at-chaossql-test sur npm) cible Vitest, Jest et le test runner de Node.js.
Reporting : export SARIF 2.1.0 pour GitHub Code Scanning, avec des règles mappées au CWE-362.
CI : une GitHub Action (bregaldahq/chaossql, référencée en v1.5.0 dans le README) peut bloquer les pull requests en cas d'échec d'invariant, poster des commentaires de PR et publier un résumé d'étape contenant la trace d'exécution minimale.
Fonctionnalités multi-moteurs et de mutation
mutate génère des variantes d'un scénario en perturbant les délais, en injectant des points de sauvegarde (savepoints) imbriqués, en mélangeant les étapes de transaction causalement valides et en inversant l'ordre d'acquisition des verrous ; il expose des drapeaux pour les variantes, le répertoire de sortie, la graine et le JSON.
swarm exécute des suites de scénarios sur plusieurs pilotes (sqlite, mock, postgres, mysql) avec une concurrence bornée, des résumés Markdown optionnels et une sortie JSON. Les DSN des pilotes sont résolus à partir des variables d'environnement POSTGRES_DSN et MYSQL_DSN.
Un harnais de stress WebAssembly et Web Worker sans tête est décrit via une cible make, avec des objectifs concernant la mémoire linéaire bornée et la disposition du graphe non bloquante lors de longs cycles de stress.
Proxy Layer-7
chaossql proxy se place entre une application et une base de données, parlant le protocole filaire PostgreSQL 3.0 ou MySQL, et injecte du micro-jitter et des barrières de pré-commit tout en construisant un graphe de sérialisation des dépendances fantômes en direct qui classifie les anomalies en temps réel. Il peut exporter du SARIF et servir une UI web avec une télémétrie JSON sur un port configurable. Le README précise que le code de l'application n'a pas besoin d'être modifié pour l'utiliser.
Détails du projet
Écrit en Go (1.22 ou plus récent selon les badges), sous licence MIT, avec un portail de documentation, un terrain de jeu WebAssembly basé sur le navigateur et un répertoire d'exemples référencé tout au long des commandes. Le README mentionne également un service cloud hébergé avec suivi de base et commentaires de pull request en accès anticipé, ainsi que des audits de concurrence commerciaux offerts par le fournisseur ; il s'agit de services du fournisseur et non de composants du dépôt open source.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.