v0.2.1-pre.003
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/008-V0_2_1_ONCHAIN_HTTP_PLAN.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 4 -->
|
||||
|
||||
# `0.2.1-pre.001` — plan `ksp-onchain-transport-lib` HTTP Solana foundation
|
||||
|
||||
@@ -498,6 +498,18 @@ Pour la surface standard connue, l'exécuteur consulte le registry. Une méthode
|
||||
|
||||
Le pool sélectionne un **endpoint/client HTTP logique**. Le pooling de sockets/keep-alive reste la responsabilité du client `reqwest` sous-jacent.
|
||||
|
||||
### 12.1.1 Politique client concrétisée par `pre.003`
|
||||
|
||||
Chaque endpoint construit un `reqwest::Client` partageable qui conserve le pooling de sockets sous-jacent. Le builder KSP applique les `connect_timeout`, `request_timeout` et `max_idle_connections_per_host` déjà possédés par les settings.
|
||||
|
||||
Décisions de sécurité/déterminisme :
|
||||
|
||||
- backend HTTPS : feature `reqwest/rustls` explicite ;
|
||||
- redirects automatiques désactivés : une URL provider éventuellement porteuse de credential n'est jamais redirigée implicitement vers une autre destination ;
|
||||
- proxies système/environnement implicites désactivés via le builder `reqwest`; une future prise en charge de proxy devra être un contrat Config/Transport explicite ;
|
||||
- `User-Agent` KSP stable : `ksp-onchain-transport-lib/<version>` ;
|
||||
- URL conservée uniquement dans les settings privés du client logique et absente des snapshots/`Debug` publics.
|
||||
|
||||
### 12.2 Algorithme de sélection
|
||||
|
||||
Pour une requête :
|
||||
@@ -706,7 +718,7 @@ ksp-core-lib path/workspace
|
||||
ksp-logging-lib path/workspace
|
||||
```
|
||||
|
||||
`pre.002` utilise `reqwest` uniquement pour le parsing/validation robuste de `HttpEndpointUrl`; aucune requête réseau n'est encore créée. Conformément à `RUST-DEP-001` / `RUST-DEP-003`, aucune feature TLS/JSON/client ni dépendance Tokio locale n'est activée par anticipation. Les features réellement nécessaires au client async sont décidées et ajoutées dans `pre.003`, lorsque le chemin de compilation HTTP existe. Le même principe reporte `tokio` à la première tranche qui utilise effectivement ses primitives runtime/sync.
|
||||
`pre.002` utilisait `reqwest` uniquement pour le parsing/validation robuste de `HttpEndpointUrl`. `pre.003` crée réellement les clients HTTP logiques et active donc la feature `rustls` de `reqwest 0.13` au workspace, toujours avec `default-features = false`. Aucune feature `json` n'est nécessaire : KSP possède déjà son encodage JSON-RPC via `serde_json`. Aucune dépendance Tokio directe n'est ajoutée tant que `pre.004` n'utilise pas effectivement ses primitives de concurrence/attente.
|
||||
|
||||
Ne pas ajouter :
|
||||
|
||||
@@ -859,7 +871,7 @@ La release peut devenir stable seulement si :
|
||||
|-----------|----------------------------------------------------------------------------------------------------------------------|
|
||||
| `pre.001` | audit KSP + bot3 + docs officielles, matrice 52+14, architecture, split et sizing |
|
||||
| `pre.002` | **réalisé** : crate/workspace, codes erreur, settings/validation, JSON-RPC, descriptors/status, base Logging |
|
||||
| `pre.003` | endpoint client + pool logique + rôles/capabilities + priorité/fairness/fallback + snapshots sûrs |
|
||||
| `pre.003` | **réalisé** : endpoint client + pool logique + rôles/capabilities + priorité/fairness/fallback + snapshots sûrs |
|
||||
| `pre.004` | RPS/burst/concurrence/cooldown + timeout + retry/backoff + classification retry/no-resend |
|
||||
| `pre.005` | méthodes canari `getHealth`, `getVersion`, `getGenesisHash`, `getBalance` + fixtures déterministes |
|
||||
| `pre.006` | `std.transport` schema/document/example + registry Config + adapter Config -> Transport + sensibilité/env tests |
|
||||
@@ -882,7 +894,25 @@ Ce découpage est révisable si une tranche dépasse le budget ; la release réd
|
||||
- contrôle central `ensure_runtime_supported()` : warning KSP pour surfaces non stables supportées, warning + `method_removed` pour les historiques supprimées ;
|
||||
- 40 tests Rust ajoutés (unitaires + intégration), dont redaction, invariants JSON-RPC, matrice 4/22/11/15 et canary de firewall du manifest.
|
||||
|
||||
Les éléments suivants restent volontairement à `pre.003+` : construction `reqwest::Client`, clients logiques, pool, sélection/rôles/fallback, Tokio runtime/sync, TLS, rate limiting, concurrence et retry effectif.
|
||||
Les éléments annoncés pour `pre.003` dans cet état historique sont désormais concrétisés au §22.2 ; rate limiting, concurrence et retry effectif restent reportés.
|
||||
|
||||
### 22.2 État après `0.2.1-pre.003`
|
||||
|
||||
`pre.003` matérialise la première couche de routing HTTP sans encore exécuter de JSON-RPC :
|
||||
|
||||
- `workspace.package.version = 0.2.1-pre.3` ;
|
||||
- `reqwest` reste `default-features = false` et active uniquement `rustls` pour rendre les endpoints HTTPS réellement constructibles ;
|
||||
- `HttpEndpointClient` encapsule un `reqwest::Client`, applique connect/request timeout et limite idle-per-host, désactive redirect et proxy système implicites, et n'expose jamais l'URL dans `Debug`/snapshot ;
|
||||
- `HttpEndpointSnapshot`, `HttpEndpointRoleSnapshot` et `HttpTransportPoolSnapshot` exposent uniquement identité/provider/cluster/routing/status sûrs ;
|
||||
- `HttpTransportPool` valide les settings puis construit un client logique par endpoint ;
|
||||
- sélection exacte rôle + capability, wildcard `*`, priorité globale croissante et round-robin par rôle/request-kind dans le meilleur tier ;
|
||||
- endpoint ou rôle disabled exclus ; un tier inférieur devient donc fallback lorsqu'aucun candidat du tier supérieur n'est sélectionnable ;
|
||||
- `select_for_method` dérive la capability depuis le registre RPC central et refuse une méthode historique `Removed` avant routing ;
|
||||
- aucune mutex synchrone ne couvre un `await` réseau : le seul verrou actuel protège brièvement les curseurs de fairness, avant toute I/O ;
|
||||
- le contrat d'availability réserve `Disabled`, `Available`, `Degraded`, `RateLimited`; `pre.003` ne produit que les deux premiers, les transitions runtime appartenant à `pre.004`.
|
||||
- la suite Transport compte désormais 53 tests déclarés, dont les nouvelles preuves de redaction client/pool, priorité, fairness, fallback, capability et contrat public du pool.
|
||||
|
||||
Restent volontairement à `pre.004` : token bucket RPS/burst, semaphore de concurrence, cooldown/429, deadline effective, retry/backoff et mutations passives `Degraded/RateLimited`.
|
||||
|
||||
## 23. Séquence `0.2.x` recalibrée
|
||||
|
||||
|
||||
Reference in New Issue
Block a user