Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Aberta
#4,913 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Precisa de esclarecimento
Status de atividade
Estagnada
Stack de tecnologia
java
Domínio
api, backend, networking

Direção de pesquisa

Comece na linha 75 de PumpFromPart.java e rastreie a resposta do servidor InputStreamPart pelo caminho saveToFile de salvamento do cliente ReadStreamPart. Use os snippets fornecidos do servidor e do cliente, o comportamento de atualização de arquivos e as configurações de timeout para investigar o fechamento intermitente da conexão. Considera-se concluído quando for determinado se a falha é causada pelo uso ou por uma condição de corrida, e a causa confirmada for registrada ou tratada.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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文件后原子重命名方式,原理上不会影响文件下载。

Linguagem predominante
Java
Estrelas
1.9k
Forks
813
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

  • Sem Dockerfile nem arquivo Docker Compose
  • Tem um modelo de pull request
  • Sem guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de apache/servicecomb-java-chassis

Todas as issues de apache/servicecomb-java-chassis

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.