فهرست منبع

HADOOP-385. Fix some bugs in record io code generation. Contributed by Milind.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@425654 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 19 سال پیش
والد
کامیت
df385a638e

+ 3 - 0
CHANGES.txt

@@ -82,6 +82,9 @@ Trunk (unreleased changes)
 23. HADOOP-321.  Refactor DatanodeInfo, in preparation for
     HADOOP-306.  (Konstantin Shvachko & omalley via cutting)
 
+24. HADOOP-385.  Fix some bugs in record io code generation.
+    (Milind Bhandarkar via cutting)
+
 
 Release 0.4.0 - 2006-06-28
 

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

@@ -84,8 +84,8 @@ public class JRecord extends JCompType {
         return "  "+mName+" "+fname+";\n";
     }
     
-    public String genJavaDecl (String fname) {
-        return "  private "+mName+" "+fname+";\n";
+    public String genJavaReadMethod(String fname, String tag) {
+        return genJavaReadWrapper(fname, tag, false);
     }
     
     public String genJavaReadWrapper(String fname, String tag, boolean decl) {
@@ -320,7 +320,7 @@ public class JRecord extends JCompType {
         jj.write("    deserialize(archive, \"\");\n");
         jj.write("  }\n");
         
-        jj.write("  private boolean validate() {\n");
+        jj.write("  public boolean validate() {\n");
         jj.write("    if (bs_.cardinality() != bs_.length()) return false;\n");
         for (Iterator i = mFields.iterator(); i.hasNext(); fIdx++) {
             JField jf = (JField) i.next();

+ 8 - 18
src/java/org/apache/hadoop/record/compiler/generated/RccTokenManager.java

@@ -31,7 +31,7 @@ public class RccTokenManager implements RccConstants
   public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
 private final int jjMoveStringLiteralDfa0_1()
 {
-   return jjMoveNfa_1(1, 0);
+   return jjMoveNfa_1(0, 0);
 }
 private final void jjCheckNAdd(int state)
 {
@@ -67,7 +67,7 @@ private final int jjMoveNfa_1(int startState, int curPos)
 {
    int[] nextStates;
    int startsAt = 0;
-   jjnewStateCnt = 5;
+   jjnewStateCnt = 3;
    int i = 1;
    jjstateSet[0] = startState;
    int j, kind = 0x7fffffff;
@@ -82,32 +82,22 @@ private final int jjMoveNfa_1(int startState, int curPos)
          {
             switch(jjstateSet[--i])
             {
-               case 1:
+               case 0:
                   if ((0x2400L & l) != 0L)
                   {
                      if (kind > 6)
                         kind = 6;
                   }
-                  else if (curChar == 47)
-                     jjstateSet[jjnewStateCnt++] = 0;
                   if (curChar == 13)
-                     jjstateSet[jjnewStateCnt++] = 3;
+                     jjstateSet[jjnewStateCnt++] = 1;
                   break;
-               case 0:
-                  if (curChar == 47 && kind > 6)
-                     kind = 6;
-                  break;
-               case 2:
-                  if ((0x2400L & l) != 0L && kind > 6)
-                     kind = 6;
-                  break;
-               case 3:
+               case 1:
                   if (curChar == 10 && kind > 6)
                      kind = 6;
                   break;
-               case 4:
+               case 2:
                   if (curChar == 13)
-                     jjstateSet[jjnewStateCnt++] = 3;
+                     jjstateSet[jjnewStateCnt++] = 1;
                   break;
                default : break;
             }
@@ -143,7 +133,7 @@ private final int jjMoveNfa_1(int startState, int curPos)
          kind = 0x7fffffff;
       }
       ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 5 - (jjnewStateCnt = startsAt)))
+      if ((i = jjnewStateCnt) == (startsAt = 3 - (jjnewStateCnt = startsAt)))
          return curPos;
       try { curChar = input_stream.readChar(); }
       catch(java.io.IOException e) { return curPos; }

+ 1 - 1
src/java/org/apache/hadoop/record/compiler/generated/rcc.jj

@@ -108,7 +108,7 @@ SPECIAL_TOKEN :
 
 <WithinOneLineComment> SPECIAL_TOKEN :
 {
-  <("//" | "\n" | "\r" | "\r\n" )> : DEFAULT
+  <("\n" | "\r" | "\r\n" )> : DEFAULT
 }
 
 <WithinOneLineComment> MORE :

+ 6 - 4
src/test/ddl/test.jr

@@ -8,12 +8,14 @@ module org.apache.hadoop.record.test {
         byte            ByteVal;
         int             IntVal;
         long            LongVal;
-        float           FloatVal;
-        double          DoubleVal;
-        ustring         StringVal;
-        buffer          BufferVal;
+        float           FloatVal; // testing inline comment
+        double          DoubleVal; /* testing comment */
+        ustring         StringVal; /* testing multi-line
+                                    * comment */
+        buffer          BufferVal; // testing another // inline comment 
         vector<ustring> VectorVal;
         map<ustring,ustring>   MapVal;
+        RecRecord0      RecordVal;
     }
 }
 

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

@@ -56,7 +56,7 @@ public class RecRecord0 implements org.apache.hadoop.record.Record, org.apache.h
     org.apache.hadoop.record.BinaryInputArchive archive = new org.apache.hadoop.record.BinaryInputArchive(in);
     deserialize(archive, "");
   }
-  private boolean validate() {
+  public boolean validate() {
     if (bs_.cardinality() != bs_.length()) return false;
     return true;
 }

+ 29 - 7
src/test/org/apache/hadoop/record/test/RecRecord1.java

@@ -12,10 +12,11 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
   private java.io.ByteArrayOutputStream mBufferVal;
   private java.util.ArrayList mVectorVal;
   private java.util.TreeMap mMapVal;
+  private org.apache.hadoop.record.test.RecRecord0 mRecordVal;
   private java.util.BitSet bs_;
   public RecRecord1() {
-    bs_ = new java.util.BitSet(11);
-    bs_.set(10);
+    bs_ = new java.util.BitSet(12);
+    bs_.set(11);
   }
   public RecRecord1(
         boolean m0,
@@ -27,9 +28,10 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
         String m6,
         java.io.ByteArrayOutputStream m7,
         java.util.ArrayList m8,
-        java.util.TreeMap m9) {
-    bs_ = new java.util.BitSet(11);
-    bs_.set(10);
+        java.util.TreeMap m9,
+        org.apache.hadoop.record.test.RecRecord0 m10) {
+    bs_ = new java.util.BitSet(12);
+    bs_.set(11);
     mBoolVal=m0; bs_.set(0);
     mByteVal=m1; bs_.set(1);
     mIntVal=m2; bs_.set(2);
@@ -40,6 +42,7 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
     mBufferVal=m7; bs_.set(7);
     mVectorVal=m8; bs_.set(8);
     mMapVal=m9; bs_.set(9);
+    mRecordVal=m10; bs_.set(10);
   }
   public boolean getBoolVal() {
     return mBoolVal;
@@ -101,6 +104,12 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
   public void setMapVal(java.util.TreeMap m_) {
     mMapVal=m_; bs_.set(9);
   }
+  public org.apache.hadoop.record.test.RecRecord0 getRecordVal() {
+    return mRecordVal;
+  }
+  public void setRecordVal(org.apache.hadoop.record.test.RecRecord0 m_) {
+    mRecordVal=m_; bs_.set(10);
+  }
   public void serialize(org.apache.hadoop.record.OutputArchive a_, String tag) throws java.io.IOException {
     if (!validate()) throw new java.io.IOException("All fields not set:");
     a_.startRecord(this,tag);
@@ -143,6 +152,8 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
       a_.endMap(mMapVal,"MapVal");
     }
     bs_.clear(9);
+    a_.writeRecord(mRecordVal,"RecordVal");
+    bs_.clear(10);
     a_.endRecord(this,tag);
   }
   public void deserialize(org.apache.hadoop.record.InputArchive a_, String tag) throws java.io.IOException {
@@ -187,6 +198,9 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
     a_.endMap("MapVal");
     }
     bs_.set(9);
+    mRecordVal= new org.apache.hadoop.record.test.RecRecord0();
+    a_.readRecord(mRecordVal,"RecordVal");
+    bs_.set(10);
     a_.endRecord(tag);
 }
   public String toString() {
@@ -225,6 +239,7 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
       }
       a_.endMap(mMapVal,"MapVal");
     }
+    a_.writeRecord(mRecordVal,"RecordVal");
       a_.endRecord(this,"");
       return new String(s.toByteArray(), "UTF-8");
     } catch (Throwable ex) {
@@ -240,8 +255,9 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
     org.apache.hadoop.record.BinaryInputArchive archive = new org.apache.hadoop.record.BinaryInputArchive(in);
     deserialize(archive, "");
   }
