Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-2582

"FileTransport error" exception is raised when trying to use Java's TFileTransport

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.9.1
    • Fix Version/s: 0.9.2
    • Component/s: Java - Library
    • Labels:
      None

      Description

      I am trying to wrap a Java class to be called from Python using thrift's TFileTransport. I tried using two protocols TJSON and TBinary but I keep getting an exception

          
      org.apache.thrift.transport.TTransportException: FileTransport error: bad event size
      	at org.apache.thrift.transport.TFileTransport.readEvent(TFileTransport.java:327)
      	at org.apache.thrift.transport.TFileTransport.read(TFileTransport.java:468)
      	at org.apache.thrift.transport.TFileTransport.readAll(TFileTransport.java:439)
      	at org.apache.thrift.protocol.TJSONProtocol$LookaheadReader.read(TJSONProtocol.java:263)
      	at org.apache.thrift.protocol.TJSONProtocol.readJSONSyntaxChar(TJSONProtocol.java:320)
      	at org.apache.thrift.protocol.TJSONProtocol.readJSONArrayStart(TJSONProtocol.java:784)
      	at org.apache.thrift.protocol.TJSONProtocol.readMessageBegin(TJSONProtocol.java:795)
      	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:27)
      	at org.apache.thrift.transport.TFileProcessor.processUntil(TFileProcessor.java:69)
      	at org.apache.thrift.transport.TFileProcessor.processChunk(TFileProcessor.java:102)
      	at org.apache.thrift.transport.TFileProcessor.processChunk(TFileProcessor.java:111)
      	at org.apache.thrift.transport.TFileProcessor.processChunk(TFileProcessor.java:118)
      	at com.netflix.suro.client.SendToPyServer.startThriftServer(SendToPyServer.java:51)
      	at com.netflix.suro.client.SendToPyServer.main(SendToPyServer.java:67)
      

      This is how my Python client looks:

          
       def __init__(self):
      		self.outFile=open("../../ThriftFile.in","a")
      		self.transport = TTransport.TFileObjectTransport(self.outFile)
      		self.protocol = TJSONProtocol.TJSONProtocol(self.transport)
      		self.client = sendPyInterface.Client(self.protocol)
      		self.transport.open()
      	
      	def send(self,routingKey, message):
      		self.client.send_send(routingKey, message)
      			  
      	def configClient(self,configurationDict):       
      		 self.client.send_ClientConfig(configurationDict)   
      		
      if __name__ == "__main__":
      	SuroClient=SuroPyClient()
      	configurationDict={"ClientConfig.LB_TYPE":"static","ClientConfig.LB_SERVER":"localhost:7101"}
      	SuroClient.configClient(configurationDict)
      	SuroClient.send("routingKey", "testMessage")
      

      and this is my server (or rather one version I have tried):

          
      public static void startThriftServer(SendPyInterface.Processor processor) {
      			try {
      				File input = new File("src/main/java/com/netflix/suro/client/ThriftFile.in");
      				if(!input.exists()){
      					input.createNewFile();
      				}
      
      				File output = new File("src/main/java/com/netflix/suro/client/ThriftFile.out");
      				if(!output.exists()){
      					output.createNewFile();
      				}
      				
      				TFileTransport inputFileTransport = new TFileTransport(input.getAbsolutePath(), true);
      				TFileTransport outputFileTransport = new TFileTransport(output.getAbsolutePath(), false);
      
      
      				inputFileTransport.open();
      				outputFileTransport.open();
      				
      				inputFileTransport.setTailPolicy(tailPolicy.WAIT_FOREVER);
      				TFileProcessor fProcessor = 
      						new TFileProcessor(processor, new TJSONProtocol.Factory(), inputFileTransport, outputFileTransport);
      				try {
      					fProcessor.processChunk();
      				} catch (TTransportException e) {
      					e.printStackTrace();
      				}
      					
      
      				System.out.println("File Thrift service started ...");
      			} catch (Exception e) {
      				e.printStackTrace();
      			}
      

      I have been able to read the JSON file using Python, but not Java. JensG suggested on StackOverFlow that this is a bug.

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              ahmedaley Ahmed Ali-Eldin
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: