avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eric Evans (JIRA)" <j...@apache.org>
Subject [jira] Updated: (AVRO-503) ArrayIndexOutOfBoundsException with nested maps
Date Mon, 05 Apr 2010 17:17:27 GMT

     [ https://issues.apache.org/jira/browse/AVRO-503?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Eric Evans updated AVRO-503:
----------------------------

    Attachment: sample_bugfix.patch

Ok, the attached patch (sample_bugfix.patch) fixes the HTTPTransceiver initialization for
the Python example, and uses the correct instance when constructing a SpecificResponder in
the Java example.

With this applied the Java test-case (src/BatchMutate.java) now works against the Java test
server (CassandraServer), but it still fails against the full implementation in Cassandra
(same protocol schema). Here is the exception thrown on the RPC server (not sure why I didn't
include that before):

{noformat}
org.apache.avro.AvroRuntimeException: Not in union ["string",{"type":"error","name":"InvalidRequestException","namespace":"org.apache.cassandra.avro","fields":[{"name":"why","type":["string","null"]}]},{"type":"error","name":"UnavailableException","fields":[{"name":"why","type":["string","null"]}]},{"type":"error","name":"TimedOutException","fields":[{"name":"why","type":["string","null"]}]}]:
java.lang.NullPointerException
	at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:340)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:55)
	at org.apache.avro.specific.SpecificResponder.writeError(SpecificResponder.java:81)
	at org.apache.avro.ipc.Responder.respond(Responder.java:137)
	at org.apache.avro.ipc.ResponderServlet.doPost(ResponderServlet.java:48)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:930)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
	at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
{noformat}

Jeff, since you've been known to get your Cassandra on, I went ahead and committed the code
I had to trunk/ there, in case that helps. :)


> ArrayIndexOutOfBoundsException with nested maps
> -----------------------------------------------
>
>                 Key: AVRO-503
>                 URL: https://issues.apache.org/jira/browse/AVRO-503
>             Project: Avro
>          Issue Type: Bug
>          Components: java, python
>    Affects Versions: 1.3.2
>            Reporter: Eric Evans
>         Attachments: cass.tar.gz, sample_bugfix.patch
>
>
> I'm attempting to add an avro equivalent to Cassandra's batch_mutate() method (thrift
def here: https://svn.apache.org/repos/asf/cassandra/trunk/interface/cassandra.thrift). This
is the first time I've attempted to nest maps within maps, and I'm assuming it's related since
that seems like the only difference to the working examples I have.
> Attached is a tarball that includes the protocol I'm using along with java and python
examples (src/BatchMutate.java and py/batch_mutate.py) that reproduce the exceptions I'm seeing.
> Running the java example produces:
> {noformat} 
> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
> 	at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:364)
> 	at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:191)
> 	at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
> 	at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:168)
> 	at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:81)
> 	at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:105)
> 	at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:77)
> 	at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:70)
> 	at org.apache.avro.ipc.Requestor.readHandshake(Requestor.java:181)
> 	at org.apache.avro.ipc.Requestor.request(Requestor.java:116)
> 	at org.apache.avro.specific.SpecificRequestor.invoke(SpecificRequestor.java:52)
> 	at $Proxy0.batch_mutate(Unknown Source)
> 	at BatchMutate.main(BatchMutate.java:43)
> {noformat} 
> Running the python examples produces:
> {noformat} 
> Traceback (most recent call last):
>   File "/usr/lib/pymodules/python2.5/nose/case.py", line 183, in runTest
>     self.test(*self.arg)
>   File "/home/eevans/dev/src/git/cassandra/test/system/test_avro_server.py", line 161,
in test_batch_mutate
>     self.client.request('batch_mutate', params)
>   File "/usr/local/lib/python2.5/site-packages/avro/ipc.py", line 146, in request
>     return self.request(message_name, request_datum)
>   File "/usr/local/lib/python2.5/site-packages/avro/ipc.py", line 142, in request
>     call_response_exists = self.read_handshake_response(buffer_decoder)
>   File "/usr/local/lib/python2.5/site-packages/avro/ipc.py", line 188, in read_handshake_response
>     handshake_response = HANDSHAKE_REQUESTOR_READER.read(decoder)
>   File "/usr/local/lib/python2.5/site-packages/avro/io.py", line 411, in read
>     return self.read_data(self.writers_schema, self.readers_schema, decoder)
>   File "/usr/local/lib/python2.5/site-packages/avro/io.py", line 455, in read_data
>     return self.read_record(writers_schema, readers_schema, decoder)
>   File "/usr/local/lib/python2.5/site-packages/avro/io.py", line 643, in read_record
>     field_val = self.read_data(field.type, readers_field.type, decoder)
>   File "/usr/local/lib/python2.5/site-packages/avro/io.py", line 453, in read_data
>     return self.read_union(writers_schema, readers_schema, decoder)
>   File "/usr/local/lib/python2.5/site-packages/avro/io.py", line 608, in read_union
>     selected_writers_schema = writers_schema.schemas[index_of_schema]
> IndexError: list index out of range
> {noformat} 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message