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()