-  private boolean validate() {
+  public boolean validate() {
     if (bs_.cardinality() != bs_.length()) return false;
+    if (!mRecordVal.validate()) return false;
     return true;
 }
   public int compareTo (Object peer_) throws ClassCastException {
@@ -266,6 +282,8 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
     if (ret != 0) return ret;
     if (ret != 0) return ret;
     if (ret != 0) return ret;
+    if (ret != 0) return ret;
+    ret = mRecordVal.compareTo(peer.mRecordVal);
     if (ret != 0) return ret;
      return ret;
   }
@@ -297,6 +315,8 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
     ret = mVectorVal.equals(peer.mVectorVal);
     if (!ret) return ret;
     ret = mMapVal.equals(peer.mMapVal);
+    if (!ret) return ret;
+    ret = mRecordVal.equals(peer.mRecordVal);
     if (!ret) return ret;
      return ret;
   }
@@ -323,9 +343,11 @@ public class RecRecord1 implements org.apache.hadoop.record.Record, org.apache.h
     result = 37*result + ret;
     ret = mMapVal.hashCode();
     result = 37*result + ret;
+    ret = mRecordVal.hashCode();
+    result = 37*result + ret;
     return result;
   }
   public static String signature() {
-    return "LRecRecord1(zbilfdsB[s]{ss})";
+    return "LRecRecord1(zbilfdsB[s]{ss}LRecRecord0(s))";
   }
 }

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

