use of org.apache.curator.retry.ExponentialBackoffRetry in project flink by apache.
the class ZooKeeperLeaderElectionTest method testUnExpectedErrorForwarding.
/**
* Test that background errors in the {@link LeaderElectionDriver} are correctly forwarded to
* the {@link FatalErrorHandler}.
*/
@Test
public void testUnExpectedErrorForwarding() throws Exception {
LeaderElectionDriver leaderElectionDriver = null;
final TestingLeaderElectionEventHandler electionEventHandler = new TestingLeaderElectionEventHandler(LEADER_ADDRESS);
final TestingFatalErrorHandler fatalErrorHandler = new TestingFatalErrorHandler();
final FlinkRuntimeException testException = new FlinkRuntimeException("testUnExpectedErrorForwarding");
final CuratorFrameworkFactory.Builder curatorFrameworkBuilder = CuratorFrameworkFactory.builder().connectString(testingServer.getConnectString()).retryPolicy(new ExponentialBackoffRetry(1, 0)).aclProvider(new ACLProvider() {
// trigger background exception
@Override
public List<ACL> getDefaultAcl() {
throw testException;
}
@Override
public List<ACL> getAclForPath(String s) {
throw testException;
}
}).namespace("flink");
try (CuratorFrameworkWithUnhandledErrorListener curatorFrameworkWrapper = ZooKeeperUtils.startCuratorFramework(curatorFrameworkBuilder, fatalErrorHandler)) {
CuratorFramework clientWithErrorHandler = curatorFrameworkWrapper.asCuratorFramework();
assertFalse(fatalErrorHandler.getErrorFuture().isDone());
leaderElectionDriver = createAndInitLeaderElectionDriver(clientWithErrorHandler, electionEventHandler);
assertThat(fatalErrorHandler.getErrorFuture().join(), FlinkMatchers.containsCause(testException));
} finally {
electionEventHandler.close();
if (leaderElectionDriver != null) {
leaderElectionDriver.close();
}
}
}
use of org.apache.curator.retry.ExponentialBackoffRetry in project flink by apache.
the class ZooKeeperUtilsTest method testStartCuratorFrameworkFailed.
@Test
public void testStartCuratorFrameworkFailed() throws Exception {
TestingFatalErrorHandler handler = new TestingFatalErrorHandler();
String errorMsg = "unexpected exception";
final CuratorFrameworkFactory.Builder curatorFrameworkBuilder = CuratorFrameworkFactory.builder().connectString("localhost:2181").retryPolicy(new ExponentialBackoffRetry(1, 1)).zookeeperFactory((s, i, watcher, b) -> {
throw new RuntimeException(errorMsg);
}).namespace("flink");
ZooKeeperUtils.startCuratorFramework(curatorFrameworkBuilder, handler);
Assert.assertEquals(errorMsg, handler.getErrorFuture().get().getMessage());
}
use of org.apache.curator.retry.ExponentialBackoffRetry in project alluxio by Alluxio.
the class PrimarySelectorClient method getNewCuratorClient.
/**
* Returns a new client for the zookeeper connection. The client is already started before
* returning.
*
* @return a new {@link CuratorFramework} client to use for leader selection
*/
private CuratorFramework getNewCuratorClient() {
LOG.info("Creating new zookeeper client for primary selector {}", mZookeeperAddress);
CuratorFrameworkFactory.Builder curatorBuilder = CuratorFrameworkFactory.builder();
curatorBuilder.connectString(mZookeeperAddress);
curatorBuilder.retryPolicy(new ExponentialBackoffRetry(Constants.SECOND_MS, 3));
curatorBuilder.sessionTimeoutMs((int) ServerConfiguration.getMs(PropertyKey.ZOOKEEPER_SESSION_TIMEOUT));
curatorBuilder.connectionTimeoutMs((int) ServerConfiguration.getMs(PropertyKey.ZOOKEEPER_CONNECTION_TIMEOUT));
// Force compatibility mode to support writing to 3.4.x servers.
curatorBuilder.zk34CompatibilityMode(true);
// Prevent using container parents as it breaks compatibility with 3.4.x servers.
// This is only required if the client is used to write data to zookeeper.
curatorBuilder.dontUseContainerParents();
// Use SESSION policy for leader connection errors, when configured.
if (mConnectionErrorPolicy == ZookeeperConnectionErrorPolicy.SESSION) {
curatorBuilder.connectionStateErrorPolicy(new SessionConnectionStateErrorPolicy());
}
CuratorFramework client = curatorBuilder.build();
client.start();
// Sometimes, if the master crashes and restarts too quickly (faster than the zookeeper
// timeout), zookeeper thinks the new client is still an old one. In order to ensure a clean
// state, explicitly close the "old" client and recreate a new one.
client.close();
client = curatorBuilder.build();
client.start();
return client;
}
use of org.apache.curator.retry.ExponentialBackoffRetry in project alluxio by Alluxio.
the class ZkMasterInquireClientTest method testNoParticipant.
@Test
public void testNoParticipant() throws Exception {
// Create zk inquire client.
MasterInquireClient zkInquirer = ZkMasterInquireClient.getClient(mZkServer.getConnectString(), ELECTION_PATH, LEADER_PATH, INQUIRE_RETRY_COUNT, ZOOKEEPER_AUTH_ENABLED);
// Create curator client for manipulating the leader path.
CuratorFramework client = CuratorFrameworkFactory.newClient(mZkServer.getConnectString(), new ExponentialBackoffRetry(Constants.SECOND_MS, INQUIRE_RETRY_COUNT));
// Create the leader path with no participants.
client.start();
client.create().forPath(LEADER_PATH);
client.close();
// Query should fail with no leader under path.
boolean queryFailed = false;
try {
zkInquirer.getPrimaryRpcAddress();
} catch (UnavailableException e) {
// Expected.
queryFailed = true;
}
Assert.assertTrue("Master query should have been failed.", queryFailed);
}
use of org.apache.curator.retry.ExponentialBackoffRetry in project alluxio by Alluxio.
the class ZkMasterInquireClientTest method testMultipleLeaders.
@Test
public void testMultipleLeaders() throws Exception {
// Create zk inquire client.
MasterInquireClient zkInquirer = ZkMasterInquireClient.getClient(mZkServer.getConnectString(), ELECTION_PATH, LEADER_PATH, INQUIRE_RETRY_COUNT, ZOOKEEPER_AUTH_ENABLED);
// Create curator client for manipulating the leader path.
CuratorFramework client = CuratorFrameworkFactory.newClient(mZkServer.getConnectString(), new ExponentialBackoffRetry(Constants.SECOND_MS, INQUIRE_RETRY_COUNT));
// Create the leader path with multiple participants.
InetSocketAddress localLeader1 = InetSocketAddress.createUnresolved(LOOPBACK_IP, 12345);
InetSocketAddress localLeader2 = InetSocketAddress.createUnresolved(LOOPBACK_IP, 54321);
client.start();
client.create().forPath(LEADER_PATH);
client.create().forPath(PathUtils.concatPath(LEADER_PATH, localLeader1));
client.create().forPath(PathUtils.concatPath(LEADER_PATH, localLeader2));
client.close();
// Verify that the latest written value is fetched.
Assert.assertEquals(localLeader2, zkInquirer.getPrimaryRpcAddress());
}
Aggregations