diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketProtoUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketProtoUtils.java index 4618200325c1..4acf724edd75 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketProtoUtils.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketProtoUtils.java @@ -73,11 +73,15 @@ public static void serializeAsPB(BucketCache cache, FileOutputStream fos, long c fos.write(Bytes.toBytes(chunkSize)); fos.write(Bytes.toBytes(numChunks)); + BucketCacheProtos.BackingMapEntry.Builder entryBuilder = + BucketCacheProtos.BackingMapEntry.newBuilder(); for (Map.Entry entry : cache.backingMap.entrySet()) { blockCount++; - builder.addEntry( - BucketCacheProtos.BackingMapEntry.newBuilder().setKey(BucketProtoUtils.toPB(entry.getKey())) - .setValue(BucketProtoUtils.toPB(entry.getValue())).build()); + entryBuilder.clear(); + entryBuilder.setKey(BucketProtoUtils.toPB(entry.getKey())); + entryBuilder.setValue(BucketProtoUtils.toPB(entry.getValue())); + builder.addEntry(entryBuilder.build()); + if (blockCount % chunkSize == 0 || (blockCount == backingMapSize)) { chunkCount++; if (chunkCount == 1) { @@ -88,7 +92,7 @@ public static void serializeAsPB(BucketCache cache, FileOutputStream fos, long c builder.build().writeDelimitedTo(fos); } if (blockCount < backingMapSize) { - builder = BucketCacheProtos.BackingMap.newBuilder(); + builder.clear(); } } }