@@ -60,6 +60,9 @@ public class TestRecordIO extends TestCase {
             r1.setBufferVal(new ByteArrayOutputStream(20));
             r1.setVectorVal(new ArrayList());
             r1.setMapVal(new TreeMap());
+            RecRecord0 r0 = new RecRecord0();
+            r0.setStringVal("other random text");
+            r1.setRecordVal(r0);
             out.write(r1);
             ostream.close();
             FileInputStream istream = new FileInputStream(tmpfile);
@@ -91,6 +94,9 @@ public class TestRecordIO extends TestCase {
             r1.setBufferVal(new ByteArrayOutputStream(20));
             r1.setVectorVal(new ArrayList());
             r1.setMapVal(new TreeMap());
+            RecRecord0 r0 = new RecRecord0();
+            r0.setStringVal("other random text");
+            r1.setRecordVal(r0);
             out.write(r1);
             ostream.close();
             FileInputStream istream = new FileInputStream(tmpfile);
@@ -122,6 +128,9 @@ public class TestRecordIO extends TestCase {
             r1.setBufferVal(new ByteArrayOutputStream(20));
             r1.setVectorVal(new ArrayList());
             r1.setMapVal(new TreeMap());
+            RecRecord0 r0 = new RecRecord0();
+            r0.setStringVal("other random text");
+            r1.setRecordVal(r0);
             out.write(r1);
             ostream.close();
             FileInputStream istream = new FileInputStream(tmpfile);