final long now = Time.monotonicNow(); if (lastHeartbeatCheck + heartbeatRecheckInterval < now) { heartbeatCheck(); lastHeartbeatCheck = now;
final long now = Time.monotonicNow(); if (lastHeartbeatCheck + heartbeatRecheckInterval < now) { heartbeatCheck(); lastHeartbeatCheck = now;
@Override public void run() { while(namesystem.isRunning()) { try { final long now = Time.monotonicNow(); if (lastHeartbeatCheck + heartbeatRecheckInterval < now) { heartbeatCheck(); lastHeartbeatCheck = now; } if (blockManager.shouldUpdateBlockKey(now - lastBlockKeyUpdate)) { synchronized(HeartbeatManager.this) { for(DatanodeDescriptor d : datanodes) { d.needKeyUpdate = true; } } lastBlockKeyUpdate = now; } } catch (Exception e) { LOG.error("Exception while checking heartbeat", e); } try { Thread.sleep(5000); // 5 seconds } catch (InterruptedException ie) { } } } }
/** * Call heartbeat check function of HeartbeatManager * @param bm the BlockManager to manipulate */ public static void checkHeartbeat(BlockManager bm) { HeartbeatManager hbm = bm.getDatanodeManager().getHeartbeatManager(); hbm.restartHeartbeatStopWatch(); hbm.heartbeatCheck(); }
/** * Call heartbeat check function of HeartbeatManager and get * under replicated blocks count within write lock to make sure * computeDatanodeWork doesn't interfere. * @param namesystem the FSNamesystem * @param bm the BlockManager to manipulate * @return the number of under replicated blocks */ public static int checkHeartbeatAndGetUnderReplicatedBlocksCount( FSNamesystem namesystem, BlockManager bm) { namesystem.writeLock(); try { bm.getDatanodeManager().getHeartbeatManager().heartbeatCheck(); return bm.getUnderReplicatedNotMissingBlocks(); } finally { namesystem.writeUnlock(); } }
/** * Ensure that the given NameNode marks the specified DataNode as * entirely dead/expired. * @param nn the NameNode to manipulate * @param dnName the name of the DataNode */ public static void noticeDeadDatanode(NameNode nn, String dnName) { FSNamesystem namesystem = nn.getNamesystem(); namesystem.writeLock(); try { DatanodeManager dnm = namesystem.getBlockManager().getDatanodeManager(); HeartbeatManager hbm = dnm.getHeartbeatManager(); DatanodeDescriptor[] dnds = hbm.getDatanodes(); DatanodeDescriptor theDND = null; for (DatanodeDescriptor dnd : dnds) { if (dnd.getXferAddr().equals(dnName)) { theDND = dnd; } } Assert.assertNotNull("Could not find DN with name: " + dnName, theDND); synchronized (hbm) { DFSTestUtil.setDatanodeDead(theDND); hbm.heartbeatCheck(); } } finally { namesystem.writeUnlock(); } }
@Test public void testChooseTargetWithStaleNodes() throws Exception { // Set dataNodes[0] as stale DFSTestUtil.resetLastUpdatesWithOffset(dataNodes[0], -(staleInterval + 1)); namenode.getNamesystem().getBlockManager() .getDatanodeManager().getHeartbeatManager().heartbeatCheck(); assertTrue(namenode.getNamesystem().getBlockManager() .getDatanodeManager().shouldAvoidStaleDataNodesForWrite()); DatanodeStorageInfo[] targets; // We set the datanode[0] as stale, thus should choose datanode[1] since // datanode[1] is on the same rack with datanode[0] (writer) targets = chooseTarget(1); assertEquals(targets.length, 1); assertEquals(storages[1], targets[0]); Set<Node> excludedNodes = new HashSet<Node>(); excludedNodes.add(dataNodes[1]); List<DatanodeStorageInfo> chosenNodes = new ArrayList<DatanodeStorageInfo>(); targets = chooseTarget(1, chosenNodes, excludedNodes); assertEquals(targets.length, 1); assertFalse(isOnSameRack(targets[0], dataNodes[0])); // reset DFSTestUtil.resetLastUpdatesWithOffset(dataNodes[0], 0); namenode.getNamesystem().getBlockManager() .getDatanodeManager().getHeartbeatManager().heartbeatCheck(); }
bm.getDatanodeManager().getHeartbeatManager().heartbeatCheck(); assertTrue(!failedStorageInfo.areBlocksOnFailedStorage());
.getDatanodeManager().getHeartbeatManager().heartbeatCheck(); .getDatanodeManager().getHeartbeatManager().heartbeatCheck();
.getDatanodeManager().getHeartbeatManager().heartbeatCheck(); int numStaleNodes = miniCluster.getNameNode().getNamesystem() .getBlockManager().getDatanodeManager().getNumStaleNodes(); .getDatanodeManager().getHeartbeatManager().heartbeatCheck(); numStaleNodes = miniCluster.getNameNode().getNamesystem() .getBlockManager().getDatanodeManager().getNumStaleNodes(); .getDatanodeManager().getHeartbeatManager().heartbeatCheck(); numStaleNodes = miniCluster.getNameNode().getNamesystem() .getBlockManager().getDatanodeManager().getNumStaleNodes();