[BUG] Re-subscribing the Mono returned by listTools/listResources/listResourceTemplates/listPrompts/listRoots duplicates the results
I maintainer di solito rispondono entro 2 giorni
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 75/100
Direzione di ricerca
Individua i cinque metodi elencati: McpAsyncServerExchange#listRoots() e McpAsyncClient#listTools(), listResources(), listResourceTemplates() e listPrompts(). Leggi le loro chiamate a reduce(seed, accumulator) e il fixture di test esistente per una sessione simulata che restituisce due roots; verifica che ogni sottoscrizione restituisca gli stessi risultati. Il lavoro è completo quando tutti e cinque i metodi creano un nuovo accumulatore per ogni sottoscrizione e i test coprono le sottoscrizioni ripetute.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug description
The Mono returned by these methods is not safe to subscribe more than once: each
subscription appends to the same mutable accumulator created when the method was called,
so the results grow on every subscription.
Mono<McpSchema.ListRootsResult> listRoots = exchange.listRoots();
listRoots.block().roots().size(); // 2
listRoots.block().roots().size(); // 4 <- duplicated
listRoots.block().roots().size(); // 6
Affected methods (all use reduce(seed, accumulator) with a seed created at assembly
time):
McpAsyncServerExchange#listRoots()McpAsyncClient#listTools()McpAsyncClient#listResources()McpAsyncClient#listResourceTemplates()McpAsyncClient#listPrompts()
Steps to reproduce
Using the existing test fixture (McpAsyncServerExchange with a mocked session that
returns a single page of 2 roots):
Mono<McpSchema.ListRootsResult> listRoots = exchange.listRoots();
System.out.println(listRoots.block().roots().size()); // 2
System.out.println(listRoots.block().roots().size()); // 4
System.out.println(listRoots.block().roots().size()); // 6
Expected behavior
Every subscription starts from an empty accumulator and returns the same result (2 / 2 /
2). Re-subscribing a Mono is a supported Reactor pattern (retry, repeat, cache, reusing
the Mono in several downstream branches), and concurrent subscriptions currently race on
the shared ArrayList too.
Suggested fix
Flux#reduceWith(Supplier, BiFunction) creates the seed per subscription:
.reduceWith(() -> McpSchema.ListRootsResult.builder(new ArrayList<>()).build(),
(allRootsResult, result) -> { ... })
.reduceWith(ArrayList<McpSchema.Tool>::new, (accumulated, result) -> { ... })
Happy to open a PR with the five call sites updated and tests if you agree with the
approach.
- Lingua principale
- Java
- Stelle
- 3.7k
- Fork
- 1.2k
- Merge medio
- 3h 38m
- PR unite (30g)
- 5
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun 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 modelcontextprotocol/java-sdk
-
HttpServletStreamableServerTransportProvider: GET stream sends no status or headers until the first eventForse già presa @karthiksenv l’ha presa 10 giorni fa. Apertaarea/server area/transport P3
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
modelcontextprotocol/java-sdk#1155 ·
I maintainer di solito rispondono entro 2 giorni
-
Client request handlers that complete empty send no JSON-RPC responseForse già presa @1fanwang l’ha presa 39 giorni fa. Apertaarea/client bug P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
modelcontextprotocol/java-sdk#1124 · 5 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
ServerCapabilities.logging is added unconditionally, overriding the caller's explicit capabilitiesForse già presa @1yuxiangJ l’ha presa 54 giorni fa. Apertabug P2 ready for work
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
modelcontextprotocol/java-sdk#1086 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Reject listRoots if not supported by client, without sending any requestForse già presa @nikita-kibitkin l’ha presa 78 giorni fa. Apertaenhancement good first issue P3
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
modelcontextprotocol/java-sdk#1067 · 2 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
StdioClientTransport missing explicit UTF-8 charset in InputStreamReader (same issue as #295, but on client side)Forse già presa @suryateja-g13 l’ha presa 149 giorni fa. Apertabug P2 ready for work
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
modelcontextprotocol/java-sdk#898 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di modelcontextprotocol/java-sdk
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
devops-thiago/ThrillhouseBot#1093 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
wimdeblauwe/htmx-spring-boot#205 ·
-
[BUG] 增量 SSE 解析器未识别单独 CR 换行,导致事件无法及时交付Forse già presa @king-wwwhhh l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
langchain4j/langchain4j#6669 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
OpenAPITools/openapi-generator#25237 ·
I maintainer di solito rispondono entro 1 giorno
-
needs-area-label
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno