From 8a931a981b68014f5b36160e300af713fa141069 Mon Sep 17 00:00:00 2001 From: Dhruvil Shah Date: Wed, 19 Jun 2019 17:01:08 -0700 Subject: [PATCH 1/2] Grow buffer to hold down converted records if it was insufficiently sized --- .../kafka/common/record/RecordsUtil.java | 3 ++ .../kafka/common/record/FileRecordsTest.java | 34 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java b/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java index 3b0c59a24a521..95838c9caadc6 100644 --- a/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java +++ b/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java @@ -18,6 +18,7 @@ import org.apache.kafka.common.errors.UnsupportedCompressionTypeException; import org.apache.kafka.common.utils.Time; +import org.apache.kafka.common.utils.Utils; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -80,9 +81,11 @@ protected static ConvertedRecords downConvert(Iterable offsets = asList(0L, 1L); + List magic = asList(RecordBatch.MAGIC_VALUE_V2, RecordBatch.MAGIC_VALUE_V1); // downgrade message format from v2 to v1 + List records = asList( + new SimpleRecord(1L, "k1".getBytes(), bytes), + new SimpleRecord(2L, "k2".getBytes(), bytes)); + byte toMagic = 1; + + // create MemoryRecords + ByteBuffer buffer = ByteBuffer.allocate(8000); + for (int i = 0; i < records.size(); i++) { + MemoryRecordsBuilder builder = MemoryRecords.builder(buffer, magic.get(i), compressionType, TimestampType.CREATE_TIME, 0L); + builder.appendWithOffset(offsets.get(i), records.get(i)); + builder.close(); + } + buffer.flip(); + + // create FileRecords, down-convert and verify + try (FileRecords fileRecords = FileRecords.open(tempFile())) { + fileRecords.append(MemoryRecords.readableRecords(buffer)); + fileRecords.flush(); + downConvertAndVerifyRecords(records, offsets, fileRecords, compressionType, toMagic, 0L, time); + } + } + @Test public void testConversion() throws IOException { doTestConversion(CompressionType.NONE, RecordBatch.MAGIC_VALUE_V0); From 1bf1ba9ba9f1bf4a3560075603d95437c2e70175 Mon Sep 17 00:00:00 2001 From: Dhruvil Shah Date: Thu, 20 Jun 2019 08:48:19 -0700 Subject: [PATCH 2/2] Address review comment --- .../main/java/org/apache/kafka/common/record/RecordsUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java b/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java index 95838c9caadc6..423d1e1656f86 100644 --- a/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java +++ b/clients/src/main/java/org/apache/kafka/common/record/RecordsUtil.java @@ -85,7 +85,7 @@ protected static ConvertedRecords downConvert(Iterable