Revert r1433756: HDFS-4288. NN accepts incremental BR as IBR in safemode. Contributed by Daryn Sharp.
This commit caused TestBlockManager to fail. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1433821 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2e2afd22f9
commit
af0243542c
|
@ -417,9 +417,6 @@ Release 2.0.3-alpha - Unreleased
|
||||||
|
|
||||||
HDFS-1245. Pluggable block id generation. (shv)
|
HDFS-1245. Pluggable block id generation. (shv)
|
||||||
|
|
||||||
HDFS-4288. NN accepts incremental BR as IBR in safemode
|
|
||||||
(Daryn Sharp via todd)
|
|
||||||
|
|
||||||
BREAKDOWN OF HDFS-3077 SUBTASKS
|
BREAKDOWN OF HDFS-3077 SUBTASKS
|
||||||
|
|
||||||
HDFS-3077. Quorum-based protocol for reading and writing edit logs.
|
HDFS-3077. Quorum-based protocol for reading and writing edit logs.
|
||||||
|
|
|
@ -62,7 +62,6 @@ import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.ReplicaState;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.FSClusterStats;
|
import org.apache.hadoop.hdfs.server.namenode.FSClusterStats;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.NameNode;
|
import org.apache.hadoop.hdfs.server.namenode.NameNode;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.Namesystem;
|
import org.apache.hadoop.hdfs.server.namenode.Namesystem;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.metrics.NameNodeMetrics;
|
|
||||||
import org.apache.hadoop.hdfs.server.protocol.BlockCommand;
|
import org.apache.hadoop.hdfs.server.protocol.BlockCommand;
|
||||||
import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations;
|
import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations;
|
||||||
import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations.BlockWithLocations;
|
import org.apache.hadoop.hdfs.server.protocol.BlocksWithLocations.BlockWithLocations;
|
||||||
|
@ -1577,10 +1576,7 @@ public class BlockManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log the block report processing stats from Namenode perspective
|
// Log the block report processing stats from Namenode perspective
|
||||||
final NameNodeMetrics metrics = NameNode.getNameNodeMetrics();
|
NameNode.getNameNodeMetrics().addBlockReport((int) (endTime - startTime));
|
||||||
if (metrics != null) {
|
|
||||||
metrics.addBlockReport((int) (endTime - startTime));
|
|
||||||
}
|
|
||||||
blockLog.info("BLOCK* processReport: from "
|
blockLog.info("BLOCK* processReport: from "
|
||||||
+ nodeID + ", blocks: " + newReport.getNumberOfBlocks()
|
+ nodeID + ", blocks: " + newReport.getNumberOfBlocks()
|
||||||
+ ", processing time: " + (endTime - startTime) + " msecs");
|
+ ", processing time: " + (endTime - startTime) + " msecs");
|
||||||
|
|
|
@ -551,7 +551,6 @@ public class DatanodeDescriptor extends DatanodeInfo {
|
||||||
@Override
|
@Override
|
||||||
public void updateRegInfo(DatanodeID nodeReg) {
|
public void updateRegInfo(DatanodeID nodeReg) {
|
||||||
super.updateRegInfo(nodeReg);
|
super.updateRegInfo(nodeReg);
|
||||||
firstBlockReport = true; // must re-process IBR after re-registration
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -406,7 +406,7 @@ public class DatanodeManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add a datanode. */
|
/** Add a datanode. */
|
||||||
void addDatanode(final DatanodeDescriptor node) {
|
private void addDatanode(final DatanodeDescriptor node) {
|
||||||
// To keep host2DatanodeMap consistent with datanodeMap,
|
// To keep host2DatanodeMap consistent with datanodeMap,
|
||||||
// remove from host2DatanodeMap the datanodeDescriptor removed
|
// remove from host2DatanodeMap the datanodeDescriptor removed
|
||||||
// from datanodeMap before adding node to host2DatanodeMap.
|
// from datanodeMap before adding node to host2DatanodeMap.
|
||||||
|
|
|
@ -34,16 +34,13 @@ import org.apache.hadoop.hdfs.DFSConfigKeys;
|
||||||
import org.apache.hadoop.hdfs.DFSTestUtil;
|
import org.apache.hadoop.hdfs.DFSTestUtil;
|
||||||
import org.apache.hadoop.hdfs.HdfsConfiguration;
|
import org.apache.hadoop.hdfs.HdfsConfiguration;
|
||||||
import org.apache.hadoop.hdfs.protocol.Block;
|
import org.apache.hadoop.hdfs.protocol.Block;
|
||||||
import org.apache.hadoop.hdfs.protocol.BlockListAsLongs;
|
|
||||||
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
|
||||||
import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor.BlockTargetPair;
|
import org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor.BlockTargetPair;
|
||||||
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
|
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
|
||||||
import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration;
|
|
||||||
import org.apache.hadoop.net.NetworkTopology;
|
import org.apache.hadoop.net.NetworkTopology;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import static org.mockito.Mockito.*;
|
|
||||||
|
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
@ -488,70 +485,4 @@ public class TestBlockManager {
|
||||||
new NumberReplicas(),
|
new NumberReplicas(),
|
||||||
UnderReplicatedBlocks.QUEUE_HIGHEST_PRIORITY));
|
UnderReplicatedBlocks.QUEUE_HIGHEST_PRIORITY));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSafeModeIBR() throws Exception {
|
|
||||||
DatanodeDescriptor node = spy(nodes.get(0));
|
|
||||||
node.setStorageID("dummy-storage");
|
|
||||||
node.isAlive = true;
|
|
||||||
|
|
||||||
DatanodeRegistration nodeReg =
|
|
||||||
new DatanodeRegistration(node, null, null, "");
|
|
||||||
|
|
||||||
// pretend to be in safemode
|
|
||||||
doReturn(true).when(fsn).isInStartupSafeMode();
|
|
||||||
|
|
||||||
// register new node
|
|
||||||
bm.getDatanodeManager().registerDatanode(nodeReg);
|
|
||||||
bm.getDatanodeManager().addDatanode(node); // swap in spy
|
|
||||||
assertEquals(node, bm.getDatanodeManager().getDatanode(node));
|
|
||||||
assertTrue(node.isFirstBlockReport());
|
|
||||||
// send block report, should be processed
|
|
||||||
reset(node);
|
|
||||||
bm.processReport(node, "pool", new BlockListAsLongs());
|
|
||||||
verify(node).receivedBlockReport();
|
|
||||||
assertFalse(node.isFirstBlockReport());
|
|
||||||
// send block report again, should NOT be processed
|
|
||||||
reset(node);
|
|
||||||
bm.processReport(node, "pool", new BlockListAsLongs());
|
|
||||||
verify(node, never()).receivedBlockReport();
|
|
||||||
assertFalse(node.isFirstBlockReport());
|
|
||||||
|
|
||||||
// re-register as if node restarted, should update existing node
|
|
||||||
bm.getDatanodeManager().removeDatanode(node);
|
|
||||||
reset(node);
|
|
||||||
bm.getDatanodeManager().registerDatanode(nodeReg);
|
|
||||||
verify(node).updateRegInfo(nodeReg);
|
|
||||||
assertTrue(node.isFirstBlockReport()); // ready for report again
|
|
||||||
// send block report, should be processed after restart
|
|
||||||
reset(node);
|
|
||||||
bm.processReport(node, "pool", new BlockListAsLongs());
|
|
||||||
verify(node).receivedBlockReport();
|
|
||||||
assertFalse(node.isFirstBlockReport());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSafeModeIBRAfterIncremental() throws Exception {
|
|
||||||
DatanodeDescriptor node = spy(nodes.get(0));
|
|
||||||
node.setStorageID("dummy-storage");
|
|
||||||
node.isAlive = true;
|
|
||||||
|
|
||||||
DatanodeRegistration nodeReg =
|
|
||||||
new DatanodeRegistration(node, null, null, "");
|
|
||||||
|
|
||||||
// pretend to be in safemode
|
|
||||||
doReturn(true).when(fsn).isInStartupSafeMode();
|
|
||||||
|
|
||||||
// register new node
|
|
||||||
bm.getDatanodeManager().registerDatanode(nodeReg);
|
|
||||||
bm.getDatanodeManager().addDatanode(node); // swap in spy
|
|
||||||
assertEquals(node, bm.getDatanodeManager().getDatanode(node));
|
|
||||||
assertTrue(node.isFirstBlockReport());
|
|
||||||
// send block report while pretending to already have blocks
|
|
||||||
reset(node);
|
|
||||||
doReturn(1).when(node).numBlocks();
|
|
||||||
bm.processReport(node, "pool", new BlockListAsLongs());
|
|
||||||
verify(node).receivedBlockReport();
|
|
||||||
assertFalse(node.isFirstBlockReport());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue