Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[BUG] - 使用iputstreanpart发送文件偶现服务端超时

Abierto
#4,913 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
java

Línea de trabajo

Comienza en la línea 75 de PumpFromPart.java y sigue la respuesta del servidor InputStreamPart a través de la ruta saveToFile de guardado del cliente ReadStreamPart. Utiliza los fragmentos de código proporcionados del servidor y del cliente, el comportamiento de actualización de archivos y la configuración de timeout para investigar el cierre intermitente de la conexión. Se considera terminado cuando se determine si el fallo se debe al uso o a una condición de carrera, y se registre o se aborde la causa confirmada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug

Steps to Reproduce

服务端报错;
Image

Image Image

2025-08-27 08:43:58.866 [transport-vert.x-eventloop-thread-6] ERROR - [PumpFromPart.java:lambda$toWriteStream$1:75] - [] - to write stream failed. java.util.concurrent.CompletionException: io.vertx.core.http.HttpClosedException: Connection was closed
at java.base/java.util.concurrent.CompletableFuture.encodeRelay(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.completeRelay(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture$UniRelay$tryFire.run(Unknown Source)

客户端报错:
Image

超时配置
rest:
address: 0.0.0.0:8183?sslEnabled=true
client:
thread-count: 8
maxWaitQueueSize: 100000
connection:
maxPoolSize: 10
timeoutInMillis: 5000
keepAliveTimeoutInSeconds: 15
idleTimeoutInSeconds: 50
keepAlive: true
server:
thread-count: 8
compression: false
maxHeaderSize: 8192
timeout: 3000
maxFormAttributeSize: -1
connection:
idleTimeoutInSeconds: 60
服务端代码;
@RequestMapping(value = "/v1", method = RequestMethod.POST) public ResponseEntity<Part> syncCache(@RequestBody String param) throws Exception { return ResponseEntity .ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE) .header("result", JSON.toJSONString(result)) .body(new InputStreamPart(null, sendFile != null ? Files.newInputStream(sendFile) : new ByteArrayInputStream(new byte[0])) .setSubmittedFileName("data.dat")); }
客户端代码
ResponseEntity<ReadStreamPart> response = REST_TEMPLATE.postForEntity("cse://xxxx", body, ReadStreamPart.class); try { body.saveToFile(tempDataFile.toFile(), new OpenOptions().setCreateNew(true)).get(30, TimeUnit.SECONDS); } catch (Exception e) { Files.deleteIfExists(tempDataFile); throw e; }

发送的文件大小不超过4M,内网万兆带宽网络稳定,排除网络问题,万分之1概率出现文件拉取超时, 辛苦帮忙看一下是使用的问题还是存在竞态问题,文件是在server另外的定时任务定时刷新,创建tmp文件后原子重命名方式,原理上不会影响文件下载。

Lenguaje dominante
Java
Estrellas
1.9k
Forks
813
Merge medio
8 d 23 h
PR fusionados (30 d)
1

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/servicecomb-java-chassis

Todos los issues de apache/servicecomb-java-chassis

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.