You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xtable.apache.org by ti...@apache.org on 2024/04/24 15:02:23 UTC
(incubator-xtable) branch remaining-renames updated: Change IOException into a read and update exception
This is an automated email from the ASF dual-hosted git repository.
timbrown pushed a commit to branch remaining-renames
in repository https://gitbox.apache.org/repos/asf/incubator-xtable.git
The following commit(s) were added to refs/heads/remaining-renames by this push:
new 3ba77634 Change IOException into a read and update exception
3ba77634 is described below
commit 3ba77634f136b2ff1e63d812feb6e25ef0d58a06
Author: Timothy Brown <ti...@onehouse.ai>
AuthorDate: Wed Apr 24 10:02:16 2024 -0500
Change IOException into a read and update exception
---
.../java/org/apache/xtable/model/exception/ErrorCode.java | 11 ++++++-----
.../apache/xtable/conversion/ConversionController.java | 4 ++--
.../org/apache/xtable/delta/DeltaConversionSource.java | 4 ++--
.../java/org/apache/xtable/delta/DeltaStatsExtractor.java | 4 ++--
.../java/org/apache/xtable/delta/DeltaValueConverter.java | 7 ++++---
.../exception/{OneIOException.java => ReadException.java} | 15 ++++++++++-----
.../{OneIOException.java => UpdateException.java} | 14 +++++++++-----
.../java/org/apache/xtable/hudi/HudiConversionSource.java | 4 ++--
.../java/org/apache/xtable/hudi/HudiConversionTarget.java | 13 +++++++------
.../org/apache/xtable/hudi/HudiDataFileExtractor.java | 14 ++++++++------
.../java/org/apache/xtable/hudi/HudiTableManager.java | 4 ++--
.../apache/xtable/iceberg/IcebergConversionSource.java | 4 ++--
.../apache/xtable/iceberg/IcebergDataFileUpdatesSync.java | 4 ++--
13 files changed, 58 insertions(+), 44 deletions(-)
diff --git a/api/src/main/java/org/apache/xtable/model/exception/ErrorCode.java b/api/src/main/java/org/apache/xtable/model/exception/ErrorCode.java
index 97a80b64..920a95f4 100644
--- a/api/src/main/java/org/apache/xtable/model/exception/ErrorCode.java
+++ b/api/src/main/java/org/apache/xtable/model/exception/ErrorCode.java
@@ -25,11 +25,12 @@ public enum ErrorCode {
INVALID_CONFIGURATION(10001),
INVALID_PARTITION_SPEC(10002),
INVALID_PARTITION_VALUE(10003),
- IO_EXCEPTION(10004),
- INVALID_SCHEMA(10005),
- UNSUPPORTED_SCHEMA_TYPE(10006),
- UNSUPPORTED_FEATURE(10007),
- PARSE_EXCEPTION(10008);
+ READ_EXCEPTION(10004),
+ UPDATE_EXCEPTION(10005),
+ INVALID_SCHEMA(10006),
+ UNSUPPORTED_SCHEMA_TYPE(10007),
+ UNSUPPORTED_FEATURE(10008),
+ PARSE_EXCEPTION(10009);
private final int errorCode;
diff --git a/core/src/main/java/org/apache/xtable/conversion/ConversionController.java b/core/src/main/java/org/apache/xtable/conversion/ConversionController.java
index 1d356e6e..f12c8fa4 100644
--- a/core/src/main/java/org/apache/xtable/conversion/ConversionController.java
+++ b/core/src/main/java/org/apache/xtable/conversion/ConversionController.java
@@ -38,7 +38,7 @@ import lombok.extern.log4j.Log4j2;
import org.apache.hadoop.conf.Configuration;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.ReadException;
import org.apache.xtable.model.IncrementalTableChanges;
import org.apache.xtable.model.InstantsForIncrementalSync;
import org.apache.xtable.model.InternalSnapshot;
@@ -139,7 +139,7 @@ public class ConversionController {
}
return syncResultsMerged;
} catch (IOException ioException) {
- throw new OneIOException("Failed to close source converter", ioException);
+ throw new ReadException("Failed to close source converter", ioException);
}
}
diff --git a/core/src/main/java/org/apache/xtable/delta/DeltaConversionSource.java b/core/src/main/java/org/apache/xtable/delta/DeltaConversionSource.java
index e113d269..9a00e54c 100644
--- a/core/src/main/java/org/apache/xtable/delta/DeltaConversionSource.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaConversionSource.java
@@ -44,7 +44,7 @@ import scala.Option;
import io.delta.tables.DeltaTable;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.ReadException;
import org.apache.xtable.model.CommitsBacklog;
import org.apache.xtable.model.InstantsForIncrementalSync;
import org.apache.xtable.model.InternalSnapshot;
@@ -192,7 +192,7 @@ public class DeltaConversionSource implements ConversionSource<Long> {
fileIterator.forEachRemaining(dataFiles::add);
return PartitionFileGroup.fromFiles(dataFiles);
} catch (Exception e) {
- throw new OneIOException("Failed to iterate through Delta data files", e);
+ throw new ReadException("Failed to iterate through Delta data files", e);
}
}
diff --git a/core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java
index 12e01d8a..572cc104 100644
--- a/core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java
@@ -42,7 +42,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.xtable.collectors.CustomCollectors;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.exception.ParseException;
import org.apache.xtable.model.schema.InternalField;
import org.apache.xtable.model.schema.InternalSchema;
import org.apache.xtable.model.schema.InternalType;
@@ -201,7 +201,7 @@ public class DeltaStatsExtractor {
})
.collect(CustomCollectors.toList(fields.size()));
} catch (IOException ex) {
- throw new OneIOException("Unable to parse stats json", ex);
+ throw new ParseException("Unable to parse stats json", ex);
}
}
diff --git a/core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java b/core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java
index 3e46dd81..d9d15a04 100644
--- a/core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java
@@ -33,7 +33,6 @@ import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import org.apache.xtable.exception.NotSupportedException;
-import org.apache.xtable.exception.OneIOException;
import org.apache.xtable.model.schema.InternalSchema;
import org.apache.xtable.model.schema.InternalType;
import org.apache.xtable.model.schema.PartitionTransformType;
@@ -75,7 +74,8 @@ public class DeltaValueConverter {
try {
instant = dateFormat.parse(value.toString()).toInstant();
} catch (ParseException ex) {
- throw new OneIOException("Unable to parse time from column stats", ex);
+ throw new org.apache.xtable.model.exception.ParseException(
+ "Unable to parse time from column stats", ex);
}
}
InternalSchema.MetadataValue timestampPrecision =
@@ -186,7 +186,8 @@ public class DeltaValueConverter {
DateFormat formatter = getDateFormat(dateFormat);
return formatter.parse(value).toInstant().toEpochMilli();
} catch (ParseException ex) {
- throw new OneIOException("Unable to parse partition value", ex);
+ throw new org.apache.xtable.model.exception.ParseException(
+ "Unable to parse partition value", ex);
}
}
}
diff --git a/core/src/main/java/org/apache/xtable/exception/OneIOException.java b/core/src/main/java/org/apache/xtable/exception/ReadException.java
similarity index 68%
copy from core/src/main/java/org/apache/xtable/exception/OneIOException.java
copy to core/src/main/java/org/apache/xtable/exception/ReadException.java
index b6039b60..f54cd4a4 100644
--- a/core/src/main/java/org/apache/xtable/exception/OneIOException.java
+++ b/core/src/main/java/org/apache/xtable/exception/ReadException.java
@@ -21,12 +21,17 @@ package org.apache.xtable.exception;
import org.apache.xtable.model.exception.ErrorCode;
import org.apache.xtable.model.exception.InternalException;
-public class OneIOException extends InternalException {
- public OneIOException(String message, Throwable e) {
- super(ErrorCode.IO_EXCEPTION, message, e);
+/**
+ * Exception thrown when there is an error reading existing state from a {@link
+ * org.apache.xtable.spi.extractor.ConversionSource} or {@link
+ * org.apache.xtable.spi.sync.ConversionTarget}.
+ */
+public class ReadException extends InternalException {
+ public ReadException(String message, Throwable e) {
+ super(ErrorCode.READ_EXCEPTION, message, e);
}
- public OneIOException(String message) {
- super(ErrorCode.IO_EXCEPTION, message);
+ public ReadException(String message) {
+ super(ErrorCode.READ_EXCEPTION, message);
}
}
diff --git a/core/src/main/java/org/apache/xtable/exception/OneIOException.java b/core/src/main/java/org/apache/xtable/exception/UpdateException.java
similarity index 72%
rename from core/src/main/java/org/apache/xtable/exception/OneIOException.java
rename to core/src/main/java/org/apache/xtable/exception/UpdateException.java
index b6039b60..f3d32d8b 100644
--- a/core/src/main/java/org/apache/xtable/exception/OneIOException.java
+++ b/core/src/main/java/org/apache/xtable/exception/UpdateException.java
@@ -21,12 +21,16 @@ package org.apache.xtable.exception;
import org.apache.xtable.model.exception.ErrorCode;
import org.apache.xtable.model.exception.InternalException;
-public class OneIOException extends InternalException {
- public OneIOException(String message, Throwable e) {
- super(ErrorCode.IO_EXCEPTION, message, e);
+/**
+ * Exception thrown when there is an error updating a {@link
+ * org.apache.xtable.spi.sync.ConversionTarget}.
+ */
+public class UpdateException extends InternalException {
+ public UpdateException(String message, Throwable e) {
+ super(ErrorCode.UPDATE_EXCEPTION, message, e);
}
- public OneIOException(String message) {
- super(ErrorCode.IO_EXCEPTION, message);
+ public UpdateException(String message) {
+ super(ErrorCode.UPDATE_EXCEPTION, message);
}
}
diff --git a/core/src/main/java/org/apache/xtable/hudi/HudiConversionSource.java b/core/src/main/java/org/apache/xtable/hudi/HudiConversionSource.java
index 9e0a8d88..bdb798f1 100644
--- a/core/src/main/java/org/apache/xtable/hudi/HudiConversionSource.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiConversionSource.java
@@ -43,7 +43,7 @@ import com.google.common.collect.Iterators;
import com.google.common.collect.PeekingIterator;
import org.apache.xtable.collectors.CustomCollectors;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.ReadException;
import org.apache.xtable.model.CommitsBacklog;
import org.apache.xtable.model.InstantsForIncrementalSync;
import org.apache.xtable.model.InternalSnapshot;
@@ -91,7 +91,7 @@ public class HudiConversionSource implements ConversionSource<HoodieInstant> {
completedTimeline
.lastInstant()
.orElseThrow(
- () -> new OneIOException("Unable to read latest commit from Hudi source table"));
+ () -> new ReadException("Unable to read latest commit from Hudi source table"));
List<HoodieInstant> pendingInstants =
activeTimeline
.filterInflightsAndRequested()
diff --git a/core/src/main/java/org/apache/xtable/hudi/HudiConversionTarget.java b/core/src/main/java/org/apache/xtable/hudi/HudiConversionTarget.java
index 424d8228..a778462d 100644
--- a/core/src/main/java/org/apache/xtable/hudi/HudiConversionTarget.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiConversionTarget.java
@@ -81,7 +81,8 @@ import com.google.common.annotations.VisibleForTesting;
import org.apache.xtable.avro.AvroSchemaConverter;
import org.apache.xtable.conversion.PerTableConfig;
import org.apache.xtable.exception.NotSupportedException;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.ReadException;
+import org.apache.xtable.exception.UpdateException;
import org.apache.xtable.model.InternalTable;
import org.apache.xtable.model.TableSyncMetadata;
import org.apache.xtable.model.schema.InternalField;
@@ -304,7 +305,7 @@ public class HudiConversionTarget implements ConversionTarget {
.getExtraMetadata();
}
} catch (IOException ex) {
- throw new OneIOException("Unable to read Hudi commit metadata", ex);
+ throw new ReadException("Unable to read Hudi commit metadata", ex);
}
})
.flatMap(TableSyncMetadata::fromMap));
@@ -359,7 +360,7 @@ public class HudiConversionTarget implements ConversionTarget {
// reuse existing table schema if no schema is provided as part of this commit
schema = new TableSchemaResolver(metaClient).getTableAvroSchema();
} catch (Exception ex) {
- throw new OneIOException("Unable to read Hudi table schema", ex);
+ throw new ReadException("Unable to read Hudi table schema", ex);
}
}
HoodieWriteConfig writeConfig =
@@ -426,7 +427,7 @@ public class HudiConversionTarget implements ConversionTarget {
try {
partitionsToClean = planner.getPartitionPathsToClean(earliestInstant);
} catch (IOException ex) {
- throw new OneIOException("Unable to get partitions to clean", ex);
+ throw new ReadException("Unable to get partitions to clean", ex);
}
if (partitionsToClean.isEmpty()) {
return;
@@ -532,7 +533,7 @@ public class HudiConversionTarget implements ConversionTarget {
activeTimeline.transitionCleanInflightToComplete(
inflightClean, TimelineMetadataUtils.serializeCleanMetadata(cleanMetadata));
} catch (Exception ex) {
- throw new OneIOException("Unable to clean Hudi timeline", ex);
+ throw new UpdateException("Unable to clean Hudi timeline", ex);
}
}
@@ -543,7 +544,7 @@ public class HudiConversionTarget implements ConversionTarget {
HoodieTimelineArchiver archiver = new HoodieTimelineArchiver(config, table);
archiver.archiveIfRequired(engineContext, true);
} catch (IOException ex) {
- throw new OneIOException("Unable to archive Hudi timeline", ex);
+ throw new UpdateException("Unable to archive Hudi timeline", ex);
}
}
diff --git a/core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java
index 1d1b2377..d14ab859 100644
--- a/core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java
@@ -59,8 +59,10 @@ import org.apache.hudi.common.table.view.TableFileSystemView;
import org.apache.hudi.metadata.HoodieTableMetadata;
import org.apache.xtable.collectors.CustomCollectors;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.exception.ReadException;
import org.apache.xtable.model.InternalTable;
+import org.apache.xtable.model.exception.ParseException;
import org.apache.xtable.model.schema.InternalPartitionField;
import org.apache.xtable.model.schema.SchemaVersion;
import org.apache.xtable.model.stat.PartitionValue;
@@ -117,7 +119,7 @@ public class HudiDataFileExtractor implements AutoCloseable {
: FSUtils.getAllPartitionPaths(engineContext, metadataConfig, basePath.toString());
return getInternalDataFilesForPartitions(allPartitionPaths, table);
} catch (IOException ex) {
- throw new OneIOException(
+ throw new ReadException(
"Unable to read partitions for table " + metaClient.getTableConfig().getTableName(), ex);
}
}
@@ -245,11 +247,11 @@ public class HudiDataFileExtractor implements AutoCloseable {
// these do not impact the base files
break;
default:
- throw new OneIOException("Unexpected commit type " + instant.getAction());
+ throw new NotSupportedException("Unexpected commit type " + instant.getAction());
}
return AddedAndRemovedFiles.builder().added(addedFiles).removed(removedFiles).build();
} catch (IOException ex) {
- throw new OneIOException("Unable to read commit metadata for commit " + instant, ex);
+ throw new ReadException("Unable to read commit metadata for commit " + instant, ex);
}
}
@@ -269,7 +271,7 @@ public class HudiDataFileExtractor implements AutoCloseable {
}
return new URI(basePathUri.getScheme(), path, null).toString();
} catch (URISyntaxException e) {
- throw new OneIOException("Unable to parse path " + path, e);
+ throw new ParseException("Unable to parse path " + path, e);
}
})
.filter(uri -> !FSUtils.isLogFile(new Path(uri).getName()))
@@ -372,7 +374,7 @@ public class HudiDataFileExtractor implements AutoCloseable {
}
fileSystemViewManager.close();
} catch (Exception e) {
- throw new OneIOException(
+ throw new ReadException(
"Could not close table metadata for table " + metaClient.getTableConfig().getTableName());
}
}
diff --git a/core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java b/core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java
index 1c3d237d..1ac1b5aa 100644
--- a/core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java
@@ -35,7 +35,7 @@ import org.apache.hudi.common.table.HoodieTableMetaClient;
import org.apache.hudi.common.util.VisibleForTesting;
import org.apache.hudi.exception.TableNotFoundException;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.UpdateException;
import org.apache.xtable.model.InternalTable;
import org.apache.xtable.model.schema.InternalField;
import org.apache.xtable.model.schema.InternalPartitionField;
@@ -117,7 +117,7 @@ class HudiTableManager {
.collect(Collectors.joining(",")))
.initTable(configuration, tableDataPath);
} catch (IOException ex) {
- throw new OneIOException("Unable to initialize Hudi table", ex);
+ throw new UpdateException("Unable to initialize Hudi table", ex);
}
}
diff --git a/core/src/main/java/org/apache/xtable/iceberg/IcebergConversionSource.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergConversionSource.java
index 2308b839..330d9f33 100644
--- a/core/src/main/java/org/apache/xtable/iceberg/IcebergConversionSource.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergConversionSource.java
@@ -37,7 +37,7 @@ import org.apache.iceberg.io.CloseableIterable;
import org.apache.iceberg.io.FileIO;
import org.apache.xtable.conversion.PerTableConfig;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.ReadException;
import org.apache.xtable.model.CommitsBacklog;
import org.apache.xtable.model.InstantsForIncrementalSync;
import org.apache.xtable.model.InternalSnapshot;
@@ -150,7 +150,7 @@ public class IcebergConversionSource implements ConversionSource<Snapshot> {
}
partitionedDataFiles = PartitionFileGroup.fromFiles(irFiles);
} catch (IOException e) {
- throw new OneIOException("Failed to fetch current snapshot files from Iceberg source", e);
+ throw new ReadException("Failed to fetch current snapshot files from Iceberg source", e);
}
return InternalSnapshot.builder()
diff --git a/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java
index 9fd60bf7..80e1559f 100644
--- a/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java
@@ -28,7 +28,7 @@ import org.apache.iceberg.*;
import org.apache.iceberg.io.CloseableIterable;
import org.apache.xtable.exception.NotSupportedException;
-import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.exception.ReadException;
import org.apache.xtable.model.InternalTable;
import org.apache.xtable.model.storage.DataFilesDiff;
import org.apache.xtable.model.storage.FilesDiff;
@@ -54,7 +54,7 @@ public class IcebergDataFileUpdatesSync {
.map(FileScanTask::file)
.forEach(file -> previousFiles.put(file.path().toString(), file));
} catch (Exception e) {
- throw new OneIOException("Failed to iterate through Iceberg data files", e);
+ throw new ReadException("Failed to iterate through Iceberg data files", e);
}
FilesDiff<InternalDataFile, DataFile> diff =