summaryrefslogtreecommitdiff
path: root/qpid/java/bdbstore/src/test
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2015-03-25 10:57:13 +0000
committerAlex Rudyy <orudyy@apache.org>2015-03-25 10:57:13 +0000
commit2cbf48987d84b9e553cd840742e6aa377d444094 (patch)
treebc07c4d83cb463884b0ce3372a2cd15bbca20b73 /qpid/java/bdbstore/src/test
parent9639e5681551135f0a92c7cfb063127b7d29231f (diff)
downloadqpid-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.java66
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)
{