Jira's startup sequence continues even if dbconfig.xml is unreadable and doesn't log an error

XMLWordPrintable

    • 7.02
    • 12
    • Severity 1 - Critical
    • 18
    • Hide

      The log which will be shown:

      2024-09-30 18:15:15,359+0200 JIRA-Bootstrap WARN      [c.a.j.h.checks.database.DatabaseSecretStoreRetrievalHealthCheck] Exception when reading database configuration: 
      com.atlassian.jira.util.RuntimeIOException: Error reading database configuration file.
      	at com.atlassian.jira.config.database.AbstractJiraHomeDatabaseConfigurationLoader.loadDatabaseConfiguration(AbstractJiraHomeDatabaseConfigurationLoader.java:56)
      	at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.getDatabaseConfiguration(DatabaseConfigurationManagerImpl.java:186)
      	at com.atlassian.jira.health.checks.database.DatabaseSecretStoreRetrievalHealthCheck.performCheck(DatabaseSecretStoreRetrievalHealthCheck.java:67)
      	at com.atlassian.jira.health.checks.database.DatabaseSecretStoreRetrievalHealthCheck.doPerform(DatabaseSecretStoreRetrievalHealthCheck.java:61)
      	at com.atlassian.jira.health.HealthCheckTemplate.perform(HealthCheckTemplate.java:23)
      	at com.atlassian.jira.health.DefaultHealthCheckExecutor.runCheck(DefaultHealthCheckExecutor.java:76)
      	at com.atlassian.jira.health.DefaultHealthCheckExecutor.lambda$applyAndCollectExceptions$1(DefaultHealthCheckExecutor.java:55)
      	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
      	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
      	at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
      	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
      	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
      	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
      	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
      	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
      	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
      	at com.atlassian.jira.health.DefaultHealthCheckExecutor.applyAndCollectExceptions(DefaultHealthCheckExecutor.java:55)
      	at com.atlassian.jira.health.DefaultHealthCheckExecutor.performHealthChecks(DefaultHealthCheckExecutor.java:44)
      	at com.atlassian.jira.health.HealthChecks.executeChecksAndRecordResults(HealthChecks.java:164)
      	at com.atlassian.jira.health.HealthChecks.runHealthChecks(HealthChecks.java:154)
      	at com.atlassian.jira.health.HealthChecks.runHealthChecks(HealthChecks.java:66)
      	at com.atlassian.jira.startup.BootstrapContainerLauncher.start(BootstrapContainerLauncher.java:32)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.preDbLaunch(DefaultJiraLauncher.java:123)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$start$0(DefaultJiraLauncher.java:108)
      	at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.java:31)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.java:107)
      	at com.atlassian.jira.startup.LauncherContextListener.initSlowStuff(LauncherContextListener.java:162)
      	at java.base/java.lang.Thread.run(Thread.java:840)
      Caused by: java.io.FileNotFoundException: jira/jira/jirahome/dbconfig.xml (Permission denied)
      	at java.base/java.io.FileInputStream.open0(Native Method)
      	at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
      	at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
      	at java.base/java.io.FileReader.<init>(FileReader.java:75)
      	at com.atlassian.jira.config.database.AbstractJiraHomeDatabaseConfigurationLoader.getReader(AbstractJiraHomeDatabaseConfigurationLoader.java:88)
      	at com.atlassian.jira.config.database.AbstractJiraHomeDatabaseConfigurationLoader.loadDatabaseConfiguration(AbstractJiraHomeDatabaseConfigurationLoader.java:50)
      	... 28 more
      
      
      Show
      The log which will be shown: 2024-09-30 18:15:15,359+0200 JIRA-Bootstrap WARN [c.a.j.h.checks.database.DatabaseSecretStoreRetrievalHealthCheck] Exception when reading database configuration: com.atlassian.jira.util.RuntimeIOException: Error reading database configuration file. at com.atlassian.jira.config.database.AbstractJiraHomeDatabaseConfigurationLoader.loadDatabaseConfiguration(AbstractJiraHomeDatabaseConfigurationLoader.java:56) at com.atlassian.jira.config.database.DatabaseConfigurationManagerImpl.getDatabaseConfiguration(DatabaseConfigurationManagerImpl.java:186) at com.atlassian.jira.health.checks.database.DatabaseSecretStoreRetrievalHealthCheck.performCheck(DatabaseSecretStoreRetrievalHealthCheck.java:67) at com.atlassian.jira.health.checks.database.DatabaseSecretStoreRetrievalHealthCheck.doPerform(DatabaseSecretStoreRetrievalHealthCheck.java:61) at com.atlassian.jira.health.HealthCheckTemplate.perform(HealthCheckTemplate.java:23) at com.atlassian.jira.health.DefaultHealthCheckExecutor.runCheck(DefaultHealthCheckExecutor.java:76) at com.atlassian.jira.health.DefaultHealthCheckExecutor.lambda$applyAndCollectExceptions$1(DefaultHealthCheckExecutor.java:55) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) at com.atlassian.jira.health.DefaultHealthCheckExecutor.applyAndCollectExceptions(DefaultHealthCheckExecutor.java:55) at com.atlassian.jira.health.DefaultHealthCheckExecutor.performHealthChecks(DefaultHealthCheckExecutor.java:44) at com.atlassian.jira.health.HealthChecks.executeChecksAndRecordResults(HealthChecks.java:164) at com.atlassian.jira.health.HealthChecks.runHealthChecks(HealthChecks.java:154) at com.atlassian.jira.health.HealthChecks.runHealthChecks(HealthChecks.java:66) at com.atlassian.jira.startup.BootstrapContainerLauncher.start(BootstrapContainerLauncher.java:32) at com.atlassian.jira.startup.DefaultJiraLauncher.preDbLaunch(DefaultJiraLauncher.java:123) at com.atlassian.jira.startup.DefaultJiraLauncher.lambda$start$0(DefaultJiraLauncher.java:108) at com.atlassian.jira.util.devspeed.JiraDevSpeedTimer.run(JiraDevSpeedTimer.java:31) at com.atlassian.jira.startup.DefaultJiraLauncher.start(DefaultJiraLauncher.java:107) at com.atlassian.jira.startup.LauncherContextListener.initSlowStuff(LauncherContextListener.java:162) at java.base/java.lang. Thread .run( Thread .java:840) Caused by: java.io.FileNotFoundException: jira/jira/jirahome/dbconfig.xml (Permission denied) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:216) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) at java.base/java.io.FileReader.<init>(FileReader.java:75) at com.atlassian.jira.config.database.AbstractJiraHomeDatabaseConfigurationLoader.getReader(AbstractJiraHomeDatabaseConfigurationLoader.java:88) at com.atlassian.jira.config.database.AbstractJiraHomeDatabaseConfigurationLoader.loadDatabaseConfiguration(AbstractJiraHomeDatabaseConfigurationLoader.java:50) ... 28 more

      Summary

      If dbconfig.xml is unreadable by the user account running Jira but otherwise exists Jira does not log an error and continues in setup mode

      Steps to Reproduce

      1. Change file permissions on dbconfig.xml: owned by root, only readable by root ( 600 )
      2. Start Jira

      Expected Results

      An error is logged about Jira being unable to read the file

      Actual Results

      Jira attempts to read the file 2-3 times and continues the startup sequence

      2017-12-21 13:45:53,770 localhost-startStop-1 INFO      [c.a.j.config.database.SystemDatabaseConfigurationLoader] Reading database configuration from deployments/jira761/jira-home/dbconfig.xml
      2017-12-21 13:45:53,808 localhost-startStop-1 INFO      [c.a.jira.startup.JiraHomeStartupCheck] The jira.home directory deployments/jira761/jira-home' is validated and locked for exclusive use by this instance.
      2017-12-21 13:45:53,813 localhost-startStop-1 INFO      [c.a.j.config.database.SystemDatabaseConfigurationLoader] Reading database configuration from deployments/jira761/jira-home/dbconfig.xml
      2017-12-21 13:45:53,823 localhost-startStop-1 INFO      [c.a.j.config.database.SystemDatabaseConfigurationLoader] Reading database configuration from deployments/jira761/jira-home/dbconfig.xml
      2017-12-21 13:45:54,617 localhost-startStop-1 INFO      [c.a.j.config.database.SystemDatabaseConfigurationLoader] Reading database configuration from deployments/jira761/jira-home/dbconfig.xml
      2017-12-21 13:45:54,631 localhost-startStop-1 INFO      [c.a.jira.startup.JiraStartupLogger]
      
          ___ Starting the JIRA Plugin System _________________
      
      2017-12-21 13:45:54,632 localhost-startStop-1 INFO      [c.a.plugin.manager.DefaultPluginManager] Plugin system earlyStartup begun
      2017-12-21 13:45:56,835 localhost-startStop-1 INFO      [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (27): [com.atlassian.jira.jira-languages.en_UK, com.atlassian.plugin.jslibs, tac.jira core.languages.es_ES, com.atlassian.jira.jira-less-integration, tac.jira core.languages.de_DE, tac.jira core.languages.is_IS, tac.jira core.languages.sv_SE, tac.jira core.languages.ru_RU, tac.jira core.languages.zh_CN, tac.jira core.languages.no_NO, com.atlassian.soy.soy-template-plugin, tac.jira core.languages.da_DK, tac.jira core.languages.pl_PL, tac.jira core.languages.ro_RO, com.atlassian.auiplugin, tac.jira core.languages.hu_HU, tac.jira core.languages.ja_JP, tac.jira core.languages.et_EE, tac.jira core.languages.pt_BR, tac.jira core.languages.sk_SK, com.atlassian.plugins.less-transformer-plugin, com.atlassian.plugins.jquery, com.atlassian.plugins.issue-status-plugin, tac.jira core.languages.fr_FR, tac.jira core.languages.ko_KR, com.atlassian.jira.jira-languages.en_US, tac.jira core.languages.cs_CZ], 300 seconds remaining
      2017-12-21 13:45:56,837 ThreadPoolAsyncTaskExecutor::Thread 5 WARN      [c.a.p.s.scanner.util.ProductFilterUtil] Couldn't detect product, will use ProductFilter.ALL
      2017-12-21 13:45:58,137 localhost-startStop-1 INFO      [c.a.plugin.manager.DefaultPluginManager] Plugin system earlyStartup ended
      2017-12-21 13:45:58,187 localhost-startStop-1 INFO      [c.a.j.config.database.SystemDatabaseConfigurationLoader] Reading database configuration from deployments/jira761/jira-home/dbconfig.xml
      2017-12-21 13:45:58,198 localhost-startStop-1 INFO      [c.a.j.instrumentation.external.DatabaseExternalGauges] Installing DBCP monitoring instruments: DatabaseExternalGauges.JiraDbcpInstruments[instruments=[DBCP_MAX, DBCP_ACTIVE, DBCP_IDLE],objectName=com.atlassian.jira:name=BasicDataSource]
      2017-12-21 13:45:58,210 localhost-startStop-1 INFO      [c.a.jira.startup.JiraStartupLogger] Running JIRA startup checks.
      2017-12-21 13:45:58,211 localhost-startStop-1 INFO      [c.a.jira.startup.JiraStartupLogger] JIRA pre-database startup checks completed successfully.
      2017-12-21 13:45:58,235 localhost-startStop-1 INFO      [c.a.j.config.database.DatabaseConfigurationManagerImpl] The database is not yet configured. Enqueuing Database Checklist Launcher on post-database-configured-but-pre-database-activated queue
      2017-12-21 13:45:58,235 localhost-startStop-1 INFO      [c.a.j.config.database.DatabaseConfigurationManagerImpl] The database is not yet configured. Enqueuing Post database-configuration launchers on post-database-activated queue
      2017-12-21 13:45:58,256 localhost-startStop-1 INFO      [c.a.jira.startup.LauncherContextListener] Memory Usage:
          ---------------------------------------------------------------------------------
            Heap memory     :  Used:  236 MiB.  Committed:  564 MiB.  Max:  993 MiB
            Non-heap memory :  Used:   63 MiB.  Committed:   66 MiB.  Max: 1264 MiB
          ---------------------------------------------------------------------------------
            TOTAL           :  Used:  299 MiB.  Committed:  629 MiB.  Max: 2257 MiB
          ---------------------------------------------------------------------------------
      
      

      Notes

      If SSO integration is enabled and one is attempting to upgrade Jira by using the database upgrade method the setup screen won't appear. Instead one will simply be unable to log in with error messages similar to the following:

      2017-12-09 10:18:08,865 http-nio-8080-exec-25 INFO anonymous 618x523x1 - (ip addresses) /secure/SetupMode!default.jspa [c.a.j.authenticator.okta.OktaJiraAuthenticator] User wasn't found not in session, nor in assertion, redirecting to: (url)sso/saml?RelayState=https%3A%2F%2F(jira)%2Fsecure%2FSetupMode%21default.jspa
      

      Workaround

      Ensure file permissions of dbconfig.xml are readable by the user account running Jira

            Assignee:
            Natalia Wroblewska
            Reporter:
            Jeff Curry
            Votes:
            5 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated:
              Resolved: