alanlau28 commented on code in PR #23544:
URL: https://github.com/apache/kafka/pull/23544#discussion_r4084737077


##########
clients/src/test/java/org/apache/kafka/common/requests/RequestHeaderTest.java:
##########
@@ -60,6 +61,75 @@ public void testRequestHeaderV2() {
         assertEquals(header, deserialized);
     }
 
+    @Test
+    public void testRequestHeaderV3() {
+        // OffsetDelete v1 is the first RPC version mapped to the v3 request 
header.
+        short apiVersion = 1;
+        RequestHeader header = new RequestHeader(ApiKeys.OFFSET_DELETE, 
apiVersion, "", 10);
+        assertEquals(3, header.headerVersion());
+
+        // The client instance ID is tagged, so a v3 header which leaves it 
unset is the size of a v2 header.
+        ByteBuffer buffer = RequestTestUtils.serializeRequestHeader(header);
+        assertEquals(11, buffer.remaining());
+        RequestHeader deserialized = RequestHeader.parse(buffer);
+        assertEquals(header, deserialized);
+        assertEquals(Uuid.ZERO_UUID, deserialized.data().clientInstanceId());
+    }
+
+    @Test
+    public void testRequestHeaderV3WithClientInstanceId() {
+        Uuid clientInstanceId = Uuid.randomUuid();
+        RequestHeaderData headerData = new RequestHeaderData().
+            setRequestApiKey(ApiKeys.OFFSET_DELETE.id).
+            setRequestApiVersion((short) 1).
+            setClientId("").
+            setCorrelationId(10).
+            setClientInstanceId(clientInstanceId);
+        RequestHeader header = new RequestHeader(headerData, (short) 3);
+
+        // The 10 bytes of header fields, plus the tagged field's count, tag, 
size and 16-byte UUID.
+        ByteBuffer buffer = RequestTestUtils.serializeRequestHeader(header);
+        assertEquals(29, buffer.remaining());
+        RequestHeader deserialized = RequestHeader.parse(buffer);
+        assertEquals(header, deserialized);
+        assertEquals(clientInstanceId, deserialized.data().clientInstanceId());
+    }
+
+    @Test
+    public void testClientInstanceIdIsSetForTheV3Header() {
+        Uuid clientInstanceId = Uuid.randomUuid();
+        RequestHeader header = new RequestHeader(ApiKeys.OFFSET_DELETE, 
(short) 1, "", 10, clientInstanceId);
+        assertEquals(3, header.headerVersion());
+        assertEquals(clientInstanceId, header.clientInstanceId());
+
+        ByteBuffer buffer = RequestTestUtils.serializeRequestHeader(header);
+        assertEquals(29, buffer.remaining());
+        RequestHeader deserialized = RequestHeader.parse(buffer);
+        assertEquals(header, deserialized);
+        assertEquals(clientInstanceId, deserialized.clientInstanceId());
+    }
+
+    @Test
+    public void testClientInstanceIdIsDroppedBelowTheV3Header() {
+        // OffsetDelete v0 uses the v1 header, which has no room for the 
client instance ID. The
+        // header drops it rather than failing when the request is written.

Review Comment:
   I updated the comment to state that the ID is never set, so it stays as the 
UUID default, `ZERO_UUID`.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to