You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by vi...@apache.org on 2020/08/24 09:33:43 UTC

[hudi] branch master updated: [HUDI-1217] Improve avroToBytes method of HoodieAvroUtils (#2018)

This is an automated email from the ASF dual-hosted git repository.

vinoyang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new f8dcd53  [HUDI-1217] Improve avroToBytes method of HoodieAvroUtils (#2018)
f8dcd53 is described below

commit f8dcd5334effb0157cfa764c4f6a08976eb346e1
Author: Mathieu <wx...@126.com>
AuthorDate: Mon Aug 24 17:33:28 2020 +0800

    [HUDI-1217] Improve avroToBytes method of HoodieAvroUtils (#2018)
---
 .../java/org/apache/hudi/avro/HoodieAvroUtils.java     | 18 ++++++++++--------
 .../org/apache/hudi/common/model/BaseAvroPayload.java  |  8 +-------
 .../apache/hudi/common/model/HoodieAvroPayload.java    | 13 ++++---------
 .../hudi/common/testutils/AvroBinaryTestPayload.java   | 14 ++++----------
 4 files changed, 19 insertions(+), 34 deletions(-)

diff --git a/hudi-common/src/main/java/org/apache/hudi/avro/HoodieAvroUtils.java b/hudi-common/src/main/java/org/apache/hudi/avro/HoodieAvroUtils.java
index 6da6739..7247c41 100644
--- a/hudi-common/src/main/java/org/apache/hudi/avro/HoodieAvroUtils.java
+++ b/hudi-common/src/main/java/org/apache/hudi/avro/HoodieAvroUtils.java
@@ -83,15 +83,17 @@ public class HoodieAvroUtils {
   /**
    * Convert a given avro record to bytes.
    */
-  public static byte[] avroToBytes(GenericRecord record) throws IOException {
+  public static byte[] avroToBytes(GenericRecord record) {
     GenericDatumWriter<GenericRecord> writer = new GenericDatumWriter<>(record.getSchema());
-    ByteArrayOutputStream out = new ByteArrayOutputStream();
-    BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, reuseEncoder.get());
-    reuseEncoder.set(encoder);
-    writer.write(record, encoder);
-    encoder.flush();
-    out.close();
-    return out.toByteArray();
+    try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+      BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, reuseEncoder.get());
+      reuseEncoder.set(encoder);
+      writer.write(record, encoder);
+      encoder.flush();
+      return out.toByteArray();
+    } catch (IOException e) {
+      throw new HoodieIOException("Cannot convert GenericRecord to bytes", e);
+    }
   }
 
   /**
diff --git a/hudi-common/src/main/java/org/apache/hudi/common/model/BaseAvroPayload.java b/hudi-common/src/main/java/org/apache/hudi/common/model/BaseAvroPayload.java
index 24d02b5..3b35b0d 100644
--- a/hudi-common/src/main/java/org/apache/hudi/common/model/BaseAvroPayload.java
+++ b/hudi-common/src/main/java/org/apache/hudi/common/model/BaseAvroPayload.java
@@ -20,11 +20,9 @@ package org.apache.hudi.common.model;
 
 import org.apache.hudi.avro.HoodieAvroUtils;
 import org.apache.hudi.exception.HoodieException;
-import org.apache.hudi.exception.HoodieIOException;
 
 import org.apache.avro.generic.GenericRecord;
 
-import java.io.IOException;
 import java.io.Serializable;
 
 /**
@@ -48,11 +46,7 @@ public abstract class BaseAvroPayload implements Serializable {
    * @param orderingVal {@link Comparable} to be used in pre combine.
    */
   public BaseAvroPayload(GenericRecord record, Comparable orderingVal) {
-    try {
-      this.recordBytes = record != null ? HoodieAvroUtils.avroToBytes(record) : new byte[0];
-    } catch (IOException io) {
-      throw new HoodieIOException("Cannot convert GenericRecord to bytes", io);
-    }
+    this.recordBytes = record != null ? HoodieAvroUtils.avroToBytes(record) : new byte[0];
     this.orderingVal = orderingVal;
     if (orderingVal == null) {
       throw new HoodieException("Ordering value is null for record: " + record);
diff --git a/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieAvroPayload.java b/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieAvroPayload.java
index e6a7e33..a3ab2b7 100644
--- a/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieAvroPayload.java
+++ b/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieAvroPayload.java
@@ -20,7 +20,6 @@ package org.apache.hudi.common.model;
 
 import org.apache.hudi.avro.HoodieAvroUtils;
 import org.apache.hudi.common.util.Option;
-import org.apache.hudi.exception.HoodieIOException;
 
 import org.apache.avro.Schema;
 import org.apache.avro.generic.GenericRecord;
@@ -39,14 +38,10 @@ public class HoodieAvroPayload implements HoodieRecordPayload<HoodieAvroPayload>
   private final byte[] recordBytes;
 
   public HoodieAvroPayload(Option<GenericRecord> record) {
-    try {
-      if (record.isPresent()) {
-        this.recordBytes = HoodieAvroUtils.avroToBytes(record.get());
-      } else {
-        this.recordBytes = new byte[0];
-      }
-    } catch (IOException io) {
-      throw new HoodieIOException("Cannot convert record to bytes", io);
+    if (record.isPresent()) {
+      this.recordBytes = HoodieAvroUtils.avroToBytes(record.get());
+    } else {
+      this.recordBytes = new byte[0];
     }
   }
 
diff --git a/hudi-common/src/test/java/org/apache/hudi/common/testutils/AvroBinaryTestPayload.java b/hudi-common/src/test/java/org/apache/hudi/common/testutils/AvroBinaryTestPayload.java
index 7ea3038..ff862ee 100644
--- a/hudi-common/src/test/java/org/apache/hudi/common/testutils/AvroBinaryTestPayload.java
+++ b/hudi-common/src/test/java/org/apache/hudi/common/testutils/AvroBinaryTestPayload.java
@@ -21,7 +21,6 @@ package org.apache.hudi.common.testutils;
 import org.apache.hudi.avro.HoodieAvroUtils;
 import org.apache.hudi.common.model.HoodieRecordPayload;
 import org.apache.hudi.common.util.Option;
-import org.apache.hudi.exception.HoodieIOException;
 
 import org.apache.avro.Schema;
 import org.apache.avro.generic.GenericRecord;
@@ -37,15 +36,10 @@ public class AvroBinaryTestPayload implements HoodieRecordPayload {
   private final byte[] recordBytes;
 
   public AvroBinaryTestPayload(Option<GenericRecord> record) {
-
-    try {
-      if (record.isPresent()) {
-        recordBytes = HoodieAvroUtils.avroToBytes(record.get());
-      } else {
-        recordBytes = new byte[0];
-      }
-    } catch (IOException io) {
-      throw new HoodieIOException("unable to convert payload to bytes");
+    if (record.isPresent()) {
+      recordBytes = HoodieAvroUtils.avroToBytes(record.get());
+    } else {
+      recordBytes = new byte[0];
     }
   }