Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-43945

Can't stop JIRA Service in Windows gracefully after a DB connection is lost

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Fix
    • Low
    • None
    • 6.2.7
    • Installation
    • Databases: MS Sql Server
      Windows Service

    Description

      Summary

      After JIRA database connection is lost, stopping JIRA service hangs at "Stopping" status till the database connection is up.

      Steps to Reproduce

      1. Make sure database is up.
      2. Start JIRA service and access JIRA (such as login to JIRA).
      3. Stop database service using Windows service console (Open the Control Panel (icons view), click on the Administrative Tools icon, click on Services).
      4. Stop JIRA service. JIRA service will stuck in "Stopping" status.

      Expected Results

      Able to stop the JIRA service gracefully even when there is no database connection.

      Actual Results

      JIRA service hangs at "Stopping" status till database connection is up.
      Stack trace from atlassian-jira.log:

      015-06-24 12:29:44,170 QuartzScheduler_Worker-0 ERROR ServiceRunner    LocalPluginLicenseNotificationJob-job [atlassian.jira.service.ServiceRunner] An error occured while trying to run service 'LocalPluginLicenseNotificationJob-job'. Unable to establish a connection with the database. (Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.)
      com.opensymphony.module.propertyset.PropertyImplementationException: Unable to establish a connection with the database. (Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.)
      	at com.opensymphony.module.propertyset.ofbiz.OFBizPropertySet.findPropertyEntry(OFBizPropertySet.java:306)
      	at com.opensymphony.module.propertyset.ofbiz.OFBizPropertySet.get(OFBizPropertySet.java:266)
      	at com.opensymphony.module.propertyset.AbstractPropertySet.getString(AbstractPropertySet.java:305)
      	at com.atlassian.sal.jira.scheduling.JiraPluginSchedulerService.run(JiraPluginSchedulerService.java:50)
      	at com.atlassian.jira.service.JiraServiceContainerImpl.run(JiraServiceContainerImpl.java:61)
      	at com.atlassian.jira.service.ServiceRunner.execute(ServiceRunner.java:48)
      	at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
      	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
      2015-06-24 12:29:45,080 localhost-startStop-2 ERROR      [NoModule] There was an error getting a DBCP datasource.
      java.lang.RuntimeException: Unable to obtain a connection from the underlying connection pool
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.ConnectionTracker.trackConnection(ConnectionTracker.java:59)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory.trackConnection(DBCPConnectionFactory.java:242)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory.getConnection(DBCPConnectionFactory.java:73)
      	at org.ofbiz.core.entity.ConnectionFactory.tryGenericConnectionSources(ConnectionFactory.java:69)
      	at org.ofbiz.core.entity.transaction.JNDIFactory.getConnection(JNDIFactory.java:146)
      	at org.ofbiz.core.entity.TransactionFactory.getConnection(TransactionFactory.java:101)
      	at org.ofbiz.core.entity.ConnectionFactory.getConnection(ConnectionFactory.java:59)
      	at org.ofbiz.core.entity.jdbc.SQLProcessor.getConnection(SQLProcessor.java:367)
      	at org.ofbiz.core.entity.jdbc.SQLProcessor.prepareStatement(SQLProcessor.java:515)
      	at org.ofbiz.core.entity.GenericDAO.selectListIteratorByCondition(GenericDAO.java:844)
      	at org.ofbiz.core.entity.GenericDAO.selectByAnd(GenericDAO.java:725)
      	at org.ofbiz.core.entity.GenericHelperDAO.findByAnd(GenericHelperDAO.java:150)
      	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:901)
      	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:879)
      	at org.ofbiz.core.entity.GenericDelegator.findAll(GenericDelegator.java:802)
      	at com.atlassian.jira.ofbiz.DefaultOfBizDelegator.findAll(DefaultOfBizDelegator.java:357)
      	at com.atlassian.jira.ofbiz.WrappingOfBizDelegator.findAll(WrappingOfBizDelegator.java:206)
      	at com.atlassian.jira.issue.fields.screen.DefaultFieldScreenStore.getFieldScreens(DefaultFieldScreenStore.java:52)
      	at com.atlassian.jira.issue.fields.screen.CachingFieldScreenStore$FieldScreenCache.<init>(CachingFieldScreenStore.java:190)
      	at com.atlassian.jira.issue.fields.screen.CachingFieldScreenStore$1.get(CachingFieldScreenStore.java:49)
      	at com.atlassian.jira.issue.fields.screen.CachingFieldScreenStore$1.get(CachingFieldScreenStore.java:45)
      	at com.atlassian.cache.memory.MemoryCacheManager$1$1.apply(MemoryCacheManager.java:50)
      	at com.atlassian.cache.memory.MemoryCacheManager$1$1.apply(MemoryCacheManager.java:46)
      	at com.google.common.collect.ComputingConcurrentHashMap$ComputingValueReference.compute(ComputingConcurrentHashMap.java:355)
      	at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.compute(ComputingConcurrentHashMap.java:184)
      	at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.getOrCompute(ComputingConcurrentHashMap.java:153)
      	at com.google.common.collect.ComputingConcurrentHashMap.getOrCompute(ComputingConcurrentHashMap.java:69)
      	at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:393)
      	at com.atlassian.cache.memory.DelegatingCachedReference.get(DelegatingCachedReference.java:39)
      	at com.atlassian.jira.issue.fields.screen.CachingFieldScreenStore.refresh(CachingFieldScreenStore.java:131)
      	at com.atlassian.jira.issue.fields.screen.DefaultFieldScreenManager.refresh(DefaultFieldScreenManager.java:141)
      	at com.atlassian.jira.plugin.JiraCacheResetter.resetCaches(JiraCacheResetter.java:84)
      	at com.atlassian.jira.plugin.JiraCacheResetter.access$000(JiraCacheResetter.java:23)
      	at com.atlassian.jira.plugin.JiraCacheResetter$Delegate.onPluginModuleDisabled(JiraCacheResetter.java:55)  <+2>
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:66)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:32)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:60)
      	at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160)
      	at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79)
      	at com.atlassian.plugin.event.impl.DefaultPluginEventManager.broadcast(DefaultPluginEventManager.java:84)
      	at com.atlassian.plugin.manager.DefaultPluginManager.broadcastIgnoreError(DefaultPluginManager.java:1772)
      	at com.atlassian.plugin.manager.DefaultPluginManager.publishModuleDisabledEvents(DefaultPluginManager.java:1617)
      	at com.atlassian.plugin.manager.DefaultPluginManager.notifyModuleDisabled(DefaultPluginManager.java:1601)
      	at com.atlassian.plugin.manager.DefaultPluginManager.onPluginModuleUnavailable(DefaultPluginManager.java:380)  <+2>
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:66)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:32)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:60)
      	at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160)
      	at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79)
      	at com.atlassian.plugin.event.impl.DefaultPluginEventManager.broadcast(DefaultPluginEventManager.java:84)
      	at com.atlassian.plugin.osgi.factory.UnrecognizedModuleDescriptorServiceTrackerCustomizer.removedService(UnrecognizedModuleDescriptorServiceTrackerCustomizer.java:141)
      	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerRemoved(ServiceTracker.java:922)
      	at org.osgi.util.tracker.AbstractTracked.untrack(AbstractTracked.java:351)
      	at org.osgi.util.tracker.ServiceTracker.close(ServiceTracker.java:403)
      	at com.atlassian.plugin.osgi.factory.OsgiPluginInstalledHelper.onDisable(OsgiPluginInstalledHelper.java:104)
      	at com.atlassian.plugin.osgi.factory.OsgiPlugin$1.bundleChanged(OsgiPlugin.java:110)
      	at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
      	at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
      	at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:610)
      	at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:3715)
      	at org.apache.felix.framework.Felix.stopBundle(Felix.java:2180)
      	at org.apache.felix.framework.Felix.uninstallBundle(Felix.java:2289)
      	at org.apache.felix.framework.BundleImpl.uninstall(BundleImpl.java:965)
      	at com.atlassian.plugin.osgi.factory.OsgiPlugin.uninstallInternal(OsgiPlugin.java:560)
      	at com.atlassian.plugin.impl.AbstractPlugin.uninstall(AbstractPlugin.java:453)
      	at com.atlassian.plugin.impl.AbstractDelegatingPlugin.uninstall(AbstractDelegatingPlugin.java:221)
      	at com.atlassian.plugin.loaders.ScanningPluginLoader.onShutdown(ScanningPluginLoader.java:275)  <+3>
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:66)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1.execute(AsynchronousAbleEventDispatcher.java:32)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:60)
      	at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:160)
      	at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:79)
      	at com.atlassian.plugin.event.impl.DefaultPluginEventManager.broadcast(DefaultPluginEventManager.java:84)
      	at com.atlassian.plugin.manager.DefaultPluginManager.shutdown(DefaultPluginManager.java:323)
      	at com.atlassian.jira.ComponentManager$PluginSystem.shutdown(ComponentManager.java:750)
      	at com.atlassian.jira.ComponentManager.stop(ComponentManager.java:322)
      	at com.atlassian.jira.upgrade.PluginSystemLauncher.stop(PluginSystemLauncher.java:37)
      	at com.atlassian.jira.startup.DefaultJiraLauncher.stop(DefaultJiraLauncher.java:153)
      	at com.atlassian.jira.startup.LauncherContextListener.contextDestroyed(LauncherContextListener.java:89)  <+5> (StandardContext.java:4980) (StandardContext.java:5626) (LifecycleBase.java:232) (ContainerBase.java:1575) (ContainerBase.java:1564)
      	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
      	at java.util.concurrent.FutureTask.run(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at java.lang.Thread.run(Unknown Source)
      Caused by: org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
      	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:136)
      	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
      	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
      	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
      	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
      	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
      	at org.postgresql.Driver.makeConnection(Driver.java:393)
      	at org.postgresql.Driver.connect(Driver.java:267)
      	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
      	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
      	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)
      	at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79)
      	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
      	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory$1.call(DBCPConnectionFactory.java:246)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory$1.call(DBCPConnectionFactory.java:243)
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.ConnectionTracker.trackConnection(ConnectionTracker.java:53)
      	... 101 more
      Caused by: java.net.ConnectException: Connection refused: connect
      	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
      	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
      	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
      	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
      	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
      	at java.net.SocksSocketImpl.connect(Unknown Source)
      	at java.net.Socket.connect(Unknown Source)
      	at java.net.Socket.connect(Unknown Source)
      	at java.net.Socket.<init>(Unknown Source)
      	at java.net.Socket.<init>(Unknown Source)
      	at org.postgresql.core.PGStream.<init>(PGStream.java:62)
      	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76)
      	... 118 more
      2015-06-24 12:29:45,173 QuartzScheduler_Worker-0 ERROR ServiceRunner    RemotePluginLicenseNotificationJob-job [NoModule] There was an error getting a DBCP datasource.
      java.lang.RuntimeException: Unable to obtain a connection from the underlying connection pool
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.ConnectionTracker.trackConnection(ConnectionTracker.java:59)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory.trackConnection(DBCPConnectionFactory.java:242)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory.getConnection(DBCPConnectionFactory.java:73)
      	at org.ofbiz.core.entity.ConnectionFactory.tryGenericConnectionSources(ConnectionFactory.java:69)
      	at org.ofbiz.core.entity.transaction.JNDIFactory.getConnection(JNDIFactory.java:146)
      	at org.ofbiz.core.entity.TransactionFactory.getConnection(TransactionFactory.java:101)
      	at org.ofbiz.core.entity.ConnectionFactory.getConnection(ConnectionFactory.java:59)
      	at org.ofbiz.core.entity.jdbc.SQLProcessor.getConnection(SQLProcessor.java:367)
      	at org.ofbiz.core.entity.jdbc.SQLProcessor.prepareStatement(SQLProcessor.java:515)
      	at org.ofbiz.core.entity.GenericDAO.selectListIteratorByCondition(GenericDAO.java:844)
      	at org.ofbiz.core.entity.GenericDAO.selectByAnd(GenericDAO.java:725)
      	at org.ofbiz.core.entity.GenericHelperDAO.findByAnd(GenericHelperDAO.java:150)
      	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:901)
      	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:879)
      	at org.ofbiz.core.entity.GenericDelegator.findByAnd(GenericDelegator.java:848)
      	at com.opensymphony.module.propertyset.ofbiz.OFBizPropertySet.findPropertyEntry(OFBizPropertySet.java:298)
      	at com.opensymphony.module.propertyset.ofbiz.OFBizPropertySet.get(OFBizPropertySet.java:266)
      	at com.opensymphony.module.propertyset.AbstractPropertySet.getString(AbstractPropertySet.java:305)
      	at com.atlassian.sal.jira.scheduling.JiraPluginSchedulerService.run(JiraPluginSchedulerService.java:50)
      	at com.atlassian.jira.service.JiraServiceContainerImpl.run(JiraServiceContainerImpl.java:61)
      	at com.atlassian.jira.service.ServiceRunner.execute(ServiceRunner.java:48)
      	at org.quartz.core.JobRunShell.run(JobRunShell.java:195)
      	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
      Caused by: org.postgresql.util.PSQLException: Connection refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
      	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:136)
      	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
      	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
      	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
      	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
      	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
      	at org.postgresql.Driver.makeConnection(Driver.java:393)
      	at org.postgresql.Driver.connect(Driver.java:267)
      	at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
      	at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
      	at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)
      	at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:79)
      	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
      	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory$1.call(DBCPConnectionFactory.java:246)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory$1.call(DBCPConnectionFactory.java:243)
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.ConnectionTracker.trackConnection(ConnectionTracker.java:53)
      	... 22 more
      Caused by: java.net.ConnectException: Connection refused: connect
      	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
      	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
      	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
      	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
      	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
      	at java.net.SocksSocketImpl.connect(Unknown Source)
      	at java.net.Socket.connect(Unknown Source)
      	at java.net.Socket.connect(Unknown Source)
      	at java.net.Socket.<init>(Unknown Source)
      	at java.net.Socket.<init>(Unknown Source)
      	at org.postgresql.core.PGStream.<init>(PGStream.java:62)
      	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76)
      	... 39 more
      

      Workaround

      Can kill the JIRA process in "force" status. Use the windows command below:

      sc queryex <service name>
      

      For example JIRA service name is "JIRA290515092212". The result is:

      SERVICE_NAME: JIRA290515092212
              TYPE               : 10  WIN32_OWN_PROCESS
              STATE              : 4  RUNNING
                                      (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
              WIN32_EXIT_CODE    : 0  (0x0)
              SERVICE_EXIT_CODE  : 0  (0x0)
              CHECKPOINT         : 0x0
              WAIT_HINT          : 0x0
              PID                : 3224
              FLAGS              :
      

      Get the PID from the result and execute the following windows command:

      taskkill /PID 3224 /F
      

      Attachments

        Activity

          People

            Unassigned Unassigned
            mmuthusamy Moga
            Votes:
            0 Vote for this issue
            Watchers:
            9 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: