如何使用 Mongock 处理降级操作?

Posted

技术标签:

【中文标题】如何使用 Mongock 处理降级操作?【英文标题】:How to handle downgrade operation with Mongock? 【发布时间】:2022-01-14 07:41:36 【问题描述】:

我有一个关于与 Mongock 一起执行降级的问题。我得到了与 mongock 集成的 Java Spring 应用程序,假设我将应用程序从 v1 升级到 v2。在升级迁移脚本“001”执行并迁移数据期间,我可以在“mongockChangeLog”集合中看到新条目。

一天后,客户说存在严重错误并希望将应用程序降级到 v1。问题是客户端添加了一些具有新“类型”的“设备”(在 v2 中支持),这在 v1 中当然不支持。现在,在降级期间,我想删除具有新“类型”的条目,但我不知道该怎么做。我看到 mongock 支持带有注释“RollbackExecution”的方法,但正如我从文档中了解到的那样,它将在不同的场景中被触发。

你有什么想法我应该在哪里放置将删除所有具有新类型的设备的回滚逻辑?

进一步 - 在降级期间 - 在这种情况下,我应该从“mongockChangeLog”中删除条目还是有更好的解决方案?

【问题讨论】:

【参考方案1】:

您可能需要撤消您的 changeLog,因此无论您的 changeLog 做了什么,只需恢复它即可。

你基本上会在撤消模式下运行 mongock,告诉你想要去什么 changeId。

正如您在documentation 中看到的那样,RollbackExecution 用于两种情况,用于手动回滚(当事务不可用时)和用于恢复操作,例如undo

幸运的是,我们已经准备好了(加上其他操作),可以使用 CLI 执行。它是专业套件的一部分,目前处于测试阶段且免费。

如果您有兴趣,可以发送电子邮件至此处,我们可以提供访问权限。

【讨论】:

以上是关于如何使用 Mongock 处理降级操作?的主要内容,如果未能解决你的问题,请参考以下文章

Hystrix降级逻辑中如何获取触发的异常?

如何降级Android ADT?

如何降级我的 SDK 版本?

如何降级张量流,可能有多个版本?

如何优化读写频繁的数据库

如何guava的RateLimiter使用