git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1449184 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gary Tully 2013-02-22 19:51:04 +00:00
parent 7a0b32b82b
commit 74bccd57c6
1 changed files with 16 additions and 2 deletions

View File

@ -24,6 +24,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -32,6 +33,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.activemq.broker.AbstractLocker; import org.apache.activemq.broker.AbstractLocker;
import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter; import org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter;
import org.apache.activemq.util.Wait;
import org.apache.derby.jdbc.EmbeddedDataSource; import org.apache.derby.jdbc.EmbeddedDataSource;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -62,11 +64,11 @@ public class LeaseDatabaseLockerTest {
public void testLockInterleave() throws Exception { public void testLockInterleave() throws Exception {
LeaseDatabaseLocker lockerA = new LeaseDatabaseLocker(); LeaseDatabaseLocker lockerA = new LeaseDatabaseLocker();
brokerService.setBrokerName("First"); lockerA.setLeaseHolderId("First");
lockerA.configure(jdbc); lockerA.configure(jdbc);
final LeaseDatabaseLocker lockerB = new LeaseDatabaseLocker(); final LeaseDatabaseLocker lockerB = new LeaseDatabaseLocker();
brokerService.setBrokerName("Second"); lockerB.setLeaseHolderId("Second");
lockerB.configure(jdbc); lockerB.configure(jdbc);
final AtomicBoolean blocked = new AtomicBoolean(true); final AtomicBoolean blocked = new AtomicBoolean(true);
@ -75,11 +77,15 @@ public class LeaseDatabaseLockerTest {
lockerA.start(); lockerA.start();
printLockTable(connection); printLockTable(connection);
assertTrue("First has lock", lockerA.keepAlive());
final CountDownLatch lockerBStarting = new CountDownLatch(1);
ExecutorService executor = Executors.newCachedThreadPool(); ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new Runnable() { executor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
try { try {
lockerBStarting.countDown();
lockerB.start(); lockerB.start();
blocked.set(false); blocked.set(false);
printLockTable(connection); printLockTable(connection);
@ -90,6 +96,14 @@ public class LeaseDatabaseLockerTest {
} }
}); });
Wait.waitFor(new Wait.Condition() {
@Override
public boolean isSatisified() throws Exception {
return lockerBStarting.await(1, TimeUnit.SECONDS);
}
});
TimeUnit.MILLISECONDS.sleep(lockerB.getLockAcquireSleepInterval());
assertTrue("B is blocked", blocked.get()); assertTrue("B is blocked", blocked.get());
assertTrue("A is good", lockerA.keepAlive()); assertTrue("A is good", lockerA.keepAlive());