Explorar o código

HADOOP-245 and HADOOP-246. Improvements to record io package. Contributed by Mahadev.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@411909 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting %!s(int64=19) %!d(string=hai) anos
pai
achega
858ad78f4a
Modificáronse 34 ficheiros con 133 adicións e 66 borrados
  1. 3 0
      CHANGES.txt
  2. 1 1
      src/java/org/apache/hadoop/record/BinaryInputArchive.java
  3. 1 1
      src/java/org/apache/hadoop/record/BinaryOutputArchive.java
  4. 1 1
      src/java/org/apache/hadoop/record/CsvInputArchive.java
  5. 1 1
      src/java/org/apache/hadoop/record/CsvOutputArchive.java
  6. 1 1
      src/java/org/apache/hadoop/record/InputArchive.java
  7. 1 1
      src/java/org/apache/hadoop/record/OutputArchive.java
  8. 1 1
      src/java/org/apache/hadoop/record/RecordReader.java
  9. 2 2
      src/java/org/apache/hadoop/record/RecordWriter.java
  10. 1 1
      src/java/org/apache/hadoop/record/Utils.java
  11. 1 1
      src/java/org/apache/hadoop/record/XmlInputArchive.java
  12. 1 1
      src/java/org/apache/hadoop/record/XmlOutputArchive.java
  13. 18 5
      src/java/org/apache/hadoop/record/compiler/CppGenerator.java
  14. 1 1
      src/java/org/apache/hadoop/record/compiler/JBoolean.java
  15. 1 1
      src/java/org/apache/hadoop/record/compiler/JBuffer.java
  16. 1 1
      src/java/org/apache/hadoop/record/compiler/JByte.java
  17. 8 6
      src/java/org/apache/hadoop/record/compiler/JCompType.java
  18. 1 1
      src/java/org/apache/hadoop/record/compiler/JDouble.java
  19. 1 1
      src/java/org/apache/hadoop/record/compiler/JField.java
  20. 15 3
      src/java/org/apache/hadoop/record/compiler/JFile.java
  21. 1 1
      src/java/org/apache/hadoop/record/compiler/JFloat.java
  22. 1 1
      src/java/org/apache/hadoop/record/compiler/JInt.java
  23. 1 1
      src/java/org/apache/hadoop/record/compiler/JLong.java
  24. 1 1
      src/java/org/apache/hadoop/record/compiler/JMap.java
  25. 2 2
      src/java/org/apache/hadoop/record/compiler/JRecord.java
  26. 1 1
      src/java/org/apache/hadoop/record/compiler/JString.java
  27. 22 21
      src/java/org/apache/hadoop/record/compiler/JType.java
  28. 1 1
      src/java/org/apache/hadoop/record/compiler/JVector.java
  29. 13 3
      src/java/org/apache/hadoop/record/compiler/JavaGenerator.java
  30. 12 0
      src/java/org/apache/hadoop/record/compiler/generated/package.html
  31. 14 0
      src/java/org/apache/hadoop/record/compiler/package.html
  32. 1 1
      src/test/org/apache/hadoop/record/test/FromCpp.java
  33. 1 1
      src/test/org/apache/hadoop/record/test/TestRecordIO.java
  34. 1 1
      src/test/org/apache/hadoop/record/test/ToCpp.java

+ 3 - 0
CHANGES.txt

@@ -13,6 +13,9 @@ Trunk (unreleased changes)
     waiting for map outputs, so that they do not time out.
     (Mahadev Konar via cutting)
 
+ 4. HADOOP-245 and HADOOP-246.  Improvements to record io package.  
+    (Mahadev Konar via cutting)
+
 
 Release 0.3.0 - 2006-06-02
 

+ 1 - 1
src/java/org/apache/hadoop/record/BinaryInputArchive.java

