From 0880df0dd9dd5e1c9e43fcf5d43f4b30253b1403 Mon Sep 17 00:00:00 2001 From: Jason Gustafson Date: Wed, 9 Sep 2020 16:49:52 -0700 Subject: [PATCH 1/2] MINOR: Fix JSON generation of nested structs with non-matching type/name --- .../test/resources/common/message/SimpleExampleMessage.json | 2 +- .../main/java/org/apache/kafka/message/StructRegistry.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/clients/src/test/resources/common/message/SimpleExampleMessage.json b/clients/src/test/resources/common/message/SimpleExampleMessage.json index 57779066ae321..bd1fdf636cf71 100644 --- a/clients/src/test/resources/common/message/SimpleExampleMessage.json +++ b/clients/src/test/resources/common/message/SimpleExampleMessage.json @@ -45,7 +45,7 @@ { "name": "arrayFieldId", "type": "int32", "versions": "2+"} ]} ]}, - { "name": "myTaggedStruct", "type": "MyTaggedStruct", "versions": "2+", "about": "Test Tagged Struct field", + { "name": "myTaggedStruct", "type": "TaggedStruct", "versions": "2+", "about": "Test Tagged Struct field", "taggedVersions": "2+", "tag": 8, "fields": [ { "name": "structId", "type": "string", "versions": "2+", "about": "String field in struct"} diff --git a/generator/src/main/java/org/apache/kafka/message/StructRegistry.java b/generator/src/main/java/org/apache/kafka/message/StructRegistry.java index 4ed58a05a4626..7c2c7ad26bd12 100644 --- a/generator/src/main/java/org/apache/kafka/message/StructRegistry.java +++ b/generator/src/main/java/org/apache/kafka/message/StructRegistry.java @@ -87,11 +87,14 @@ void register(MessageSpec message) throws Exception { private void addStructSpecs(Versions parentVersions, List fields) { for (FieldSpec field : fields) { String elementName = null; + String typeName = null; if (field.type().isStructArray()) { FieldType.ArrayType arrayType = (FieldType.ArrayType) field.type(); elementName = arrayType.elementName(); + typeName = arrayType.elementName(); } else if (field.type().isStruct()) { elementName = field.name(); + typeName = field.typeString(); } if (elementName != null) { if (commonStructNames.contains(elementName)) { @@ -107,7 +110,7 @@ private void addStructSpecs(Versions parentVersions, List fields) { " was specified twice."); } else { // Synthesize a StructSpec object out of the fields. - StructSpec spec = new StructSpec(elementName, + StructSpec spec = new StructSpec(typeName, field.versions().toString(), field.fields()); structs.put(elementName, new StructInfo(spec, parentVersions)); From 9e06be33cd6b3557c60c1781230f9966a19de8df Mon Sep 17 00:00:00 2001 From: Jason Gustafson Date: Thu, 10 Sep 2020 10:44:36 -0700 Subject: [PATCH 2/2] Fix failing test --- .../java/org/apache/kafka/common/message/MessageTest.java | 2 +- .../apache/kafka/common/message/SimpleExampleMessageTest.java | 4 ++-- .../java/org/apache/kafka/message/StructRegistryTest.java | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java b/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java index f473c93098d27..30b8590e33d41 100644 --- a/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java +++ b/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java @@ -693,7 +693,7 @@ public void testSimpleMessage() throws Exception { message.setMyStruct(new SimpleExampleMessageData.MyStruct().setStructId(25).setArrayInStruct( Collections.singletonList(new SimpleExampleMessageData.StructArray().setArrayFieldId(20)) )); - message.setMyTaggedStruct(new SimpleExampleMessageData.MyTaggedStruct().setStructId("abc")); + message.setMyTaggedStruct(new SimpleExampleMessageData.TaggedStruct().setStructId("abc")); message.setProcessId(UUID.randomUUID()); message.setMyNullableString("notNull"); diff --git a/clients/src/test/java/org/apache/kafka/common/message/SimpleExampleMessageTest.java b/clients/src/test/java/org/apache/kafka/common/message/SimpleExampleMessageTest.java index e2c7935802685..64c0b7a226c29 100644 --- a/clients/src/test/java/org/apache/kafka/common/message/SimpleExampleMessageTest.java +++ b/clients/src/test/java/org/apache/kafka/common/message/SimpleExampleMessageTest.java @@ -310,8 +310,8 @@ public void testMyStructUnsupportedVersion() { @Test public void testMyTaggedStruct() { // Verify that we can set and retrieve a nullable struct object. - SimpleExampleMessageData.MyTaggedStruct myStruct = - new SimpleExampleMessageData.MyTaggedStruct().setStructId("abc"); + SimpleExampleMessageData.TaggedStruct myStruct = + new SimpleExampleMessageData.TaggedStruct().setStructId("abc"); testRoundTrip(new SimpleExampleMessageData().setMyTaggedStruct(myStruct), message -> assertEquals(myStruct, message.myTaggedStruct()), (short) 2); diff --git a/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java b/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java index d3b90d2e6afb1..32b43a4c8bc86 100644 --- a/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java +++ b/generator/src/test/java/org/apache/kafka/message/StructRegistryTest.java @@ -143,8 +143,9 @@ public void testSingleStruct() throws Exception { FieldSpec field2 = testMessageSpec.fields().get(1); assertTrue(field2.type().isStruct()); assertEquals("TestInlineStruct", field2.type().toString()); + assertEquals("field2", field2.name()); - assertEquals("field2", structRegistry.findStruct(field2).name()); + assertEquals("TestInlineStruct", structRegistry.findStruct(field2).name()); assertFalse(structRegistry.isStructArrayWithKeys(field2)); } }