Fix duplicate terminal callbacks in SSE listeners
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- java
- Ambito
- backend-api-design
Direzione di ricerca
Examine the JSON-RPC SSE listeners in the codebase, focusing on the completed flag and terminal callbacks. Look for the native JSON-RPC listener and the 0.3 compatibility JSON-RPC listener to understand their lifecycle patterns. Start by reviewing the relevant classes, then implement an atomic state transition (e.g., using AtomicBoolean.compareAndSet) to ensure exactly one terminal callback is delivered. Test with concurrent scenarios to verify the fix.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
The JSON-RPC SSE listeners use a volatile completed flag with non-atomic check-and-set behavior. onComplete(), onError(), parsing failures, and final-event cancellation can race or occur in close succession, allowing the error consumer to be invoked more than once (including a null completion signal after an error/cancellation).
The native JSON-RPC listener has the same lifecycle pattern, and the 0.3 compatibility JSON-RPC listener mirrors it. This should be addressed consistently, rather than patched only in the compatibility adapter.
Expected behavior
For one streaming request, deliver exactly one terminal callback to the error/completion consumer: either one non-null failure or one null normal-completion signal. A final task/status event that cancels the stream must not allow a later terminal callback to duplicate or contradict that outcome.
Suggested direction
Define the terminal-state contract for the native JSON-RPC and 0.3 JSON-RPC SSE listeners, then guard every terminal path with one shared atomic transition (for example, AtomicBoolean.compareAndSet(false, true)). Cover concurrent or repeated completion/error notifications and cancellation after a final event. Evaluate REST separately: its native and 0.3 implementations currently both use a no-op completion callback, so changing that is an API decision rather than a compat-only fix.
- Lingua principale
- Java
- Stelle
- 505
- Fork
- 185
- Merge medio
- 1g 9h
- PR unite (30g)
- 26
Preparare l'ambiente
- Nessun Dockerfile né 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 a2aproject/a2a-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
a2aproject/a2a-java#1012 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
a2aproject/a2a-java#464 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Create a sample that demonstrates how to use a shared contextId across multiple tasksForse di nuovo libera @tanish111 l’ha presa 357 giorni fa e non c’è nessuna pull request aperta. Apertasample
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
a2aproject/a2a-java#375 · 5 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 28/100
a2aproject/a2a-java#1211 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
a2aproject/a2a-java#1207 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di a2aproject/a2a-java
Issue simili
-
:ml/Transform >bug Team:ML
Difficoltà 2/5 Mezza giornata Idoneità per principianti 64/100
elastic/elasticsearch#161960 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 4 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
objectionary/lints#1556 ·
I maintainer di solito rispondono entro 3 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
wildfly/wildfly-launcher#99 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
apache/rocketmq#11427 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno