diff options
| author | Alex Rudyy <orudyy@apache.org> | 2015-03-25 10:57:13 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2015-03-25 10:57:13 +0000 |
| commit | 2cbf48987d84b9e553cd840742e6aa377d444094 (patch) | |
| tree | bc07c4d83cb463884b0ce3372a2cd15bbca20b73 /qpid/java/bdbstore/src/test | |
| parent | 9639e5681551135f0a92c7cfb063127b7d29231f (diff) | |
| download | qpid-python-2cbf48987d84b9e553cd840742e6aa377d444094.tar.gz | |
QPID-6464: Set replica consistency policy to 'NoConsistencyPolicy' in order to avoid hanging for timeout specified in TimeConsistencyPolicy on creation of JE transaction after transition from Master into Detached state when HA claster has no majority but the remaining Master change configuration tasks attempted to execute
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1669092 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/bdbstore/src/test')
| -rw-r--r-- | qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java index c47307bdc0..b8c3b493bc 100644 --- a/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java +++ b/qpid/java/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ReplicatedEnvironmentFacadeTest.java @@ -32,7 +32,10 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; @@ -48,6 +51,7 @@ import com.sleepycat.je.Environment; import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.Transaction; import com.sleepycat.je.rep.NodeState; +import com.sleepycat.je.rep.ReplicaWriteException; import com.sleepycat.je.rep.ReplicatedEnvironment; import com.sleepycat.je.rep.ReplicatedEnvironment.State; import com.sleepycat.je.rep.ReplicationConfig; @@ -822,6 +826,68 @@ public class ReplicatedEnvironmentFacadeTest extends QpidTestCase node2.close(); } + public void testReplicaTransactionBeginsImmediately() throws Exception + { + ReplicatedEnvironmentFacade master = createMaster(); + String nodeName2 = TEST_NODE_NAME + "_2"; + String host = "localhost"; + int port = _portHelper.getNextAvailable(); + String node2NodeHostPort = host + ":" + port; + + final ReplicatedEnvironmentFacade replica = createReplica(nodeName2, node2NodeHostPort, new NoopReplicationGroupListener() ); + + // close the master + master.close(); + + // try to create a transaction in a separate thread + // and make sure that transaction is created immediately. + ExecutorService service = Executors.newSingleThreadExecutor(); + try + { + + Future<Transaction> future = service.submit(new Callable<Transaction>(){ + + @Override + public Transaction call() throws Exception + { + return replica.getEnvironment().beginTransaction(null, null); + } + }); + Transaction transaction = future.get(5, TimeUnit.SECONDS); + assertNotNull("Transaction was not created during expected time", transaction); + transaction.abort(); + } + finally + { + service.shutdown(); + } + } + + public void testReplicaWriteExceptionIsConvertedIntoConnectionScopedRuntimeException() throws Exception + { + ReplicatedEnvironmentFacade master = createMaster(); + String nodeName2 = TEST_NODE_NAME + "_2"; + String host = "localhost"; + int port = _portHelper.getNextAvailable(); + String node2NodeHostPort = host + ":" + port; + + final ReplicatedEnvironmentFacade replica = createReplica(nodeName2, node2NodeHostPort, new NoopReplicationGroupListener() ); + + // close the master + master.close(); + + try + { + replica.openDatabase("test", DatabaseConfig.DEFAULT.setAllowCreate(true) ); + fail("Replica write operation should fail"); + } + catch(ReplicaWriteException e) + { + RuntimeException handledException = master.handleDatabaseException("test", e); + assertTrue("Unexpected exception", handledException instanceof ConnectionScopedRuntimeException); + } + } + private void putRecord(final ReplicatedEnvironmentFacade master, final Database db, final int keyValue, final String dataValue) { |
