diff --git a/slides/images/01-cover.png b/slides/images/01-cover.png index 3d94b0b..2197dbb 100644 Binary files a/slides/images/01-cover.png and b/slides/images/01-cover.png differ diff --git a/slides/images/05-model.png b/slides/images/05-model.png index cb35810..0b4a7e7 100644 Binary files a/slides/images/05-model.png and b/slides/images/05-model.png differ diff --git a/slides/images/07-state.png b/slides/images/07-state.png index 9dda4b4..1b8344d 100644 Binary files a/slides/images/07-state.png and b/slides/images/07-state.png differ diff --git a/slides/slides.js b/slides/slides.js index f80a257..6a61df7 100644 --- a/slides/slides.js +++ b/slides/slides.js @@ -55,18 +55,7 @@ const slides = [ ] }, { - eyebrow: '06 / Safe Claim', - title: 'PostgreSQL Chooses the Winner', - subtitle: 'Atomic claim uses row locks and SKIP LOCKED to avoid double execution.', - image: 'images/06-claim.png', - notes: [ - 'The worker selects the next eligible queued job ordered by priority, available_at, created_at, and id.', - 'Inside one transaction, it uses SELECT ... FOR UPDATE SKIP LOCKED, then marks the row running, increments attempts, and sets the lease.', - 'When many threads race, one locks the row; the others skip it instead of waiting and accidentally claiming the same job.' - ] - }, - { - eyebrow: '07 / State', + eyebrow: '06 / State', title: 'Status Transitions Are Explicit', subtitle: 'The queue allows only meaningful movement between queued, running, succeeded, and failed.', image: 'images/07-state.png', @@ -76,6 +65,17 @@ const slides = [ 'When attempts are exhausted, the job becomes failed. Manual retry can move failed back to queued and resets the attempt count.' ] }, + { + eyebrow: '07 / Safe Claim', + title: 'PostgreSQL Chooses the Winner', + subtitle: 'Atomic claim uses row locks and SKIP LOCKED to avoid double execution.', + image: 'images/06-claim.png', + notes: [ + 'The worker selects the next eligible queued job ordered by priority, available_at, created_at, and id.', + 'Inside one transaction, it uses SELECT ... FOR UPDATE SKIP LOCKED, then marks the row running, increments attempts, and sets the lease.', + 'When many threads race, one locks the row; the others skip it instead of waiting and accidentally claiming the same job.' + ] + }, { eyebrow: '08 / Ownership', title: 'Current Owner + Attempt Is the Write Token',