ISPN000580:无法迁移持久数据 - 升级到 jboss/keycloak 13.0.1

Posted

技术标签:

【中文标题】ISPN000580:无法迁移持久数据 - 升级到 jboss/keycloak 13.0.1【英文标题】:ISPN000580: Failed to migrate persisted data - upgrading to jboss/keycloak 13.0.1 【发布时间】:2021-08-29 05:56:54 【问题描述】:

我正在尝试将 jboss/keycloak 6.0.1 升级到在 k8s 中作为 StatefulSet 运行的 13.0.1。我已经转换了我的standalone-ha.xml,我收到以下错误:

[0m[32m13:05:34,632 DEBUG [org.infinispan.persistence.manager.PersistenceManagerImpl] (ServerService Thread Pool -- 68) PersistenceManagerImpl encountered an exception during startup of stores: java.util.concurrent.CompletionException: org.infinispan.persistence.spi.PersistenceException: ISPN000580: Failed to migrate persisted data.
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1739)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1348)
at org.jboss.as.clustering.common@23.0.2.Final//org.jboss.as.clustering.context.ContextReferenceExecutor.execute(ContextReferenceExecutor.java:49)
at org.jboss.as.clustering.common@23.0.2.Final//org.jboss.as.clustering.context.ContextualExecutor$1.run(ContextualExecutor.java:70)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.infinispan.persistence.spi.PersistenceException: ISPN000580: Failed to migrate persisted data.
at org.infinispan@11.0.9.Final//org.infinispan.persistence.file.SingleFileStore.migrateFromV1(SingleFileStore.java:373)
at org.infinispan@11.0.9.Final//org.infinispan.persistence.file.SingleFileStore.start(SingleFileStore.java:160)
at org.infinispan@11.0.9.Final//org.infinispan.persistence.support.NonBlockingStoreAdapter.lambda$start$0(NonBlockingStoreAdapter.java:108)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
... 7 more
Caused by: protostream.com.google.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
at org.infinispan.protostream@4.3.5.Final//protostream.com.google.protobuf.InvalidProtocolBufferException.invalidTag(InvalidProtocolBufferException.java:102)
at org.infinispan.protostream@4.3.5.Final//protostream.com.google.protobuf.CodedInputStream$ArrayDecoder.readTag(CodedInputStream.java:627)
at org.infinispan.protostream@4.3.5.Final//org.infinispan.protostream.impl.RawProtoStreamReaderImpl.readTag(RawProtoStreamReaderImpl.java:45)
at org.infinispan.protostream@4.3.5.Final//org.infinispan.protostream.WrappedMessage.readMessage(WrappedMessage.java:275)
at org.infinispan.protostream@4.3.5.Final//org.infinispan.protostream.ProtobufUtil.fromWrappedByteArray(ProtobufUtil.java:162)
at org.infinispan@11.0.9.Final//org.infinispan.marshall.persistence.impl.PersistenceMarshallerImpl.objectFromByteBuffer(PersistenceMarshallerImpl.java:155)
at org.infinispan@11.0.9.Final//org.infinispan.persistence.file.SingleFileStore.migrateFromV1(SingleFileStore.java:333)
... 10 more

知道如何解决这个错误吗?

【问题讨论】:

【参考方案1】:

您是否尝试在运行任何实例的同时更新您的 Keycloak 系统? Keycloak 不支持此功能。升级大版本时,建议关闭所有实例,只用一个实例开始迁移!

在 Keycloak 6 和 13 之间,底层 Infinispan 版本发生了变化,因此在某些时候也发生了反序列化/序列化机制。很可能这就是你的错误的原因。

【讨论】:

谢谢 dasinko 我正在将所有实例缩减为 0,部署新的 keycloak,然后仅扩大到 1。我已经设法通过在不支持的新卷上运行 keycloak 来进行升级包含缓存并且它可以工作。这告诉我问题实际上是 infispan 迁移。你有什么技巧可以在那里迁移缓存容器吗? 标准 Keycloak 容器不会在任何地方保留缓存。因此,如果您优雅地关闭所有实例并从一个节点开始,它应该可以工作。如果您修改了 Infinispan 与 Keycloak 的工作方式,或者您使用的是外部 Infinispan 集群,则必须确保所有信息都被驱逐。 再次感谢您的回复。在我们的 infinispan 配置中,我们使用了一个包含所有缓存的持久卷。所有的 pod 都连接到它。 infinispan 已从版本 8(在 keycloak 6.0.1 中使用)升级到 12。如果我启动 keycloak 13,使用包含 keycloak 6 缓存的持久卷,我会收到我开始问题的错误。如果我从一个没有缓存的新卷开始,那么它可以工作。这告诉我迁移过程到期。我仍然不知道如何设置它。你有什么想法吗?

以上是关于ISPN000580:无法迁移持久数据 - 升级到 jboss/keycloak 13.0.1的主要内容,如果未能解决你的问题,请参考以下文章

Infinispan - ISPN000476:等待请求响应超时

iOS 数据持久化 CoreData的版本迁移

将 flyway 版本 1.5 升级到 3.2

infinispan 中的 ISPN000313 错误

将 Objective-C 核心数据迁移到 Swift 持久化容器

将 Mongodb 从 3.2 升级到 3.6 时出错