ngjaying opened a new issue #2900: NoClassDefFoundError error happens when running custom source connector on cluster URL: https://github.com/apache/pulsar/issues/2900 Run a custom source connector with dependency to eclipse paho is successful on localrun mode, but got java.lang.NoClassDefFoundError on cluster mode. #### Expected behavior Run the custom source connector successfully on cluster mode. #### Actual behavior Get below error in the function's log ``` 03:02:49,717 INFO [public/default/emxq_source_rule1] [instance-0] JavaInstanceRunnable - Starting Java Instance emxq_source_rule1 03:02:49,726 INFO [public/default/emxq_source_rule1] [instance-0] JavaInstanceRunnable - Loading JAR files for function InstanceConfig(instanceId=0, functionId=d6925a98-b890-44ed-90df-29f9e0f7ea4c, functionVersion=0d3e23d5-5172-4003-a068-30d4eca6a72d, functionDetails=tenant: "public" namespace: "default" name: "emxq_source_rule1" className: "org.apache.pulsar.functions.api.utils.IdentityFunction" autoAck: true source { className: "com.emqx.pulsar.io.EMQXSource" configs: "{\"inputTopics\":\"sample/abc\"}" typeClassName: "[B" } sink { topic: "rule_topic_rule1" typeClassName: "[B" } , maxBufferedTuples=1024, port=7394) from archive /tmp/pulsar_functions/public/default/emxq_source_rule1/0/utils.jar 03:02:49,742 INFO [public/default/emxq_source_rule1] [instance-0] JavaInstanceRunnable - Initialize function class loader for function emxq_source_rule1 at function cache manager 03:02:50,202 INFO [public/default/emxq_source_rule1] [instance-0] JavaInstanceRunnable - Starting state table for function emxq_source_rule1 03:02:50,783 ERROR [public/default/emxq_source_rule1] [instance-0] JavaInstanceRunnable - [public-emxq_source_rule1] Uncaught exception in Java Instance java.lang.NoClassDefFoundError: org/eclipse/paho/client/mqttv3/MqttCallback at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_181] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_181] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_181] at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) ~[?:1.8.0_181] at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[?:1.8.0_181] at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[?:1.8.0_181] at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[?:1.8.0_181] at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_181] at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[?:1.8.0_181] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_181] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_181] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_181] at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_181] at org.apache.pulsar.functions.utils.Reflections.createInstance(Reflections.java:108) ~[java-instance.jar:2.1.1-incubating] at org.apache.pulsar.functions.instance.JavaInstanceRunnable.setupInput(JavaInstanceRunnable.java:534) ~[java-instance.jar:2.1.1-incubating] at org.apache.pulsar.functions.instance.JavaInstanceRunnable.setupJavaInstance(JavaInstanceRunnable.java:161) ~[java-instance.jar:2.1.1-incubating] at org.apache.pulsar.functions.instance.JavaInstanceRunnable.run(JavaInstanceRunnable.java:188) [java-instance.jar:2.1.1-incubating] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181] Caused by: java.lang.ClassNotFoundException: org.eclipse.paho.client.mqttv3.MqttCallback at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_181] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_181] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_181] ... 18 more 03:02:50,788 INFO [public/default/emxq_source_rule1] [instance-0] JavaInstanceRunnable - Closing instance ``` #### Steps to reproduce [emqx-source-0.0.2-SNAPSHOT.nar.zip](https://github.com/apache/pulsar/files/2537123/emqx-source-0.0.2-SNAPSHOT.nar.zip) 1. Start pulsar standalone 2. Unzip the attached source connector. Submit it via Admin CLI, e.g.: sudo ./pulsar-admin source create --className com.emqx.pulsar.io.EMQXSource --archive /pathToNar/emqx-source-0.0.2-SNAPSHOT.jar --tenant public --namespace default --name mqtt_source --destinationTopicName mqtt_message --sourceConfig '{"inputTopics":"sample/abc"} Console shows "Created successfully" 3. Open the log for public/default/mqtt_source, NoClassDefFoundError can be found. Notice that, the source connector can run in localrun mode successfully. #### System configuration **Pulsar version**: 2.1.1-incubating
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
