raminqaf commented on code in PR #27132:
URL: https://github.com/apache/flink/pull/27132#discussion_r2444519329


##########
flink-table/flink-table-common/src/main/java/org/apache/flink/table/utils/IntervalFreshnessUtils.java:
##########
@@ -42,35 +37,28 @@ public class IntervalFreshnessUtils {
 
     private IntervalFreshnessUtils() {}
 
-    @VisibleForTesting
-    static void validateIntervalFreshness(IntervalFreshness intervalFreshness) 
{
-        if (!NumberUtils.isParsable(intervalFreshness.getInterval())) {
-            throw new ValidationException(
-                    String.format(
-                            "The interval freshness value '%s' is an illegal 
integer type value.",
-                            intervalFreshness.getInterval()));
-        }
-
-        if (!NumberUtils.isDigits(intervalFreshness.getInterval())) {
-            throw new ValidationException(
-                    "The freshness interval currently only supports integer 
type values.");
-        }
-    }
-
-    public static Duration convertFreshnessToDuration(IntervalFreshness 
intervalFreshness) {
-        // validate the freshness value firstly
-        validateIntervalFreshness(intervalFreshness);
-
-        long interval = Long.parseLong(intervalFreshness.getInterval());
+    /**
+     * Validates that the given freshness can be converted to a cron 
expression in full refresh
+     * mode. Since freshness and cron expression cannot be converted 
equivalently, there are
+     * currently only a limited patterns of freshness that are supported.
+     *
+     * @param intervalFreshness the freshness to validate
+     * @throws ValidationException if the freshness cannot be converted to a 
valid cron expression
+     */
+    public static void validateFreshnessForCron(IntervalFreshness 
intervalFreshness) {
         switch (intervalFreshness.getTimeUnit()) {
-            case DAY:
-                return Duration.ofDays(interval);
-            case HOUR:
-                return Duration.ofHours(interval);
-            case MINUTE:
-                return Duration.ofMinutes(interval);
             case SECOND:
-                return Duration.ofSeconds(interval);
+                validateCronConstraints(intervalFreshness, 
SECOND_CRON_UPPER_BOUND);
+                break;
+            case MINUTE:
+                validateCronConstraints(intervalFreshness, 
MINUTE_CRON_UPPER_BOUND);
+                break;
+            case HOUR:
+                validateCronConstraints(intervalFreshness, 
HOUR_CRON_UPPER_BOUND);
+                break;
+            case DAY:
+                validateDayConstraints(intervalFreshness);
+                break;

Review Comment:
   I think the reason this validation is here, its because it is used in the 
internal API. I can move this to the IntervalFreshness class and get rid of the 
IntervalFreshnessUtils entirely.



##########
flink-table/flink-table-common/src/main/java/org/apache/flink/table/utils/IntervalFreshnessUtils.java:
##########
@@ -42,35 +37,28 @@ public class IntervalFreshnessUtils {
 
     private IntervalFreshnessUtils() {}
 
-    @VisibleForTesting
-    static void validateIntervalFreshness(IntervalFreshness intervalFreshness) 
{
-        if (!NumberUtils.isParsable(intervalFreshness.getInterval())) {
-            throw new ValidationException(
-                    String.format(
-                            "The interval freshness value '%s' is an illegal 
integer type value.",
-                            intervalFreshness.getInterval()));
-        }
-
-        if (!NumberUtils.isDigits(intervalFreshness.getInterval())) {
-            throw new ValidationException(
-                    "The freshness interval currently only supports integer 
type values.");
-        }
-    }
-
-    public static Duration convertFreshnessToDuration(IntervalFreshness 
intervalFreshness) {
-        // validate the freshness value firstly
-        validateIntervalFreshness(intervalFreshness);
-
-        long interval = Long.parseLong(intervalFreshness.getInterval());
+    /**
+     * Validates that the given freshness can be converted to a cron 
expression in full refresh
+     * mode. Since freshness and cron expression cannot be converted 
equivalently, there are
+     * currently only a limited patterns of freshness that are supported.
+     *
+     * @param intervalFreshness the freshness to validate
+     * @throws ValidationException if the freshness cannot be converted to a 
valid cron expression
+     */
+    public static void validateFreshnessForCron(IntervalFreshness 
intervalFreshness) {
         switch (intervalFreshness.getTimeUnit()) {
-            case DAY:
-                return Duration.ofDays(interval);
-            case HOUR:
-                return Duration.ofHours(interval);
-            case MINUTE:
-                return Duration.ofMinutes(interval);
             case SECOND:
-                return Duration.ofSeconds(interval);
+                validateCronConstraints(intervalFreshness, 
SECOND_CRON_UPPER_BOUND);
+                break;
+            case MINUTE:
+                validateCronConstraints(intervalFreshness, 
MINUTE_CRON_UPPER_BOUND);
+                break;
+            case HOUR:
+                validateCronConstraints(intervalFreshness, 
HOUR_CRON_UPPER_BOUND);
+                break;
+            case DAY:
+                validateDayConstraints(intervalFreshness);
+                break;

Review Comment:
   I think the reason this validation is here, its because it is used in the 
internal API. I can move this to the IntervalFreshness class and get rid of the 
IntervalFreshnessUtils entirely. WDYT?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to