You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2013/02/09 01:22:05 UTC

svn commit: r1444297 - in /avro/trunk: ./ lang/java/avro/src/main/java/org/apache/avro/io/parsing/

Author: cutting
Date: Sat Feb  9 00:22:05 2013
New Revision: 1444297

URL: http://svn.apache.org/r1444297
Log:
AVRO-1220. Java: Fix a deadlock when reading by replacing parser symbol constructors with factory methods.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/JsonGrammarGenerator.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1444297&r1=1444296&r2=1444297&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Sat Feb  9 00:22:05 2013
@@ -49,6 +49,9 @@ Trunk (not yet released)
     AVRO-1242. Java: Fix AvroTrevniOutputFormat to correctly get file
     metadata from JobConf. (Ted Malaska via cutting)
 
+    AVRO-1220. Java: Fix a deadlock when reading by replacing parser
+    symbol constructors with factory methods. (cutting)
+
 Avro 1.7.3 (6 December 2012)
 
   NEW FEATURES

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/JsonGrammarGenerator.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/JsonGrammarGenerator.java?rev=1444297&r1=1444296&r2=1444297&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/JsonGrammarGenerator.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/JsonGrammarGenerator.java Sat Feb  9 00:22:05 2013
@@ -61,7 +61,7 @@ public class JsonGrammarGenerator extend
     case UNION:
       return super.generate(sc, seen);
     case ENUM:
