v0.3.14-pre.008-fix.001
This commit is contained in:
172
deltas/0.3.14/pre.008-fix.001.md
Normal file
172
deltas/0.3.14/pre.008-fix.001.md
Normal file
@@ -0,0 +1,172 @@
|
||||
<!-- file: deltas/0.3.14/pre.008-fix.001.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta `0.3.14-pre.008-fix.001` — libération du guard avant `await`
|
||||
|
||||
## Base requise
|
||||
|
||||
```text
|
||||
0.3.14-pre.008
|
||||
workspace.package.version = 0.3.14-pre.8
|
||||
deltas/0.3.14/pre.008.md présent
|
||||
```
|
||||
|
||||
## Objectif
|
||||
|
||||
Corriger strictement la tranche `pre.008` après le gate opérateur, sans modifier sa responsabilité fonctionnelle :
|
||||
|
||||
```text
|
||||
rendre le future du supervisor Send
|
||||
ne jamais conserver un std::sync::MutexGuard à travers un await
|
||||
préserver exactement la décision source-loss de pre.008
|
||||
ne pas avancer la health policy prévue en pre.009
|
||||
```
|
||||
|
||||
## Défaut observé
|
||||
|
||||
Le gate opérateur de `0.3.14-pre.008` a produit :
|
||||
|
||||
```text
|
||||
cargo fmt --all : PASS
|
||||
cargo fmt --all -- --check : PASS
|
||||
audit Rust workspace rules : PASS
|
||||
audit Markdown tables : PASS
|
||||
cargo check --workspace : FAIL
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings : FAIL
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features : compilation impossible sur le même défaut Send
|
||||
```
|
||||
|
||||
Le compilateur refuse le future de `supervise_live_source_tasks` :
|
||||
|
||||
```text
|
||||
future cannot be sent between threads safely
|
||||
std::sync::MutexGuard<RawTransactionIngestSourceInventory> is not Send
|
||||
await dans drain_live_source_tasks alors que le guard peut encore être vivant
|
||||
```
|
||||
|
||||
## Cause
|
||||
|
||||
`pre.008` appelait `inventory.supervisor_state()` dans un bloc qui contenait aussi la branche d'erreur avec `drain_live_source_tasks(...).await`.
|
||||
|
||||
Même si le guard n'est pas utilisé après `supervisor_state()`, sa portée lexicale englobait la branche asynchrone. Le compilateur devait donc considérer que le `std::sync::MutexGuard` pouvait traverser l'`await`, ce qui rendait le future non-`Send` et interdisait son utilisation dans `JoinSet::spawn` et `tokio::spawn`.
|
||||
|
||||
## Correction
|
||||
|
||||
La lecture synchronisée de l'inventaire est séparée en deux étapes :
|
||||
|
||||
```text
|
||||
1. verrouiller inventory et calculer supervisor_state() dans un bloc strictement synchrone
|
||||
2. sortir de ce bloc, donc détruire le MutexGuard
|
||||
3. seulement ensuite traiter Result et éventuellement await drain_live_source_tasks(...)
|
||||
```
|
||||
|
||||
Aucun `tokio::Mutex` n'est introduit. Aucun lock n'est conservé pendant une attente asynchrone.
|
||||
|
||||
La valeur, les erreurs et les décisions issues de `supervisor_state()` restent identiques.
|
||||
|
||||
## Fichiers ajoutés
|
||||
|
||||
```text
|
||||
deltas/0.3.14/pre.008-fix.001.md
|
||||
```
|
||||
|
||||
## Fichiers modifiés
|
||||
|
||||
```text
|
||||
Cargo.toml
|
||||
crates/ksp-worker-raw-transaction-ingest-lib/src/runtime_resources.rs
|
||||
```
|
||||
|
||||
## Fichiers supprimés
|
||||
|
||||
```text
|
||||
aucun
|
||||
```
|
||||
|
||||
## Version Cargo
|
||||
|
||||
Le fix modifie du code Rust ; conformément à `VER-ID-007` et `VER-ID-010` :
|
||||
|
||||
```text
|
||||
header Cargo.toml : 576 -> 577
|
||||
workspace.package.version : 0.3.14-pre.8 -> 0.3.14-pre.8.fix.1
|
||||
```
|
||||
|
||||
Version de fichier :
|
||||
|
||||
```text
|
||||
src/runtime_resources.rs : 35 -> 36
|
||||
```
|
||||
|
||||
## Frontières préservées
|
||||
|
||||
```text
|
||||
aucun changement de TargetCoverage
|
||||
aucun changement de continuity frontier
|
||||
aucun changement de coverage epoch
|
||||
aucun changement de gap ledger
|
||||
aucun changement de source-loss classification
|
||||
aucun respawn Worker
|
||||
aucun nouveau scheduler ou task
|
||||
aucun changement Transport
|
||||
aucune nouvelle requête HTTP
|
||||
aucune nouvelle dépendance ou feature
|
||||
aucun accès Config
|
||||
aucun Job Backfill
|
||||
aucun backend Store physique
|
||||
aucune croissance de surface publique
|
||||
```
|
||||
|
||||
## Validations exécutées
|
||||
|
||||
Dans le sandbox de préparation :
|
||||
|
||||
```text
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
|
||||
inspection de la portée du MutexGuard autour de supervise_live_source_tasks
|
||||
comparaison exacte pre.008 -> pre.008-fix.001
|
||||
contrôle du contenu de l'archive delta
|
||||
unzip -t de l'archive delta
|
||||
```
|
||||
|
||||
## Validations non exécutées
|
||||
|
||||
Le sandbox de préparation ne fournit pas le toolchain Cargo/Rust. Les gates suivants restent à exécuter côté opérateur :
|
||||
|
||||
```text
|
||||
cargo fmt --all
|
||||
cargo fmt --all -- --check
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
|
||||
```
|
||||
|
||||
## Décisions prises
|
||||
|
||||
```text
|
||||
fix strict de pre.008
|
||||
réduction de portée lexicale du std::sync::MutexGuard
|
||||
aucun passage à tokio::Mutex
|
||||
aucun allow/expect lint
|
||||
aucune modification fonctionnelle de la réconciliation
|
||||
pre.009 reste la première tranche autorisée à modifier la health policy multi-source
|
||||
```
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
```text
|
||||
aucune pour ce fix
|
||||
```
|
||||
|
||||
## Gate opérateur après application
|
||||
|
||||
```bash
|
||||
cargo fmt --all
|
||||
cargo fmt --all -- --check
|
||||
python3 scripts/audit_rust_workspace_rules.py
|
||||
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates deltas
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
cargo test -p ksp-worker-raw-transaction-ingest-lib --all-targets --all-features
|
||||
```
|
||||
Reference in New Issue
Block a user