You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cu...@apache.org on 2007/01/30 23:17:01 UTC
svn commit: r501603 - in /lucene/hadoop/trunk: CHANGES.txt
src/java/org/apache/hadoop/dfs/DataNode.java
src/java/org/apache/hadoop/dfs/DatanodeProtocol.java
src/java/org/apache/hadoop/dfs/FSNamesystem.java
src/java/org/apache/hadoop/dfs/NameNode.java
Author: cutting
Date: Tue Jan 30 14:17:00 2007
New Revision: 501603
URL: http://svn.apache.org/viewvc?view=rev&rev=501603
Log:
HADOOP-937. Fix namenode to request re-registration by datanodes in more circumstances. Contributed by Hairong.
Modified:
lucene/hadoop/trunk/CHANGES.txt
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java
Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=501603&r1=501602&r2=501603
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Tue Jan 30 14:17:00 2007
@@ -95,6 +95,9 @@
29. HADOOP-884. Add scripts in contrib/ec2 to facilitate running
Hadoop on an Amazon's EC2 cluster. (Tom White via cutting)
+30. HADOOP-937. Change the namenode to request re-registration of
+ datanodes in more circumstances. (Hairong Kuang via cutting)
+
Release 0.10.1 - 2007-01-10
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java?view=diff&rev=501603&r1=501602&r2=501603
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DataNode.java Tue Jan 30 14:17:00 2007
@@ -403,10 +403,12 @@
// shut down the data node
this.shutdown();
continue;
- case DNA_REPORT:
- // namenode requested a block report; sending
- lastBlockReport = 0;
- break;
+ case DNA_REGISTER:
+ // namenode requested a registration
+ register();
+ lastHeartbeat=0;
+ lastBlockReport=0;
+ continue;
default:
LOG.warn( "Unknown BlockCommand action: " + cmd.action);
}
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java?view=diff&rev=501603&r1=501602&r2=501603
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeProtocol.java Tue Jan 30 14:17:00 2007
@@ -31,8 +31,8 @@
* @author Michael Cafarella
**********************************************************************/
interface DatanodeProtocol extends VersionedProtocol {
- public static final long versionID = 3L; // BlockCommand.action replaced boolean members
- // affected: BlockCommand
+ public static final long versionID = 4L; // BlockCommand.action:
+ // replace DNA_REPORT by DNA_REGISTER
// error code
final static int DISK_ERROR = 1;
@@ -46,7 +46,7 @@
DNA_TRANSFER, // transfer blocks to another datanode
DNA_INVALIDATE, // invalidate blocks
DNA_SHUTDOWN, // shutdown node
- DNA_REPORT; } // send block report to the namenode
+ DNA_REGISTER; } // re-register
/**
* Register Datanode.
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java?view=diff&rev=501603&r1=501602&r2=501603
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSNamesystem.java Tue Jan 30 14:17:00 2007
@@ -1424,7 +1424,7 @@
*/
public synchronized void registerDatanode( DatanodeRegistration nodeReg
) throws IOException {
- NameNode.stateChangeLog.debug(
+ NameNode.stateChangeLog.info(
"BLOCK* NameSystem.registerDatanode: "
+ "node registration from " + nodeReg.getName()
+ " storage " + nodeReg.getStorageID() );
@@ -1463,8 +1463,16 @@
getEditLog().logRemoveDatanode( nodeS );
nodeS.updateRegInfo( nodeReg );
getEditLog().logAddDatanode( nodeS );
+
+ // also treat the registration message as a heartbeat
+ synchronized( heartbeats ) {
+ heartbeats.add( nodeS );
+ //update its timestamp
+ nodeS.updateHeartbeat( 0L, 0L, 0);
+ nodeS.isAlive = true;
+ }
return;
- }
+ }
// this is a new datanode serving a new data storage
if( nodeReg.getStorageID().equals("") ) {
@@ -1477,10 +1485,16 @@
}
// register new datanode
DatanodeDescriptor nodeDescr = new DatanodeDescriptor( nodeReg );
- // unless we get a heartbeat from this datanode, we will not mark it Alive
- nodeDescr.isAlive = false;
unprotectedAddDatanode( nodeDescr );
getEditLog().logAddDatanode( nodeDescr );
+
+ // also treat the registration message as a heartbeat
+ synchronized( heartbeats ) {
+ heartbeats.add( nodeDescr );
+ nodeDescr.isAlive = true;
+ // no need to update its timestamp
+ // because its is done when the descriptor is created
+ }
return;
}
@@ -1534,28 +1548,28 @@
long remaining,
int xceiverCount
) throws IOException {
- boolean needBlockReport;
synchronized (heartbeats) {
synchronized (datanodeMap) {
- DatanodeDescriptor nodeinfo = getDatanode( nodeID );
- needBlockReport = isDatanodeDead(nodeinfo);
-
- if (nodeinfo == null) {
- // We do not accept unregistered guests
- throw new UnregisteredDatanodeException( nodeID );
- }
- if (nodeinfo.isAlive) {
- updateStats(nodeinfo, false);
+ DatanodeDescriptor nodeinfo;
+ try {
+ nodeinfo = getDatanode( nodeID );
+ if (nodeinfo == null ) {
+ return true;
+ }
+ } catch(UnregisteredDatanodeException e) {
+ return true;
}
- nodeinfo.updateHeartbeat(capacity, remaining, xceiverCount);
- updateStats(nodeinfo, true);
- if (!nodeinfo.isAlive) {
- heartbeats.add(nodeinfo);
- nodeinfo.isAlive = true;
+
+ if( !nodeinfo.isAlive ) {
+ return true;
+ } else {
+ updateStats(nodeinfo, false);
+ nodeinfo.updateHeartbeat(capacity, remaining, xceiverCount);
+ updateStats(nodeinfo, true);
+ return false;
}
}
}
- return needBlockReport;
}
private void updateStats(DatanodeDescriptor node, boolean isAdded) {
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java?view=diff&rev=501603&r1=501602&r2=501603
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/NameNode.java Tue Jan 30 14:17:00 2007
@@ -557,7 +557,7 @@
verifyRequest( nodeReg );
if( namesystem.gotHeartbeat( nodeReg, capacity, remaining, xceiverCount )) {
// request block report from the datanode
- return new BlockCommand( DataNodeAction.DNA_REPORT );
+ return new BlockCommand( DataNodeAction.DNA_REGISTER );
}
//