You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by yi...@apache.org on 2024/05/14 21:16:41 UTC
(hudi) 13/14: [HUDI-7163] Fix not parsable text DateTimeParseException when compact (#10220)
This is an automated email from the ASF dual-hosted git repository.
yihua pushed a commit to branch branch-0.x
in repository https://gitbox.apache.org/repos/asf/hudi.git
commit 80990d4232577a6e7dbf79fde2e312fda6d9ddcc
Author: wuzhenhua <10...@users.noreply.github.com>
AuthorDate: Sun Mar 10 04:49:54 2024 +0800
[HUDI-7163] Fix not parsable text DateTimeParseException when compact (#10220)
---
.../compact/ScheduleCompactionActionExecutor.java | 9 ++---
.../java/org/apache/hudi/util/StreamerUtil.java | 39 ++++++++++------------
2 files changed, 19 insertions(+), 29 deletions(-)
diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/compact/ScheduleCompactionActionExecutor.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/compact/ScheduleCompactionActionExecutor.java
index f529285e29d..e7d1138fd77 100644
--- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/compact/ScheduleCompactionActionExecutor.java
+++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/compact/ScheduleCompactionActionExecutor.java
@@ -236,12 +236,7 @@ public class ScheduleCompactionActionExecutor<T, I, K, O> extends BaseActionExec
}
private Long parsedToSeconds(String time) {
- long timestamp;
- try {
- timestamp = HoodieActiveTimeline.parseDateFromInstantTime(time).getTime() / 1000;
- } catch (ParseException e) {
- throw new HoodieCompactionException(e.getMessage(), e);
- }
- return timestamp;
+ return HoodieActiveTimeline.parseDateFromInstantTimeSafely(time).orElseThrow(() -> new HoodieCompactionException("Failed to parse timestamp " + time))
+ .getTime() / 1000;
}
}
diff --git a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/util/StreamerUtil.java b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/util/StreamerUtil.java
index 40519ae4ed7..176ba61b2b1 100644
--- a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/util/StreamerUtil.java
+++ b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/util/StreamerUtil.java
@@ -65,7 +65,6 @@ import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
-import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
@@ -328,34 +327,30 @@ public class StreamerUtil {
* Returns the median instant time between the given two instant time.
*/
public static Option<String> medianInstantTime(String highVal, String lowVal) {
- try {
- long high = HoodieActiveTimeline.parseDateFromInstantTime(highVal).getTime();
- long low = HoodieActiveTimeline.parseDateFromInstantTime(lowVal).getTime();
- ValidationUtils.checkArgument(high > low,
- "Instant [" + highVal + "] should have newer timestamp than instant [" + lowVal + "]");
- long median = low + (high - low) / 2;
- final String instantTime = HoodieActiveTimeline.formatDate(new Date(median));
- if (HoodieTimeline.compareTimestamps(lowVal, HoodieTimeline.GREATER_THAN_OR_EQUALS, instantTime)
- || HoodieTimeline.compareTimestamps(highVal, HoodieTimeline.LESSER_THAN_OR_EQUALS, instantTime)) {
- return Option.empty();
- }
- return Option.of(instantTime);
- } catch (ParseException e) {
- throw new HoodieException("Get median instant time with interval [" + lowVal + ", " + highVal + "] error", e);
+ long high = HoodieActiveTimeline.parseDateFromInstantTimeSafely(highVal)
+ .orElseThrow(() -> new HoodieException("Get instant time diff with interval [" + highVal + "] error")).getTime();
+ long low = HoodieActiveTimeline.parseDateFromInstantTimeSafely(lowVal)
+ .orElseThrow(() -> new HoodieException("Get instant time diff with interval [" + lowVal + "] error")).getTime();
+ ValidationUtils.checkArgument(high > low,
+ "Instant [" + highVal + "] should have newer timestamp than instant [" + lowVal + "]");
+ long median = low + (high - low) / 2;
+ final String instantTime = HoodieActiveTimeline.formatDate(new Date(median));
+ if (HoodieTimeline.compareTimestamps(lowVal, HoodieTimeline.GREATER_THAN_OR_EQUALS, instantTime)
+ || HoodieTimeline.compareTimestamps(highVal, HoodieTimeline.LESSER_THAN_OR_EQUALS, instantTime)) {
+ return Option.empty();
}
+ return Option.of(instantTime);
}
/**
* Returns the time interval in seconds between the given instant time.
*/
public static long instantTimeDiffSeconds(String newInstantTime, String oldInstantTime) {
- try {
- long newTimestamp = HoodieActiveTimeline.parseDateFromInstantTime(newInstantTime).getTime();
- long oldTimestamp = HoodieActiveTimeline.parseDateFromInstantTime(oldInstantTime).getTime();
- return (newTimestamp - oldTimestamp) / 1000;
- } catch (ParseException e) {
- throw new HoodieException("Get instant time diff with interval [" + oldInstantTime + ", " + newInstantTime + "] error", e);
- }
+ long newTimestamp = HoodieActiveTimeline.parseDateFromInstantTimeSafely(newInstantTime)
+ .orElseThrow(() -> new HoodieException("Get instant time diff with interval [" + oldInstantTime + ", " + newInstantTime + "] error")).getTime();
+ long oldTimestamp = HoodieActiveTimeline.parseDateFromInstantTimeSafely(oldInstantTime)
+ .orElseThrow(() -> new HoodieException("Get instant time diff with interval [" + oldInstantTime + ", " + newInstantTime + "] error")).getTime();
+ return (newTimestamp - oldTimestamp) / 1000;
}
public static Option<Transformer> createTransformer(List<String> classNames) throws IOException {