SessionPool acquire: growth/hand-out failures bypass acquire_timeout budget; live counter decremented outside the state lock loses Condvar wakeups; acquire_timeout = Duration::MAX panics
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 62/100
Línea de trabajo
Comienza localizando SessionPool::acquire y siguiendo la ruta de crecimiento de open_session y la ruta de replay de USE de hand_out; después, inspecciona cada mutación de live con respecto al state lock y a la notificación de Condvar. Verifica que los fallos se reintenten hasta el deadline original, que los decrementos de live notifiquen a los waiters bajo el lock y que las esperas con Duration::MAX no provoquen overflow; reproduce el comportamiento con pruebas de estrés con fake-listener.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Three related pool-accounting defects found by stress-testing SessionPool against fake listeners:
acquire()spends none of itsacquire_timeoutbudget when the growth branch fails. Whenopen_session()fails,acquire()returns the error immediately (measured 198us against a 5s budget; 4136 of 4800 acquires failed instantly under stress while sessions were circulating). The same happens when theUSEreplay inhand_outfails — it discards the remaining idle candidates instead of retrying the loop.liveis decremented outside thestatelock at several sites, and the decremented value is exactly the predicate parked waiters re-evaluate, so Condvar notifications can be lost. The comment "Only mutated while holdingstate" no longer matches the code. Measured stalls trackacquire_timeoutexactly (300ms → 305ms, 1000ms → 1.005s).acquire_timeout = Duration::MAXpanics onInstant::now() + acquire_timeoutoverflow before the lock is taken. There is no "never time out" option, andDuration::MAXis the natural way to ask for one.
Fix: on growth/hand-out failure, re-take the lock, decrement live under it, notify, and continue the loop (bounded by the original deadline); use a saturating deadline (checked_add) so Duration::MAX means "wait without timeout".
- Lenguaje dominante
- Rust
- Estrellas
- 1
- Forks
- 0
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/iotdb-client-rust
-
Session::open does not fail over when openSession/requestStatementId fails (only TCP-layer failover) Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
enhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
apache/iotdb-client-rust#10 ·
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
-
bug
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
Todos los issues de apache/iotdb-client-rust
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
Axis areas are always keyboard-focusable (Sense::drag), even with allow_axis_zoom_drag(false) Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
bug team:backend track:services-maintenance
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cowprotocol/services#4950 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
gitbutlerapp/gitbutler#15998 · 1 comentario ·