You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Nico Kruber (JIRA)" <ji...@apache.org> on 2018/09/27 15:56:00 UTC

[jira] [Updated] (FLINK-10419) ClassNotFoundException while deserializing user exceptions from checkpointing

     [ https://issues.apache.org/jira/browse/FLINK-10419?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Nico Kruber updated FLINK-10419:
--------------------------------
    Description: 
It seems that somewhere in the operator's failure handling, we hand a user-code exception to the checkpoint coordinator via Java serialization but it will then fail during the de-serialization because the class is not available. This will result in the following error shadowing the real one:
{code}
java.lang.ClassNotFoundException: org.apache.flink.streaming.connectors.kafka.FlinkKafka011Exception
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.flink.util.InstantiationUtil.resolveClass(InstantiationUtil.java:76)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1859)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1745)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2033)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2278)
        at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:557)
        at java.lang.Throwable.readObject(Throwable.java:914)
        at sun.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
        at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.readObject(RemoteRpcInvocation.java:222)
        at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
        at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:502)
        at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:489)
        at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:477)
        at org.apache.flink.util.SerializedValue.deserializeValue(SerializedValue.java:58)
        at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.deserializeMethodInvocation(RemoteRpcInvocation.java:118)
        at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.getMethodName(RemoteRpcInvocation.java:59)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:214)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:162)
        at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:70)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.onReceive(AkkaRpcActor.java:142)
        at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.onReceive(FencedAkkaRpcActor.java:40)
        at akka.actor.UntypedActor3728anonfun.applyOrElse(UntypedActor.scala:165)
        at akka.actor.Actor.aroundReceive(Actor.scala:502)
        at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
        at akka.actor.ActorCell.invoke(ActorCell.scala:495)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
        at akka.dispatch.Mailbox.run(Mailbox.scala:224)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
{code}

  was:
If, during asynchronous checkpointing, a user-code exception is thrown, for example like this: {{TwoPhaseCommitSinkFunction#snapshotState}} -> {{FlinkKafkaProducer011#preCommit}}
-> {{FlinkKafka011Exception}}, it will be sent back to the checkpoint coordinator via Java serialization but will then fail during the de-serialization because the class is not available. This will result in the following error shadowing the real one:
{code}
java.lang.ClassNotFoundException: org.apache.flink.streaming.connectors.kafka.FlinkKafka011Exception
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.flink.util.InstantiationUtil.resolveClass(InstantiationUtil.java:76)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1859)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1745)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2033)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2278)
        at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:557)
        at java.lang.Throwable.readObject(Throwable.java:914)
        at sun.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
        at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.readObject(RemoteRpcInvocation.java:222)
        at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
        at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:502)
        at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:489)
        at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:477)
        at org.apache.flink.util.SerializedValue.deserializeValue(SerializedValue.java:58)
        at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.deserializeMethodInvocation(RemoteRpcInvocation.java:118)
        at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.getMethodName(RemoteRpcInvocation.java:59)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:214)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:162)
        at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:70)
        at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.onReceive(AkkaRpcActor.java:142)
        at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.onReceive(FencedAkkaRpcActor.java:40)
        at akka.actor.UntypedActor3728anonfun.applyOrElse(UntypedActor.scala:165)
        at akka.actor.Actor.aroundReceive(Actor.scala:502)
        at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
        at akka.actor.ActorCell.invoke(ActorCell.scala:495)
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
        at akka.dispatch.Mailbox.run(Mailbox.scala:224)
        at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
{code}

To fix this, {{AkkaRpcActor#handleCallAsync}}, {{AkkaRpcActor#handleRunAsync}} and {{AkkaRpcActor#handleRpcInvocation}} should wrap user exceptions in a {{SerializedThrowable}} and only then send it back.


> ClassNotFoundException while deserializing user exceptions from checkpointing
> -----------------------------------------------------------------------------
>
>                 Key: FLINK-10419
>                 URL: https://issues.apache.org/jira/browse/FLINK-10419
>             Project: Flink
>          Issue Type: Bug
>          Components: Distributed Coordination, State Backends, Checkpointing
>    Affects Versions: 1.5.0, 1.5.1, 1.5.2, 1.5.3, 1.6.0, 1.6.1, 1.7.0, 1.5.4
>            Reporter: Nico Kruber
>            Assignee: Nico Kruber
>            Priority: Major
>
> It seems that somewhere in the operator's failure handling, we hand a user-code exception to the checkpoint coordinator via Java serialization but it will then fail during the de-serialization because the class is not available. This will result in the following error shadowing the real one:
> {code}
> java.lang.ClassNotFoundException: org.apache.flink.streaming.connectors.kafka.FlinkKafka011Exception
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>         at sun.misc.Launcher.loadClass(Launcher.java:338)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:348)
>         at org.apache.flink.util.InstantiationUtil.resolveClass(InstantiationUtil.java:76)
>         at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1859)
>         at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1745)
>         at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2033)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
>         at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2278)
>         at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:557)
>         at java.lang.Throwable.readObject(Throwable.java:914)
>         at sun.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
>         at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169)
>         at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
>         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
>         at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.readObject(RemoteRpcInvocation.java:222)
>         at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1158)
>         at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169)
>         at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
>         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
>         at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:502)
>         at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:489)
>         at org.apache.flink.util.InstantiationUtil.deserializeObject(InstantiationUtil.java:477)
>         at org.apache.flink.util.SerializedValue.deserializeValue(SerializedValue.java:58)
>         at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.deserializeMethodInvocation(RemoteRpcInvocation.java:118)
>         at org.apache.flink.runtime.rpc.messages.RemoteRpcInvocation.getMethodName(RemoteRpcInvocation.java:59)
>         at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcInvocation(AkkaRpcActor.java:214)
>         at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.handleRpcMessage(AkkaRpcActor.java:162)
>         at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.handleRpcMessage(FencedAkkaRpcActor.java:70)
>         at org.apache.flink.runtime.rpc.akka.AkkaRpcActor.onReceive(AkkaRpcActor.java:142)
>         at org.apache.flink.runtime.rpc.akka.FencedAkkaRpcActor.onReceive(FencedAkkaRpcActor.java:40)
>         at akka.actor.UntypedActor3728anonfun.applyOrElse(UntypedActor.scala:165)
>         at akka.actor.Actor.aroundReceive(Actor.scala:502)
>         at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
>         at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
>         at akka.actor.ActorCell.invoke(ActorCell.scala:495)
>         at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)
>         at akka.dispatch.Mailbox.run(Mailbox.scala:224)
>         at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
>         at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
>         at scala.concurrent.forkjoin.ForkJoinPool.runTask(ForkJoinPool.java:1339)
>         at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
>         at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)