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 2010/08/30 18:39:22 UTC

svn commit: r990853 - in /avro/branches/branch-1.4: ./ lang/java/src/java/org/apache/avro/generic/ lang/java/src/java/org/apache/avro/ipc/trace/ lang/java/src/java/org/apache/avro/specific/ lang/java/src/test/java/org/apache/avro/ lang/ruby/

Author: cutting
Date: Mon Aug 30 16:39:21 2010
New Revision: 990853

URL: http://svn.apache.org/viewvc?rev=990853&view=rev
Log:
Merge r990852 from trunk to 1.4 branch.  Fixes: AVRO-637.

Modified:
    avro/branches/branch-1.4/   (props changed)
    avro/branches/branch-1.4/CHANGES.txt
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericArray.java
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericData.java
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumWriter.java
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/package.html
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/ipc/trace/TracePlugin.java
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificCompiler.java
    avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificData.java
    avro/branches/branch-1.4/lang/java/src/test/java/org/apache/avro/TestSchema.java
    avro/branches/branch-1.4/lang/ruby/Manifest

Propchange: avro/branches/branch-1.4/
------------------------------------------------------------------------------
    svn:mergeinfo = /avro/trunk:990852

Modified: avro/branches/branch-1.4/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/CHANGES.txt?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/CHANGES.txt (original)
+++ avro/branches/branch-1.4/CHANGES.txt Mon Aug 30 16:39:21 2010
@@ -19,6 +19,11 @@ Avro 1.4.0 (31 August 2010)
     representation of enum symbols from java.lang.String to
     org.apache.avro.generic.GenericEnumSymbol.
 
+    AVRO-637. Java: Change GenericArray to implement List.  Also
+    incompatibly change generated array signatures to List.  The
+    runtime will now accept any Collection implementation for array
+    types.  (cutting)
+
   NEW FEATURES
 
     AVRO-613. Create basic frontend to view trace results.

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericArray.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericArray.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericArray.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericArray.java Mon Aug 30 16:39:21 2010
@@ -15,20 +15,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.avro.generic;
-
 
