activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gimel <oren.gi...@gmail.com>
Subject activemq in failover mode prints that derbydb is already locked
Date Mon, 06 Oct 2008 13:05:04 GMT

Hi all,

I'm running 2 brokers (activemq 5.1.0) on 2 different machines, in failover
mode, where the shared folder is on NAS.
I run into a certain problem (too many times) that as Broker A falls, Broker
B is coming up, but the activemq fails to start the derbydb.

error is like :
2008-09-21 03:23:01,783 [erSimpleAppMain] DEBUG JDBCPersistenceAdapter -
Could not get JDBC connection: Failed to start database 'derbydb', see the
next exception for details., due to: Another instance of Derby may have
already booted the database \\IP\broker\derbydb.
ERROR XSDB6: Another instance of Derby may have already booted the database
\\IP\broker\derbydb.

partial stack-trace :
at org.apache.derby.jdbc.EmbeddedDataSource.getConnection(Unknown Source)
 at
org.apache.activemq.store.jdbc.TransactionContext.getConnection(TransactionContext.java:54)
 at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.createAdapter(JDBCPersistenceAdapter.java:294)
 at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.getAdapter(JDBCPersistenceAdapter.java:249)
 at
org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.start(JDBCPersistenceAdapter.java:155)
 at
org.apache.activemq.store.journal.JournalPersistenceAdapter.start(JournalPersistenceAdapter.java:226)
 at
org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1577)
 at
org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1530)
 at
org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:540)
 at org.apache.activemq.broker.BrokerService.start(BrokerService.java:444)

i know, i could also ask the derby developers, but i see that a retry for
the connection is working as well. i think i'd try to patch the
org/apache/activemq/store/jdbc/TransactionContext.java,
and i'd like you to tell me which jars i need to modify in the broker.
also, if possible, i'd love to get an opinion on the method i've modified in
this class.
i simply added retries, and after 5 times, i quit, in order to let the other
broker to try as well :


    public Connection getConnection() throws IOException {
        boolean shouldRetry = true;
        final int MAX_RETRIES = 5;
        final int SLEEP_INTERVAL = 1000;

        for (int countLoops = 0 ; (countLoops < MAX_RETRIES) && shouldRetry;
++countLoops)
        {
            if (connection == null) {
                try {
                    connection = dataSource.getConnection();
                    boolean autoCommit = !inTx;
                    if (connection.getAutoCommit() != autoCommit) {
                        connection.setAutoCommit(autoCommit);
                    }
                    shouldRetry = false;
                } catch (SQLException e) {
                    JDBCPersistenceAdapter.log("Could not get JDBC
connection: ", e);
                    LOG.debug(" *** retries count = " + countLoops, e);
                    if (countLoops + 1 == MAX_RETRIES)
                    {
                        IOException ioe = IOExceptionSupport.create(e);
                        LOG.debug("gave up on trying to reconnect to the DB
after " + MAX_RETRIES + "retries !!!",
                                ioe);
                        System.exit(0);
                    }
                    try {
                        // if reached the 'catch', and didn't throw an
exception, better sleep ...
                        Thread.sleep(SLEEP_INTERVAL);
                    } catch (InterruptedException e1) {
                    }
                }

                if (!shouldRetry)
                {
                    try {
                       
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
                    } catch (Throwable e) {
                    }
                }
            }
        }
        return connection;
    }


thanks in advance,
gimel
-- 
View this message in context: http://www.nabble.com/activemq-in-failover-mode-prints-that-derbydb-is-already-locked-tp19837555p19837555.html
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.


Mime
View raw message