Search in sources :

Example 1 with ScmClientConfig

use of org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig in project ozone by apache.

the class TestXceiverClientManager method testFreeByReference.

@Test
public void testFreeByReference() throws IOException {
    OzoneConfiguration conf = new OzoneConfiguration();
    ScmClientConfig clientConfig = conf.getObject(ScmClientConfig.class);
    clientConfig.setMaxSize(1);
    String metaDir = GenericTestUtils.getTempPath(TestXceiverClientManager.class.getName() + UUID.randomUUID());
    conf.set(HDDS_METADATA_DIR_NAME, metaDir);
    XceiverClientManager clientManager = new XceiverClientManager(conf, clientConfig, null);
    Cache<String, XceiverClientSpi> cache = clientManager.getClientCache();
    ContainerWithPipeline container1 = storageContainerLocationClient.allocateContainer(SCMTestUtils.getReplicationType(conf), HddsProtos.ReplicationFactor.ONE, OzoneConsts.OZONE);
    XceiverClientSpi client1 = clientManager.acquireClient(container1.getPipeline());
    Assert.assertEquals(1, client1.getRefcount());
    Assert.assertEquals(container1.getPipeline(), client1.getPipeline());
    ContainerWithPipeline container2 = storageContainerLocationClient.allocateContainer(SCMTestUtils.getReplicationType(conf), HddsProtos.ReplicationFactor.THREE, OzoneConsts.OZONE);
    XceiverClientSpi client2 = clientManager.acquireClient(container2.getPipeline());
    Assert.assertEquals(1, client2.getRefcount());
    Assert.assertNotEquals(client1, client2);
    // least recent container (i.e containerName1) is evicted
    XceiverClientSpi nonExistent1 = cache.getIfPresent(container1.getContainerInfo().getPipelineID().getId().toString() + container1.getContainerInfo().getReplicationType());
    Assert.assertEquals(null, nonExistent1);
    // However container call should succeed because of refcount on the client.
    ContainerProtocolCalls.createContainer(client1, container1.getContainerInfo().getContainerID(), null);
    // After releasing the client, this connection should be closed
    // and any container operations should fail
    clientManager.releaseClient(client1, false);
    String expectedMessage = "This channel is not connected.";
    try {
        ContainerProtocolCalls.createContainer(client1, container1.getContainerInfo().getContainerID(), null);
        Assert.fail("Create container should throw exception on closed" + "client");
    } catch (Exception e) {
        Assert.assertEquals(e.getClass(), IOException.class);
        Assert.assertTrue(e.getMessage().contains(expectedMessage));
    }
    clientManager.releaseClient(client2, false);
}
Also used : OzoneConfiguration(org.apache.hadoop.hdds.conf.OzoneConfiguration) ScmClientConfig(org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig) XceiverClientManager(org.apache.hadoop.hdds.scm.XceiverClientManager) IOException(java.io.IOException) XceiverClientSpi(org.apache.hadoop.hdds.scm.XceiverClientSpi) ContainerWithPipeline(org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline) IOException(java.io.IOException) ExpectedException(org.junit.rules.ExpectedException) Test(org.junit.Test)

Example 2 with ScmClientConfig

use of org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig in project ozone by apache.

the class TestXceiverClientManager method testFreeByEviction.

