activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Petr Nídl (JIRA) <j...@apache.org>
Subject [jira] [Comment Edited] (AMQ-1063) Journaled JDBC checkpoint fails with java.io.IOException: Already started.
Date Mon, 22 Oct 2012 10:18:21 GMT

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

Petr Nídl edited comment on AMQ-1063 at 10/22/12 10:18 AM:
-----------------------------------------------------------

I've analyzed the problem for 5.6.0 release. It happens when org.apache.activemq.store.journal.JournalPersistenceAdapter
starts new transaction during checkpoint and fails to retrieve the database connection for
this task. The main cause is in org.apache.activemq.store.jdbc.TransactionContext.begin()
method (lines 153-159):

public void begin() throws IOException {
  if (inTx) {
    throw new IOException("Already started.");
  }
  inTx = true;
  connection = getConnection();
}

Lines 157 and 158 should be switched because currently the TransactionContext instance is
marked as "inTx" even though the getConnection() method throws an exception. From that moment
the TransactionContext instance is marked as "inTx" forever and will never start new transaction
again.
                
      was (Author: pnidl):
    I've analyzed the problem for 5.6.0 release. It happens when org.apache.activemq.store.journal.JournalPersistenceAdapter
starts new transaction during checkpoint and fails to retrieve the database connection for
this task. The main cause is in org.apache.activemq.store.jdbc.TransactionContext.begin()
method (lines 153-159):

<pre>
153 public void begin() throws IOException {
154   if (inTx) {
155     throw new IOException("Already started.");
156   }
157   inTx = true;
158   connection = getConnection();
159 }
</pre>

Lines 157 and 158 should be switched because currently the TransactionContext instance is
marked as "inTx" even though the getConnection() method throws an exception. From that moment
the TransactionContext instance is marked as "inTx" forever and will never start new transaction
again.
                  
> Journaled JDBC checkpoint fails with java.io.IOException: Already started.
> --------------------------------------------------------------------------
>
>                 Key: AMQ-1063
>                 URL: https://issues.apache.org/jira/browse/AMQ-1063
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.0.0
>         Environment: Windows XP Professional, JVM 1.5.0_09, MySQL 5.0.27
>            Reporter: jk@penguinsfan.com
>             Fix For: NEEDS_REVIEWED
>
>         Attachments: activemq.log.zip
>
>
> I am running trunk using JDBC against MySQL 5.0.27.  I am seeing the above mentioned
IOException.  Do not have specific instructions on how to reproduce at the current time, but
I was using durable subscriptions with the store durable cursor if that helps.  (I'll post
if I find out more information.)
>       <persistenceAdapter>
>    
>       <journaledJDBC journalLogFiles="5" dataDirectory="../activemq-data" dataSource="#mysql-ds"/>
>     </persistenceAdapter>
>   <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
>     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
>     <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
>     <property name="username" value="*** OMITTED ***"/>
>     <property name="password" value="*** OMITTED *** "/>
>     <property name="poolPreparedStatements" value="true"/>
>   </bean>  
> Log trace:
> 2006-11-19 19:19:48,078 [/127.0.0.1:4898] DEBUG JournalPersistenceAdapter      - Waking
for checkpoint to complete.
> 2006-11-19 19:19:48,078 [eckpoint Worker] DEBUG JournalPersistenceAdapter      - Checkpoint
started.
> 2006-11-19 19:19:48,078 [eckpoint Worker] ERROR JournalPersistenceAdapter      - Failed
to checkpoint a message store: java.util.concurrent.ExecutionException: java.io.IOException:
Already started.
> java.util.concurrent.ExecutionException: java.io.IOException: Already started.
> 	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:205)
> 	at java.util.concurrent.FutureTask.get(FutureTask.java:80)
> 	at org.apache.activemq.store.journal.JournalPersistenceAdapter.doCheckpoint(JournalPersistenceAdapter.java:386)
> 	at org.apache.activemq.store.journal.JournalPersistenceAdapter$2.iterate(JournalPersistenceAdapter.java:129)
> 	at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:88)
> 	at org.apache.activemq.thread.DedicatedTaskRunner.access$0(DedicatedTaskRunner.java:76)
> 	at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:39)
> Caused by: java.io.IOException: Already started.
> 	at org.apache.activemq.store.jdbc.TransactionContext.begin(TransactionContext.java:145)
> 	at org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.beginTransaction(JDBCPersistenceAdapter.java:358)
> 	at org.apache.activemq.store.journal.JournalPersistenceAdapter.beginTransaction(JournalPersistenceAdapter.java:189)
> 	at org.apache.activemq.util.TransactionTemplate.run(TransactionTemplate.java:41)
> 	at org.apache.activemq.store.journal.JournalMessageStore.checkpoint(JournalMessageStore.java:247)
> 	at org.apache.activemq.store.journal.JournalTopicMessageStore.checkpoint(JournalTopicMessageStore.java:162)
> 	at org.apache.activemq.store.journal.JournalPersistenceAdapter$5.call(JournalPersistenceAdapter.java:373)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:123)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
> 	at java.lang.Thread.run(Thread.java:595)
> 2006-11-19 19:19:48,109 [eckpoint Worker] DEBUG JournalPersistenceAdapter      - Checkpoint
done.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message