-      return Symbol.seq(new Symbol.EnumLabelsAction(sc.getEnumSymbols()),
+      return Symbol.seq(Symbol.enumLabelsAction(sc.getEnumSymbols()),
           Symbol.ENUM);
     case ARRAY:
       return Symbol.seq(Symbol.repeat(Symbol.ARRAY_END,
@@ -84,7 +84,7 @@ public class JsonGrammarGenerator extend
         int n = 0;
         production[--i] = Symbol.RECORD_START;
         for (Field f : sc.getFields()) {
-          production[--i] = new Symbol.FieldAdjustAction(n, f.name());
+          production[--i] = Symbol.fieldAdjustAction(n, f.name());
           production[--i] = generate(f.schema(), seen);
           production[--i] = Symbol.FIELD_END;
           n++;

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java?rev=1444297&r1=1444296&r2=1444297&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java Sat Feb  9 00:22:05 2013
@@ -90,7 +90,7 @@ public class ResolvingGrammarGenerator e
       case FIXED:
         if (writer.getFullName().equals(reader.getFullName())
             && writer.getFixedSize() == reader.getFixedSize()) {
-          return Symbol.seq(new Symbol.IntCheckAction(writer.getFixedSize()),
+          return Symbol.seq(Symbol.intCheckAction(writer.getFixedSize()),
               Symbol.FIXED);
         }
         break;
@@ -155,7 +155,7 @@ public class ResolvingGrammarGenerator e
         int j = bestBranch(reader, writer);
         if (j >= 0) {
           Symbol s = generate(writer, reader.getTypes().get(j), seen);
-          return Symbol.seq(new Symbol.UnionAdjustAction(j, s), Symbol.UNION);
+          return Symbol.seq(Symbol.unionAdjustAction(j, s), Symbol.UNION);
         }
         break;
       case NULL:
@@ -194,7 +194,7 @@ public class ResolvingGrammarGenerator e
       i++;
     }
     return Symbol.seq(Symbol.alt(symbols, labels),
-        new Symbol.WriterUnionAction());
+                      Symbol.writerUnionAction());
   }
 
   private Symbol resolveRecords(Schema writer, Schema reader,
@@ -234,7 +234,7 @@ public class ResolvingGrammarGenerator e
       }
 
       Symbol[] production = new Symbol[count];
-      production[--count] = new Symbol.FieldOrderAction(reordered);
+      production[--count] = Symbol.fieldOrderAction(reordered);
 
       /**
        * We construct a symbol without filling the array. Please see
@@ -256,7 +256,7 @@ public class ResolvingGrammarGenerator e
         Field rf = reader.getField(fname);
         if (rf == null) {
           production[--count] =
-            new Symbol.SkipAction(generate(wf.schema(), wf.schema(), seen));
+            Symbol.skipAction(generate(wf.schema(), wf.schema(), seen));
         } else {
           production[--count] =
             generate(wf.schema(), rf.schema(), seen);
@@ -269,7 +269,7 @@ public class ResolvingGrammarGenerator e
         Field wf = writer.getField(fname);
         if (wf == null) {
           byte[] bb = getBinary(rf.schema(), rf.defaultValue());
-          production[--count] = new Symbol.DefaultStartAction(bb);
+          production[--count] = Symbol.defaultStartAction(bb);
           production[--count] = generate(rf.schema(), rf.schema(), seen);
           production[--count] = Symbol.DEFAULT_END_ACTION;
         }
@@ -409,7 +409,7 @@ public class ResolvingGrammarGenerator e
       adjustments[i] = (j == -1 ? "No match for " + wsymbols.get(i)
                                 : new Integer(j));
     }
-    return new Symbol.EnumAdjustAction(rsymbols.size(), adjustments);
+    return Symbol.enumAdjustAction(rsymbols.size(), adjustments);
   }
 
   private static int bestBranch(Schema r, Schema w) {

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java?rev=1444297&r1=1444296&r2=1444297&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java Sat Feb  9 00:22:05 2013
@@ -401,23 +401,36 @@ public abstract class Symbol {
     }
   }
 
+  public static IntCheckAction intCheckAction(int size) {
+    return new IntCheckAction(size);
+  }
+
   public static class IntCheckAction extends Symbol {
     public final int size;
-    public IntCheckAction(int size) {
+    @Deprecated public IntCheckAction(int size) {
       super(Kind.EXPLICIT_ACTION);
       this.size = size;
     }
   }
 
+  public static EnumAdjustAction enumAdjustAction(int rsymCount, Object[] adj) {
+    return new EnumAdjustAction(rsymCount, adj);
+  }
+  
   public static class EnumAdjustAction extends IntCheckAction {
     public final Object[] adjustments;
-    public EnumAdjustAction(int rsymCount, Object[] adjustments) {
+    @Deprecated public EnumAdjustAction(int rsymCount, Object[] adjustments) {
       super(rsymCount);
       this.adjustments = adjustments;
     }
   }
 
+  public static WriterUnionAction writerUnionAction() {
+    return new WriterUnionAction();
+  }
+
   public static class WriterUnionAction extends ImplicitAction {
+    private WriterUnionAction() {}
   }
 
   public static class ResolvingAction extends ImplicitAction {
@@ -437,9 +450,13 @@ public abstract class Symbol {
 
   }
   
+  public static SkipAction skipAction(Symbol symToSkip) {
+    return new SkipAction(symToSkip);
+  }
+
   public static class SkipAction extends ImplicitAction {
     public final Symbol symToSkip;
-    public SkipAction(Symbol symToSkip) {
+    @Deprecated public SkipAction(Symbol symToSkip) {
       super(true);
       this.symToSkip = symToSkip;
     }
@@ -452,33 +469,49 @@ public abstract class Symbol {
 
   }
 
+  public static FieldAdjustAction fieldAdjustAction(int rindex, String fname) {
+    return new FieldAdjustAction(rindex, fname);
+  }
+  
   public static class FieldAdjustAction extends ImplicitAction {
     public final int rindex;
     public final String fname;
-    public FieldAdjustAction(int rindex, String fname) {
+    @Deprecated public FieldAdjustAction(int rindex, String fname) {
       this.rindex = rindex;
       this.fname = fname;
     }
   }
   
+  public static FieldOrderAction fieldOrderAction(Schema.Field[] fields) {
+    return new FieldOrderAction(fields);
+  }
+
   public static final class FieldOrderAction extends ImplicitAction {
     public final Schema.Field[] fields;
-    public FieldOrderAction(Schema.Field[] fields) {
+    @Deprecated public FieldOrderAction(Schema.Field[] fields) {
       this.fields = fields;
     }
   }
 
+  public static DefaultStartAction defaultStartAction(byte[] contents) {
+    return new DefaultStartAction(contents);
+  }
+
   public static class DefaultStartAction extends ImplicitAction {
     public final byte[] contents;
-    public DefaultStartAction(byte[] contents) {
+    @Deprecated public DefaultStartAction(byte[] contents) {
       this.contents = contents;
     }
   }
 
+  public static UnionAdjustAction unionAdjustAction(int rindex, Symbol sym) {
+    return new UnionAdjustAction(rindex, sym);
+  }
+
   public static class UnionAdjustAction extends ImplicitAction {
     public final int rindex;
     public final Symbol symToParse;
-    public UnionAdjustAction(int rindex, Symbol symToParse) {
+    @Deprecated public UnionAdjustAction(int rindex, Symbol symToParse) {
       this.rindex = rindex;
       this.symToParse = symToParse;
     }
@@ -492,9 +525,13 @@ public abstract class Symbol {
   }
 
   /** For JSON. */
+  public static EnumLabelsAction enumLabelsAction(List<String> symbols) {
+    return new EnumLabelsAction(symbols);
+  }
+
   public static class EnumLabelsAction extends IntCheckAction {
     public final List<String> symbols;
-    public EnumLabelsAction(List<String> symbols) {
+    @Deprecated public EnumLabelsAction(List<String> symbols) {
       super(symbols.size());
       this.symbols = symbols;
     }

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java?rev=1444297&r1=1444296&r2=1444297&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java Sat Feb  9 00:22:05 2013
@@ -65,10 +65,10 @@ public class ValidatingGrammarGenerator 
     case BYTES:
       return Symbol.BYTES;
     case FIXED:
-      return Symbol.seq(new Symbol.IntCheckAction(sc.getFixedSize()),
+      return Symbol.seq(Symbol.intCheckAction(sc.getFixedSize()),
           Symbol.FIXED);
     case ENUM:
-      return Symbol.seq(new Symbol.IntCheckAction(sc.getEnumSymbols().size()),
+      return Symbol.seq(Symbol.intCheckAction(sc.getEnumSymbols().size()),
           Symbol.ENUM);
     case ARRAY:
       return Symbol.seq(Symbol.repeat(Symbol.ARRAY_END, generate(sc.getElementType(), seen)),