You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Chris Cranford (Jira)" <ji...@apache.org> on 2021/04/20 07:03:00 UTC

[jira] [Updated] (KAFKA-12694) Specifying a struct-based defaultValue on a SchemaBuilder causes a DataException

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

Chris Cranford updated KAFKA-12694:
-----------------------------------
    Description: 
When making a call to {{SchemaBuilder#defaultValue(Object)}} a {{DataException}} will be thrown if the value if of type {{STRUCT}} due to schema mismatch.  This is because the method passes a reference of {{this}}, implying a {{SchemaBuilder}} to the {{ConnectSchema#validate}} method which later does an equality check which expects the passed schema to be an actual {{ConnectSchema}} rather than a {{SchemaBuilder}}.

{code}
Caused by: org.apache.kafka.connect.errors.SchemaBuilderException: Invalid default value
	at org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:131)
	at io.debezium.relational.TableSchemaBuilder.addField(TableSchemaBuilder.java:374)
	at io.debezium.relational.TableSchemaBuilder.lambda$create$2(TableSchemaBuilder.java:119)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
	at io.debezium.relational.TableSchemaBuilder.create(TableSchemaBuilder.java:117)
	at io.debezium.relational.RelationalDatabaseSchema.buildAndRegisterSchema(RelationalDatabaseSchema.java:130)
	at io.debezium.connector.oracle.OracleDatabaseSchema.applySchemaChange(OracleDatabaseSchema.java:70)
	at io.debezium.pipeline.EventDispatcher$SchemaChangeEventReceiver.schemaChangeEvent(EventDispatcher.java:460)
	at io.debezium.relational.RelationalSnapshotChangeEventSource.lambda$createSchemaChangeEventsForTables$2(RelationalSnapshotChangeEventSource.java:273)
	... 10 more
Caused by: org.apache.kafka.connect.errors.DataException: Struct schemas do not match.
	at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:252)
	at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:213)
	at org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:129)
	... 26 more
{code}

  was:
When making a call to {{SchemaBuilder#defaultValue(Object)}} a {{DataException}} will be thrown if the value if of type {{STRUCT}} due to schema mismatch.  This is because the method passes a reference of {{this}}, implying a {{SchemaBuilder}} to the {{ConnectSchema#validate}} method which later does an equality check which expects the passed schema to be an actual {{ConnectSchema}} rather than a {{SchemaBuilder}}.

{code}
Caused by: org.apache.kafka.connect.errors.SchemaBuilderException: Invalid default valueCaused by: org.apache.kafka.connect.errors.SchemaBuilderException: Invalid default value at org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:131) at io.debezium.relational.TableSchemaBuilder.addField(TableSchemaBuilder.java:374) at io.debezium.relational.TableSchemaBuilder.lambda$create$2(TableSchemaBuilder.java:119) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) at io.debezium.relational.TableSchemaBuilder.create(TableSchemaBuilder.java:117) at io.debezium.relational.RelationalDatabaseSchema.buildAndRegisterSchema(RelationalDatabaseSchema.java:130) at io.debezium.connector.oracle.OracleDatabaseSchema.applySchemaChange(OracleDatabaseSchema.java:70) at io.debezium.pipeline.EventDispatcher$SchemaChangeEventReceiver.schemaChangeEvent(EventDispatcher.java:460) at io.debezium.relational.RelationalSnapshotChangeEventSource.lambda$createSchemaChangeEventsForTables$2(RelationalSnapshotChangeEventSource.java:273) ... 10 moreCaused by: org.apache.kafka.connect.errors.DataException: Struct schemas do not match. at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:252) at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:213) at org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:129) ... 26 more
{code}


> Specifying a struct-based defaultValue on a SchemaBuilder causes a DataException
> --------------------------------------------------------------------------------
>
>                 Key: KAFKA-12694
>                 URL: https://issues.apache.org/jira/browse/KAFKA-12694
>             Project: Kafka
>          Issue Type: Bug
>          Components: KafkaConnect
>    Affects Versions: 2.7.0
>            Reporter: Chris Cranford
>            Priority: Major
>
> When making a call to {{SchemaBuilder#defaultValue(Object)}} a {{DataException}} will be thrown if the value if of type {{STRUCT}} due to schema mismatch.  This is because the method passes a reference of {{this}}, implying a {{SchemaBuilder}} to the {{ConnectSchema#validate}} method which later does an equality check which expects the passed schema to be an actual {{ConnectSchema}} rather than a {{SchemaBuilder}}.
> {code}
> Caused by: org.apache.kafka.connect.errors.SchemaBuilderException: Invalid default value
> 	at org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:131)
> 	at io.debezium.relational.TableSchemaBuilder.addField(TableSchemaBuilder.java:374)
> 	at io.debezium.relational.TableSchemaBuilder.lambda$create$2(TableSchemaBuilder.java:119)
> 	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
> 	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
> 	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
> 	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
> 	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
> 	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
> 	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
> 	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> 	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
> 	at io.debezium.relational.TableSchemaBuilder.create(TableSchemaBuilder.java:117)
> 	at io.debezium.relational.RelationalDatabaseSchema.buildAndRegisterSchema(RelationalDatabaseSchema.java:130)
> 	at io.debezium.connector.oracle.OracleDatabaseSchema.applySchemaChange(OracleDatabaseSchema.java:70)
> 	at io.debezium.pipeline.EventDispatcher$SchemaChangeEventReceiver.schemaChangeEvent(EventDispatcher.java:460)
> 	at io.debezium.relational.RelationalSnapshotChangeEventSource.lambda$createSchemaChangeEventsForTables$2(RelationalSnapshotChangeEventSource.java:273)
> 	... 10 more
> Caused by: org.apache.kafka.connect.errors.DataException: Struct schemas do not match.
> 	at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:252)
> 	at org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:213)
> 	at org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:129)
> 	... 26 more
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)