From c5ea184962a4ef1845d1189114ad463e19107368 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 15:23:07 -0400 Subject: [PATCH 1/9] Add Avro version 1.12.0 to build.gradle --- sdks/java/extensions/avro/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/sdks/java/extensions/avro/build.gradle b/sdks/java/extensions/avro/build.gradle index e3afb5ff52e4..6b24bf693dfb 100644 --- a/sdks/java/extensions/avro/build.gradle +++ b/sdks/java/extensions/avro/build.gradle @@ -40,6 +40,7 @@ def avroVersions = [ '182' : "1.8.2", '192' : "1.9.2", '1102': "1.10.2", + '1120': "1.12.0", ] avroVersions.each { k, v -> From c63806e7675b11942a699a17a620d9ae4e28fdad Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 15:44:37 -0400 Subject: [PATCH 2/9] Update AvroUtilsTest.java --- .../sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index 57da8e77bb1b..dc5b4161a5b2 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import com.fasterxml.jackson.databind.ObjectMapper; import com.pholser.junit.quickcheck.From; import com.pholser.junit.quickcheck.Property; import com.pholser.junit.quickcheck.runner.JUnitQuickcheck; @@ -284,10 +285,13 @@ public void avroToBeamRoundTrip( Iterable iterable = randomData(avroSchema, 10); List records = Lists.newArrayList((Iterable) iterable); + // Use JSON tree comparison to avoid Avro 1.12.0 GenericRecord.equals() throwing + // "Can't compare maps!" for records with nested map types (AVRO-4222) + ObjectMapper mapper = new ObjectMapper(); for (GenericRecord record : records) { Row row = AvroUtils.toBeamRowStrict(record, schema); GenericRecord out = AvroUtils.toGenericRecord(row, avroSchema); - assertEquals(record, out); + assertEquals(mapper.readTree(record.toString()), mapper.readTree(out.toString())); } } From 067969a8e318b383495e59325fc87a18e76aff0a Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 15:50:59 -0400 Subject: [PATCH 3/9] Update AvroUtilsTest.java --- .../beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index dc5b4161a5b2..c7451719aa03 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -286,7 +286,7 @@ public void avroToBeamRoundTrip( List records = Lists.newArrayList((Iterable) iterable); // Use JSON tree comparison to avoid Avro 1.12.0 GenericRecord.equals() throwing - // "Can't compare maps!" for records with nested map types (AVRO-4222) + // "Can't compare maps!" for records with nested map types ObjectMapper mapper = new ObjectMapper(); for (GenericRecord record : records) { Row row = AvroUtils.toBeamRowStrict(record, schema); From efdc40a88ba0ddaaaaa1bd00cb526fe18b22455e Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 16:17:14 -0400 Subject: [PATCH 4/9] Updating to Avro 1.12.1 --- sdks/java/extensions/avro/build.gradle | 2 +- .../sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/sdks/java/extensions/avro/build.gradle b/sdks/java/extensions/avro/build.gradle index 6b24bf693dfb..f788482e9acb 100644 --- a/sdks/java/extensions/avro/build.gradle +++ b/sdks/java/extensions/avro/build.gradle @@ -40,7 +40,7 @@ def avroVersions = [ '182' : "1.8.2", '192' : "1.9.2", '1102': "1.10.2", - '1120': "1.12.0", + '1121': "1.12.1", ] avroVersions.each { k, v -> diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index c7451719aa03..57da8e77bb1b 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -21,7 +21,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import com.fasterxml.jackson.databind.ObjectMapper; import com.pholser.junit.quickcheck.From; import com.pholser.junit.quickcheck.Property; import com.pholser.junit.quickcheck.runner.JUnitQuickcheck; @@ -285,13 +284,10 @@ public void avroToBeamRoundTrip( Iterable iterable = randomData(avroSchema, 10); List records = Lists.newArrayList((Iterable) iterable); - // Use JSON tree comparison to avoid Avro 1.12.0 GenericRecord.equals() throwing - // "Can't compare maps!" for records with nested map types - ObjectMapper mapper = new ObjectMapper(); for (GenericRecord record : records) { Row row = AvroUtils.toBeamRowStrict(record, schema); GenericRecord out = AvroUtils.toGenericRecord(row, avroSchema); - assertEquals(mapper.readTree(record.toString()), mapper.readTree(out.toString())); + assertEquals(record, out); } } From fefe4974020c68fb09a156dc4c5326ff4ae5468c Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 16:29:07 -0400 Subject: [PATCH 5/9] Revert "Updating to Avro 1.12.1" This reverts commit efdc40a88ba0ddaaaaa1bd00cb526fe18b22455e. --- sdks/java/extensions/avro/build.gradle | 2 +- .../sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sdks/java/extensions/avro/build.gradle b/sdks/java/extensions/avro/build.gradle index f788482e9acb..6b24bf693dfb 100644 --- a/sdks/java/extensions/avro/build.gradle +++ b/sdks/java/extensions/avro/build.gradle @@ -40,7 +40,7 @@ def avroVersions = [ '182' : "1.8.2", '192' : "1.9.2", '1102': "1.10.2", - '1121': "1.12.1", + '1120': "1.12.0", ] avroVersions.each { k, v -> diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index 57da8e77bb1b..c7451719aa03 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import com.fasterxml.jackson.databind.ObjectMapper; import com.pholser.junit.quickcheck.From; import com.pholser.junit.quickcheck.Property; import com.pholser.junit.quickcheck.runner.JUnitQuickcheck; @@ -284,10 +285,13 @@ public void avroToBeamRoundTrip( Iterable iterable = randomData(avroSchema, 10); List records = Lists.newArrayList((Iterable) iterable); + // Use JSON tree comparison to avoid Avro 1.12.0 GenericRecord.equals() throwing + // "Can't compare maps!" for records with nested map types + ObjectMapper mapper = new ObjectMapper(); for (GenericRecord record : records) { Row row = AvroUtils.toBeamRowStrict(record, schema); GenericRecord out = AvroUtils.toGenericRecord(row, avroSchema); - assertEquals(record, out); + assertEquals(mapper.readTree(record.toString()), mapper.readTree(out.toString())); } } From 8da54c3125cb034f34edbe8baa6b5b155511c513 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 16:42:15 -0400 Subject: [PATCH 6/9] Update AvroUtilsTest.java --- .../beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index c7451719aa03..99e4c2d667eb 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -287,6 +287,7 @@ public void avroToBeamRoundTrip( // Use JSON tree comparison to avoid Avro 1.12.0 GenericRecord.equals() throwing // "Can't compare maps!" for records with nested map types + // (https://issues.apache.org/jira/browse/AVRO-4139, fixed in 1.12.1) ObjectMapper mapper = new ObjectMapper(); for (GenericRecord record : records) { Row row = AvroUtils.toBeamRowStrict(record, schema); From 70dff9aa274c5589eadd1dd8619ed7fff9d17bf4 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 16:42:42 -0400 Subject: [PATCH 7/9] Update AvroUtilsTest.java --- .../beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java index 99e4c2d667eb..9e2be047f010 100644 --- a/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java +++ b/sdks/java/extensions/avro/src/test/java/org/apache/beam/sdk/extensions/avro/schemas/utils/AvroUtilsTest.java @@ -287,7 +287,7 @@ public void avroToBeamRoundTrip( // Use JSON tree comparison to avoid Avro 1.12.0 GenericRecord.equals() throwing // "Can't compare maps!" for records with nested map types - // (https://issues.apache.org/jira/browse/AVRO-4139, fixed in 1.12.1) + // (see AVRO-4139) ObjectMapper mapper = new ObjectMapper(); for (GenericRecord record : records) { Row row = AvroUtils.toBeamRowStrict(record, schema); From 869edde2f4edc722f5555195e47d395085664f83 Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Wed, 8 Apr 2026 22:37:13 -0400 Subject: [PATCH 8/9] retrigger CI From 89da936fc3994a5377764846df70777d9075523b Mon Sep 17 00:00:00 2001 From: Chris Jordan Date: Thu, 9 Apr 2026 07:47:06 -0400 Subject: [PATCH 9/9] retrigger CI