liquibase 锁有超时吗?

问题描述 投票:0回答:3

您可以在此处的问题中看到:(liquibase-lock-reasons)在 Liquibase 操作中断时客户端 Liquibase 锁定的情况,使 liquibase 处于锁定状态。

我想知道是否有一种方法可以配置 Liquibase 以根据

LOCKGRANTED
列中的日期和时间自动检测这种情况。我认为如果你持有锁一个小时 - 你应该称其为过期锁。

我的问题是:liquibase 锁超时吗?

timeout locking liquibase lock-timeout
3个回答
8
投票

没有锁定超时。 Liquibase 不知道更改集需要多长时间,如果有些人在大型表上执行 DML,则可能需要几个小时才能成功运行。

您可以使用releaseLocks命令手动清除锁定,或者您可以子类化liquibase.lockservice.StandardLockService以添加额外的逻辑以在一段时间后覆盖锁定。

如果您只有一台机器要更新数据库,您也可以考虑https://github.com/liquibase/liquibase-nochangeloglock,这会完全禁用锁定支持。

我可以将其视为可配置的有用功能,因此我添加了 https://liquibase.jira.com/browse/CORE-2375 来跟踪该功能。


2
投票

实际上,查看StandardLockService的代码,它可以使用系统属性“liquibase.changeLogLockWaitTimeInMinutes”进行配置...

public class StandardLockService implements LockService {
    ...
    private long changeLogLockWaitTime = 300000L;
    ....
    public StandardLockService() {
        try {
            this.changeLogLockWaitTime = 60000L * Long.parseLong(System.getProperty("liquibase.changeLogLockWaitTimeInMinutes"));
            LogFactory.getLogger().info("lockWaitTime change to: " + this.changeLogLockWaitTime);
        } catch (NumberFormatException var2) {
            ;
        }
    }

1
投票

有一些扩展可以添加超时或删除锁定。不幸的是,所有这些都可能很危险,因为它们不检查获得锁的原始进程是否仍然存在(并且正在工作)。

官方对 Postgres 去锁的支持仍未合并:https://github.com/liquibase/liquibase/pull/1417

还有几个扩展也可以提供帮助:

如果这还不够,您可以随时创建 Liquibase 扩展来满足您的需求。我这样做是为了支持我的单实例部署 https://github.com/hsiliev/liquibase-lock-timeout

© www.soinside.com 2019 - 2024. All rights reserved.