是否有 liquibase 锁定超时?
Is there a liquibase lock timeout?
您可以在此处查看问题:(liquibase-lock-reasons) 在 Liquibase 操作中断时客户端 Liquibase 锁定的情况下,使 liquibase 处于锁定状态。
我想知道是否有办法将 Liquibase 配置为从 LOCKGRANTED
列中的日期和时间自动检测这种情况。我想如果你持有锁一个小时——你应该称之为过期锁。
我的问题是:是否有 liquibase 锁定超时?
没有锁定超时。 Liquibase 不知道 changeSets 需要多长时间,如果有人在大型表上执行 DML,他们可能需要几个小时才能 运行 成功。
有一个 releaseLocks 命令可用于手动清除锁定,或者您可以子类化 liquibase.lockservice.StandardLockService 以添加额外的逻辑以在设定的时间段后覆盖锁定。
如果你只有一台机器要更新数据库,你也可以考虑https://github.com/liquibase/liquibase-nochangeloglock,这会完全禁用锁支持。
我认为可配置是一项有用的功能,因此我添加了 https://liquibase.jira.com/browse/CORE-2375 来跟踪该功能。
其实看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) {
;
}
}
有一些扩展可以添加超时或删除锁定。不幸的是,它们都是危险的,因为它们不检查获得锁的原始进程是否仍然存在(并且正在工作)。
官方对 Postgres 锁移除的支持还没有合并:https://github.com/liquibase/liquibase/pull/1417
有几个扩展也可以提供帮助:
- https://github.com/oridool/liquibase-locking - 如果之前的会话不存在则解锁 (Postgres)
- https://github.com/szintezisnet/Kubernetes-Liquibase-Lock-Release - 基于K8s元数据解锁
如果这还不够,您可以随时创建 Liquibase 扩展来满足您的需要。我这样做是为了支持 https://github.com/hsiliev/liquibase-lock-timeout
的单实例部署
您可以在此处查看问题:(liquibase-lock-reasons) 在 Liquibase 操作中断时客户端 Liquibase 锁定的情况下,使 liquibase 处于锁定状态。
我想知道是否有办法将 Liquibase 配置为从 LOCKGRANTED
列中的日期和时间自动检测这种情况。我想如果你持有锁一个小时——你应该称之为过期锁。
我的问题是:是否有 liquibase 锁定超时?
没有锁定超时。 Liquibase 不知道 changeSets 需要多长时间,如果有人在大型表上执行 DML,他们可能需要几个小时才能 运行 成功。
有一个 releaseLocks 命令可用于手动清除锁定,或者您可以子类化 liquibase.lockservice.StandardLockService 以添加额外的逻辑以在设定的时间段后覆盖锁定。
如果你只有一台机器要更新数据库,你也可以考虑https://github.com/liquibase/liquibase-nochangeloglock,这会完全禁用锁支持。
我认为可配置是一项有用的功能,因此我添加了 https://liquibase.jira.com/browse/CORE-2375 来跟踪该功能。
其实看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) {
;
}
}
有一些扩展可以添加超时或删除锁定。不幸的是,它们都是危险的,因为它们不检查获得锁的原始进程是否仍然存在(并且正在工作)。
官方对 Postgres 锁移除的支持还没有合并:https://github.com/liquibase/liquibase/pull/1417
有几个扩展也可以提供帮助:
- https://github.com/oridool/liquibase-locking - 如果之前的会话不存在则解锁 (Postgres)
- https://github.com/szintezisnet/Kubernetes-Liquibase-Lock-Release - 基于K8s元数据解锁
如果这还不够,您可以随时创建 Liquibase 扩展来满足您的需要。我这样做是为了支持 https://github.com/hsiliev/liquibase-lock-timeout
的单实例部署