Hi,

Is the code that is throwing the exception trying to use the Tread Context 
ClassLoader? If yes, that might explain it because a Thread that you create 
will not have the correct ClassLoader set.

Best,
Aljoscha

> On 8. Dec 2017, at 12:24, Fabian Hueske <fhue...@gmail.com> wrote:
> 
> Hi,
> 
> thanks a lot for investigating this problems and the results you shared.
> This looks like a bug to me. I'm CCing Aljoscha who knows the internals of 
> the DataStream API very well.
> 
> Which Flink version are you using?
> 
> Would you mind creating a JIRA issue [1] with all the info you provided so 
> far?
> 
> Thank you,
> Fabian
> 
> [1] https://issues.apache.org/jira/projects/FLINK/summary 
> <https://issues.apache.org/jira/projects/FLINK/summary>
> 
> 2017-12-08 11:27 GMT+01:00 romain.jln <romain....@gmail.com 
> <mailto:romain....@gmail.com>>:
> Hi,
> 
> The stack trace is usually something like :
> 
> Exception in thread "Thread-49" java.lang.NoClassDefFoundError:
> com/microsoft/azure/eventhubs/amqp/AmqpErrorCode
>         at
> com.microsoft.azure.eventhubs.ExceptionUtil.toException(ExceptionUtil.java:30)
>         at
> com.microsoft.azure.eventhubs.MessageSender.onClose(MessageSender.java:376)
>         at
> com.microsoft.azure.eventhubs.amqp.BaseLinkHandler.processOnClose(BaseLinkHandler.java:76)
>         at
> com.microsoft.azure.eventhubs.amqp.BaseLinkHandler.onLinkRemoteClose(BaseLinkHandler.java:47)
>         at 
> org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:176)
>         at
> org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108)
>         at
> org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:309)
>         at
> org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:276)
>         at
> com.microsoft.azure.eventhubs.MessagingFactory$RunReactor.run(MessagingFactory.java:404)
>         at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.ClassNotFoundException:
> com.microsoft.azure.eventhubs.amqp.AmqpErrorCode
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>         ... 10 more
> 
> (those messages are appearing randomly in the stdout of the task managers)
> 
> For a little bit of context about to this stack trace, it is related to a
> custom implementation of a Flink Source that connects to an Azure Eventhub.
> When starting an Eventhub client, the Eventhub library creates a Reactor
> thread for managing the AMQP messages (proton library). This thread is
> created in the Open function of the custom source.
> 
> I checked the fat jar that I am uploading to Flink using the web API and the
> given class is correctly located at the given path.
> 
> It is not always the same class that is missing. It can also be
> com.microsoft.azure.eventhubs.ExceptionUtil,
> com.microsoft.azure.eventhubs.MessageReceiver$10, or other classes of the
> same package. All of those classes are correctly located in the fat jar.
> 
> I kept on investigating the issue and here are the first results I got :
> 
> Using Thread.currentThread().getContextClassLoader(), I can see that, when
> manually cancelling the job (via the web API), the class of the ClassLoader
> is sun.misc.Launcher$AppClassLoader instead of FlinkUserCodeClassLoader
> (which can explain some of the ClassNotFoundException)
> 
> However, when Flink automatically cancels the source (because of an error
> during the execution of the job), it correctly uses a
> FlinkUserCodeClassLoader as expected.
> 
> When checking the ClassLoader of the thread during the call to the Open
> method of the source, it also correctly uses a FlinkUserCodeClassLoader.
> 
> But I still keep on getting some ClassNotFoundException from time to time
> for no apparent reason to me.
> 
> 
> 
> --
> Sent from: 
> http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/ 
> <http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/>
> 

Reply via email to