/** * Opens the connection to the worker. And start the heartbeat thread. * * @throws IOException if a non-Tachyon exception occurs */ private synchronized void connectOperation() throws IOException { if (!mConnected) { LOG.info("Connecting to {} worker @ {}", (mIsLocal ? "local" : "remote"), mAddress); TProtocol binaryProtocol = new TBinaryProtocol(AuthenticationUtils.getClientTransport(mTachyonConf, mAddress)); mProtocol = new TMultiplexedProtocol(binaryProtocol, getServiceName()); mClient = new BlockWorkerClientService.Client(mProtocol); try { mProtocol.getTransport().open(); } catch (TTransportException e) { LOG.error(e.getMessage(), e); return; } mConnected = true; // only start the heartbeat thread if the connection is successful and if there is not // another heartbeat thread running if (mHeartbeat == null || mHeartbeat.isCancelled() || mHeartbeat.isDone()) { final int interval = mTachyonConf.getInt(Constants.USER_HEARTBEAT_INTERVAL_MS); mHeartbeat = mExecutorService.submit( new HeartbeatThread(HeartbeatContext.WORKER_CLIENT, mHeartbeatExecutor, interval)); } } }