re-compile your java server with 0.9.0. This is a new abstract method on the java library that should be present on the generated service code https://issues.apache.org/jira/browse/THRIFT-1447
regards, Andras On 21 Oct 2012, at 12:10, Matt Chambers <[email protected]> wrote: > Greetings, > > Figured I'd give 0.9.0 a try, getting an exception on the java server, using > a python client. This all runs fine on 0.8.0. The server does actually get > the data. It puts it into a LinkedBlockingQueue, and then returns. Thats > all that happens, so I'm not sure where this is coming from. > > java.lang.AbstractMethodError: org.apache.thrift.ProcessFunction.isOneway()Z > at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:51) > at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) > at > org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:478) > at org.apache.thrift.server.Invocation.run(Invocation.java:18) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:722) > > On the client side I'm seeing this. > > Traceback (most recent call last): > File "./rndaemon.py", line 8, in <module> > import plow.rndaemon.server as server > File "../../client/python/plow/rndaemon/server.py", line 4, in <module> > import core > File "../../client/python/plow/rndaemon/core.py", line 192, in <module> > ProcessMgr = ProcessManager() > File "../../client/python/plow/rndaemon/core.py", line 74, in __init__ > self.sendPing(True) > File "../../client/python/plow/rndaemon/core.py", line 95, in sendPing > Profiler.sendPing(tasks, isReboot) > File "../../client/python/plow/rndaemon/profile/base.py", line 52, in > sendPing > service.sendPing(ping) > File "../../client/python/plow/rndaemon/rpc/RndServiceApi.py", line 49, in > sendPing > self.recv_sendPing() > File "../../client/python/plow/rndaemon/rpc/RndServiceApi.py", line 60, in > recv_sendPing > (fname, mtype, rseqid) = self._iprot.readMessageBegin() > File "/Library/Python/2.7/site-packages/thrift/protocol/TBinaryProtocol.py", > line 126, in readMessageBegin > sz = self.readI32() > File "/Library/Python/2.7/site-packages/thrift/protocol/TBinaryProtocol.py", > line 203, in readI32 > buff = self.trans.readAll(4) > File "/Library/Python/2.7/site-packages/thrift/transport/TTransport.py", > line 58, in readAll > chunk = self.read(sz-have) > File "/Library/Python/2.7/site-packages/thrift/transport/TTransport.py", > line 272, in read > self.readFrame() > File "/Library/Python/2.7/site-packages/thrift/transport/TTransport.py", > line 276, in readFrame > buff = self.__trans.readAll(4) > File "/Library/Python/2.7/site-packages/thrift/transport/TTransport.py", > line 58, in readAll > chunk = self.read(sz-have) > File "/Library/Python/2.7/site-packages/thrift/transport/TSocket.py", line > 108, in read > raise TTransportException(type=TTransportException.END_OF_FILE, > message='TSocket read 0 bytes') > thrift.transport.TTransport.TTransportException: TSocket read 0 bytes > > Parts of my thrift file. > > struct Hardware { > 1:i16 physicalCpus, > 2:i16 logicalCpus > 3:i32 totalRamMb > 4:i32 freeRamMb, > 5:i32 totalSwapMb, > 6:i32 freeSwapMb, > 7:string cpuModel, > 8:string platform > } > > struct Ping { > 1:string hostname, > 2:string ipAddr, > 3:bool isReboot, > 4:i64 bootTime, > 5:Hardware hw, > 6:list<RunningTask> tasks; > } > > service RndServiceApi { > void sendPing(1:Ping ping) throws (1:RndException e), > } > > Java server code: > > transport = new TNonblockingServerSocket(port); > server = new TThreadedSelectorServer( > new TThreadedSelectorServer.Args(transport) > .processor(processor) > .workerThreads(8) > .selectorThreads(4) > .protocolFactory(new TBinaryProtocol.Factory(true, true)) > .transportFactory(new TFramedTransport.Factory())); > > Python client code: > > host, port = conf.PLOW_HOSTS[0].split(":") > socket = TSocket.TSocket(host, int(port)) > transport = TTransport.TFramedTransport(socket) > protocol = TBinaryProtocol.TBinaryProtocol(transport) > service = RndServiceApi.Client(protocol) > transport.open() > > >
