Class NodeAwareSpringLiquibase

Object
SpringLiquibase
NodeAwareSpringLiquibase
All Implemented Interfaces:
Aware, BeanNameAware, InitializingBean, ResourceLoaderAware

public class NodeAwareSpringLiquibase extends SpringLiquibase
SpringLiquibase que, no boot, libera o lock de changelog SOMENTE quando o dono registrado e o proprio no.

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
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    performUpdate(Liquibase liquibase)
     
    protected String
    Resolve 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

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • NodeAwareSpringLiquibase

      public NodeAwareSpringLiquibase()
  • Method Details

    • performUpdate

      protected void performUpdate(Liquibase liquibase) throws LiquibaseException
      Overrides:
      performUpdate in class SpringLiquibase
      Throws:
      LiquibaseException
    • resolveNodeHost

      protected String resolveNodeHost() throws Exception
      Resolve o hostname deste no. Override em teste para injetar um valor conhecido.
      Throws:
      Exception