@Test(timeout = 60000) @SetupRpcConnection(setupRpcServer = false, setupRpcClient = false) public void testClientRetryFailureOnStartup() throws Exception { retries = 2; ServerSocket serverSocket = new ServerSocket(0); final InetSocketAddress address = new InetSocketAddress("127.0.0.1", serverSocket.getLocalPort()); serverSocket.close(); EchoMessage message = EchoMessage.newBuilder().setMessage(MESSAGE).build(); RpcConnectionKey rpcConnectionKey = new RpcConnectionKey(address, DummyProtocol.class, false); Properties connParams = new Properties(); connParams.setProperty(RpcConstants.CLIENT_RETRY_NUM, retries + ""); BlockingRpcClient client = new BlockingRpcClient(NettyUtils.getDefaultEventLoopGroup(), rpcConnectionKey, connParams); try { client.connect(); fail(); } catch (ConnectTimeoutException e) { assertFalse(e.getMessage(), client.isConnected()); } BlockingInterface stub = client.getStub(); try { EchoMessage response = stub.echo(null, message); fail(); } catch (TajoServiceException e) { assertFalse(e.getMessage(), client.isConnected()); } RpcClientManager.cleanup(client); }
@Override protected void doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { if (localAddress != null) { socket.bind(localAddress); } boolean success = false; try { socket.connect(remoteAddress, config().getConnectTimeoutMillis()); activate(socket.getInputStream(), socket.getOutputStream()); success = true; } catch (SocketTimeoutException e) { ConnectTimeoutException cause = new ConnectTimeoutException("connection timed out: " + remoteAddress); cause.setStackTrace(e.getStackTrace()); throw cause; } finally { if (!success) { doClose(); } } }