Hi Erik,

you're right, it seems this column is just being ignored. The whole
lock row is just meant to prevent other brokers to use the database.
You can raise Jira for this (and possibly provide a patch).

Cheers
--
Dejan Bosanac
-----------------
FuseSource - The experts in open source integration and messaging.
Email: dej...@fusesource.com
Web: http://fusesource.com
Twitter:  http://twitter.com/dejanb
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net



On Mon, Dec 20, 2010 at 11:44 PM, Erik Osterman <e...@osterman.com> wrote:
> After some more debugging, I think that the ACTIVEMQ_LOCK.BROKER_NAME column 
> is simply not maintained. I decided to dig deeper after downgrading to 
> mysql-connector-java-5.0.8 did not change the behavior.
>
> Turning on the MySQL query log and searching for all modifications of 
> ACTIVEMQ_LOCK reveal the following:
>
> grep ACTIVEMQ_LOCK /tmp/mysql_query.log
>
> 3 Query       CREATE TABLE ACTIVEMQ_LOCK( ID BIGINT NOT NULL, TIME BIGINT, 
> BROKER_NAME VARCHAR(250), PRIMARY KEY (ID) ) ENGINE=INNODB
> 3 Query       INSERT INTO ACTIVEMQ_LOCK(ID) VALUES (1)
> 3 Query       SELECT * FROM ACTIVEMQ_LOCK FOR UPDATE
> 3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292883941305 WHERE ID = 1
> 3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292883971306 WHERE ID = 1
> 3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292884001308 WHERE ID = 1
> 3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292884031306 WHERE ID = 1
> 3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292884061307 WHERE ID = 1
>
> It never attempts to set the BROKER_NAME column. This is corroborated by the 
> SQL statement in the source code in org.apache.activemq.store.jdbc, 
> Statements::getLockUpdateStatement()
>
> https://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/Statements.java
>
>
> It would seem to me that at the point it executes the UPDATE ACTIVEMQ_LOCK, 
> it should also be seting the BROKER_NAME column.
>
>   public String getLockUpdateStatement() {
>        if (lockUpdateStatement == null) {
>            lockUpdateStatement = "UPDATE " + getFullLockTableName() + " SET 
> TIME = ? WHERE ID = 1";
>        }
>        return lockUpdateStatement;
>    }
>
> Can any one confirm these conclusions or am I jumping the gun here? Perhaps 
> BROKER_NAME in the ACTIVEMQ_LOCKS table does not mean what I think it should 
> mean.
>
>
> I apologize if this message should be posted to the ActiveMQ developers list. 
> Please let me know if it would be best to repost it there.
>
>
>
> Thanks!
>
>
>
> Erik Osterman
> <e...@osterman.com>
> http://www.osterman.com
>
>
>
>
>
> On Dec 17, 2010, at 5:53 PM, Erik Osterman wrote:
>
>> I've recently setup ActiveMQ 5.4.2 in a JDBC Master-Slave sandbox 
>> configuration on localhost (CentOS 5.4 i686) with Java(TM) SE Runtime 
>> Environment (build 1.6.0_14-b08). The JDBC driver is 
>> mysql-connector-java-5.1.14-bin.jar. The database is 
>> mysql-server-5.0.77-4.el5_4.2.
>>
>> It becomes master, but never registers it's brokerName in the database. I 
>> can submit persistent messages and the successfully get logged in 
>> ACTIVEMQ_MSGS. The entire schema was created automatically by ActiveMQ.
>>
>> 2010-12-17 20:34:51,793 | INFO  | Attempting to acquire the exclusive lock 
>> to become the Master broker | 
>> org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
>> 2010-12-17 20:34:51,810 | INFO  | Becoming the master on dataSource: 
>> org.apache.commons.dbcp.basicdatasou...@3b1f38 | 
>> org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
>>
>> mysql> select * from ACTIVEMQ_LOCK;
>> +----+------+-------------+
>> | ID | TIME | BROKER_NAME |
>> +----+------+-------------+
>> |  1 | NULL | NULL        |
>> +----+------+-------------+
>> 1 row in set (0.00 sec)
>>
>> mysql> select count(*) from ACTIVEMQ_MSGS;
>> +----------+
>> | count(*) |
>> +----------+
>> |     1000 |
>> +----------+
>> 1 row in set (0.00 sec)
>>
>>
>> The brokerName has been set in the running configuration for the <broker/>.
>> <broker xmlns="http://activemq.apache.org/schema/core"; 
>> brokerName="ec2-174-129-179-24.compute-1.amazonaws.com" 
>> dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true" 
>> persistent="true" useShutdownHook="false" useJmx="true">
>>
>> I have also tried adding 
>> -Dactivemq.hostname=ec2-174-129-179-24.compute-1.amazonaws.com to the init 
>> script, but it doesn't have any affect either.
>>
>> Complete configuration below.
>>
>> Any input greatly appreciated!
>>
>>
>> Erik Osterman
>> <e...@osterman.com>
>> http://www.osterman.com
>>
>>
>>
>>
>>
>> <beans
>>  xmlns="http://www.springframework.org/schema/beans";
>>  xmlns:amq="http://activemq.apache.org/schema/core";
>>  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>  xsi:schemaLocation="http://www.springframework.org/schema/beans 
>> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>>  http://activemq.apache.org/schema/core 
>> http://activemq.apache.org/schema/core/activemq-core.xsd";>
>>  <bean 
>> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>>    <property name="locations">
>>      <value>file:${activemq.base}/conf/credentials.properties</value>
>>    </property>
>>  </bean>
>>
>>  <broker xmlns="http://activemq.apache.org/schema/core"; 
>> brokerName="ec2-174-129-179-24.compute-1.amazonaws.com" 
>> dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true" 
>> persistent="true" useShutdownHook="false" useJmx="true">
>>    <managementContext>
>>      <managementContext createConnector="false"/>
>>    </managementContext>
>>
>>    <networkConnectors>
>>      <networkConnector uri="multicast://default"/>
>>    </networkConnectors>
>>
>>
>>    <persistenceAdapter>
>>      <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" 
>> dataSource="#mysql-ds" />
>>    </persistenceAdapter>
>>
>>    <plugins>
>>      <statisticsBrokerPlugin/>
>>    </plugins>
>>
>>    <systemUsage>
>>      <systemUsage>
>>        <memoryUsage>
>>          <memoryUsage limit="20 mb"/>
>>        </memoryUsage>
>>        <storeUsage>
>>          <storeUsage limit="1 gb"/>
>>        </storeUsage>
>>        <tempUsage>
>>          <tempUsage limit="100 mb"/>
>>        </tempUsage>
>>      </systemUsage>
>>    </systemUsage>
>>
>>    <transportConnectors>
>>      <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/> -->
>>      <transportConnector name="stomp" 
>> uri="stomp://0.0.0.0:61612?transport.closeAsync=false"/>
>>      <transportConnector name="stomp+nio" 
>> uri="stomp+nio://0.0.0.0:61613?transport.closeAsync=false"/>
>>    </transportConnectors>
>>
>>  </broker>
>>
>>  <import resource="jetty.xml"/>
>>
>>  <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="activemq"/>
>>    <property name="password" value="activemq"/>
>>    <property name="maxActive" value="200"/>
>>    <property name="poolPreparedStatements" value="true"/>
>>  </bean>
>>
>> </beans>
>>
>>
>>
>>
>>
>
>

Reply via email to