Stuck on stage #FD8, tester failing to test valid reponse

I’m stuck on Stage #FD8.

I’ve tried debugging to capture my response locally (using codecrafters test) and passing it to my lib, try to debug it hoping to find error, but it pass, I mean the response can be parse…

Here are my logs:

vscode ➜ /workspaces/codecrafters-kafka-rust (master) $ codecrafters test
Initiating test run...

⏳ Turbo test runners busy. You are in queue.

Upgrade to skip the wait: https://codecrafters.io/turbo

Running tests. Logs should appear shortly...

[compile]    Compiling codecrafters-kafka v0.1.0 (/app)
[compile]     Finished `release` profile [optimized] target(s) in 3.42s
[compile] Moved ./.codecrafters/run.sh → ./your_program.sh
[compile] Compilation successful.

Debug = true

[tester::#FD8] Running tests for Stage #FD8 (Consuming Messages - Fetch multiple messages from disk)
[tester::#FD8] [Serializer] Writing log files to: /tmp/kraft-combined-logs
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/server.properties
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/meta.properties
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/.kafka_cleanshutdown
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/baz-0/partition.metadata
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/pax-0/partition.metadata
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/paz-0/partition.metadata
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/paz-1/partition.metadata
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/__cluster_metadata-0/partition.metadata
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/baz-0/00000000000000000000.log
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/pax-0/00000000000000000000.log
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/paz-0/00000000000000000000.log
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/paz-1/00000000000000000000.log
[tester::#FD8] [Serializer]   - Wrote file to: /tmp/kraft-combined-logs/__cluster_metadata-0/00000000000000000000.log
[tester::#FD8] [Serializer] Finished writing log files to: /tmp/kraft-combined-logs
[tester::#FD8] $ ./your_program.sh /tmp/server.properties
[tester::#FD8] Connecting to broker at: localhost:9092
[your_program] Logs from your program will appear here!
[tester::#FD8] Connection to broker at localhost:9092 successful
[tester::#FD8] Sending "Fetch" (version: 16) request (Correlation id: 1983587668)
[tester::#FD8] Hexdump of sent "Fetch" request: 
[tester::#FD8] Idx  | Hex                                             | ASCII
[tester::#FD8] -----+-------------------------------------------------+-----------------
[tester::#FD8] 0000 | 00 00 00 60 00 01 00 10 76 3b 25 54 00 09 6b 61 | ...`....v;%T..ka
[tester::#FD8] 0010 | 66 6b 61 2d 63 6c 69 00 00 00 01 f4 00 00 00 01 | fka-cli.........
[tester::#FD8] 0020 | 03 20 00 00 00 00 00 00 00 00 00 00 00 02 00 00 | . ..............
[tester::#FD8] 0030 | 00 00 00 00 40 00 80 00 00 00 00 00 00 30 02 00 | ....@........0..
[tester::#FD8] 0040 | 00 00 00 ff ff ff ff 00 00 00 00 00 00 00 00 ff | ................
[tester::#FD8] 0050 | ff ff ff ff ff ff ff ff ff ff ff 00 10 00 00 00 | ................
[tester::#FD8] 0060 | 00 01 01 00                                     | ....
[tester::#FD8] 
[your_program] accepted new connection
[your_program] read 167 bytes from paz-0/00000000000000000000.log
[your_program] read 0 bytes from paz-1/00000000000000000000.log
[tester::#FD8] Hexdump of received "Fetch" response: 
[tester::#FD8] Idx  | Hex                                             | ASCII
[tester::#FD8] -----+-------------------------------------------------+-----------------
[tester::#FD8] 0000 | 00 00 01 15 76 3b 25 54 00 00 00 00 00 00 00 00 | ....v;%T........
[tester::#FD8] 0010 | 00 00 00 02 00 00 00 00 00 00 40 00 80 00 00 00 | ..........@.....
[tester::#FD8] 0020 | 00 00 00 30 03 00 00 00 00 00 00 00 00 00 00 00 | ...0............
[tester::#FD8] 0030 | 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff | ................
[tester::#FD8] 0040 | ff ff ff 00 ff ff ff ff a8 01 00 00 00 00 00 00 | ................
[tester::#FD8] 0050 | 00 00 00 00 00 44 00 00 00 00 02 ab fd 04 91 00 | .....D..........
[tester::#FD8] 0060 | 00 00 00 00 00 00 00 01 91 e0 5b 6d 8b 00 00 01 | ..........[m....
[tester::#FD8] 0070 | 91 e0 5b 6d 8b 00 00 00 00 00 00 00 00 00 00 00 | ..[m............
[tester::#FD8] 0080 | 00 00 00 00 00 00 01 24 00 00 00 01 18 48 65 6c | .......$.....Hel
[tester::#FD8] 0090 | 6c 6f 20 4b 61 66 6b 61 21 00 00 00 00 00 00 00 | lo Kafka!.......
[tester::#FD8] 00a0 | 00 01 00 00 00 4b 00 00 00 00 02 55 60 53 93 00 | .....K.....U`S..
[tester::#FD8] 00b0 | 00 00 00 00 00 00 00 01 91 e0 5b 6d 8b 00 00 01 | ..........[m....
[tester::#FD8] 00c0 | 91 e0 5b 6d 8b 00 00 00 00 00 00 00 00 00 00 00 | ..[m............
[tester::#FD8] 00d0 | 00 00 00 00 00 00 01 32 00 00 00 01 26 48 65 6c | .......2....&Hel
[tester::#FD8] 00e0 | 6c 6f 20 43 6f 64 65 43 72 61 66 74 65 72 73 21 | lo CodeCrafters!
[tester::#FD8] 00f0 | 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 | ................
[tester::#FD8] 0100 | ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................
[tester::#FD8] 0110 | 00 ff ff ff ff 00 00 00 00                      | .........
[tester::#FD8] 
[tester::#FD8] [Decoder] - .ResponseHeader
[tester::#FD8] [Decoder]   - .correlation_id (1983587668)
[tester::#FD8] [Decoder]   - .TAG_BUFFER
[tester::#FD8] [Decoder] - .ResponseBody
[tester::#FD8] [Decoder]   - .throttle_time_ms (0)
[tester::#FD8] [Decoder]   - .error_code (0)
[tester::#FD8] [Decoder]   - .session_id (0)
[tester::#FD8] [Decoder]   - .num_responses (1)
[tester::#FD8] [Decoder]   - .TopicResponse[0]
[tester::#FD8] [Decoder]     - .topic_id (00000000-0000-4000-8000-000000000030)
[tester::#FD8] [Decoder]     - .num_partitions (2)
[tester::#FD8] [Decoder]     - .PartitionResponse[0]
[tester::#FD8] [Decoder]       - .partition_index (0)
[tester::#FD8] [Decoder]       - .error_code (0)
[tester::#FD8] [Decoder]       - .high_watermark (0)
[tester::#FD8] [Decoder]       - .last_stable_offset (-1)
[tester::#FD8] [Decoder]       - .log_start_offset (-1)
[tester::#FD8] [Decoder]       - .num_aborted_transactions (0)
[tester::#FD8] [Decoder]       - .preferred_read_replica (-1)
[tester::#FD8] [Decoder]       - .compact_records_length (167)
[tester::#FD8] [Decoder]       - .RecordBatch[0]
[tester::#FD8] [Decoder]         - .base_offset (0)
[tester::#FD8] [Decoder]         - .batch_length (68)
[tester::#FD8] [Decoder]         - .partition_leader_epoch (0)
[tester::#FD8] [Decoder]         - .magic_byte (2)
[tester::#FD8] [Decoder]         - .crc (-1409481583)
[tester::#FD8] [Decoder]         - .record_attributes (0)
[tester::#FD8] [Decoder]         - .last_offset_delta (0)
[tester::#FD8] [Decoder]         - .base_timestamp (1726045973899)
[tester::#FD8] [Decoder]         - .max_timestamp (1726045973899)
[tester::#FD8] [Decoder]         - .producer_id (0)
[tester::#FD8] [Decoder]         - .producer_epoch (0)
[tester::#FD8] [Decoder]         - .base_sequence (0)
[tester::#FD8] [Decoder]         - .num_records (1)
[tester::#FD8] [Decoder]         - .Record[0]
[tester::#FD8] [Decoder]           - .length (18)
[tester::#FD8] [Decoder]           - .attributes (0)
[tester::#FD8] [Decoder]           - .timestamp_delta (0)
[tester::#FD8] [Decoder]           - .offset_delta (0)
[tester::#FD8] [Decoder]           - .key_length (-1)
[tester::#FD8] [Decoder]           - .key ("")
[tester::#FD8] [Decoder]           - .value_length (12)
[tester::#FD8] [Decoder]           - .value ("Hello Kafka!")
[tester::#FD8] [Decoder]           - .num_headers (0)
[tester::#FD8] [Decoder]       - .RecordBatch[1]
[tester::#FD8] [Decoder]         - .base_offset (1)
[tester::#FD8] [Decoder]         - .batch_length (75)
[tester::#FD8] [Decoder]         - .partition_leader_epoch (0)
[tester::#FD8] [Decoder]         - .magic_byte (2)
[tester::#FD8] [Decoder]         - .crc (1432376211)
[tester::#FD8] [Decoder]         - .record_attributes (0)
[tester::#FD8] [Decoder]         - .last_offset_delta (0)
[tester::#FD8] [Decoder]         - .base_timestamp (1726045973899)
[tester::#FD8] [Decoder]         - .max_timestamp (1726045973899)
[tester::#FD8] [Decoder]         - .producer_id (0)
[tester::#FD8] [Decoder]         - .producer_epoch (0)
[tester::#FD8] [Decoder]         - .base_sequence (0)
[tester::#FD8] [Decoder]         - .num_records (1)
[tester::#FD8] [Decoder]         - .Record[0]
[tester::#FD8] [Decoder]           - .length (25)
[tester::#FD8] [Decoder]           - .attributes (0)
[tester::#FD8] [Decoder]           - .timestamp_delta (0)
[tester::#FD8] [Decoder]           - .offset_delta (0)
[tester::#FD8] [Decoder]           - .key_length (-1)
[tester::#FD8] [Decoder]           - .key ("")
[tester::#FD8] [Decoder]           - .value_length (19)
[tester::#FD8] [Decoder]           - .value ("Hello CodeCrafters!")
[tester::#FD8] [Decoder]           - .num_headers (0)
[tester::#FD8] [Decoder]       - .RecordBatch[2]
[tester::#FD8] [Decoder]         - .base_offset (16777216)
[tester::#FD8] [Decoder]         - .batch_length (0)
[tester::#FD8] [Decoder]         - .partition_leader_epoch (255)
[tester::#FD8] [Decoder]         - .magic_byte (-1)
[tester::#FD8] [Decoder]         - .crc (-1)
[tester::#FD8] Received:
[tester::#FD8] Hex (bytes 253-268)                             | ASCII
[tester::#FD8] ------------------------------------------------+------------------
[tester::#FD8] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 | ................
[tester::#FD8]                 ^                                      ^
[tester::#FD8] Error: CRC mismatch: calculated 00000000, expected ffffffff
[tester::#FD8] Context:
[tester::#FD8] - Fetch Response v16
[tester::#FD8]   - Response Body
[tester::#FD8]     - TopicResponse[0]
[tester::#FD8]       - PartitionResponse[0]
[tester::#FD8]         - RecordBatch[2]
[tester::#FD8]           - crc
[tester::#FD8] 
[tester::#FD8] Test failed
[tester::#FD8] Terminating program
[tester::#FD8] Program terminated successfully

What I find interesting here, tester seem adamant that there’s third RecordBatch within first PartitionResponse when actually it only consist of 2 RecordBatch then follow by another PartitionResponse with empty RecordBatch.

I have write an unit test which only parse the same response here. You can find my code at abastian/codecrafters-kafka-rust

Hey @abastian, we’re checking if this needs to be addressed on our tester. I’ll follow up as soon as I have an update!

@abastian We’ve fixed the issue where the tester continued parsing when it shouldn’t have in this PR. Let us know if it works as expected now!

1 Like

Confirm, parsing have been passed now, thank you… :+1: :grinning_face:

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.