Skip to content

Commit 38181be

Browse files
Madhavanclaude
andcommitted
fix(connector): normalize non-shaded Avro collections nested inside a shaded UDT
Next layer of the testSchema shaded/non-shaded Avro tolerance. After the top-level array/map fixes, testSchema failed at: assertField:857 (cast to shaded GenericData$Array) <- assertGenericRecords:903 (udt field) <- assertField:853 (yudt) Pulsar returns a top-level UDT (yudt) as a SHADED GenericRecord, but the collection fields nested inside it (the UDT's zlist/zset) still come back as NON-shaded Avro arrays. normalizeToShadedAvro is a no-op on the already-shaded record, so those nested arrays were never converted and the shaded-typed assertion threw. Wrap the per-field extraction in assertGenericRecords' udt/udtoptional cases with normalizeToShadedAvro so each nested value is converted before asserting. (Collections nested inside ysetofudt are already handled: that whole array is deep-converted to shaded by the binary round-trip.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent c733f0d commit 38181be

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

connector/src/test/java/com/datastax/oss/pulsar/source/PulsarCassandraSourceTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -899,15 +899,18 @@ void assertGenericRecords(String field, GenericRecord gr) {
899899
return;
900900
case "tuple":
901901
case "udt": {
902+
// A field of this (shaded) record may itself be a non-shaded Avro collection (e.g.
903+
// the UDT's zlist/zset), since Pulsar returns nested collections non-shaded even when
904+
// the enclosing record is shaded. Normalize each nested value before asserting.
902905
for (Field f : gr.getFields()) {
903-
assertField(f.getName(), gr.getField(f.getName()));
906+
assertField(f.getName(), normalizeToShadedAvro(gr.getField(f.getName())));
904907
}
905908
}
906909
return;
907910
case "udtoptional": {
908911
for (Field f : gr.getFields()) {
909912
if (f.getName().equals("ztext")){
910-
assertField(f.getName(), gr.getField(f.getName()));
913+
assertField(f.getName(), normalizeToShadedAvro(gr.getField(f.getName())));
911914
}
912915
else {
913916
assertNull(gr.getField(f.getName()));

0 commit comments

Comments
 (0)