The server exception is:
WARN 09:49:56,644 user error
org.apache.cassandra.avro.KeyspaceNotDefinedException
at
org.apache.cassandra.avro.AvroValidation.validateKeyspace(AvroValidation.java:73)
at
org.apache.cassandra.avro.AvroValidation.validateColumnParent(AvroValidation.java:121)
at
org.apache.cassandra.avro.CassandraServer.multigetSliceInternal(CassandraServer.java:311)
at
org.apache.cassandra.avro.CassandraServer.multiget_slice(CassandraServer.java:379)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.avro.specific.SpecificResponder.respond(SpecificResponder.java:93)
at org.apache.avro.ipc.Responder.respond(Responder.java:136)
at org.apache.avro.ipc.Responder.respond(Responder.java:88)
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
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)
The ruby client says:
/usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:247:in
`match_schemas': undefined local variable or method `writers_scheam' for
Avro::IO::DatumReader:Class (NameError)
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:295:in
`read_data'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in
`find'
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:294:in
`each'
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:294:in
`find'
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:294:in
`read_data'
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:383:in
`read_union'
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:316:in
`read_data'
from /usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/io.rb:282:in
`read'
from
/usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/ipc.rb:227:in `read_error'
from
/usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/ipc.rb:216:in
`read_call_response'
from
/usr/local/lib/ruby/gems/1.8/gems/avro-1.4.0/lib/avro/ipc.rb:113:in `request'
from ./avro_test.rb:19
"writers_scheam" is a typo bug :-)
My client code is:
avro_protocol = File.open("config/cassandra.avpr", "r").read
json_avro = JSON.parse(avro_protocol)
protocol = Avro::Protocol.parse(avro_protocol)
transport = Avro::IPC::HTTPTransceiver.new("localhost", 9160)
requestor = Avro::IPC::Requestor.new(protocol, transport)
requestor.request("set_keyspace", "keyspace" => "TMAC")
requestor.request("multiget_slice", "keys"=>...
Looking in the server code, it seems java is expecting all avro communications
to be stateful (or some other way of matching threads to callers.)
Thanks,
--Gabor