Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NPE when replying "N" to report operation to Liquibase Hub #1711

Closed
ilopmar opened this issue Feb 19, 2021 · 8 comments
Closed

NPE when replying "N" to report operation to Liquibase Hub #1711

ilopmar opened this issue Feb 19, 2021 · 8 comments

Comments

@ilopmar
Copy link

ilopmar commented Feb 19, 2021

Environment

Liquibase Version: 4.3.1

Liquibase Integration & Version: Micronaut

Liquibase Extension(s) & Version: N/A

Database Vendor & Version: All

Operating System Type & Version: Linux Mint 20.1

Description

I've tried to upgrade the Micronaut integration to Liquibase 4.3.1 (from 4.2.2) and when I start an application I see now a question:

14:35:11.342 [main] DEBUG liquibase.ui - A system console was detected for user input
14:35:11.342 [main] DEBUG liquibase.ui - To override or validate the auto-detected environment for user input, set the liquibase.headless property in liquibase.properties file.
Do you want to see this operation's report in Liquibase Hub, which improves team collaboration? 
If so, enter your email. If not, enter [N] to no longer be prompted, or [S] to skip for now, but ask again next time (default "S"):

If I answer "N" to that question there is a NPE.

The error doesn't happen when answering "Y" to the question.

Steps To Reproduce

  • git clone https://github.com/micronaut-graal-tests/micronaut-liquibase-graal
  • cd micronaut-liquibase-graal
  • git checkout liquibase-npe
  • ./gradlew assemble
  • java -jar build/libs/micronaut-liquibase-graal-0.1-all.jar
  • Answer "N" to the question.

Actual Behavior

The is a NPE:

No operations will be reported. Simply add a liquibase.hub.apiKey setting to generate free deployment reports. Learn more at https://hub.liquibase.com
14:35:13.862 [main] INFO  liquibase.hub - No operations will be reported. Simply add a liquibase.hub.apiKey setting to generate free deployment reports. Learn more at https://hub.liquibase.com
14:35:13.863 [main] DEBUG liquibase.executor - Release Database Lock
14:35:13.863 [main] DEBUG liquibase.executor - Executing with the 'jdbc' executor
14:35:13.864 [main] INFO  liquibase.lockservice - Successfully released change log lock
14:35:13.865 [main] ERROR i.m.l.LiquibaseMigrationRunner - Migration failed! Liquibase encountered an exception.
liquibase.exception.LiquibaseException: java.lang.NullPointerException
	at liquibase.Liquibase.runInScope(Liquibase.java:2327)
	at liquibase.Liquibase.update(Liquibase.java:216)
	at liquibase.Liquibase.update(Liquibase.java:202)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.performUpdate(LiquibaseMigrationRunner.java:190)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:147)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.run(LiquibaseMigrationRunner.java:110)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.lambda$null$0(LiquibaseMigrationRunner.java:92)
	at java.util.Optional.ifPresent(Optional.java:159)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.lambda$onCreated$1(LiquibaseMigrationRunner.java:90)
	at java.util.Optional.ifPresent(Optional.java:159)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.onCreated(LiquibaseMigrationRunner.java:87)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.onCreated(LiquibaseMigrationRunner.java:62)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1981)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2705)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2691)
	at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2230)
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1543)
	at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:220)
	at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:2838)
	at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:233)
	at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:166)
	at io.micronaut.runtime.Micronaut.start(Micronaut.java:71)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:311)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:297)
	at micronaut.example.Application.main(Application.java:13)
Caused by: java.lang.NullPointerException: null
	at java.io.RandomAccessFile.<init>(RandomAccessFile.java:235)
	at liquibase.hub.HubUpdater.writeToPropertiesFile(HubUpdater.java:456)
	at liquibase.hub.HubUpdater.register(HubUpdater.java:361)
	at liquibase.Liquibase.lambda$update$1(Liquibase.java:242)
	at liquibase.Scope.lambda$child$0(Scope.java:160)
	at liquibase.Scope.child(Scope.java:169)
	at liquibase.Scope.child(Scope.java:159)
	at liquibase.Scope.child(Scope.java:138)
	at liquibase.Liquibase.runInScope(Liquibase.java:2322)
	... 24 common frames omitted
14:35:13.866 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [javax.sql.DataSource] could not be loaded: Migration failed! Liquibase encountered an exception.
io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [javax.sql.DataSource] could not be loaded: Migration failed! Liquibase encountered an exception.
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1549)
	at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:220)
	at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:2838)
	at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:233)
	at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:166)
	at io.micronaut.runtime.Micronaut.start(Micronaut.java:71)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:311)
	at io.micronaut.runtime.Micronaut.run(Micronaut.java:297)
	at micronaut.example.Application.main(Application.java:13)
