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 2006/12/18 21:58:53 UTC
svn commit: r488415 - in /lucene/hadoop/trunk: CHANGES.txt
src/java/org/apache/hadoop/dfs/DatanodeDescriptor.java
src/java/org/apache/hadoop/dfs/DatanodeID.java
src/java/org/apache/hadoop/dfs/DatanodeInfo.java
src/java/org/apache/hadoop/dfs/FSImage.java
Author: cutting
Date: Mon Dec 18 12:58:52 2006
New Revision: 488415
URL: http://svn.apache.org/viewvc?view=rev&rev=488415
Log:
HADOOP-829. Within HDFS, clearly separate three different representations for datanodes. Contributed by Dhruba.
Modified:
lucene/hadoop/trunk/CHANGES.txt
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeDescriptor.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeID.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java
lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSImage.java
Modified: lucene/hadoop/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/CHANGES.txt?view=diff&rev=488415&r1=488414&r2=488415
==============================================================================
--- lucene/hadoop/trunk/CHANGES.txt (original)
+++ lucene/hadoop/trunk/CHANGES.txt Mon Dec 18 12:58:52 2006
@@ -114,6 +114,11 @@
32. HADOOP-811. Add a utility, MultithreadedMapRunner.
(Alejandro Abdelnur via cutting)
+33. HADOOP-829. Within HDFS, clearly separate three different
+ representations for datanodes: one for RPCs, one for
+ namenode-internal use, and one for namespace persistence.
+ (Dhruba Borthakur via cutting)
+
Release 0.9.2 - 2006-12-15
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeDescriptor.java?view=diff&rev=488415&r1=488414&r2=488415
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeDescriptor.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeDescriptor.java Mon Dec 18 12:58:52 2006
@@ -24,6 +24,11 @@
* such as available storage capacity, last update time, etc.,
* and maintains a set of blocks stored on the datanode.
*
+ * This data structure is a data structure that is internal
+ * to the namenode. It is *not* sent over-the-wire to the Client
+ * or the Datnodes. Neither is it stored persistently in the
+ * fsImage.
+
* @author Mike Cafarella
* @author Konstantin Shvachko
**************************************************/
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeID.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeID.java?view=diff&rev=488415&r1=488414&r2=488415
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeID.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeID.java Mon Dec 18 12:58:52 2006
@@ -68,7 +68,14 @@
public int getInfoPort() {
return infoPort;
}
-
+
+ /**
+ * @sets data storage ID.
+ */
+ void setStorageID(String storageID) {
+ this.storageID = storageID;
+ }
+
/**
* @return hostname and no :portNumber.
*/
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java?view=diff&rev=488415&r1=488414&r2=488415
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/DatanodeInfo.java Mon Dec 18 12:58:52 2006
@@ -30,6 +30,8 @@
/**
* DatanodeInfo represents the status of a DataNode.
+ * This object is used for communication in the
+ * Datanode Protocol and the Client Protocol.
*
* @author Mike Cafarella
* @author Konstantin Shvachko
@@ -71,6 +73,26 @@
/** number of active connections */
public int getXceiverCount() { return xceiverCount; }
+
+ /** Sets raw capacity. */
+ void setCapacity(long capacity) {
+ this.capacity = capacity;
+ }
+
+ /** Sets raw free space. */
+ void setRemaining(long remaining) {
+ this.remaining = remaining;
+ }
+
+ /** Sets time when this information was accurate. */
+ void setLastUpdate(long lastUpdate) {
+ this.lastUpdate = lastUpdate;
+ }
+
+ /** Sets number of active connections */
+ void setXceiverCount(int xceiverCount) {
+ this.xceiverCount = xceiverCount;
+ }
/** A formatted string for reporting the status of the DataNode. */
public String getDatanodeReport() {
Modified: lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSImage.java
URL: http://svn.apache.org/viewvc/lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSImage.java?view=diff&rev=488415&r1=488414&r2=488415
==============================================================================
--- lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSImage.java (original)
+++ lucene/hadoop/trunk/src/java/org/apache/hadoop/dfs/FSImage.java Mon Dec 18 12:58:52 2006
@@ -25,6 +25,8 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.DataInput;
+import java.io.DataOutput;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
@@ -33,6 +35,12 @@
import org.apache.hadoop.dfs.FSDirectory.INode;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.io.UTF8;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableFactories;
+import org.apache.hadoop.io.WritableFactory;
+import org.apache.hadoop.io.WritableUtils;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.UTF8;
/**
* FSImage handles checkpointing and logging of the namespace edits.
@@ -318,8 +326,10 @@
Map datanodeMap = FSNamesystem.getFSNamesystem().datanodeMap;
int size = datanodeMap.size();
out.writeInt( size );
- for( Iterator it = datanodeMap.values().iterator(); it.hasNext(); )
- ((DatanodeDescriptor)it.next()).write( out );
+ for( Iterator it = datanodeMap.values().iterator(); it.hasNext(); ) {
+ DatanodeImage nodeImage = new DatanodeImage((DatanodeDescriptor) it.next());
+ nodeImage.write( out );
+ }
}
void loadDatanodes( int version, DataInputStream in ) throws IOException {
@@ -328,9 +338,75 @@
FSNamesystem fsNamesys = FSNamesystem.getFSNamesystem();
int size = in.readInt();
for( int i = 0; i < size; i++ ) {
- DatanodeDescriptor node = new DatanodeDescriptor();
- node.readFields(in);
- fsNamesys.unprotectedAddDatanode( node );
+ DatanodeImage nodeImage = new DatanodeImage();
+ nodeImage.readFields(in);
+ fsNamesys.unprotectedAddDatanode(nodeImage.getDatanodeDescriptor());
+ }
+ }
+
+ class DatanodeImage implements WritableComparable {
+
+ /**************************************************
+ * DatanodeImage is used to store persistent information
+ * about datanodes into the fsImage.
+ **************************************************/
+ DatanodeDescriptor node;
+
+ DatanodeImage() {
+ node = new DatanodeDescriptor();
+ }
+
+ DatanodeImage(DatanodeDescriptor from) {
+ node = from;
+ }
+
+ /**
+ * Returns the underlying Datanode Descriptor
+ */
+ DatanodeDescriptor getDatanodeDescriptor() {
+ return node;
+ }
+
+ public int compareTo(Object o) {
+ return node.compareTo(o);
+ }
+
+ /////////////////////////////////////////////////
+ // Writable
+ /////////////////////////////////////////////////
+ /**
+ * Public method that serializes the information about a
+ * Datanode to be stored in the fsImage.
+ */
+ public void write(DataOutput out) throws IOException {
+ DatanodeID id = new DatanodeID(node.getName(), node.getStorageID(),
+ node.getInfoPort());
+ id.write(out);
+ out.writeLong(node.getCapacity());
+ out.writeLong(node.getRemaining());
+ out.writeLong(node.getLastUpdate());
+ out.writeInt(node.getXceiverCount());
+ }
+
+ /**
+ * Public method that reads a serialized Datanode
+ * from the fsImage.
+ */
+ public void readFields(DataInput in) throws IOException {
+ DatanodeID id = new DatanodeID();
+ id.readFields(in);
+ long capacity = in.readLong();
+ long remaining = in.readLong();
+ long lastUpdate = in.readLong();
+ int xceiverCount = in.readInt();
+
+ // update the DatanodeDescriptor with the data we read in
+ node.updateRegInfo(id);
+ node.setStorageID(id.getStorageID());
+ node.setCapacity(capacity);
+ node.setRemaining(remaining);
+ node.setLastUpdate(lastUpdate);
+ node.setXceiverCount(xceiverCount);
}
}
}