spring cloud config 报错:java.io.EOFException: Short read of block

现象

springcloud-config 每跑一段时间启动失败,错误信息如下

2022-05-16 13:57:52.672  INFO 11000 --- [http-nio-9088-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2022-05-16 13:57:52.684  INFO 11000 --- [http-nio-9088-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 12 ms
2022-05-16 13:57:52.954 ERROR 11000 --- [http-nio-9088-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateE
xception: Cannot load environment] with root cause

java.io.EOFException: Short read of block.
        at org.eclipse.jgit.util.IO.readFully(IO.java:235) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.dircache.DirCache.readFrom(DirCache.java:484) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.dircache.DirCache.read(DirCache.java:436) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.dircache.DirCache.read(DirCache.java:222) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.dircache.DirCache.read(DirCache.java:194) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.lib.Repository.readDirCache(Repository.java:1248) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.lib.IndexDiff.diff(IndexDiff.java:412) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.lib.IndexDiff.diff(IndexDiff.java:386) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.eclipse.jgit.api.StatusCommand.call(StatusCommand.java:155) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.shouldPull(JGitEnvironmentRepository.java:427) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.refresh(JGitEnvironmentRepository.java:269) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.getLocations(JGitEnvironmentRepository.java:246) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.getLocations(MultipleJGitEnvironmentRepository.java:146) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.AbstractScmEnvironmentRepository.findOne(AbstractScmEnvironmentRepository.java:51) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.findOne(MultipleJGitEnvironmentRepository.java:186) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.CompositeEnvironmentRepository.findOne(CompositeEnvironmentRepository.java:52) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.EnvironmentEncryptorEnvironmentRepository.findOne(EnvironmentEncryptorEnvironmentRepository.java:54) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at org.springframework.cloud.config.server.environment.EnvironmentController.labelled(EnvironmentController.java:122) ~[spring-cloud-config-server-2.1.5.RELEASE.jar!/:2.1.5.RELEASE]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144]

问题排查

通过查看 spring-cloud-config 官方的 pr 记录发现有一条记录修复了关于 Short read of block 的问题

https://github.com/spring-cloud/spring-cloud-config/pull/1593

通过查询 commit 记录

https://github.com/spring-cloud/spring-cloud-config/pull/1593/commits/9c4c644efc35eddc8e626a446c65ff9a740f716c

发现作者在 Short read of block. 异常出现的时候:

  1. 删除了 git 工作目录索引
  2. 重新生成工作目录并将模式设置为ResetType.HARD

这里出问题的类为 JGitEnvironmentRepository

解决方案

通过查看该 pr 发现已在 2021 年 1 月 12 日合并入 spring cloud:2.2.x 分支, 且 Hoxton.SR10 2020.0.1 分支的 CI 同时完成了该 pr 的合并.

目前我们的 sekorm-config-server 使用的 spring-cloud 版本为 Greenwich.SR4;

而查看 springcloud 的 release note 可以发现, Greenwich 的最新版 Greenwich.SR6 在 20 年 5 月发布, 此时该 pr 暂未合并, 故要解决该问题, 需要做一次跨大版本的依赖升级。

建议升级 springcloud 最低的版本为 Hoxton.SR10

网上的解决方案目前为:

把配置中心的缓存文件夹删除后,重启配置中心。

但想要彻底解决问题,还是需要升级 springcloud 版本才行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值