sdk-http-vertx: response writes ignore Vert.x backpressure
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 68/100
Línea de trabajo
Comienza con HttpResponseFlowAdapter.onSubscribe y onNext, y luego compara el contrato de backpressure de Vert.x WriteStream con su helper Pump. Limita la producción de respuestas, pausa las solicitudes cuando writeQueueFull() sea true y reanúdalas mediante drainHandler; revisa HttpRequestFlowAdapter.handleIncomingBuffer para comprobar el límite correspondiente de la cola.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
HttpResponseFlowAdapter in sdk-http-vertx ignores Vert.x's write-side backpressure on the HTTP/2 response stream:
onSubscribepulls unboundedly:this.outputSubscription = subscription; this.outputSubscription.request(Long.MAX_VALUE);onNextwrites each slice unconditionally:
No check onthis.httpServerResponse.write( Buffer.buffer(Unpooled.wrappedBuffer(slice.asReadOnlyByteBuffer())));HttpServerResponse.writeQueueFull(), nodrainHandler(...)to resume.
The Reactive-Streams contract and Vert.x's own WriteStream docs both expect callers to throttle production when writeQueueFull() returns true. The adapter throws away that signal.
Observed evidence
While investigating a separate e2e issue, instrumentation on the SDK side recorded writeQueueFull=true on the very first response writes under a 50-concurrent ctx.run × 10×64 KiB workload (Restate runtime as the peer). That confirms the writeQueue does cross Vert.x's high-watermark threshold in realistic Restate workloads — the adapter just keeps writing past it.
(We did not observe SDK-side heap growth or autoRead toggling in that test, so this issue is a code-correctness / future-proofing fix rather than the cause of the failure we were chasing.)
Proposal
Apply standard Reactive-Streams + Vert.x backpressure to HttpResponseFlowAdapter:
- Replace
request(Long.MAX_VALUE)with a bounded initial request (e.g.request(N)). - In
onNext, after writing, checkhttpServerResponse.writeQueueFull():- If full, do not call
subscription.request(...); instead installhttpServerResponse.drainHandler(v -> subscription.request(M))to resume. - If not full, request the next batch immediately.
- If full, do not call
- This is the same pattern Vert.x's own
Pumphelper implements.
Companion (lower priority, same class of bug)
The request side has an analogous unbounded enqueue: HttpRequestFlowAdapter.handleIncomingBuffer pushes incoming buffers into an ArrayDeque<ByteBuffer> without an upper bound. Worth bounding while we're in the same module.
Files
sdk-http-vertx/src/main/java/dev/restate/sdk/http/vertx/HttpResponseFlowAdapter.javasdk-http-vertx/src/main/java/dev/restate/sdk/http/vertx/HttpRequestFlowAdapter.java(companion)
- Lenguaje dominante
- Java
- Estrellas
- 60
- Forks
- 17
- 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 restatedev/sdk-java
-
Vert.x 5 update Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
restatedev/sdk-java#629 · 2 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
restatedev/sdk-java#603 ·
-
Reflection based experience Abierto
restatedev/sdk-java#570 · 1 asignado ·
-
Java jackson 3 version upgrade Abiertodependencies
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
restatedev/sdk-java#569 · 2 comentarios · 1 reacción ·
-
Spring boot Servlet integration Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
restatedev/sdk-java#555 · 1 comentario ·
Todos los issues de restatedev/sdk-java
Issues similares
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Abiertoarea/plugin
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
kestra-io/plugin-kestra#190 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
Add canonical URLs and a sitemap Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
integra-team-red/meet-map#249 ·
-
[Studio][Bug] Cancelled create-user dialog keeps the password and admin switch for the next attempt Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
apache/rocketmq-dashboard#5064 ·
-
Consent portal: creating a duplicate Purpose shows a generic error instead of "already exists" Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
wso2/dpdp-accelerator#287 ·