import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
CountDownLatch blockRecoveryLatch = new CountDownLatch(1);
InMemoryJournal.addBlockReadMessagesLatch(persistentID, blockRecoveryLatch);
+ InMemoryJournal.addEntry(persistentID, 1, "Dummy data so akka will read from persistence");
+
DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName);
// Create the write Tx
CountDownLatch blockRecoveryLatch = new CountDownLatch(1);
InMemoryJournal.addBlockReadMessagesLatch(persistentID, blockRecoveryLatch);
+ InMemoryJournal.addEntry(persistentID, 1, "Dummy data so akka will read from persistence");
+
DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName);
// Create the read-write Tx
}};
}
+ @Test
+ public void testChainWithReadOnlyTxAfterPreviousReady() throws Throwable {
+ new IntegrationTestKit(getSystem(), datastoreContextBuilder) {{
+ DistributedDataStore dataStore = setupDistributedDataStore(
+ "testChainWithReadOnlyTxAfterPreviousReady", "test-1");
+
+ final DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
+
+ // Create a write tx and submit.
+
+ DOMStoreWriteTransaction writeTx = txChain.newWriteOnlyTransaction();
+ writeTx.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
+ DOMStoreThreePhaseCommitCohort cohort1 = writeTx.ready();
+
+ // Create read-only tx's and issue a read.
+
+ CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> readFuture1 =
+ txChain.newReadOnlyTransaction().read(TestModel.TEST_PATH);
+
+ CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> readFuture2 =
+ txChain.newReadOnlyTransaction().read(TestModel.TEST_PATH);
+
+ // Create another write tx and issue the write.
+
+ DOMStoreWriteTransaction writeTx2 = txChain.newWriteOnlyTransaction();
+ writeTx2.write(TestModel.OUTER_LIST_PATH,
+ ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME).build());
+
+ // Ensure the reads succeed.
+
+ assertEquals("isPresent", true, readFuture1.checkedGet(5, TimeUnit.SECONDS).isPresent());
+ assertEquals("isPresent", true, readFuture2.checkedGet(5, TimeUnit.SECONDS).isPresent());
+
+ // Ensure the writes succeed.
+
+ DOMStoreThreePhaseCommitCohort cohort2 = writeTx2.ready();
+
+ doCommit(cohort1);
+ doCommit(cohort2);
+
+ assertEquals("isPresent", true, txChain.newReadOnlyTransaction().read(TestModel.OUTER_LIST_PATH).
+ checkedGet(5, TimeUnit.SECONDS).isPresent());
+ }};
+ }
+
@Test
public void testChainedTransactionFailureWithSingleShard() throws Exception{
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {{
CarsModel.newCarEntry("optima", BigInteger.valueOf(20000L)),
CarsModel.newCarEntry("sportage", BigInteger.valueOf(30000L))));
- ShardDataTree dataTree = new ShardDataTree(SchemaContextHelper.full());
+ ShardDataTree dataTree = new ShardDataTree(SchemaContextHelper.full(), TreeType.OPERATIONAL);
AbstractShardTest.writeToStore(dataTree, CarsModel.BASE_PATH, carsNode);
NormalizedNode<?, ?> root = AbstractShardTest.readStore(dataTree.getDataTree(),
YangInstanceIdentifier.builder().build());
Collections.<ReplicatedLogEntry>emptyList(), 2, 1, 2, 1, 1, "member-1");
NormalizedNode<?, ?> peopleNode = PeopleModel.create();
- dataTree = new ShardDataTree(SchemaContextHelper.full());
+ dataTree = new ShardDataTree(SchemaContextHelper.full(), TreeType.OPERATIONAL);
AbstractShardTest.writeToStore(dataTree, PeopleModel.BASE_PATH, peopleNode);
root = AbstractShardTest.readStore(dataTree.getDataTree(), YangInstanceIdentifier.builder().build());