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

Kyle Miller commented on AMQ-4122:
----------------------------------

I looked at things a bit closer and realized that there is a bug that is 
contributing to this behavior.

org.apache.activemq.broker.LockableServiceSupport has a private BrokerService 
variable.  It implements BrokerServiceAware and has a method 
setBrokerService(...).

org.apache.activemq.store.jdbc.JDBCPersistenceAdapter (which extends from 
LockableServiceSupport) ALSO has a private BrokerService variable.  It ALSO 
implements BrokerServiceAware and has a method setBrokerService(...).  Because 
it extends from LockableServiceSupport, it overrides the setter and 
consequently, the private BrokerService variable will NEVER be set.

I think that the JDBCPersistenceAdapter class should get rid of its private 
BrokerService variable (and setter).  This will solve the issue that I was 
seeing with 2 active master brokers.
                
> Lease Database Locker failover broken
> -------------------------------------
>
>                 Key: AMQ-4122
>                 URL: https://issues.apache.org/jira/browse/AMQ-4122
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.7.0
>         Environment: Java 7u9, SUSE 11, Mysql
>            Reporter: st.h
>            Assignee: Gary Tully
>         Attachments: activemq-kyle.xml, activemq.xml, activemq.xml
>
>
> We are using ActiveMQ 5.7.0 together with a mysql database and could not 
> observe correct failover behavior with lease database locker.
> It seems that there is a race condition, which prevents the correct failover 
> procedure.
> We noticed that when starting up two instances, both instance are becoming 
> master.
> We did several test, including the following and could not observe intended 
> functionality:
> - shutdown all instances
> - manipulate database lock that one node has lock and set expiry time in 
> distance future
> - start up both instances. both instances are unable to acquire lock, as the 
> lock hasn't expired, which should be correct behavior.
> - update the expiry time in database, so that the lock is expired.
> - first instance notices expired lock and becomes master
> - when second instance checks for lock, it also updates the database and 
> becomes master.
> To my understanding the second instance should not be able to update the 
> lock, as it is held by the first instance and should not be able to become 
> master.

--
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

Reply via email to