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 2009/04/27 22:13:32 UTC
svn commit: r769139 - in /hadoop/avro/trunk: lib/py/ src/doc/content/xdocs/
src/java/org/apache/avro/ src/java/org/apache/avro/ipc/ src/py/avro/
src/test/java/org/apache/avro/ src/test/py/ src/test/schemata/
Author: cutting
Date: Mon Apr 27 20:13:31 2009
New Revision: 769139
URL: http://svn.apache.org/viewvc?rev=769139&view=rev
Log:
AVRO-1. Record fields are now defined with JSON arrays, rather than JSON objects, since fields are ordered.
Removed:
hadoop/avro/trunk/lib/py/odict.py
hadoop/avro/trunk/src/py/avro/jsonparser.py
hadoop/avro/trunk/src/test/schemata/big.js
hadoop/avro/trunk/src/test/schemata/fs-name.js
hadoop/avro/trunk/src/test/schemata/little.js
hadoop/avro/trunk/src/test/schemata/tree.js
Modified:
hadoop/avro/trunk/src/doc/content/xdocs/spec.xml
hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java
hadoop/avro/trunk/src/java/org/apache/avro/Schema.java
hadoop/avro/trunk/src/java/org/apache/avro/ipc/Responder.java
hadoop/avro/trunk/src/py/avro/ipc.py
hadoop/avro/trunk/src/py/avro/protocol.py
hadoop/avro/trunk/src/py/avro/schema.py
hadoop/avro/trunk/src/test/java/org/apache/avro/TestDataFile.java
hadoop/avro/trunk/src/test/java/org/apache/avro/TestSchema.java
hadoop/avro/trunk/src/test/py/testio.py
hadoop/avro/trunk/src/test/py/testioreflect.py
hadoop/avro/trunk/src/test/schemata/fs-data.js
hadoop/avro/trunk/src/test/schemata/interop.js
hadoop/avro/trunk/src/test/schemata/test.js
Modified: hadoop/avro/trunk/src/doc/content/xdocs/spec.xml
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/doc/content/xdocs/spec.xml?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/doc/content/xdocs/spec.xml (original)
+++ hadoop/avro/trunk/src/doc/content/xdocs/spec.xml Mon Apr 27 20:13:31 2009
@@ -94,25 +94,28 @@
<p>Records use the type name "record" and support two attributes:</p>
<ul>
<li><code>name</code>: a JSON string providing the name
- of the record, </li>
- <li><code>fields</code>: a JSON object, listing field
- names and schemas.</li>
+ of the record (optional).</li>
+ <li><code>fields</code>: a JSON array, listing fields (required).
+ Each field is a JSON object with the following attributes:
+ <ul>
+ <li><code>name</code>: a JSON string providing the name
+ of the field (required), and </li>
+ <li><code>type</code>A JSON object defining a schema, or
+ a JSON string naming a record definition
+ (required).</li>
+ </ul>
+ </li>
</ul>
- <p>The fields of a record are <em>ordered</em>. Two
- otherwise identical records whose fields are ordered
- differently represent equivalent data but are not
- serialized identically.</p>
-
<p>For example, a linked-list of 64-bit values may be defined with:</p>
<source>
{
"type": "record",
"name": "LongList",
- "fields" : {
- "value": "long", // each element has a long
- "next": ["LongList", "null"] // optional next element
- }
+ "fields" : [
+ {"name": "value", "type": "long"}, // each element has a long
+ {"name": "next", "type": ["LongList", "null"]} // optional next element
+ ]
}
</source>
</section>
@@ -245,10 +248,10 @@
{
"type": "record",
"name": "test",
- "fields" : {
- "a": "long",
- "b": "string"
- }
+ "fields" : [
+ {"name": "a", "type": "long"},
+ {"name": "b", "type": "string"}
+ ]
}
</source>
<p>An instance of this record whose <code>a</code> field has
@@ -453,8 +456,10 @@
"protocol": "HelloWorld",
"types": [
- {"name": "Greeting", "type": "record", "fields": {"name": "string"}},
- {"name": "Curse", "type": "error", "fields": {"message": "string"}}
+ {"name": "Greeting", "type": "record", "fields": [
+ {"name": "message", "type": "string"}]}
+ {"name": "Curse", "type": "error", "fields": [
+ {"name": "message", "type": "string"}]}
],
"messages": {
Modified: hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java (original)
+++ hadoop/avro/trunk/src/java/org/apache/avro/Protocol.java Mon Apr 27 20:13:31 2009
@@ -78,17 +78,18 @@
public String toString() {
StringBuilder buffer = new StringBuilder();
- buffer.append("{\"request\": {");
+ buffer.append("{\"request\": [");
int count = 0;
for (Map.Entry<String, Schema> entry : request.getFieldSchemas()) {
- buffer.append("\"");
+ buffer.append("{\"name\": \"");
buffer.append(entry.getKey());
- buffer.append("\": ");
+ buffer.append("\", \"type\": ");
buffer.append(entry.getValue().toString(types));
+ buffer.append("}");
if (++count < request.getFields().size())
buffer.append(", ");
}
- buffer.append("}, \"response\": "+response.toString(types));
+ buffer.append("], \"response\": "+response.toString(types));
List<Schema> errTypes = errors.getTypes(); // elide system error
if (errTypes.size() > 1) {
@@ -197,31 +198,26 @@
/** Read a protocol from a Json file. */
public static Protocol parse(File file) throws IOException {
- return parse(new FileInputStream(file));
+ return parse(Schema.FACTORY.createJsonParser(file));
}
/** Read a protocol from a Json string. */
public static Protocol parse(String string) {
try {
- return parse(new ByteArrayInputStream(string.getBytes("UTF-8")));
+ return parse(Schema.FACTORY.createJsonParser
+ (new ByteArrayInputStream(string.getBytes("UTF-8"))));
} catch (IOException e) {
throw new AvroRuntimeException(e);
}
}
- /** Read a protocol from a Json stream. */
- public static Protocol parse(InputStream in) throws IOException {
+ private static Protocol parse(JsonParser parser) {
try {
- JsonParser parser = Schema.FACTORY.createJsonParser(in);
- try {
- Protocol protocol = new Protocol();
- protocol.parse(Schema.MAPPER.read(parser));
- return protocol;
- } catch (JsonParseException e) {
- throw new SchemaParseException(e);
- }
- } finally {
- in.close();
+ Protocol protocol = new Protocol();
+ protocol.parse(Schema.MAPPER.read(parser));
+ return protocol;
+ } catch (IOException e) {
+ throw new SchemaParseException(e);
}
}
@@ -268,12 +264,17 @@
private Message parseMessage(String messageName, JsonNode json) {
JsonNode requestNode = json.getFieldValue("request");
- if (requestNode == null)
+ if (requestNode == null || !requestNode.isArray())
throw new SchemaParseException("No request specified: "+json);
Map<String,Schema> fields = new LinkedHashMap<String,Schema>();
- for (Iterator<String> i = requestNode.getFieldNames(); i.hasNext();) {
- String prop = i.next();
- fields.put(prop, Schema.parse(requestNode.getFieldValue(prop), types));
+ for (JsonNode field : requestNode) {
+ JsonNode fieldNameNode = field.getFieldValue("name");
+ if (fieldNameNode == null)
+ throw new SchemaParseException("No param name: "+field);
+ JsonNode fieldTypeNode = field.getFieldValue("type");
+ if (fieldTypeNode == null)
+ throw new SchemaParseException("No param type: "+field);
+ fields.put(fieldNameNode.getTextValue(),Schema.parse(fieldTypeNode,types));
}
Schema request = Schema.create(fields);
Modified: hadoop/avro/trunk/src/java/org/apache/avro/Schema.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/java/org/apache/avro/Schema.java?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/java/org/apache/avro/Schema.java (original)
+++ hadoop/avro/trunk/src/java/org/apache/avro/Schema.java Mon Apr 27 20:13:31 2009
@@ -235,17 +235,18 @@
StringBuilder buffer = new StringBuilder();
buffer.append("{\"type\": \""+(isError?"error":"record")+"\", "
+(name==null?"":"\"name\": \""+name+"\", ")
- +"\"fields\": {");
+ +"\"fields\": [");
int count = 0;
for (Map.Entry<String, Schema> entry : fieldSchemas) {
- buffer.append("\"");
+ buffer.append("{\"name\": \"");
buffer.append(entry.getKey());
- buffer.append("\": ");
+ buffer.append("\", \"type\": ");
buffer.append(entry.getValue().toString(names));
+ buffer.append("}");
if (++count < fields.size())
buffer.append(", ");
}
- buffer.append("}}");
+ buffer.append("]}");
return buffer.toString();
}
}
@@ -389,16 +390,11 @@
private static final NullSchema NULL_SCHEMA = new NullSchema();
public static Schema parse(File file) throws IOException {
- InputStream in = new FileInputStream(file);
+ JsonParser parser = FACTORY.createJsonParser(file);
try {
- JsonParser parser = FACTORY.createJsonParser(in);
- try {
- return Schema.parse(MAPPER.read(parser), new Names());
- } catch (JsonParseException e) {
- throw new SchemaParseException(e);
- }
- } finally {
- in.close();
+ return Schema.parse(MAPPER.read(parser), new Names());
+ } catch (JsonParseException e) {
+ throw new SchemaParseException(e);
}
}
@@ -468,10 +464,17 @@
RecordSchema result =
new RecordSchema(name, space, type.equals("error"));
if (name != null) names.put(name, result);
- JsonNode props = schema.getFieldValue("fields");
- for (Iterator<String> i = props.getFieldNames(); i.hasNext();) {
- String prop = i.next();
- fields.put(prop, parse(props.getFieldValue(prop), names));
+ JsonNode fieldsNode = schema.getFieldValue("fields");
+ if (fieldsNode == null || !fieldsNode.isArray())
+ throw new SchemaParseException("Record has no fields: "+schema);
+ for (JsonNode field : fieldsNode) {
+ JsonNode fieldNameNode = field.getFieldValue("name");
+ if (fieldNameNode == null)
+ throw new SchemaParseException("No field name: "+field);
+ JsonNode fieldTypeNode = field.getFieldValue("type");
+ if (fieldTypeNode == null)
+ throw new SchemaParseException("No field type: "+field);
+ fields.put(fieldNameNode.getTextValue(), parse(fieldTypeNode, names));
}
result.setFields(fields);
return result;
Modified: hadoop/avro/trunk/src/java/org/apache/avro/ipc/Responder.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/java/org/apache/avro/ipc/Responder.java?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/java/org/apache/avro/ipc/Responder.java (original)
+++ hadoop/avro/trunk/src/java/org/apache/avro/ipc/Responder.java Mon Apr 27 20:13:31 2009
@@ -85,6 +85,9 @@
response = respond(m, request);
} catch (AvroRemoteException e) {
error = e;
+ } catch (Exception e) {
+ LOG.warn("application error", e);
+ error = new AvroRemoteException(new Utf8(e.toString()));
}
out.writeBoolean(error != null);
@@ -94,7 +97,7 @@
writeError(m.getErrors(), error, out);
} catch (AvroRuntimeException e) { // system error
- LOG.warn("unexpected error", e);
+ LOG.warn("system error", e);
error = new AvroRemoteException(e);
out = new ByteBufferValueWriter();
out.writeBoolean(true);
Modified: hadoop/avro/trunk/src/py/avro/ipc.py
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/py/avro/ipc.py?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/py/avro/ipc.py (original)
+++ hadoop/avro/trunk/src/py/avro/ipc.py Mon Apr 27 20:13:31 2009
@@ -156,6 +156,8 @@
response = self.invoke(m, req)
except AvroRemoteException, e:
error = e
+ except Exception, e:
+ error = AvroRemoteException(unicode(e.__str__()))
vwriter.writeboolean(error is not None)
if error is None:
self.writeresponse(m.getresponse(), response, vwriter)
Modified: hadoop/avro/trunk/src/py/avro/protocol.py
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/py/avro/protocol.py?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/py/avro/protocol.py (original)
+++ hadoop/avro/trunk/src/py/avro/protocol.py Mon Apr 27 20:13:31 2009
@@ -15,7 +15,7 @@
#limitations under the License.
import cStringIO
-import jsonparser
+import simplejson
import avro.schema as schema
#The version implemented.
@@ -67,17 +67,18 @@
def __str__(self):
str = cStringIO.StringIO()
- str.write("{\"request\": {")
+ str.write("{\"request\": [")
count = 0
for k,v in self.__request.getfields():
- str.write("\"")
+ str.write("{\"name\": \"")
str.write(k)
- str.write("\": ")
+ str.write("\", \"type\": ")
str.write(v.str(self.__proto.gettypes()))
+ str.write("}")
count+=1
if count < len(self.__request.getfields()):
str.write(", ")
- str.write("}, \"response\": "+
+ str.write("], \"response\": "+
self.__response.str(self.__proto.gettypes()))
list = self.__errors.getelementtypes()
if len(list) > 1:
@@ -143,8 +144,14 @@
if res is None:
raise SchemaParseException("No response specified: "+obj.__str__())
fields = dict()
- for k,v in req.items():
- fields[k] = schema._parse(v, self.__types)
+ for field in req:
+ fieldname = field.get("name")
+ if fieldname is None:
+ raise SchemaParseException("No param name: "+field.__str__())
+ fieldtype = field.get("type")
+ if fieldtype is None:
+ raise SchemaParseException("No param type: "+field.__str__())
+ fields[fieldname] = schema._parse(fieldtype, self.__types)
request = schema._RecordSchema(list(fields.iteritems()))
response = schema._parse(res, self.__types)
@@ -169,5 +176,5 @@
def parse(json_string):
"""Constructs the Protocol from the json text."""
protocol = Protocol()
- protocol._parse(jsonparser.parse(json_string))
+ protocol._parse(simplejson.loads(json_string))
return protocol
\ No newline at end of file
Modified: hadoop/avro/trunk/src/py/avro/schema.py
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/py/avro/schema.py?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/py/avro/schema.py (original)
+++ hadoop/avro/trunk/src/py/avro/schema.py Mon Apr 27 20:13:31 2009
@@ -29,8 +29,7 @@
A boolean."""
import cStringIO
-import odict
-import avro.jsonparser as jsonparser
+import simplejson
#The schema types
STRING, BYTES, INT, LONG, FLOAT, DOUBLE, BOOLEAN, NULL, ARRAY, MAP, UNION, RECORD = range(12)
@@ -144,17 +143,18 @@
str.write("\"name\": \""+self.__name+"\", ")
#if self.__namespace is not None:
#str.write("\"namespace\": \""+self.__namespace+"\", ")
- str.write("\"fields\": {")
+ str.write("\"fields\": [")
count=0
for k,v in self.__fields:
- str.write("\"")
+ str.write("{\"name\": \"")
str.write(k)
- str.write("\": ")
+ str.write("\", \"type\": ")
str.write(v.str(names))
+ str.write("}")
count+=1
if count < len(self.__fields):
str.write(",")
- str.write("}}")
+ str.write("]}")
return str.getvalue()
def __eq__(self, other, seen={}):
@@ -338,8 +338,17 @@
schema = _RecordSchema(fields, name, namespace, type == "error")
if name is not None:
names[name] = schema
- for k,v in obj.get("fields").items():
- fields.append((k, _parse(v, names)))
+ fieldsnode = obj.get("fields")
+ if fieldsnode is None:
+ raise SchemaParseException("Record has no fields: "+obj.__str__())
+ for field in fieldsnode:
+ fieldname = field.get("name")
+ if fieldname is None:
+ raise SchemaParseException("No field name: "+field.__str__())
+ fieldtype = field.get("type")
+ if fieldtype is None:
+ raise SchemaParseException("No field type: "+field.__str__())
+ fields.append((fieldname, _parse(fieldtype, names)))
return schema
elif type == "array":
return _ArraySchema(_parse(obj.get("items"), names))
@@ -362,5 +371,5 @@
def parse(json_string):
"""Constructs the Schema from the json text."""
- dict = jsonparser.parse(json_string)
+ dict = simplejson.loads(json_string)
return _parse(dict, _Names())
Modified: hadoop/avro/trunk/src/test/java/org/apache/avro/TestDataFile.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/java/org/apache/avro/TestDataFile.java?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/java/org/apache/avro/TestDataFile.java (original)
+++ hadoop/avro/trunk/src/test/java/org/apache/avro/TestDataFile.java Mon Apr 27 20:13:31 2009
@@ -45,9 +45,9 @@
private static final long SEED = System.currentTimeMillis();
private static final String SCHEMA_JSON =
- "{\"type\": \"record\", \"fields\":{"
- +"\"stringField\":\"string\","
- +"\"longField\": \"long\"}}";
+ "{\"type\": \"record\", \"fields\": ["
+ +"{\"name\":\"stringField\", \"type\":\"string\"},"
+ +"{\"name\":\"longField\", \"type\":\"long\"}]}";
private static final Schema SCHEMA = Schema.parse(SCHEMA_JSON);
public void testGenericWrite() throws IOException {
Modified: hadoop/avro/trunk/src/test/java/org/apache/avro/TestSchema.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/java/org/apache/avro/TestSchema.java?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/java/org/apache/avro/TestSchema.java (original)
+++ hadoop/avro/trunk/src/test/java/org/apache/avro/TestSchema.java Mon Apr 27 20:13:31 2009
@@ -70,21 +70,24 @@
}
public void testRecord() throws Exception {
- check("{\"type\":\"record\",\"fields\":{\"f\":\"string\"}}");
+ check("{\"type\":\"record\",\"fields\":["
+ +"{\"name\":\"f\", \"type\":\"string\"}]}");
}
public void testRecursive() throws Exception {
- check("{\"type\": \"record\", \"name\": \"Node\", \"fields\": {"
- +"\"label\": \"string\","
- +"\"children\": {\"type\": \"array\", \"items\": \"Node\" }}}",
+ check("{\"type\": \"record\", \"name\": \"Node\", \"fields\": ["
+ +"{\"name\":\"label\", \"type\":\"string\"},"
+ +"{\"name\":\"children\", \"type\":"
+ +"{\"type\": \"array\", \"items\": \"Node\" }}]}",
false);
}
public void testLisp() throws Exception {
- check("{\"type\": \"record\", \"name\": \"Lisp\", \"fields\": {"
- +"\"value\": [\"null\", \"string\","
- +"{\"type\": \"record\", \"name\": \"Cons\", \"fields\": {"
- +"\"car\": \"Lisp\", \"cdr\": \"Lisp\"}}]}}",
+ check("{\"type\": \"record\", \"name\": \"Lisp\", \"fields\": ["
+ +"{\"name\":\"value\", \"type\":[\"null\", \"string\","
+ +"{\"type\": \"record\", \"name\": \"Cons\", \"fields\": ["
+ +"{\"name\":\"car\", \"type\":\"Lisp\"},"
+ +"{\"name\":\"cdr\", \"type\":\"Lisp\"}]}]}]}",
false);
}
Modified: hadoop/avro/trunk/src/test/py/testio.py
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/py/testio.py?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/py/testio.py (original)
+++ hadoop/avro/trunk/src/test/py/testio.py Mon Apr 27 20:13:31 2009
@@ -127,24 +127,27 @@
"\"string\"}")
def testRecord(self):
- self.check("{\"type\":\"record\",\"fields\":{\"f\":\"string\"," +
- "\"fb\":\"bytes\"}}")
+ self.check("{\"type\":\"record\",\"fields\":[{\"name\":\"f\", \"type\":" +
+ "\"string\"}, {\"name\":\"fb\", \"type\":\"bytes\"}]}")
def testRecursive(self):
- self.check("{\"type\": \"record\", \"name\": \"Node\", \"fields\": {"
- +"\"label\": \"string\","
- +"\"children\": {\"type\": \"array\", \"items\": \"Node\" }}}")
+ self.check("{\"type\": \"record\", \"name\": \"Node\", \"fields\": ["
+ +"{\"name\":\"label\", \"type\":\"string\"},"
+ +"{\"name\":\"children\", \"type\":"
+ +"{\"type\": \"array\", \"items\": \"Node\" }}]}")
def testLisp(self):
- self.check("{\"type\": \"record\", \"name\": \"Lisp\", \"fields\": {"
- +"\"value\": [\"null\", \"string\","
- +"{\"type\": \"record\", \"name\": \"Cons\", \"fields\": {"
- +"\"car\": \"Lisp\", \"cdr\": \"Lisp\"}}]}}")
+ self.check("{\"type\": \"record\", \"name\": \"Lisp\", \"fields\": ["
+ +"{\"name\":\"value\", \"type\":[\"null\", \"string\","
+ +"{\"type\": \"record\", \"name\": \"Cons\", \"fields\": ["
+ +"{\"name\":\"car\", \"type\":\"Lisp\"},"
+ +"{\"name\":\"cdr\", \"type\":\"Lisp\"}]}]}]}")
def testUnion(self):
self.check("[\"string\", \"null\", \"long\", "
- +"{\"type\": \"record\", \"name\": \"Cons\", \"fields\": {"
- +"\"car\": \"string\", \"cdr\": \"string\"}}]")
+ +"{\"type\": \"record\", \"name\": \"Cons\", \"fields\": ["
+ +"{\"name\":\"car\", \"type\":\"string\"},"
+ +"{\"name\":\"cdr\", \"type\":\"string\"}]}]")
def check(self, string):
schm = schema.parse(string)
Modified: hadoop/avro/trunk/src/test/py/testioreflect.py
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/py/testioreflect.py?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/py/testioreflect.py (original)
+++ hadoop/avro/trunk/src/test/py/testioreflect.py Mon Apr 27 20:13:31 2009
@@ -52,8 +52,8 @@
# the schema MUST have name
def testRecord(self):
self.check(
- "{\"type\":\"record\",\"name\":\"TestRec\",\"fields\":{\"f\":\"string\"," +
- "\"fb\":\"bytes\"}}")
+ "{\"type\":\"record\",\"name\":\"TestRec\",\"fields\":[{\"name\":\"f\"," +
+ "\"type\":\"string\"}, {\"name\":\"fb\", \"type\":\"bytes\"}]}")
def __init__(self, methodName):
testio.TestSchema.__init__(self, methodName, dyvalidator, ReflectDWriter,
Modified: hadoop/avro/trunk/src/test/schemata/fs-data.js
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/schemata/fs-data.js?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/schemata/fs-data.js (original)
+++ hadoop/avro/trunk/src/test/schemata/fs-data.js Mon Apr 27 20:13:31 2009
@@ -7,7 +7,11 @@
"messages": {
"read": {
- "request": {"block": "string", "start": "long", "length": "long" },
+ "request": [
+ {"name": "block", "type": "string"},
+ {"name": "start", "type": "long"},
+ {"name": "length", "type": "long"}
+ ],
"response": "bytes"
}
Modified: hadoop/avro/trunk/src/test/schemata/interop.js
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/schemata/interop.js?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/schemata/interop.js (original)
+++ hadoop/avro/trunk/src/test/schemata/interop.js Mon Apr 27 20:13:31 2009
@@ -1,19 +1,24 @@
{"type": "record", "name":"Interop", "namespace": "org.apache.avro",
- "fields": {
- "intField": "int",
- "longField": "long",
- "stringField":"string",
- "boolField":"boolean",
- "floatField":"float",
- "doubleField":"double",
- "bytesField":"bytes",
- "nullField":"null",
- "arrayField":{"type":"array", "items": "double"},
- "mapField":{"type":"map", "keys": "long", "values":
- {"type": "record", "name": "Foo", "fields":{"label": "string"}}},
- "unionField": ["boolean", "double", {"type":"array","items": "bytes"}],
- "recordField":{"type": "record", "name": "Node",
- "fields":{"label": "string","children": {"type":
- "array", "items": "Node" }}}
- }
+ "fields": [
+ {"name": "intField", "type": "int"},
+ {"name": "longField", "type": "long"},
+ {"name": "stringField", "type": "string"},
+ {"name": "boolField", "type": "boolean"},
+ {"name": "floatField", "type": "float"},
+ {"name": "doubleField", "type": "double"},
+ {"name": "bytesField", "type": "bytes"},
+ {"name": "nullField", "type": "null"},
+ {"name": "arrayField", "type": {"type": "array", "items": "double"}},
+ {"name": "mapField", "type":
+ {"type": "map", "keys": "long", "values":
+ {"type": "record", "name": "Foo",
+ "fields": [{"name": "label", "type": "string"}]}}},
+ {"name": "unionField", "type":
+ ["boolean", "double", {"type": "array", "items": "bytes"}]},
+ {"name": "recordField", "type":
+ {"type": "record", "name": "Node",
+ "fields": [
+ {"name": "label", "type": "string"},
+ {"name": "children", "type": {"type": "array", "items": "Node"}}]}}
+ ]
}
Modified: hadoop/avro/trunk/src/test/schemata/test.js
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/src/test/schemata/test.js?rev=769139&r1=769138&r2=769139&view=diff
==============================================================================
--- hadoop/avro/trunk/src/test/schemata/test.js (original)
+++ hadoop/avro/trunk/src/test/schemata/test.js Mon Apr 27 20:13:31 2009
@@ -3,34 +3,37 @@
"types": [
{"name": "TestRecord", "type": "record",
- "fields": {
- "name": "string"
- }
+ "fields": [
+ {"name": "name", "type": "string"}
+ ]
},
-
- {"name": "TestError", "type": "error", "fields": {"message": "string"}}
+
+ {"name": "TestError", "type": "error", "fields": [
+ {"name": "message", "type": "string"}
+ ]
+ }
],
"messages": {
"hello": {
- "request": {"greeting": "string" },
+ "request": [{"name": "greeting", "type": "string"}],
"response": "string"
},
"echo": {
- "request": {"record": "TestRecord" },
+ "request": [{"name": "record", "type": "TestRecord"}],
"response": "TestRecord"
},
"echoBytes": {
- "request": {"data": "bytes" },
+ "request": [{"name": "data", "type": "bytes"}],
"response": "bytes"
},
"error": {
- "request": {},
+ "request": [],
"response": "null",
"errors": ["TestError"]
}