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



Reply via email to