activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jan Lievens (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-2497) Message broker won't come back when the databse goes offline and comes back online
Date Wed, 08 Dec 2010 07:39:02 GMT

    [ https://issues.apache.org/jira/browse/AMQ-2497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12969229#action_12969229
] 

Jan Lievens commented on AMQ-2497:
----------------------------------

We have the same issue with a PostgreSQL database. It seems that the protected Connection
in the DefaultDatabaseLocker becomes stale when the DB goes down but is still used whenever
the keepAlive-method is called. Only at the start of the DefaultDatabaseLocker is the connection
retrieved from the datasource (which in our case has a validationQuery) so the keepAlive catches
any Exception while using the stale connection. When this happens the keepAlive returns a
false which results in a stopBroker()-method call on the JDBCPersistenceAdapter.

Maybe it would be better to diversify the catch-statement in the keepAlive-method and whenever
this specific Exception (in our case org.postgresql.util.PSQLException: FATAL: terminating
connection due to administrator command) occurs (but any SQLException will do I think), take
the necessary precautions: 
- stop all the transport-connectors so that no further messages are send into ActiveMQ
- schedule a different keepAlive that simply checks if the DB is up again 
         -> if up again: re-initialize the DefaultDatabaseLocker and start the transport-connectors
again

I haven't come around implementing a patch to the 5.5-SNAPSHOT yet but I am willing to do
so if my assumptions stated above are somewhat correct.

> Message broker won't come back when the databse goes offline and comes back online
> ----------------------------------------------------------------------------------
>
>                 Key: AMQ-2497
>                 URL: https://issues.apache.org/jira/browse/AMQ-2497
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.0
>         Environment: MS SQL 2000,2005,2008
>            Reporter: hiskill
>            Priority: Blocker
>             Fix For: 5.5.0
>
>
> - deployed ActiveMQ 5.3.0 as RAR on JBoss
> - broker comes up fine
> - at some point database goes offline
> - broker can't communicate with database and shuts down
> - now database comes back online
> - borker will never come back again and will have to restart the JBoss manually again
to start the broker
> This will be a blocker for us to go to production as there is no availability of broker
when database goes offline and comes back.
> Here is my broker-config.xml, let me know if any configuration is missing :
> <beans xmlns="http://activemq.apache.org/schema/core">
> <bean xmlns="" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
> <bean xmlns="" id="my-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
> <property name="url" value="jdbc:sqlserver://mydb:1433;databaseName=myds"/>
> <property name="username" value="sql"/>
> <property name="password" value="sql"/>
> <property name="initialSize" value="10"/>
> <property name="poolPreparedStatements" value="true"/>
> </bean>
> <!-- shutdown hook is disabled as RAR classloader may be gone at shutdown -->
> <broker useJmx="true" brokerName="sample.broker1" useShutdownHook="false">
> <destinations>
> <topic physicalName="pocket" />
> </destinations>
> <managementContext>
> <!-- use appserver provided context instead of creating one,
> for jboss use: -Djboss.platform.mbeanserver -->
> <managementContext createConnector="false"/>
> </managementContext>
> <persistenceAdapter>
> <!-- <amqPersistenceAdapter syncOnWrite="false" directory="${jboss.server.data.dir}/activemq"
maxFileLength="20 mb"/> -->
> <!-- <journaledJDBC journalLogFiles="5" dataDirectory="${jboss.server.data.dir}/activemq"/>
-->
> <!-- To use a different datasource, use th following syntax : -->
> <!-- <kahaPersistenceAdapter directory="${jboss.server.data.dir}/activemq" maxDataFileLength="33554432"/>
-->
> <journaledJDBC journalLogFiles="5" dataDirectory="${jboss.server.data.dir}/activemq"
dataSource="#my-ds" useDatabaseLock="false" />
> </persistenceAdapter>
> <transportConnectors>
> <transportConnector name="sample.broker1" uri="tcp://localhost:3030" discoveryUri="multicast://default"/>
> </transportConnectors>
> </broker>
> </beans>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message