activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jack Humphrey (JIRA)" <j...@apache.org>
Subject [jira] Commented: (AMQ-678) MessageCleanup fails with mysql 4.1.x
Date Thu, 06 Apr 2006 19:57:52 GMT
    [ https://issues.apache.org/activemq/browse/AMQ-678?page=comments#action_36000 ] 

Jack Humphrey commented on AMQ-678:
-----------------------------------

I have written a JDBC adapter for ActiveMQ 3.2.2 that replaces this statement with a two-step
temp table process in order to work with MySQL 4.0. Not sure if they have changed the JDBC
adapter framework for ActiveMQ 4.0 or not, but I'm happy to share a howto if you want it.

> MessageCleanup fails with mysql 4.1.x
> -------------------------------------
>
>          Key: AMQ-678
>          URL: https://issues.apache.org/activemq/browse/AMQ-678
>      Project: ActiveMQ
>         Type: Bug

>   Components: Message Store
>     Versions: 4.0 M4
>     Reporter: Paul Focke
>     Priority: Minor

>
>
> When ActiveMQ does a message cleanup using mysql-4.1 for jdbc persistence an error occurs.
 ActiveMQ complains that the connection is already closed.  The nested exception however is
an EOFException.  The exception is thrown by DefaultJDBCAdapter.doDeleteOldMessages(DefaultJDBCAdapter.java:544).
 I poked around I found that the sql statement it produces causes mysql to crash.  It even
causes mysqld to crash when entered in the mysql client console, so this is not a Connector/J
issue.  Here is the statement
> DELETE FROM ACTIVEMQ_MSGS WHERE ( EXPIRATION<>0 AND EXPIRATION<1144326387433)
OR ID <= ( SELECT min(ACTIVEMQ_ACKS.LAST_ACKED_ID) FROM ACTIVEMQ_ACKS WHERE ACTIVEMQ_ACKS.CONTAINER=ACTIVEMQ_MSGS.CONTAINER)
> It can be found in Statements.java:220.
> I have tested this under mysql 4.1.12, 4.1.13 & 5.0.18.  The exceptions were only
thrown in mysql 4.1.  5.0 behaved as would be expected.
> Possible solutions would be : 
>  - rewrite the delete statement so that it doesn't kill mysqld : 
>     - I had a quick look into rewriting the statement but I haven't found how
>     - change the current delete into a select id from ... (this works) and delete records
1 by 1 using the resultSet ( which really sucks when there are lots of messages to be deleted
)
>  - not use mysql-4.1

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message