diff --git a/core/src/main/java/org/apache/iceberg/deletes/EqualityDeleteWriter.java b/core/src/main/java/org/apache/iceberg/deletes/EqualityDeleteWriter.java index 7e0a82681afa..c914ad224f30 100644 --- a/core/src/main/java/org/apache/iceberg/deletes/EqualityDeleteWriter.java +++ b/core/src/main/java/org/apache/iceberg/deletes/EqualityDeleteWriter.java @@ -58,7 +58,7 @@ public EqualityDeleteWriter(FileAppender appender, FileFormat format, String } @Override - public void write(T row) throws IOException { + public void write(T row) { appender.add(row); } diff --git a/core/src/main/java/org/apache/iceberg/deletes/PositionDeleteWriter.java b/core/src/main/java/org/apache/iceberg/deletes/PositionDeleteWriter.java index 753242013ec1..a7dff07e7105 100644 --- a/core/src/main/java/org/apache/iceberg/deletes/PositionDeleteWriter.java +++ b/core/src/main/java/org/apache/iceberg/deletes/PositionDeleteWriter.java @@ -57,7 +57,7 @@ public PositionDeleteWriter(FileAppender appender, FileFormat format } @Override - public void write(PositionDelete positionDelete) throws IOException { + public void write(PositionDelete positionDelete) { referencedDataFiles.add(positionDelete.path()); appender.add(positionDelete); } diff --git a/core/src/main/java/org/apache/iceberg/io/ClusteredWriter.java b/core/src/main/java/org/apache/iceberg/io/ClusteredWriter.java index 8729fd1c503e..61a6f9f9164d 100644 --- a/core/src/main/java/org/apache/iceberg/io/ClusteredWriter.java +++ b/core/src/main/java/org/apache/iceberg/io/ClusteredWriter.java @@ -20,6 +20,7 @@ package org.apache.iceberg.io; import java.io.IOException; +import java.io.UncheckedIOException; import java.util.Comparator; import java.util.Set; import org.apache.iceberg.PartitionSpec; @@ -63,7 +64,7 @@ abstract class ClusteredWriter implements PartitioningWriter { protected abstract R aggregatedResult(); @Override - public void write(T row, PartitionSpec spec, StructLike partition) throws IOException { + public void write(T row, PartitionSpec spec, StructLike partition) { if (!spec.equals(currentSpec)) { if (currentSpec != null) { closeCurrentWriter(); @@ -110,9 +111,13 @@ public void close() throws IOException { } } - private void closeCurrentWriter() throws IOException { + private void closeCurrentWriter() { if (currentWriter != null) { - currentWriter.close(); + try { + currentWriter.close(); + } catch (IOException e) { + throw new UncheckedIOException("Failed to close current writer", e); + } addResult(currentWriter.result()); diff --git a/core/src/main/java/org/apache/iceberg/io/FanoutWriter.java b/core/src/main/java/org/apache/iceberg/io/FanoutWriter.java index 122a25df27e8..631fc0a6d4ea 100644 --- a/core/src/main/java/org/apache/iceberg/io/FanoutWriter.java +++ b/core/src/main/java/org/apache/iceberg/io/FanoutWriter.java @@ -49,7 +49,7 @@ abstract class FanoutWriter implements PartitioningWriter { protected abstract R aggregatedResult(); @Override - public void write(T row, PartitionSpec spec, StructLike partition) throws IOException { + public void write(T row, PartitionSpec spec, StructLike partition) { FileWriter writer = writer(spec, partition); writer.write(row); } diff --git a/core/src/main/java/org/apache/iceberg/io/FileWriter.java b/core/src/main/java/org/apache/iceberg/io/FileWriter.java index cbaca4f3ec5e..6f0c4ab2194a 100644 --- a/core/src/main/java/org/apache/iceberg/io/FileWriter.java +++ b/core/src/main/java/org/apache/iceberg/io/FileWriter.java @@ -20,7 +20,6 @@ package org.apache.iceberg.io; import java.io.Closeable; -import java.io.IOException; import org.apache.iceberg.DataFile; import org.apache.iceberg.DeleteFile; @@ -41,9 +40,8 @@ public interface FileWriter extends Closeable { * Writes rows to a predefined spec/partition. * * @param rows data or delete records - * @throws IOException in case of an error during the write process */ - default void write(Iterable rows) throws IOException { + default void write(Iterable rows) { for (T row : rows) { write(row); } @@ -53,9 +51,8 @@ default void write(Iterable rows) throws IOException { * Writes a row to a predefined spec/partition. * * @param row a data or delete record - * @throws IOException in case of an error during the write process */ - void write(T row) throws IOException; + void write(T row); /** * Returns the number of bytes that were currently written by this writer. diff --git a/core/src/main/java/org/apache/iceberg/io/PartitioningWriter.java b/core/src/main/java/org/apache/iceberg/io/PartitioningWriter.java index 329e68cc60f3..4afdd2162f8b 100644 --- a/core/src/main/java/org/apache/iceberg/io/PartitioningWriter.java +++ b/core/src/main/java/org/apache/iceberg/io/PartitioningWriter.java @@ -20,7 +20,6 @@ package org.apache.iceberg.io; import java.io.Closeable; -import java.io.IOException; import org.apache.iceberg.DataFile; import org.apache.iceberg.DeleteFile; import org.apache.iceberg.PartitionSpec; @@ -46,9 +45,8 @@ public interface PartitioningWriter extends Closeable { * @param row a data or delete record * @param spec a partition spec * @param partition a partition or null if the spec is unpartitioned - * @throws IOException in case of an error during the write process */ - void write(T row, PartitionSpec spec, StructLike partition) throws IOException; + void write(T row, PartitionSpec spec, StructLike partition); /** * Returns a result that contains information about written {@link DataFile}s or {@link DeleteFile}s. diff --git a/core/src/main/java/org/apache/iceberg/io/RollingFileWriter.java b/core/src/main/java/org/apache/iceberg/io/RollingFileWriter.java index ed35933313e2..24a6ce39472c 100644 --- a/core/src/main/java/org/apache/iceberg/io/RollingFileWriter.java +++ b/core/src/main/java/org/apache/iceberg/io/RollingFileWriter.java @@ -20,6 +20,7 @@ package org.apache.iceberg.io; import java.io.IOException; +import java.io.UncheckedIOException; import org.apache.iceberg.PartitionSpec; import org.apache.iceberg.StructLike; import org.apache.iceberg.encryption.EncryptedOutputFile; @@ -81,7 +82,7 @@ public long length() { } @Override - public void write(T row) throws IOException { + public void write(T row) { currentWriter.write(row); currentFileRows++; @@ -111,9 +112,13 @@ private EncryptedOutputFile newFile() { } } - private void closeCurrentWriter() throws IOException { + private void closeCurrentWriter() { if (currentWriter != null) { - currentWriter.close(); + try { + currentWriter.close(); + } catch (IOException e) { + throw new UncheckedIOException("Failed to close current writer", e); + } if (currentFileRows == 0L) { io.deleteFile(currentFile.encryptingOutputFile()); diff --git a/core/src/main/java/org/apache/iceberg/io/SortedPosDeleteWriter.java b/core/src/main/java/org/apache/iceberg/io/SortedPosDeleteWriter.java index f1c9e52a860a..36a0313a4e41 100644 --- a/core/src/main/java/org/apache/iceberg/io/SortedPosDeleteWriter.java +++ b/core/src/main/java/org/apache/iceberg/io/SortedPosDeleteWriter.java @@ -79,7 +79,7 @@ public long length() { } @Override - public void write(PositionDelete payload) throws IOException { + public void write(PositionDelete payload) { delete(payload.path(), payload.pos(), payload.row()); } diff --git a/data/src/test/java/org/apache/iceberg/io/TestPartitioningWriters.java b/data/src/test/java/org/apache/iceberg/io/TestPartitioningWriters.java index b01ccc5af621..054881af458b 100644 --- a/data/src/test/java/org/apache/iceberg/io/TestPartitioningWriters.java +++ b/data/src/test/java/org/apache/iceberg/io/TestPartitioningWriters.java @@ -21,7 +21,6 @@ import java.io.File; import java.io.IOException; -import java.io.UncheckedIOException; import java.util.List; import org.apache.iceberg.AssertHelpers; import org.apache.iceberg.DataFile; @@ -152,13 +151,7 @@ public void testClusteredDataWriterOutOfOrderPartitions() throws IOException { AssertHelpers.assertThrows("Should fail to write out of order partitions", IllegalStateException.class, "Encountered records that belong to already closed files", - () -> { - try { - writer.write(toRow(6, "aaa"), spec, partitionKey(spec, "aaa")); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - }); + () -> writer.write(toRow(6, "aaa"), spec, partitionKey(spec, "aaa"))); writer.close(); } @@ -303,23 +296,11 @@ public void testClusteredEqualityDeleteWriterOutOfOrderSpecsAndPartitions() thro AssertHelpers.assertThrows("Should fail to write out of order partitions", IllegalStateException.class, "Encountered records that belong to already closed files", - () -> { - try { - writer.write(toRow(7, "ccc"), identitySpec, partitionKey(identitySpec, "ccc")); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - }); + () -> writer.write(toRow(7, "ccc"), identitySpec, partitionKey(identitySpec, "ccc"))); AssertHelpers.assertThrows("Should fail to write out of order specs", IllegalStateException.class, "Encountered records that belong to already closed files", - () -> { - try { - writer.write(toRow(7, "aaa"), unpartitionedSpec, null); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - }); + () -> writer.write(toRow(7, "aaa"), unpartitionedSpec, null)); writer.close(); } @@ -459,23 +440,15 @@ public void testClusteredPositionDeleteWriterOutOfOrderSpecsAndPartitions() thro AssertHelpers.assertThrows("Should fail to write out of order partitions", IllegalStateException.class, "Encountered records that belong to already closed files", () -> { - try { - PositionDelete positionDelete = positionDelete("file-5.parquet", 1L, null); - writer.write(positionDelete, identitySpec, partitionKey(identitySpec, "ccc")); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + PositionDelete positionDelete = positionDelete("file-5.parquet", 1L, null); + writer.write(positionDelete, identitySpec, partitionKey(identitySpec, "ccc")); }); AssertHelpers.assertThrows("Should fail to write out of order specs", IllegalStateException.class, "Encountered records that belong to already closed files", () -> { - try { - PositionDelete positionDelete = positionDelete("file-1.parquet", 3L, null); - writer.write(positionDelete, unpartitionedSpec, null); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + PositionDelete positionDelete = positionDelete("file-1.parquet", 3L, null); + writer.write(positionDelete, unpartitionedSpec, null); }); writer.close();