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];
}
}