storage-postgres: the data path assumes READ COMMITTED and does not pin it; put_create_race fails under a repeatable read default
I maintainer di solito rispondono entro 4 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 55/100
Direzione di ricerca
Start with crates/storage-postgres/tests/put_create_race.rs and reproduce the failure using PostgreSQL configured with default_transaction_isolation='repeatable read'; compare with the default setting. Then trace pool creation in PostgresEngine::new and data path transaction starts, using backup_engine.rs and data/transactions.rs as examples of explicit isolation levels. Done when the race tests pass under both settings and the required isolation behavior is documented or enforced.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The PostgreSQL backend's data path assumes READ COMMITTED and does not set it. On a server whose default_transaction_isolation is repeatable read, crates/storage-postgres/tests/put_create_race.rs fails 9 of 9 on main 744ea291 with Internal("error returned from database: could not serialize access due to concurrent update") (SQLSTATE 40001) from the put path, where a READ COMMITTED server passes all nine.
Measured 2026-10-25 on pgvector/pgvector:pg16 started with -c default_transaction_isolation='repeatable read'; the same tests pass on the same image with the default setting.
Cause
PostgresEngine::new builds both pools with PgPoolOptions::new().connect(...) and no isolation setting, and the data-path transactions open with pool.begin(). The setting is operator-reachable from the connection string (options=-c default_transaction_isolation=...), ALTER DATABASE, ALTER ROLE and postgresql.conf. The crate does pin a level where it wants one (begin_with("BEGIN ISOLATION LEVEL REPEATABLE READ READ ONLY") in backup_engine.rs and data/transactions.rs), and #569 pins READ COMMITTED on update_table's transaction, so the mechanism is there; the rest of the control plane and the data path inherit the default.
Under REPEATABLE READ the create-race retry (an INSERT ... ON CONFLICT loser re-reading the winner's row) and every SELECT ... FOR UPDATE after a prior statement in the same transaction see the first statement's snapshot, and a row committed after it raises 40001 instead of being re-read, which the engine answers as a 500.
Fix shape
Either pin READ COMMITTED once per connection (after_connect on the pool running SET default_transaction_isolation = 'read committed'), which covers every transaction the crate opens, or open each transaction with begin_with("BEGIN ISOLATION LEVEL READ COMMITTED"). The pool hook is one place; state in the operator docs that the backend requires it. A CI job variant that starts the container with repeatable read would pin it.
- Lingua principale
- Rust
- Stelle
- 517
- Fork
- 60
- Merge medio
- 4g 22h
- PR unite (30g)
- 40
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ExtendDB/extenddb
-
extenddb version prints the first build's commit after a rebuild in the same target directoryAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 4 giorni
-
Launch-prep: scope statement + backend tiers + version policyForse già presa @navareamol l’ha presa oggi. Aperta
Difficoltà 2/5 3-5 giorni Idoneità per principianti 65/100
ExtendDB/extenddb#662 · 1 assegnatario ·
I maintainer di solito rispondono entro 4 giorni
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
ExtendDB/extenddb#658 · 1 commento ·
I maintainer di solito rispondono entro 4 giorni
-
backend:postgresql bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 4 giorni
Tutte le issue di ExtendDB/extenddb
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Y-ASLant/ElegantClipboard#178 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
linxiv-dev/linXiv#384 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug drawings ui
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
userFRM/egui-charts#1595 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
smoltcp-rs/smoltcp#1235 ·
I maintainer di solito rispondono entro 1 giorno
-
scope:core type:security
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno