use of com.github.ambry.cloud.CloudDestinationFactory in project ambry by linkedin.
the class VcrBackupTest method singleNodeUpDownTestWithoutPersist.
/**
* Test single VCR up and down without persisted token.
*/
@Test
public void singleNodeUpDownTestWithoutPersist() throws Exception {
StrictMatchExternalViewVerifier helixBalanceVerifier = new StrictMatchExternalViewVerifier(zkConnectString, vcrClusterName, Collections.singleton(VcrTestUtil.helixResource), null);
int numberOfBlobs = 20;
sendBlobToDataNode(dataNode, numberOfBlobs);
// Create in memory cloud destination.
LatchBasedInMemoryCloudDestination latchBasedInMemoryCloudDestination = new LatchBasedInMemoryCloudDestination(new ArrayList<>(), mockCluster.getClusterMap());
CloudDestinationFactory cloudDestinationFactory = new LatchBasedInMemoryCloudDestinationFactory(latchBasedInMemoryCloudDestination);
// Start the VCR with token persistor off.
Properties props = VcrTestUtil.createVcrProperties(dataNode.getDatacenterName(), vcrClusterName, zkConnectString, clusterMapPort, 12410, 12510, null, vcrHelixStateModelFactoryClass, true);
props.setProperty("replication.persist.token.on.shutdown.or.replica.remove", "false");
MockNotificationSystem vcrNotificationSystem = new MockNotificationSystem(mockCluster.getClusterMap());
VcrServer vcrServer = VcrTestUtil.createVcrServer(new VerifiableProperties(props), mockCluster.getClusterAgentsFactory(), vcrNotificationSystem, cloudDestinationFactory);
vcrServer.startup();
makeSureHelixBalance(vcrServer, helixBalanceVerifier);
final MockNotificationSystem vcrNotificationSystemCopy = vcrNotificationSystem;
assertTrue("Blob count is not correct.", TestUtils.checkAndSleep(numberOfBlobs, () -> vcrNotificationSystemCopy.getBlobIds().size(), 400));
vcrServer.shutdown();
assertTrue("VCR server shutdown timeout.", vcrServer.awaitShutdown(5000));
// Error metrics should be zero.
Assert.assertEquals("Error count should be zero", 0, vcrServer.getVcrReplicationManager().getVcrMetrics().addPartitionErrorCount.getCount());
Assert.assertEquals("Error count should be zero", 0, vcrServer.getVcrReplicationManager().getVcrMetrics().removePartitionErrorCount.getCount());
assertEquals("No token is expected.", 0, latchBasedInMemoryCloudDestination.getTokenMap().size());
// Start VCR again with same cloud destination
vcrNotificationSystem = new MockNotificationSystem(mockCluster.getClusterMap());
vcrServer = VcrTestUtil.createVcrServer(new VerifiableProperties(props), mockCluster.getClusterAgentsFactory(), vcrNotificationSystem, cloudDestinationFactory);
vcrServer.startup();
makeSureHelixBalance(vcrServer, helixBalanceVerifier);
// Because same cloud destination is used, getMissingKey() will filter out all keys.
assertEquals("Number of blobs doesn't match", 0, vcrNotificationSystem.getBlobIds().size());
vcrServer.shutdown();
assertTrue("VCR server shutdown timeout.", vcrServer.awaitShutdown(5000));
// Error metrics should be zero.
Assert.assertEquals("Error count should be zero", 0, vcrServer.getVcrReplicationManager().getVcrMetrics().addPartitionErrorCount.getCount());
Assert.assertEquals("Error count should be zero", 0, vcrServer.getVcrReplicationManager().getVcrMetrics().removePartitionErrorCount.getCount());
// Start VCR again with different cloud destination
latchBasedInMemoryCloudDestination = new LatchBasedInMemoryCloudDestination(new ArrayList<>(), mockCluster.getClusterMap());
cloudDestinationFactory = new LatchBasedInMemoryCloudDestinationFactory(latchBasedInMemoryCloudDestination);
vcrNotificationSystem = new MockNotificationSystem(mockCluster.getClusterMap());
vcrServer = VcrTestUtil.createVcrServer(new VerifiableProperties(props), mockCluster.getClusterAgentsFactory(), vcrNotificationSystem, cloudDestinationFactory);
vcrServer.startup();
makeSureHelixBalance(vcrServer, helixBalanceVerifier);
// Because same cloud destination is not used and no token persisted, everything will be backed again.
final MockNotificationSystem vcrNotificationSystemCopy2 = vcrNotificationSystem;
assertTrue("Blob count is not correct.", TestUtils.checkAndSleep(numberOfBlobs, () -> vcrNotificationSystemCopy2.getBlobIds().size(), 200));
vcrServer.shutdown();
assertTrue("VCR shutdown timeout.", vcrServer.awaitShutdown(5000));
// Error metrics should be zero.
Assert.assertEquals("Error count should be zero", 0, vcrServer.getVcrReplicationManager().getVcrMetrics().addPartitionErrorCount.getCount());
Assert.assertEquals("Error count should be zero", 0, vcrServer.getVcrReplicationManager().getVcrMetrics().removePartitionErrorCount.getCount());
}
Aggregations