#28460·presto

OpenLineage connector fails with NoClassDefFoundError for Jackson Blackbird class

Author: Dilli-Babu-GodariCreated Sep 9, 2026Updated Sep 9, 2026
Labelsbug

Description

While testing the OpenLineage changes locally, I first ran the existing master branch to verify the baseline behavior.

Even without any changes from my branch, I encountered the following error when running Presto locally on the master node. The failure occurs when the OpenLineage event listener processes a completed query.

Error

java.lang.InternalError: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/blackbird/ser/ToBooleanFunction
	at java.base/java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:413)
	at java.base/java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:315)
	at java.base/java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:228)
	at java.base/java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:341)
	at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.createProperty(BBSerializerModifier.java:133)
	at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.lambda$findProperties$0(BBSerializerModifier.java:67)
	at com.fasterxml.jackson.module.blackbird.util.Unchecked.lambda$runnable$0(Unchecked.java:31)
	at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.findProperties(BBSerializerModifier.java:68)
	at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.changeProperties(BBSerializerModifier.java:52)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanOrAddOnSerializer(BeanSerializerFactory.java:415)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanOrAddOnSerializer(BeanSerializerFactory.java:295)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:240)
	at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:174)
	at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1535)
	at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1483)
	at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:585)
	at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:868)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:330)
	at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4630)
	at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4583)
	at com.facebook.presto.plugin.openlineage.OpenLineageEventListener.getPrestoQueryStatisticsFacet(OpenLineageEventListener.java:201)
	at com.facebook.presto.plugin.openlineage.OpenLineageEventListener.getCompletedEvent(OpenLineageEventListener.java:243)
	at com.facebook.presto.plugin.openlineage.OpenLineageEventListener.queryCompleted(OpenLineageEventListener.java:109)
	at com.facebook.presto.eventlistener.EventListenerManager.lambda$queryCompleted$0(EventListenerManager.java:142)
	at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:422)
	at com.facebook.presto.eventlistener.EventListenerManager.queryCompleted(EventListenerManager.java:142)
	at com.facebook.presto.event.QueryMonitor.queryCompletedEvent(QueryMonitor.java:300)
	at com.facebook.presto.execution.SqlQueryManager.lambda$createQuery$5(SqlQueryManager.java:314)
	at com.facebook.presto.execution.QueryStateMachine.lambda$addQueryInfoStateChangeListener$20(QueryStateMachine.java:1074)
	at com.facebook.presto.execution.StateMachine.fireStateChangedListener(StateMachine.java:228)
	at com.facebook.presto.execution.StateMachine.lambda$fireStateChanged$0(StateMachine.java:220)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/blackbird/ser/ToBooleanFunction
	at java.base/java.lang.ClassLoader.defineClass0(Native Method)
	at java.base/java.lang.System$2.defineClass(System.java:2324)
	at java.base/java.lang.invoke.MethodHandles$Lookup$ClassDefiner.defineClass(MethodHandles.java:2439)
	at java.base/java.lang.invoke.MethodHandles$Lookup$ClassDefiner.defineClassAsLookup(MethodHandles.java:2420)
	at java.base/java.lang.invoke.MethodHandles$Lookup.defineHiddenClass(MethodHandles.java:2127)
	at java.base/java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:407)
	... 33 more
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.module.blackbird.ser.ToBooleanFunction
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	... 39 more

Observed behavior

The query itself reaches completion, but the OpenLineage event listener encounters the exception while processing the completed query.

The relevant call path is:

OpenLineageEventListener.queryCompleted()
  -> OpenLineageEventListener.getCompletedEvent()
  -> OpenLineageEventListener.getPrestoQueryStatisticsFacet()
  -> ObjectMapper.convertValue()
  -> Jackson Blackbird serialization
  -> NoClassDefFoundError: ToBooleanFunction

I have registered the event-listener using this,

event-listener.name=openlineage-event-listener
openlineage-event-listener.transport.type=CONSOLE
openlineage-event-listener.presto.uri=http://localhost:8080

Expected behavior

The OpenLineage event listener should successfully process the completed query without throwing a NoClassDefFoundError.

cc @imjalpreet