Caused by: io.micronaut.runtime.exceptions.ApplicationStartupException: Migration failed! Liquibase encountered an exception.
	at io.micronaut.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:152)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.run(LiquibaseMigrationRunner.java:110)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.lambda$null$0(LiquibaseMigrationRunner.java:92)
	at java.util.Optional.ifPresent(Optional.java:159)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.lambda$onCreated$1(LiquibaseMigrationRunner.java:90)
	at java.util.Optional.ifPresent(Optional.java:159)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.onCreated(LiquibaseMigrationRunner.java:87)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.onCreated(LiquibaseMigrationRunner.java:62)
	at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1981)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingletonInternal(DefaultBeanContext.java:2705)
	at io.micronaut.context.DefaultBeanContext.createAndRegisterSingleton(DefaultBeanContext.java:2691)
	at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2230)
	at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1543)
	... 8 common frames omitted
Caused by: liquibase.exception.LiquibaseException: java.lang.NullPointerException
	at liquibase.Liquibase.runInScope(Liquibase.java:2327)
	at liquibase.Liquibase.update(Liquibase.java:216)
	at liquibase.Liquibase.update(Liquibase.java:202)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.performUpdate(LiquibaseMigrationRunner.java:190)
	at io.micronaut.liquibase.LiquibaseMigrationRunner.migrate(LiquibaseMigrationRunner.java:147)
	... 20 common frames omitted
Caused by: java.lang.NullPointerException: null
	at java.io.RandomAccessFile.<init>(RandomAccessFile.java:235)
	at liquibase.hub.HubUpdater.writeToPropertiesFile(HubUpdater.java:456)
	at liquibase.hub.HubUpdater.register(HubUpdater.java:361)
	at liquibase.Liquibase.lambda$update$1(Liquibase.java:242)
	at liquibase.Scope.lambda$child$0(Scope.java:160)
	at liquibase.Scope.child(Scope.java:169)
	at liquibase.Scope.child(Scope.java:159)
	at liquibase.Scope.child(Scope.java:138)
	at liquibase.Liquibase.runInScope(Liquibase.java:2322)
	... 24 common frames omitted

Expected/Desired Behavior

It should work.

Additional Context

I've tried to workaround this problem by creating the file src/main/resources/liquibase.properties with content liquibase.headless=true but it is not working. I've also tried setting the LIQUIBASE_HEADLESS environment variable but that doesn't work either. What am I missing here?

Liquibase Internal QA Requirements

  • Validate issue reproduces on broken build.
  • Manually verify fix addresses the NPE.
  • Verify all automated functional tests pass on Jenkins.
These tests are run on an internal Jenkins and results are not available to the wider community.

No automated tests are required for this ticket.

@molivasdat
Copy link
Contributor

Thanks for adding this issue @ilopmar. We will get this fixed soon.

@molivasdat
Copy link
Contributor

I just found out this is a duplicate of #1689, we are fixing it under that one that is slated for 4.3.2.

@ilopmar
Copy link
Author

ilopmar commented Feb 19, 2021

@molivasdat Thanks for the update. Regarding my last comment:

I've tried to workaround this problem by creating the file src/main/resources/liquibase.properties with content liquibase.headless=true but it is not working. I've also tried setting the LIQUIBASE_HEADLESS environment variable but that doesn't work either. What am I missing here?

Is this suppose to work? Is there any way to set any of those liquibase configuration properties?

@molivasdat
Copy link
Contributor

Try to set the liquibase.headless=false as a system property it will not prompt

@nvoxland
Copy link
Contributor

I had mistyped to @molivasdat , the property needs to be liquibase.headless=true, not false.

We are in the process of improving how the global configurations like that can be managed, including adding support for environment variables and the liquibase.properties file from spring boot etc.

For now, it is best set with a java system property if you are able to do that.

@ilopmar
Copy link
Author

ilopmar commented Feb 20, 2021

Thanks! Using a system property works as a workaround :-)

As I think you will release 4.3.2 soon I'll wait and the upgrade the Micronaut integration once you release the new version.

Thanks again for your help!

@sync-by-unito
Copy link

sync-by-unito bot commented Feb 22, 2021

➤ Erzsebet Carmean commented:

Iván López, thank you for writing such excellent reproduction steps and providing an example project.

@wind57
Copy link

wind57 commented Sep 7, 2021

it could also be specified as --headless true, which is great when this is part of a bigger script

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants