You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flume.apache.org by "Tobias Heintz (JIRA)" <ji...@apache.org> on 2015/07/27 19:08:04 UTC

[jira] [Created] (FLUME-2748) ThriftLegacySource produces exception due to wrongly compiled thrift definitions

Tobias Heintz created FLUME-2748:
------------------------------------

             Summary: ThriftLegacySource produces exception due to wrongly compiled thrift definitions
                 Key: FLUME-2748
                 URL: https://issues.apache.org/jira/browse/FLUME-2748
             Project: Flume
          Issue Type: Bug
          Components: Sinks+Sources
    Affects Versions: v1.6.0
            Reporter: Tobias Heintz


We are in the process of upgrading our Flume installation from 0.9.2 to 1.6.0. Currently we are using the ThriftLegacySource to allow the Flume server to receive messages without having to update all components at the same time. For every received message, we are seeing this exception:
{code}
2015-07-24 17:15:28,892 (pool-3-thread-5) [ERROR - org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:215)] Error occurred during processing of message.

java.lang.NullPointerException
	at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:53)
	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
	at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:206)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
{code}

I've done some digging in the code and it appears that there is an error in the Java classes that were compiled from the legacy thrift definitions: the method [{{append}} is defined as {{oneway}}|https://github.com/apache/flume/blob/344e0accae5675fd3d14b8414531528607865aae/flume-ng-legacy-sources/flume-thrift-source/src/main/thrift/flumeCompatibility.thrift#L61], however in the compiled class, the method [{{isOneway()}} returns {{false}}|https://github.com/apache/flume/blob/344e0accae5675fd3d14b8414531528607865aae/flume-ng-legacy-sources/flume-thrift-source/src/main/java/com/cloudera/flume/handlers/thrift/ThriftFlumeEventServer.java#L223]. This then leads to the NullPointerException, when the [ProcessFunction tries to write the result|https://github.com/apache/thrift/blob/master/lib/java/src/org/apache/thrift/ProcessFunction.java#L53] back to the producer.

I'm not sure how this happened, maybe the very old version (0.7) of the thrift compiler is at fault here. The fix however would be to simply make the {{isOneway()}} method return {{true}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)