@@ -25,7 +25,7 @@ import java.io.InputStream;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class BinaryInputArchive implements InputArchive {
     

+ 1 - 1
src/java/org/apache/hadoop/record/BinaryOutputArchive.java

@@ -26,7 +26,7 @@ import java.io.OutputStream;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class BinaryOutputArchive implements OutputArchive {
     

+ 1 - 1
src/java/org/apache/hadoop/record/CsvInputArchive.java

@@ -26,7 +26,7 @@ import java.io.UnsupportedEncodingException;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 class CsvInputArchive implements InputArchive {
     

+ 1 - 1
src/java/org/apache/hadoop/record/CsvOutputArchive.java

@@ -26,7 +26,7 @@ import java.io.UnsupportedEncodingException;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class CsvOutputArchive implements OutputArchive {
 

+ 1 - 1
src/java/org/apache/hadoop/record/InputArchive.java

@@ -24,7 +24,7 @@ import java.util.ArrayList;
 /**
  * Interface that all the Deserializers have to implement.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public interface InputArchive {
     public byte readByte(String tag) throws IOException;

+ 1 - 1
src/java/org/apache/hadoop/record/OutputArchive.java

@@ -24,7 +24,7 @@ import java.util.ArrayList;
 /**
  * Interface that alll the serializers have to implement.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public interface OutputArchive {
     public void writeByte(byte b, String tag) throws IOException;

+ 1 - 1
src/java/org/apache/hadoop/record/RecordReader.java

@@ -30,7 +30,7 @@ import org.xml.sax.SAXException;
  * Front-end interface to deserializers. Also acts as a factory
  * for deserializers.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class RecordReader {
     

+ 2 - 2
src/java/org/apache/hadoop/record/RecordWriter.java

@@ -30,7 +30,7 @@ import org.xml.sax.SAXException;
 /**
  * Front-end for serializers. Also serves as a factory for serializers.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class RecordWriter {
     
@@ -112,4 +112,4 @@ public class RecordWriter {
     public void write(Record r) throws IOException {
         r.serialize(archive, "");
     }
-}
+}

+ 1 - 1
src/java/org/apache/hadoop/record/Utils.java

@@ -24,7 +24,7 @@ import java.io.UnsupportedEncodingException;
 
 /**
  * Various utility functions for Hadooop record I/O runtime.
- * @author milindb@yahoo-inc.com
+ * @author Milind Bhandarkar
  */
 public class Utils {
     

+ 1 - 1
src/java/org/apache/hadoop/record/XmlInputArchive.java

@@ -29,7 +29,7 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 class XmlInputArchive implements InputArchive {
     

+ 1 - 1
src/java/org/apache/hadoop/record/XmlOutputArchive.java

@@ -26,7 +26,7 @@ import java.util.Stack;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 class XmlOutputArchive implements OutputArchive {
 

+ 18 - 5
src/java/org/apache/hadoop/record/compiler/CppGenerator.java

@@ -23,22 +23,35 @@ import java.io.IOException;
 import java.util.Iterator;
 
 /**
+ * C++ Code generator front-end for Hadoop record I/O.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 class CppGenerator {
+    private String mFullName;
     private String mName;
     private ArrayList mInclFiles;
     private ArrayList mRecList;
     
-    /** Creates a new instance of CppGenerator */
-    public CppGenerator(String name, ArrayList ilist, ArrayList rlist) {
-        mName = name;
+    /** Creates a new instance of CppGenerator
+     *
+     * @param name possibly full pathname to the file
+     * @param ilist included files (as JFile)
+     * @param rlist List of records defined within this file
+     */
+    CppGenerator(String name, ArrayList ilist, ArrayList rlist) {
+        mFullName = name;
+        mName = (new File(name)).getName();
         mInclFiles = ilist;
         mRecList = rlist;
     }
     
-    public void genCode() throws IOException {
+    /**
+     * Generate C++ code. This method only creates the requested file(s)
+     * and spits-out file-level elements (such as include statements etc.)
+     * record-level code is generated by JRecord.
+     */
+    void genCode() throws IOException {
         FileWriter cc = new FileWriter(mName+".cc");
         FileWriter hh = new FileWriter(mName+".hh");
         hh.write("#ifndef __"+mName.toUpperCase().replace('.','_')+"__\n");

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JBoolean.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JBoolean extends JType {
     

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JBuffer.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JBuffer extends JCompType {
     

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JByte.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JByte extends JType {
     

+ 8 - 6
src/java/org/apache/hadoop/record/compiler/JCompType.java

@@ -17,17 +17,19 @@
 package org.apache.hadoop.record.compiler;
 
 /**
+ * Abstract base class for all the "compound" types such as ustring,
+ * buffer, vector, map, and record.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 abstract class JCompType extends JType {
     
     /** Creates a new instance of JCompType */
-    public JCompType(String cppType, String javaType, String suffix, String wrapper) {
+    JCompType(String cppType, String javaType, String suffix, String wrapper) {
         super(cppType, javaType, suffix, wrapper, null);
     }
     
-    public String genCppGetSet(String fname, int fIdx) {
+    String genCppGetSet(String fname, int fIdx) {
         String cgetFunc = "  virtual const "+getCppType()+"& get"+fname+"() const {\n";
         cgetFunc += "    return m"+fname+";\n";
         cgetFunc += "  }\n";
@@ -37,15 +39,15 @@ abstract class JCompType extends JType {
         return cgetFunc + getFunc;
     }
     
-    public String genJavaCompareTo(String fname) {
+    String genJavaCompareTo(String fname) {
         return "    ret = "+fname+".compareTo(peer."+fname+");\n";
     }
     
-    public String genJavaEquals(String fname, String peer) {
+    String genJavaEquals(String fname, String peer) {
         return "    ret = "+fname+".equals("+peer+");\n";
     }
     
-    public String genJavaHashCode(String fname) {
+    String genJavaHashCode(String fname) {
         return "    ret = "+fname+".hashCode();\n";
     }
 }

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JDouble.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JDouble extends JType {
     

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JField.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JField {
     private JType mType;

+ 15 - 3
src/java/org/apache/hadoop/record/compiler/JFile.java

@@ -20,8 +20,11 @@ import java.io.IOException;
 import java.util.ArrayList;
 
 /**
+ * Container for the Hadoop Record DDL.
+ * The main components of the file are filename, list of included files,
+ * and records defined in that file.
  *
- * @author milindb@yahoo-inc.com
+ * @author Milind Bhandarkar
  */
 public class JFile {
     
@@ -29,18 +32,27 @@ public class JFile {
     private ArrayList mInclFiles;
     private ArrayList mRecords;
     
-    /** Creates a new instance of JFile */
+    /** Creates a new instance of JFile
+     *
+     * @param name possibly full pathname to the file
+     * @param inclFiles included files (as JFile)
+     * @param recList List of records defined within this file
+     */
     public JFile(String name, ArrayList inclFiles, ArrayList recList) {
         mName = name;
         mInclFiles = inclFiles;
         mRecords = recList;
     }
-        
+    
+    /** Strip the other pathname components and return the basename */
     String getName() {
         int idx = mName.lastIndexOf('/');
         return (idx > 0) ? mName.substring(idx) : mName; 
     }
     
+    /** Generate record code in given language. Language should be all
+     *  lowercase.
+     */
     public void genCode(String language) throws IOException {
         if ("c++".equals(language)) {
             CppGenerator gen = new CppGenerator(mName, mInclFiles, mRecords);

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JFloat.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JFloat extends JType {
     

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JInt.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JInt extends JType {
     

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JLong.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JLong extends JType {
     

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JMap.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JMap extends JCompType {
    

+ 2 - 2
src/java/org/apache/hadoop/record/compiler/JRecord.java

@@ -24,7 +24,7 @@ import java.util.Iterator;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JRecord extends JCompType {
 
@@ -132,7 +132,7 @@ public class JRecord extends JCompType {
             hh.write(jf.genCppGetSet(fIdx));
         }
         hh.write("}; // end record "+getName()+"\n");
-        for (int i=0; i<ns.length; i++) {
+        for (int i=ns.length-1; i>=0; i--) {
             hh.write("} // end namespace "+ns[i]+"\n");
         }
         cc.write("void "+getCppFQName()+"::serialize(::hadoop::OArchive& a_, const char* tag) {\n");

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JString.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JString extends JCompType {
     

+ 22 - 21
src/java/org/apache/hadoop/record/compiler/JType.java

@@ -17,10 +17,11 @@
 package org.apache.hadoop.record.compiler;
 
 /**
- *
- * @author milindb
+ * Abstract Base class for all types supported by Hadoop Record I/O.
+ * 
+ * @author Milind Bhandarkar
  */
-public abstract class JType {
+abstract public class JType {
     
     private String mCppName;
     private String mJavaName;
@@ -31,7 +32,7 @@ public abstract class JType {
     /**
      * Creates a new instance of JType
      */
-    public JType(String cppname, String javaname, String suffix, String wrapper, String unwrap) {
+    JType(String cppname, String javaname, String suffix, String wrapper, String unwrap) {
         mCppName = cppname;
         mJavaName = javaname;
         mMethodSuffix = suffix;
@@ -39,21 +40,21 @@ public abstract class JType {
         mUnwrapMethod = unwrap;
     }
     
-    abstract public String getSignature();
+    abstract String getSignature();
     
-    public String genCppDecl(String fname) {
+    String genCppDecl(String fname) {
         return "  "+mCppName+" m"+fname+";\n"; 
     }
     
-    public String genJavaDecl (String fname) {
+    String genJavaDecl (String fname) {
         return "  private "+mJavaName+" m"+fname+";\n";
     }
     
-    public String genJavaConstructorParam (int fIdx) {
+    String genJavaConstructorParam (int fIdx) {
         return "        "+mJavaName+" m"+fIdx;
     }
     
-    public String genCppGetSet(String fname, int fIdx) {
+    String genCppGetSet(String fname, int fIdx) {
         String getFunc = "  virtual "+mCppName+" get"+fname+"() const {\n";
         getFunc += "    return m"+fname+";\n";
         getFunc += "  }\n";
@@ -63,7 +64,7 @@ public abstract class JType {
         return getFunc+setFunc;
     }
     
-    public String genJavaGetSet(String fname, int fIdx) {
+    String genJavaGetSet(String fname, int fIdx) {
         String getFunc = "  public "+mJavaName+" get"+fname+"() {\n";
         getFunc += "    return m"+fname+";\n";
         getFunc += "  }\n";
@@ -73,31 +74,31 @@ public abstract class JType {
         return getFunc+setFunc;
     }
     
-    public String getCppType() {
+    String getCppType() {
         return mCppName;
     }
     
-    public String getJavaType() {
+    String getJavaType() {
         return mJavaName;
     }
    
-    public String getJavaWrapperType() {
+    String getJavaWrapperType() {
         return mWrapper;
     }
     
-    public String getMethodSuffix() {
+    String getMethodSuffix() {
         return mMethodSuffix;
     }
     
-    public String genJavaWriteMethod(String fname, String tag) {
+    String genJavaWriteMethod(String fname, String tag) {
         return "    a_.write"+mMethodSuffix+"("+fname+",\""+tag+"\");\n";
     }
     
-    public String genJavaReadMethod(String fname, String tag) {
+    String genJavaReadMethod(String fname, String tag) {
         return "    "+fname+"=a_.read"+mMethodSuffix+"(\""+tag+"\");\n";
     }
     
-    public String genJavaReadWrapper(String fname, String tag, boolean decl) {
+    String genJavaReadWrapper(String fname, String tag, boolean decl) {
         String ret = "";
         if (decl) {
             ret = "    "+mWrapper+" "+fname+";\n";
@@ -105,19 +106,19 @@ public abstract class JType {
         return ret + "    "+fname+"=new "+mWrapper+"(a_.read"+mMethodSuffix+"(\""+tag+"\"));\n";
     }
     
-    public String genJavaWriteWrapper(String fname, String tag) {
+    String genJavaWriteWrapper(String fname, String tag) {
         return "        a_.write"+mMethodSuffix+"("+fname+"."+mUnwrapMethod+"(),\""+tag+"\");\n";
     }
     
-    public String genJavaCompareTo(String fname) {
+    String genJavaCompareTo(String fname) {
         return "    ret = ("+fname+" == peer."+fname+")? 0 :(("+fname+"<peer."+fname+")?-1:1);\n";
     }
     
-    public String genJavaEquals(String fname, String peer) {
+    String genJavaEquals(String fname, String peer) {
         return "    ret = ("+fname+"=="+peer+");\n";
     }
     
-    public String genJavaHashCode(String fname) {
+    String genJavaHashCode(String fname) {
         return "    ret = (int)"+fname+";\n";
     }
 

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/JVector.java

@@ -18,7 +18,7 @@ package org.apache.hadoop.record.compiler;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class JVector extends JCompType {
     

+ 13 - 3
src/java/org/apache/hadoop/record/compiler/JavaGenerator.java

@@ -23,22 +23,32 @@ import java.io.IOException;
 import java.util.Iterator;
 
 /**
+ * Java Code generator front-end for Hadoop record I/O.
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 class JavaGenerator {
     private String mName;
     private ArrayList mInclFiles;
     private ArrayList mRecList;
     
-    /** Creates a new instance of JavaGenerator */
+    /** Creates a new instance of JavaGenerator
+     *
+     * @param name possibly full pathname to the file
+     * @param incl included files (as JFile)
+     * @param records List of records defined within this file
+     */
     JavaGenerator(String name, ArrayList incl, ArrayList records) {
         mName = name;
         mInclFiles = incl;
         mRecList = records;
     }
     
-    public void genCode() throws IOException {
+    /**
+     * Generate Java code for records. This method is only a front-end to
+     * JRecord, since one file is generated for each record.
+     */
+    void genCode() throws IOException {
         for (Iterator i = mRecList.iterator(); i.hasNext(); ) {
             JRecord rec = (JRecord) i.next();
             rec.genJavaCode();

+ 12 - 0
src/java/org/apache/hadoop/record/compiler/generated/package.html

@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+  <head>
+    <title>Hadoop Record Compiler: Parser</title>
+  </head>
+  <body>
+  This package contains code generated by JavaCC from the
+  Hadoop record syntax file rcc.jj. For details about the
+  record file syntax please @see org.apache.hadoop.record.
+  </body>
+</html>

+ 14 - 0
src/java/org/apache/hadoop/record/compiler/package.html

@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+
+<html>
+  <head>
+    <title>Hadoop Record Compiler</title>
+  </head>
+  <body>
+  This package contains classes needed for code generation
+  from the hadoop record compiler. CppGenerator and JavaGenerator
+  are the main entry points from the parser. There are classes
+  corrsponding to every primitive type and compound type
+  included in Hadoop record I/O syntax.
+  </body>
+</html>

+ 1 - 1
src/test/org/apache/hadoop/record/test/FromCpp.java

@@ -29,7 +29,7 @@ import junit.framework.*;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class FromCpp extends TestCase {
     

+ 1 - 1
src/test/org/apache/hadoop/record/test/TestRecordIO.java

@@ -29,7 +29,7 @@ import java.util.TreeMap;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class TestRecordIO extends TestCase {
     

+ 1 - 1
src/test/org/apache/hadoop/record/test/ToCpp.java

@@ -29,7 +29,7 @@ import java.util.TreeMap;
 
 /**
  *
- * @author milindb
+ * @author Milind Bhandarkar
  */
 public class ToCpp extends TestCase {