diff --git a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/CompositeByteBuffer.java b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/CompositeByteBuffer.java index a4562b91d..690e07320 100644 --- a/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/CompositeByteBuffer.java +++ b/avro-fastserde/src/main/java/com/linkedin/avro/fastserde/CompositeByteBuffer.java @@ -19,7 +19,7 @@ public ByteBuffer allocate(int index, int size) { ByteBuffer byteBuffer; // Check if we can reuse the old record's byteBuffers, else allocate a new one. - if (byteBuffers.size() > index && byteBuffers.get(index).capacity() > size) { + if (byteBuffers.size() > index && byteBuffers.get(index).capacity() >= size) { byteBuffer = byteBuffers.get(index); byteBuffer.clear(); } else { diff --git a/avro-fastserde/src/test/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorForReuseTest.java b/avro-fastserde/src/test/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorForReuseTest.java index 98dc9a99e..73365087f 100644 --- a/avro-fastserde/src/test/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorForReuseTest.java +++ b/avro-fastserde/src/test/java/com/linkedin/avro/fastserde/FastDeserializerGeneratorForReuseTest.java @@ -204,14 +204,16 @@ public void testFastGenericDeserializerPrimitFloatList() throws Exception { List list = (List)genericRecord.get(1); Assert.assertEquals(list.size(), 3); - // new record array length shorter than reuse record. + // new record array length same as before for reusing byte buffers arrayList.clear(); arrayList.add((float)10); + arrayList.add((float)20); + arrayList.add((float)30); record1.put("inventory", arrayList); serializedBytes = serialize(record1, oldRecordSchema); genericRecord = deserializer.deserialize(deserRecord, getDecoder(serializedBytes)); list = (List)genericRecord.get(1); - Assert.assertEquals(list.size(), 1); + Assert.assertEquals(list.size(), 3); } }