Agent Skillsglommer/pgmicro › transaction-correctness

transaction-correctness

GitHub

解析 Turso 数据库的事务正确性机制,涵盖 WAL 读写路径、检查点策略、并发控制、崩溃恢复及内存索引实现,确保 ACID 特性。

.claude/skills/transaction-correctness/SKILL.md glommer/pgmicro

Trigger Scenarios

查询 Turso 事务一致性原理 了解 WAL 检查点机制 分析 Turso 并发与恢复逻辑

Install

npx skills add glommer/pgmicro --skill transaction-correctness -g -y
More Options

Non-standard path

npx skills add https://github.com/glommer/pgmicro/tree/master/.claude/skills/transaction-correctness -g -y

Use without installing

npx skills use glommer/pgmicro@transaction-correctness

指定 Agent (Claude Code)

npx skills add glommer/pgmicro --skill transaction-correctness -a claude-code -g -y

安装 repo 全部 skill

npx skills add glommer/pgmicro --all -g -y

预览 repo 内 skill

npx skills add glommer/pgmicro --list

SKILL.md

Frontmatter
{
    "name": "transaction-correctness",
    "description": "How WAL mechanics, checkpointing, concurrency rules, recovery work in tursodb"
}

Transaction Correctness Guide

Turso uses WAL (Write-Ahead Logging) mode exclusively.

Files: .db, .db-wal (no .db-shm - Turso uses in-memory WAL index)

WAL Mechanics

Write Path

  1. Writer appends frames (page data) to WAL file (sequential I/O)
  2. COMMIT = frame with non-zero db_size in header (marks transaction end)
  3. Original DB unchanged until checkpoint

Read Path

  1. Reader acquires read mark (mxFrame = last valid commit frame)
  2. For each page: check WAL up to mxFrame, fall back to main DB
  3. Reader sees consistent snapshot at its read mark

Checkpointing

Transfers WAL content back to main DB.

WAL grows → checkpoint triggered (default: 1000 pages) → pages copied to DB → WAL reused

Checkpoint types:

  • PASSIVE: Non-blocking, stops at pages needed by active readers
  • FULL: Waits for readers, checkpoints everything
  • RESTART: Like FULL, also resets WAL to beginning
  • TRUNCATE: Like RESTART, also truncates WAL file to zero length

WAL-Index

SQLite uses a shared memory file (-shm) for WAL index. Turso does not - it uses in-memory data structures (frame_cache hashmap, atomic read marks) since multi-process access is not supported.

Concurrency Rules

  • One writer at a time
  • Readers don't block writer, writer doesn't block readers
  • Checkpoint must stop at pages needed by active readers

Recovery

On crash:

  1. First connection acquires exclusive lock
  2. Replays valid commits from WAL
  3. Releases lock, normal operation resumes

Turso Implementation

Key files:

Connection-Private vs Shared

Per-Connection (private):

  • Pager - page cache, dirty pages, savepoints, commit state
  • WalFile - connection's snapshot view:
    • max_frame / min_frame - frame range for this connection's snapshot
    • max_frame_read_lock_index - which read lock slot this connection holds
    • last_checksum - rolling checksum state

Shared across connections:

  • WalFileShared - global WAL state:
    • frame_cache - page-to-frame index (replaces .shm file)
    • max_frame / nbackfills - global WAL progress
    • read_locks[5] - read mark slots (TursoRwLock with embedded frame values)
    • write_lock - exclusive writer lock
    • checkpoint_lock - checkpoint serialization
    • file - WAL file handle
  • DatabaseStorage - main .db file
  • BufferPool - shared memory allocation

Correctness Invariants

  1. Durability: COMMIT record must be fsynced before returning success
  2. Atomicity: Partial transactions never visible to readers
  3. Isolation: Each reader sees consistent snapshot
  4. No lost updates: Checkpoint can't overwrite uncommitted changes

References

Version History

  • 3a97846 Current 2026-07-05 20:23

Same Skill Collection

.claude/skills/async-io-model/SKILL.md
.claude/skills/cdc/SKILL.md
.claude/skills/code-quality/SKILL.md
.claude/skills/debugging/SKILL.md
.claude/skills/differential-fuzzer/SKILL.md
.claude/skills/index-knowledge/SKILL.md
.claude/skills/mvcc/SKILL.md
.claude/skills/pr-workflow/SKILL.md
.claude/skills/storage-format/SKILL.md
.claude/skills/testing/SKILL.md
.claude/skills/memory-benchmark/SKILL.md

Metadata

Files
0
Version
3a97846
Hash
89d7e0b9
Indexed
2026-07-05 20:23

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-08 22:21
浙ICP备14020137号-1 $Гость$