Class NodeAwareSpringLiquibase
- All Implemented Interfaces:
Aware,BeanNameAware,InitializingBean,ResourceLoaderAware
Cobre o cenario em que uma JVM e morta no meio da migracao (ex.: rollback do
updater por timeout) e deixa o lock preso em DATABASECHANGELOGLOCK. Como o
Vitruvio roda multi-no compartilhando o mesmo banco, o lock de outro no
(possivelmente migrando de forma legitima) nunca pode ser tocado: o criterio de
propriedade e o hostname gravado pelo Liquibase no inicio da coluna LOCKEDBY
("<hostname> (<ip>)"), que corresponde ao CONTAINER_HOST_NAME unico e
estavel de cada no.
A liberacao usa Liquibase.forceReleaseLocks(), que e incondicional quanto
ao dono (a tabela e um mutex global de uma unica linha, ID = 1); por isso ela
so e chamada apos Liquibase.listLocks() confirmar que a trava retida pertence
a este no. Qualquer falha na pre-checagem apenas registra log e segue para a migracao
normal, jamais bloqueando a subida.
-
Nested Class Summary
Nested classes/interfaces inherited from class SpringLiquibase
SpringLiquibase.SpringResourceOpener -
Field Summary
Fields inherited from class SpringLiquibase
beanName, changeLog, contexts, dataSource, defaultSchema, dropFirst, labels, log, parameters, resourceLoader, rollbackFile, shouldRun, tag, testRollbackOnUpdate -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidperformUpdate(Liquibase liquibase) protected StringResolve o hostname deste no.Methods inherited from class SpringLiquibase
afterPropertiesSet, createDatabase, createLiquibase, createResourceOpener, getBeanName, getChangeLog, getContexts, getDatabaseProductName, getDataSource, getDefaultSchema, getLabels, getResourceLoader, getTag, isDropFirst, isIgnoreClasspathPrefix, isTestRollbackOnUpdate, setBeanName, setChangeLog, setChangeLogParameters, setContexts, setDataSource, setDefaultSchema, setDropFirst, setIgnoreClasspathPrefix, setLabels, setResourceLoader, setRollbackFile, setShouldRun, setTag, setTestRollbackOnUpdate, toString
-
Constructor Details
-
NodeAwareSpringLiquibase
public NodeAwareSpringLiquibase()
-
-
Method Details
-
performUpdate
protected void performUpdate(Liquibase liquibase) throws LiquibaseException - Overrides:
performUpdatein classSpringLiquibase- Throws:
LiquibaseException
-
resolveNodeHost
Resolve o hostname deste no. Override em teste para injetar um valor conhecido.- Throws:
Exception
-