Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

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

未关闭
#4,913 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
java

调研方向

从 PumpFromPart.java 第 75 行开始,跟踪 InputStreamPart 服务器响应经过 ReadStreamPart 客户端的 saveToFile 保存路径。使用提供的服务器和客户端代码片段、文件刷新行为以及超时设置,调查间歇性连接关闭问题。完成标准是确定失败是由使用方式还是竞争条件造成的,并记录或处理已确认的原因。

由索引模型根据 Issue 内容生成。

描述

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

主要语言
Java
星标
1.9k
派生
813
平均合并
8 天 23 小时
30 天内合并 PR
1

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/servicecomb-java-chassis 的其他 Issue

查看 apache/servicecomb-java-chassis 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。