-/** An array of objects. */
-public interface GenericArray<T> extends Iterable<T>, GenericContainer {
-  /** The number of elements contained in this array. */
-  long size();
-
-  /** Reset the size of the array to zero. */
-  void clear();
+package org.apache.avro.generic;
 
-  /** Add an element to this array. */
-  void add(T element);
+import java.util.List;
 
+/** Array that permits reuse of contained elements. */
+public interface GenericArray<T> extends List<T>, GenericContainer {
   /** The current content of the location where {@link #add(Object)} would next
    * store an element, if any.  This permits reuse of arrays and their elements
    * without allocating new objects. */

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericData.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericData.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericData.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericData.java Mon Aug 30 16:39:21 2010
@@ -21,6 +21,8 @@ import java.nio.ByteBuffer;
 import java.util.Iterator;
 import java.util.Arrays;
 import java.util.Map;
+import java.util.Collection;
+import java.util.AbstractList;
 
 import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.AvroTypeException;
@@ -79,10 +81,10 @@ public class GenericData {
     }
   }
 
-  /** Default implementation of {@link GenericArray}. */
+  /** Default implementation of an array. */
   @SuppressWarnings(value="unchecked")
-  public static class Array<T>
-    implements GenericArray<T>, Comparable<Array<T>> {
+  public static class Array<T> extends AbstractList<T>
+    implements GenericArray<T>, Comparable<GenericArray<T>> {
     private static final Object[] EMPTY = new Object[0];
     private final Schema schema;
     private int size;
@@ -95,9 +97,9 @@ public class GenericData {
         elements = new Object[capacity];
     }
     public Schema getSchema() { return schema; }
-    public long size() { return size; }
-    public void clear() { size = 0; }
-    public Iterator<T> iterator() {
+    @Override public int size() { return size; }
+    @Override public void clear() { size = 0; }
+    @Override public Iterator<T> iterator() {
       return new Iterator<T>() {
         private int position = 0;
         public boolean hasNext() { return position < size; }
@@ -105,13 +107,15 @@ public class GenericData {
         public void remove() { throw new UnsupportedOperationException(); }
       };
     }
-    public void add(T o) {
+    @Override public T get(int i) { return (T)elements[i]; }
+    @Override public boolean add(T o) {
       if (size == elements.length) {
         Object[] newElements = new Object[(size * 3)/2 + 1];
         System.arraycopy(elements, 0, newElements, 0, size);
         elements = newElements;
       }
       elements[size++] = o;
+      return true;
     }
     public T peek() {
       return (size < elements.length) ? (T)elements[size] : null;
@@ -127,7 +131,7 @@ public class GenericData {
         return false;                             // not the same schema
       return this.compareTo(that) == 0;
     }
-    public int compareTo(Array<T> that) {
+    public int compareTo(GenericArray<T> that) {
       return GenericData.get().compare(this, that, this.getSchema());
     }
     public void reverse() {
@@ -268,8 +272,8 @@ public class GenericData {
           buffer.append(", ");
       }
       buffer.append("}");
-    } else if (datum instanceof GenericArray) {
-      GenericArray array = (GenericArray)datum;
+    } else if (datum instanceof Collection) {
+      Collection array = (Collection)datum;
       buffer.append("[");
       long last = array.size()-1;
       int i = 0;
@@ -311,9 +315,9 @@ public class GenericData {
   public Schema induce(Object datum) {
     if (datum instanceof IndexedRecord) {
       return ((IndexedRecord)datum).getSchema();
-    } else if (datum instanceof GenericArray) {
+    } else if (datum instanceof Collection) {
       Schema elementType = null;
-      for (Object element : (GenericArray)datum) {
+      for (Object element : (Collection)datum) {
         if (elementType == null) {
           elementType = induce(element);
         } else if (!elementType.equals(induce(element))) {
@@ -394,7 +398,7 @@ public class GenericData {
 
   /** Called by the default implementation of {@link #instanceOf}.*/
   protected boolean isArray(Object datum) {
-    return datum instanceof GenericArray;
+    return datum instanceof Collection;
   }
 
   /** Called by the default implementation of {@link #instanceOf}.*/

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java Mon Aug 30 16:39:21 2010
@@ -20,6 +20,7 @@ package org.apache.avro.generic;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Collection;
 import java.nio.ByteBuffer;
 
 import org.apache.avro.AvroRuntimeException;
@@ -196,14 +197,16 @@ public class GenericDatumReader<D> imple
    * GenericArray}.*/
   @SuppressWarnings("unchecked")
   protected Object peekArray(Object array) {
-    return ((GenericArray) array).peek();
+    return (array instanceof GenericArray)
+      ? ((GenericArray)array).peek()
+      : null;
   }
 
-  /** Called by the default implementation of {@link #readArray} to add a value.
-   * The default implementation is for {@link GenericArray}.*/
+  /** Called by the default implementation of {@link #readArray} to add a
+   * value.  The default implementation is for {@link Collection}.*/
   @SuppressWarnings("unchecked")
   protected void addToArray(Object array, long pos, Object e) {
-    ((GenericArray) array).add(e);
+    ((Collection) array).add(e);
   }
   
   /** Called to read a map instance.  May be overridden for alternate map
@@ -277,8 +280,8 @@ public class GenericDatumReader<D> imple
    * GenericData.Array}.*/
   @SuppressWarnings("unchecked")
   protected Object newArray(Object old, int size, Schema schema) {
-    if (old instanceof GenericArray) {
-      ((GenericArray) old).clear();
+    if (old instanceof Collection) {
+      ((Collection) old).clear();
       return old;
     } else return new GenericData.Array(size, schema);
   }

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumWriter.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumWriter.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumWriter.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/GenericDatumWriter.java Mon Aug 30 16:39:21 2010
@@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Collection;
 
 import org.apache.avro.AvroTypeException;
 import org.apache.avro.Schema;
@@ -135,18 +136,17 @@ public class GenericDatumWriter<D> imple
   }
 
   /** Called by the default implementation of {@link #writeArray} to get the
-   * size of an array.  The default implementation is for {@link
-   * GenericArray}.*/
+   * size of an array.  The default implementation is for {@link Collection}.*/
   @SuppressWarnings("unchecked")
   protected long getArraySize(Object array) {
-    return ((GenericArray) array).size();
+    return ((Collection) array).size();
   }
 
   /** Called by the default implementation of {@link #writeArray} to enumerate
-   * array elements.  The default implementation is for {@link GenericArray}.*/
+   * array elements.  The default implementation is for {@link Collection}.*/
   @SuppressWarnings("unchecked")
   protected Iterator<? extends Object> getArrayElements(Object array) {
-    return ((GenericArray) array).iterator();
+    return ((Collection) array).iterator();
   }
   
   /** Called to write a map.  May be overridden for alternate map

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/package.html
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/package.html?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/package.html (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/generic/package.html Mon Aug 30 16:39:21 2010
@@ -26,11 +26,11 @@ A generic representation for Avro data.
 <p>Avro schemas are mapped to Java types as follows:
 <ul>
 <li>Schema records are implemented as {@link org.apache.avro.generic.GenericRecord}.
-<li>Schema enums are implemented as {@link java.lang.String}.
-<li>Schema arrays are implemented as {@link org.apache.avro.generic.GenericArray}.
+<li>Schema enums are implemented as {@link org.apache.avro.generic.GenericEnumSymbol}.
+<li>Schema arrays are implemented as {@link java.util.Collection}.
 <li>Schema maps are implemented as {@link java.util.Map}.
 <li>Schema fixed are implemented as {@link org.apache.avro.generic.GenericFixed}.
-<li>Schema strings are implemented as {@link org.apache.avro.util.Utf8}.
+<li>Schema strings are implemented as {@link java.lang.CharSequence}.
 <li>Schema bytes are implemented as {@link java.nio.ByteBuffer}.
 <li>Schema ints are implemented as {@link java.lang.Integer}.
 <li>Schema longs are implemented as {@link java.lang.Long}.

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/ipc/trace/TracePlugin.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/ipc/trace/TracePlugin.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/ipc/trace/TracePlugin.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/ipc/trace/TracePlugin.java Mon Aug 30 16:39:21 2010
@@ -29,7 +29,6 @@ import java.util.Random;
 
 import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.Schema;
-import org.apache.avro.generic.GenericArray;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.ipc.AvroRemoteException;
 import org.apache.avro.ipc.HttpServer;
@@ -82,28 +81,14 @@ public class TracePlugin extends RPCPlug
     }
 
     @Override
-    public GenericArray<Span> getAllSpans() throws AvroRemoteException {
-      List<Span> spans = this.spanStorage.getAllSpans();
-      GenericData.Array<Span> out;
-      out = new GenericData.Array<Span>(spans.size(), 
-        Schema.createArray(Span.SCHEMA$));
-      for (Span s: spans) {
-        out.add(s);
-      }
-      return out;
+    public List<Span> getAllSpans() throws AvroRemoteException {
+      return this.spanStorage.getAllSpans();
     }
 
     @Override
-    public GenericArray<Span> getSpansInRange(long start, long end)
-        throws AvroRemoteException {
-      List<Span> spans = this.spanStorage.getSpansInRange(start, end);
-      GenericData.Array<Span> out;
-      out = new GenericData.Array<Span>(spans.size(), 
-        Schema.createArray(Span.SCHEMA$));
-      for (Span s: spans) {
-        out.add(s);
-      }
-      return out;
+    public List<Span> getSpansInRange(long start, long end)
+      throws AvroRemoteException {
+      return this.spanStorage.getSpansInRange(start, end);
     }
   }
   

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificCompiler.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificCompiler.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificCompiler.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificCompiler.java Mon Aug 30 16:39:21 2010
@@ -351,7 +351,7 @@ public class SpecificCompiler {
     case FIXED:
       return mangle(schema.getFullName());
     case ARRAY:
-      return "org.apache.avro.generic.GenericArray<"+type(schema.getElementType())+">";
+      return "java.util.List<"+type(schema.getElementType())+">";
     case MAP:
       return "java.util.Map<java.lang.CharSequence,"+type(schema.getValueType())+">";
     case UNION:

Modified: avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificData.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificData.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificData.java (original)
+++ avro/branches/branch-1.4/lang/java/src/java/org/apache/avro/specific/SpecificData.java Mon Aug 30 16:39:21 2010
@@ -18,6 +18,7 @@
 package org.apache.avro.specific;
 
 import java.util.Map;
+import java.util.Collection;
 import java.util.List;
 import java.util.WeakHashMap;
 import java.util.concurrent.ConcurrentHashMap;
@@ -31,7 +32,6 @@ import org.apache.avro.AvroRuntimeExcept
 import org.apache.avro.AvroTypeException;
 import org.apache.avro.Schema.Type;
 import org.apache.avro.generic.GenericData;
-import org.apache.avro.generic.GenericArray;
 
 /** Utilities for generated Java classes and interfaces. */
 public class SpecificData extends GenericData {
@@ -70,7 +70,7 @@ public class SpecificData extends Generi
         classCache.put(name, c);
       }
       return c == NO_CLASS ? null : c;
-    case ARRAY:   return GenericArray.class;
+    case ARRAY:   return Collection.class;
     case MAP:     return Map.class;
     case UNION:
       List<Schema> types = schema.getTypes();     // elide unions with null
@@ -137,7 +137,7 @@ public class SpecificData extends Generi
       ParameterizedType ptype = (ParameterizedType)type;
       Class raw = (Class)ptype.getRawType();
       java.lang.reflect.Type[] params = ptype.getActualTypeArguments();
-      if (GenericArray.class.isAssignableFrom(raw)) { // array
+      if (Collection.class.isAssignableFrom(raw)) { // array
         if (params.length != 1)
           throw new AvroTypeException("No array type specified.");
         return Schema.createArray(createSchema(params[0], names));

Modified: avro/branches/branch-1.4/lang/java/src/test/java/org/apache/avro/TestSchema.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/java/src/test/java/org/apache/avro/TestSchema.java?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/java/src/test/java/org/apache/avro/TestSchema.java (original)
+++ avro/branches/branch-1.4/lang/java/src/test/java/org/apache/avro/TestSchema.java Mon Aug 30 16:39:21 2010
@@ -32,9 +32,9 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Collection;
 
 import org.apache.avro.Schema.Type;
-import org.apache.avro.generic.GenericArray;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.generic.GenericDatumReader;
 import org.apache.avro.generic.GenericDatumWriter;
@@ -141,7 +141,10 @@ public class TestSchema {
   public void testArray() throws Exception {
     String json = "{\"type\":\"array\", \"items\": \"long\"}";
     Schema schema = Schema.parse(json);
-    GenericArray<Long> array = new GenericData.Array<Long>(1, schema);
+    Collection<Long> array = new GenericData.Array<Long>(1, schema);
+    array.add(1L);
+    check(json, "[1]", array);
+    array = new ArrayList<Long>(1);
     array.add(1L);
     check(json, "[1]", array);
     checkParseError("{\"type\":\"array\"}");      // items required

Modified: avro/branches/branch-1.4/lang/ruby/Manifest
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.4/lang/ruby/Manifest?rev=990853&r1=990852&r2=990853&view=diff
==============================================================================
--- avro/branches/branch-1.4/lang/ruby/Manifest (original)
+++ avro/branches/branch-1.4/lang/ruby/Manifest Mon Aug 30 16:39:21 2010
@@ -1,7 +1,6 @@
 CHANGELOG
 Manifest
 Rakefile
-avro.gemspec
 interop/test_interop.rb
 lib/avro.rb
 lib/avro/collect_hash.rb
@@ -12,7 +11,12 @@ lib/avro/protocol.rb
 lib/avro/schema.rb
 test/random_data.rb
 test/sample_ipc_client.rb
+test/sample_ipc_http_client.rb
+test/sample_ipc_http_server.rb
 test/sample_ipc_server.rb
+test/test_datafile.rb
 test/test_help.rb
 test/test_io.rb
 test/test_protocol.rb
+test/test_socket_transport.rb
+test/tool.rb