@Override public void run() { long lastHeartbeatMs = System.currentTimeMillis(); Command cmd = null; while (!mStop) { long diff = System.currentTimeMillis() - lastHeartbeatMs; if (diff < WorkerConf.get().TO_MASTER_HEARTBEAT_INTERVAL_MS) { LOG.debug("Heartbeat process takes {} ms.", diff); CommonUtils.sleepMs(LOG, WorkerConf.get().TO_MASTER_HEARTBEAT_INTERVAL_MS - diff); } else { LOG.error("Heartbeat process takes " + diff + " ms."); } try { cmd = mWorkerStorage.heartbeat(); lastHeartbeatMs = System.currentTimeMillis(); } catch (IOException e) { LOG.error(e.getMessage(), e); mWorkerStorage.resetMasterClient(); CommonUtils.sleepMs(LOG, Constants.SECOND_MS); cmd = null; if (System.currentTimeMillis() - lastHeartbeatMs >= WorkerConf.get().HEARTBEAT_TIMEOUT_MS) { throw new RuntimeException( "Timebeat timeout " + (System.currentTimeMillis() - lastHeartbeatMs) + "ms"); } } if (cmd != null) { switch (cmd.mCommandType) { case Unknown: LOG.error("Unknown command: " + cmd); break; case Nothing: LOG.debug("Nothing command: {}", cmd); break; case Register: LOG.info("Register command: " + cmd); mWorkerStorage.register(); break; case Free: mWorkerStorage.freeBlocks(cmd.mData); LOG.info("Free command: " + cmd); break; case Delete: LOG.info("Delete command: " + cmd); break; default: throw new RuntimeException("Un-recognized command from master " + cmd.toString()); } } mWorkerStorage.checkStatus(); } }
public void initialize(final NetAddress address) { mWorkerAddress = address; register(); mUnderfsWorkerFolder = CommonUtils.concat(COMMON_CONF.UNDERFS_WORKERS_FOLDER, mWorkerId); mUnderfsWorkerDataFolder = mUnderfsWorkerFolder + "/data"; mUnderFs = UnderFileSystem.get(COMMON_CONF.UNDERFS_ADDRESS); mUsers = new Users(mLocalUserFolder.toString(), mUnderfsWorkerFolder); for (int k = 0; k < WorkerConf.get().WORKER_CHECKPOINT_THREADS; k++) { Thread thread = new Thread(new CheckpointThread(k)); mCheckpointThreads.add(thread); thread.start(); } try { initializeWorkerStorage(); } catch (IOException e) { throw Throwables.propagate(e); } catch (FileDoesNotExistException e) { throw Throwables.propagate(e); } catch (SuspectedFileSizeException e) { throw Throwables.propagate(e); } catch (BlockInfoException e) { throw Throwables.propagate(e); } catch (TException e) { throw Throwables.propagate(e); } LOG.info( "Current Worker Info: ID " + mWorkerId + ", ADDRESS: " + mWorkerAddress + ", MemoryCapacityBytes: " + mWorkerSpaceCounter.getCapacityBytes()); }