このプロジェクトについて

ChaosSQLは、データベースの並行性欠陥を対象としたテストツールです。READMEによると、PostgreSQL、MySQL、SQLiteに対して決定論的な並行性テストおよび不変量テストを実行し、サイレントデータ破損、書き込みスキュー(write skew)、ロストアップデート(lost updates)を、本番環境に到達する前にCI/CDで表面化させることを目的としています。 動作原理 このプロジェクトは、スキーマとシードデータセットに対して並行して動作するワーカー・トランザクションをスケジューリングし、実行後にユーザー定義の不変量をチェックします。違反が発生した場合は、最小限の再現ケースを生成します。決定論的なシードと、テストスイートに追加可能な合成されたGo再現テストファイル(repro_test.go)をレポートします。READMEでは、出力にロストアップデート(P4)や書き込みスキュー(A5B)などのアノマリー分類が含まれると記載されています。 インターフェース CLI: スタンドアロンバイナリは go install github.com/bregaldahq/chaossql/cmd/chaossql でインストールでき、CGO依存関係はありません。ドキュメント化されているサブコマンドには、run、demo、ui、diff、mutate、swarm、proxyがあります。 デモ: 銀行のロストアップデート、在庫のオーバーセル、病院の書き込みスキュー、リードスキュー、ダーティライト、循環情報フロー、ダーティリード、アンチ依存関係、デッドロックサイクル、外部キーカスケードデッドロックの10個のパッケージ化されたシナリオが用意されています。 UI: ワーカーのスイムレーンタイムライン、インタラクティブなAdya依存関係グラフ、フルトレースと縮小された最小再現ケースの比較、およびSQL、パラメータ、レイテンシを表示するステートメントインスペクタを備えたローカルトレースビジュアライザを提供します。 SDK: Goパッケージ(pkg/chaostest)は go test と統合されます。pipからインストールされるPythonパッケージは pytest および unittest と動作し、pytestフィクスチャを提供します。TypeScriptパッケージ(npm上の at-chaossql-test)は Vitest、Jest、Node.jsテストランナーを対象としています。 レポート: GitHub Code Scanning用のSARIF 2.1.0エクスポートに対応しており、ルールはCWE-362にマッピングされています。 CI: GitHub Action(bregaldahq/chaossql、READMEではv1.5.0として参照)を使用すると、不変量の失敗時にプルリクエストをブロックし、PRにコメントを投稿し、最小実行トレースを含むステップサマリーを公開できます。 マルチエンジンおよびミューテーション機能 mutateは、遅延の摂動、ネストされたセーブポイントの注入、因果的に有効なトランザクションステップのシャッフル、ロック取得順序の反転などによって、シナリオのバリアントを生成します。バリアント、出力ディレクトリ、シード、JSONフラグを公開しています。 swarmは、制限された並行性を用いて、複数のドライバ(sqlite、mock、postgres、mysql)にわたってシナリオスイートを実行し、オプションでMarkdownサマリーとJSON出力を提供します。ドライバのDSNは、POSTGRES_DSNおよびMYSQL_DSN環境変数から解決されます。 makeターゲットを通じて、ヘッドレスのWebAssemblyおよびWeb Workerストレスハーネスが記述されており、長いストレス実行中の制限された線形メモリと非ブロッキングのグラフレイアウトを目標としています。 レイヤー7プロキシ chaossql proxyはアプリケーションとデータベースの間に配置され、PostgreSQL 3.0またはMySQLワイヤプロトコルを使用して通信します。マイクロジッターとプリコミットバリアを注入しながら、リアルタイムでアノマリーを分類するライブシャドウ依存関係シリアル化グラフを構築します。SARIFのエクスポートが可能で、設定可能なポートでJSONテレメトリを持つWeb UIを提供します。READMEによると、これを使用するためにアプリケーションコードを変更する必要はありません。 プロジェクト詳細 Go(バッジによると1.22以降)で記述されており、MITライセンスで提供されています。ドキュメントポータル、ブラウザベースのWebAssemblyプレイグラウンド、およびコマンド全体で参照されるexamplesディレクトリを備えています。また、READMEでは、ベースライン追跡とプルリクエストコメント機能を備えた早期アクセス向けのホスト型クラウドサービスと、ベンダーによる商用並行性監査についても言及されています。これらはベンダー提供のサービスであり、オープンリポジトリのコンポーネントではありません。