You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2009/07/25 01:00:20 UTC
svn commit: r797685 - in
/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc:
DefaultDatabaseLocker.java JDBCPersistenceAdapter.java
Author: gtully
Date: Fri Jul 24 23:00:20 2009
New Revision: 797685
URL: http://svn.apache.org/viewvc?rev=797685&view=rev
Log:
resolve intermittent hang of JDBCQueueMasterSlaveTest - shutdown of the executor used to check the db lock during shutdown may cause the shutdown thread to interrupt and die before shutdown is complete. A wait for shutdown to complete can hang forever. Just cancelling the periodic tasks is sufficient
Modified:
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java?rev=797685&r1=797684&r2=797685&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/DefaultDatabaseLocker.java Fri Jul 24 23:00:20 2009
@@ -146,7 +146,7 @@
}
} catch (Exception e) {
LOG.error("Failed to update database lock: " + e, e);
- }finally {
+ } finally {
if (statement != null) {
try {
statement.close();
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java?rev=797685&r1=797684&r2=797685&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java Fri Jul 24 23:00:20 2009
@@ -73,7 +73,7 @@
private JDBCAdapter adapter;
private MemoryTransactionStore transactionStore;
private ScheduledThreadPoolExecutor clockDaemon;
- private ScheduledFuture clockTicket;
+ private ScheduledFuture<?> cleanupTicket, keepAliveTicket;
private int cleanupPeriod = 1000 * 60 * 5;
private boolean useExternalMessageReferences;
private boolean useDatabaseLock = true;
@@ -196,7 +196,7 @@
} else {
service.start();
if (lockKeepAlivePeriod > 0) {
- getScheduledThreadPoolExecutor().scheduleAtFixedRate(new Runnable() {
+ keepAliveTicket = getScheduledThreadPoolExecutor().scheduleAtFixedRate(new Runnable() {
public void run() {
databaseLockKeepAlive();
}
@@ -212,7 +212,7 @@
// Cleanup the db periodically.
if (cleanupPeriod > 0) {
- clockTicket = getScheduledThreadPoolExecutor().scheduleAtFixedRate(new Runnable() {
+ cleanupTicket = getScheduledThreadPoolExecutor().scheduleAtFixedRate(new Runnable() {
public void run() {
cleanup();
}
@@ -221,14 +221,16 @@
}
public synchronized void stop() throws Exception {
- if (clockTicket != null) {
- clockTicket.cancel(true);
- clockTicket = null;
- }
- if (clockDaemon != null) {
- clockDaemon.shutdown();
- clockDaemon = null;
+ if (cleanupTicket != null) {
+ cleanupTicket.cancel(true);
+ cleanupTicket = null;
+ }
+ if (keepAliveTicket != null) {
+ keepAliveTicket.cancel(false);
+ keepAliveTicket = null;
}
+
+ // do not shutdown clockDaemon as it may kill the thread initiating shutdown
DatabaseLocker service = getDatabaseLocker();
if (service != null) {
service.stop();