import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.Uninterruptibles;
import com.typesafe.config.ConfigFactory;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import org.opendaylight.controller.cluster.datastore.messages.FindLocalShard;
import org.opendaylight.controller.cluster.datastore.messages.LocalShardFound;
import org.opendaylight.controller.cluster.datastore.persisted.MetadataShardDataTreeSnapshot;
+import org.opendaylight.controller.cluster.datastore.persisted.ShardSnapshotState;
import org.opendaylight.controller.cluster.datastore.utils.MockDataChangeListener;
import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry;
-import org.opendaylight.controller.cluster.raft.Snapshot;
+import org.opendaylight.controller.cluster.raft.persisted.Snapshot;
import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal;
+import org.opendaylight.controller.cluster.raft.utils.InMemorySnapshotStore;
import org.opendaylight.controller.md.cluster.datastore.model.CarsModel;
import org.opendaylight.controller.md.cluster.datastore.model.PeopleModel;
import org.opendaylight.controller.md.cluster.datastore.model.SchemaContextHelper;
@BeforeClass
public static void setUpClass() throws IOException {
system = ActorSystem.create("cluster-test", ConfigFactory.load().getConfig("Member1"));
- Address member1Address = AddressFromURIString.parse("akka.tcp://cluster-test@127.0.0.1:2558");
+ Address member1Address = AddressFromURIString.parse("akka://cluster-test@127.0.0.1:2558");
Cluster.get(system).join(member1Address);
}
public void testWriteTransactionWithSingleShard() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore("transactionIntegrationTest",
+ try (AbstractDataStore dataStore = setupDistributedDataStore("transactionIntegrationTest",
"test-1")) {
testWriteTransaction(dataStore, TestModel.TEST_PATH,
public void testWriteTransactionWithMultipleShards() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testWriteTransactionWithMultipleShards", "cars-1", "people-1")) {
DOMStoreWriteTransaction writeTx = dataStore.newWriteOnlyTransaction();
@Test
public void testReadWriteTransactionWithSingleShard() throws Exception {
- System.setProperty("shard.persistent", "true");
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testReadWriteTransactionWithSingleShard", "test-1")) {
// 1. Create a read-write Tx
public void testReadWriteTransactionWithMultipleShards() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testReadWriteTransactionWithMultipleShards", "cars-1", "people-1")) {
DOMStoreReadWriteTransaction readWriteTx = dataStore.newReadWriteTransaction();
public void testSingleTransactionsWritesInQuickSuccession() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testSingleTransactionsWritesInQuickSuccession", "cars-1")) {
DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
CountDownLatch blockRecoveryLatch = new CountDownLatch(1);
InMemoryJournal.addBlockReadMessagesLatch(persistentID, blockRecoveryLatch);
- try (DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
+ try (AbstractDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
// Create the write Tx
CountDownLatch blockRecoveryLatch = new CountDownLatch(1);
InMemoryJournal.addBlockReadMessagesLatch(persistentID, blockRecoveryLatch);
- try (DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
+ try (AbstractDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
// Create the read-write Tx
InMemoryJournal.addEntry(persistentID, 1, "Dummy data so akka will read from persistence");
- try (DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
+ try (AbstractDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
// Create the write Tx
InMemoryJournal.addEntry(persistentID, 1, "Dummy data so akka will read from persistence");
- try (DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
+ try (AbstractDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
// Create the read-write Tx
datastoreContextBuilder.shardHeartbeatIntervalInMillis(100).shardElectionTimeoutFactor(1)
.shardInitializationTimeout(200, TimeUnit.MILLISECONDS);
- try (DistributedDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
+ try (AbstractDataStore dataStore = setupDistributedDataStore(testName, false, shardName)) {
Object result = dataStore.getActorContext().executeOperation(
dataStore.getActorContext().getShardManager(), new FindLocalShard(shardName, true));
public void testTransactionAbort() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore("transactionAbortIntegrationTest",
+ try (AbstractDataStore dataStore = setupDistributedDataStore("transactionAbortIntegrationTest",
"test-1")) {
DOMStoreWriteTransaction writeTx = dataStore.newWriteOnlyTransaction();
public void testTransactionChainWithSingleShard() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore("testTransactionChainWithSingleShard",
+ try (AbstractDataStore dataStore = setupDistributedDataStore("testTransactionChainWithSingleShard",
"test-1")) {
// 1. Create a Tx chain and write-only Tx
public void testTransactionChainWithMultipleShards() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testTransactionChainWithMultipleShards", "cars-1", "people-1")) {
DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
public void testCreateChainedTransactionsInQuickSuccession() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testCreateChainedTransactionsInQuickSuccession", "cars-1")) {
ConcurrentDOMDataBroker broker = new ConcurrentDOMDataBroker(
public void testCreateChainedTransactionAfterEmptyTxReadied() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testCreateChainedTransactionAfterEmptyTxReadied", "test-1")) {
DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
public void testCreateChainedTransactionWhenPreviousNotReady() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testCreateChainedTransactionWhenPreviousNotReady", "test-1")) {
final DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
public void testCreateChainedTransactionAfterClose() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testCreateChainedTransactionAfterClose", "test-1")) {
DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
public void testChainWithReadOnlyTxAfterPreviousReady() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testChainWithReadOnlyTxAfterPreviousReady", "test-1")) {
final DOMStoreTransactionChain txChain = dataStore.createTransactionChain();
public void testChainedTransactionFailureWithSingleShard() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testChainedTransactionFailureWithSingleShard", "cars-1")) {
ConcurrentDOMDataBroker broker = new ConcurrentDOMDataBroker(
public void testChainedTransactionFailureWithMultipleShards() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore(
+ try (AbstractDataStore dataStore = setupDistributedDataStore(
"testChainedTransactionFailureWithMultipleShards", "cars-1", "people-1")) {
ConcurrentDOMDataBroker broker = new ConcurrentDOMDataBroker(
public void testChangeListenerRegistration() throws Exception {
new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
{
- try (DistributedDataStore dataStore = setupDistributedDataStore("testChangeListenerRegistration",
+ try (AbstractDataStore dataStore = setupDistributedDataStore("testChangeListenerRegistration",
"test-1")) {
testWriteTransaction(dataStore, TestModel.TEST_PATH,
AbstractShardTest.writeToStore(dataTree, CarsModel.BASE_PATH, carsNode);
NormalizedNode<?, ?> root = AbstractShardTest.readStore(dataTree, YangInstanceIdentifier.EMPTY);
- final Snapshot carsSnapshot = Snapshot.create(new MetadataShardDataTreeSnapshot(root).serialize(),
- Collections.<ReplicatedLogEntry>emptyList(), 2, 1, 2, 1, 1, "member-1");
+ final Snapshot carsSnapshot = Snapshot.create(
+ new ShardSnapshotState(new MetadataShardDataTreeSnapshot(root)),
+ Collections.<ReplicatedLogEntry>emptyList(), 2, 1, 2, 1, 1, "member-1", null);
NormalizedNode<?, ?> peopleNode = PeopleModel.create();
dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL);
AbstractShardTest.writeToStore(dataTree, PeopleModel.BASE_PATH, peopleNode);
root = AbstractShardTest.readStore(dataTree, YangInstanceIdentifier.EMPTY);
- Snapshot peopleSnapshot = Snapshot.create(new MetadataShardDataTreeSnapshot(root).serialize(),
- Collections.<ReplicatedLogEntry>emptyList(), 2, 1, 2, 1, 1, "member-1");
+ Snapshot peopleSnapshot = Snapshot.create(
+ new ShardSnapshotState(new MetadataShardDataTreeSnapshot(root)),
+ Collections.<ReplicatedLogEntry>emptyList(), 2, 1, 2, 1, 1, "member-1", null);
restoreFromSnapshot = new DatastoreSnapshot(name, null,
Arrays.asList(
new DatastoreSnapshot.ShardSnapshot("people",
org.apache.commons.lang3.SerializationUtils.serialize(peopleSnapshot))));
- try (DistributedDataStore dataStore = setupDistributedDataStore(name, "module-shards-member1.conf",
+ try (AbstractDataStore dataStore = setupDistributedDataStore(name, "module-shards-member1.conf",
true, "cars", "people")) {
DOMStoreReadTransaction readTx = dataStore.newReadOnlyTransaction();
}
};
}
+
+ @Test
+ @Deprecated
+ public void testRecoveryFromPreCarbonSnapshot() throws Exception {
+ new IntegrationTestKit(getSystem(), datastoreContextBuilder) {
+ {
+ final String name = "testRecoveryFromPreCarbonSnapshot";
+
+ ContainerNode carsNode = CarsModel.newCarsNode(
+ CarsModel.newCarsMapNode(CarsModel.newCarEntry("optima", BigInteger.valueOf(20000L)),
+ CarsModel.newCarEntry("sportage", BigInteger.valueOf(30000L))));
+
+ DataTree dataTree = InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL);
+ dataTree.setSchemaContext(SchemaContextHelper.full());
+ AbstractShardTest.writeToStore(dataTree, CarsModel.BASE_PATH, carsNode);
+ NormalizedNode<?, ?> root = AbstractShardTest.readStore(dataTree, YangInstanceIdentifier.EMPTY);
+
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ new MetadataShardDataTreeSnapshot(root).serialize(bos);
+ final org.opendaylight.controller.cluster.raft.Snapshot snapshot =
+ org.opendaylight.controller.cluster.raft.Snapshot.create(bos.toByteArray(),
+ Collections.<ReplicatedLogEntry>emptyList(), 2, 1, 2, 1, 1, "member-1", null);
+
+ InMemorySnapshotStore.addSnapshot("member-1-shard-cars-" + name, snapshot);
+
+ try (AbstractDataStore dataStore = setupDistributedDataStore(name, "module-shards-member1.conf",
+ true, "cars")) {
+
+ DOMStoreReadTransaction readTx = dataStore.newReadOnlyTransaction();
+
+ Optional<NormalizedNode<?, ?>> optional = readTx.read(CarsModel.BASE_PATH).get(5, TimeUnit.SECONDS);
+ assertEquals("isPresent", true, optional.isPresent());
+ assertEquals("Data node", carsNode, optional.get());
+ }
+ }
+ };
+ }
}