@Test
public void testFreeByEviction() throws IOException {
    OzoneConfiguration conf = new OzoneConfiguration();
    ScmClientConfig clientConfig = conf.getObject(ScmClientConfig.class);
    clientConfig.setMaxSize(1);
    String metaDir = GenericTestUtils.getTempPath(TestXceiverClientManager.class.getName() + UUID.randomUUID());
    conf.set(HDDS_METADATA_DIR_NAME, metaDir);
    XceiverClientManager clientManager = new XceiverClientManager(conf, clientConfig, null);
    Cache<String, XceiverClientSpi> cache = clientManager.getClientCache();
    ContainerWithPipeline container1 = storageContainerLocationClient.allocateContainer(SCMTestUtils.getReplicationType(conf), HddsProtos.ReplicationFactor.ONE, OzoneConsts.OZONE);
    XceiverClientSpi client1 = clientManager.acquireClient(container1.getPipeline());
    Assert.assertEquals(1, client1.getRefcount());
    clientManager.releaseClient(client1, false);
    Assert.assertEquals(0, client1.getRefcount());
    ContainerWithPipeline container2 = storageContainerLocationClient.allocateContainer(SCMTestUtils.getReplicationType(conf), HddsProtos.ReplicationFactor.THREE, OzoneConsts.OZONE);
    XceiverClientSpi client2 = clientManager.acquireClient(container2.getPipeline());
    Assert.assertEquals(1, client2.getRefcount());
    Assert.assertNotEquals(client1, client2);
    // now client 1 should be evicted
    XceiverClientSpi nonExistent = cache.getIfPresent(container1.getContainerInfo().getPipelineID().getId().toString() + container1.getContainerInfo().getReplicationType());
    Assert.assertEquals(null, nonExistent);
    // Any container operation should now fail
    String expectedMessage = "This channel is not connected.";
    try {
        ContainerProtocolCalls.createContainer(client1, container1.getContainerInfo().getContainerID(), null);
        Assert.fail("Create container should throw exception on closed" + "client");
    } catch (Exception e) {
        Assert.assertEquals(e.getClass(), IOException.class);
        Assert.assertTrue(e.getMessage().contains(expectedMessage));
    }
    clientManager.releaseClient(client2, false);
}
Also used : OzoneConfiguration(org.apache.hadoop.hdds.conf.OzoneConfiguration) ScmClientConfig(org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig) XceiverClientManager(org.apache.hadoop.hdds.scm.XceiverClientManager) IOException(java.io.IOException) XceiverClientSpi(org.apache.hadoop.hdds.scm.XceiverClientSpi) ContainerWithPipeline(org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline) IOException(java.io.IOException) ExpectedException(org.junit.rules.ExpectedException) Test(org.junit.Test)

Example 3 with ScmClientConfig

use of org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig in project ozone by apache.

the class TestXceiverClientManager method testFreeByRetryFailure.

@Test
public void testFreeByRetryFailure() throws IOException {
    OzoneConfiguration conf = new OzoneConfiguration();
    ScmClientConfig clientConfig = conf.getObject(ScmClientConfig.class);
    clientConfig.setMaxSize(1);
    XceiverClientManager clientManager = new XceiverClientManager(conf, clientConfig, null);
    Cache<String, XceiverClientSpi> cache = clientManager.getClientCache();
    // client is added in cache
    ContainerWithPipeline container1 = storageContainerLocationClient.allocateContainer(SCMTestUtils.getReplicationType(conf), SCMTestUtils.getReplicationFactor(conf), OzoneConsts.OZONE);
    XceiverClientSpi client1 = clientManager.acquireClient(container1.getPipeline());
    clientManager.acquireClient(container1.getPipeline());
    Assert.assertEquals(2, client1.getRefcount());
    // client should be invalidated in the cache
    clientManager.releaseClient(client1, true);
    Assert.assertEquals(1, client1.getRefcount());
    Assert.assertNull(cache.getIfPresent(container1.getContainerInfo().getPipelineID().getId().toString() + container1.getContainerInfo().getReplicationType()));
    // new client should be added in cache
    XceiverClientSpi client2 = clientManager.acquireClient(container1.getPipeline());
    Assert.assertNotEquals(client1, client2);
    Assert.assertEquals(1, client2.getRefcount());
    // on releasing the old client the entry in cache should not be invalidated
    clientManager.releaseClient(client1, true);
    Assert.assertEquals(0, client1.getRefcount());
    Assert.assertNotNull(cache.getIfPresent(container1.getContainerInfo().getPipelineID().getId().toString() + container1.getContainerInfo().getReplicationType()));
}
Also used : OzoneConfiguration(org.apache.hadoop.hdds.conf.OzoneConfiguration) ScmClientConfig(org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig) XceiverClientManager(org.apache.hadoop.hdds.scm.XceiverClientManager) XceiverClientSpi(org.apache.hadoop.hdds.scm.XceiverClientSpi) ContainerWithPipeline(org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline) Test(org.junit.Test)

Aggregations

OzoneConfiguration (org.apache.hadoop.hdds.conf.OzoneConfiguration)3 XceiverClientManager (org.apache.hadoop.hdds.scm.XceiverClientManager)3 ScmClientConfig (org.apache.hadoop.hdds.scm.XceiverClientManager.ScmClientConfig)3 XceiverClientSpi (org.apache.hadoop.hdds.scm.XceiverClientSpi)3 ContainerWithPipeline (org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline)3 Test (org.junit.Test)3 IOException (java.io.IOException)2 ExpectedException (org.junit.rules.ExpectedException)2