如何解决Spring Cloud Config 服务中的 JGit 错误:org.eclipse.jgit.errors.MissingObjectException: Missing tree
我们内部环境中部署的 Spring Cloud 配置服务最近开始返回 500 错误,用于检索属性的简单请求。我看到的问题与此处报告的问题相同:
https://github.com/spring-cloud/spring-cloud-config/issues/522
Github 问题提到了一个修复程序,但显然它仍然被破坏了。深入研究 JGit 库的源代码。起初看起来像是文件系统的问题。所以我试图在我的本地系统上触发这个问题,但没有成功。更改 git 克隆属性文件的所有权或删除文件/目录等内容,但会导致代码其他部分出现错误。所以我试着更深入地挖掘代码并查看了下面的代码:
org.eclipse.jgit.internal.storage.file.WindowCursor(版本 org.eclipse.jgit 5.1.3.201810200350-r)
public ObjectLoader open(AnyObjectId objectId,int typeHint)
throws MissingObjectException,IncorrectObjectTypeException,IOException {
final ObjectLoader ldr = db.openObject(this,objectId);
if (ldr == null) {
if (typeHint == OBJ_ANY)
throw new MissingObjectException(objectId.copy(),JGitText.get().unknownObjectType2);
throw new MissingObjectException(objectId.copy(),typeHint);
}
ldr
对象从 openObject
调用返回为 null。导航到 openObject 调用有很多原因它可以返回 null。我不确定如何触发任何这些情况,因为代码引用了超出我对 Git 对象理解的东西。 stacktrace 中的错误表明 git 对象丢失了,但肯定没有,因为重新启动 Spring Cloud 配置服务有效。
如果有人熟悉 Git 或 JGit,他们是否了解损坏的地方以及如何解决?
Spring Cloud config version 2.2.3.RELEASE
Spring Boot version 2.3.2.RELEASE
Service deployed on an AWS EC2 instance
org.eclipse.jgit.errors.MissingObjectException: Missing tree <git_object_id>
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:170) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.treewalk.CanonicalTreeParser.reset(CanonicalTreeParser.java:224) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.treewalk.CanonicalTreeParser.createSubtreeIterator0(CanonicalTreeParser.java:259) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.treewalk.CanonicalTreeParser.createSubtreeIterator(CanonicalTreeParser.java:237) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.treewalk.CanonicalTreeParser.createSubtreeIterator(CanonicalTreeParser.java:1) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.treewalk.TreeWalk.enterSubtree(TreeWalk.java:1303) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.treewalk.TreeWalk.next(TreeWalk.java:859) ~[org.eclipse.jgit-5.1.3.201810200350-r.jar!/:5.1.3.201810200350-r]
at org.eclipse.jgit.lib.IndexDiff.diff(IndexDiff.java:445) ~[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.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.refresh(JGitEnvironmentRepository.java:269) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.JGitEnvironmentRepository.getLocations(JGitEnvironmentRepository.java:246) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.getLocations(MultipleJGitEnvironmentRepository.java:146) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.AbstractScmEnvironmentRepository.findOne(AbstractScmEnvironmentRepository.java:57) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.MultipleJGitEnvironmentRepository.findOne(MultipleJGitEnvironmentRepository.java:187) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.CompositeEnvironmentRepository.findOne(CompositeEnvironmentRepository.java:58) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.EnvironmentEncryptorEnvironmentRepository.findOne(EnvironmentEncryptorEnvironmentRepository.java:61) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.EnvironmentController.getEnvironment(EnvironmentController.java:136) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
at org.springframework.cloud.config.server.environment.EnvironmentController.labelledIncludeOrigin(EnvironmentController.java:129) ~[spring-cloud-config-server-2.2.3.RELEASE.jar!/:2.2.3.RELEASE]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。