Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bugfix] Replace CronUtils library #196

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

maxim-mityutko
Copy link
Contributor

@maxim-mityutko maxim-mityutko commented Jan 10, 2025

Description

As stated in the #195, using CronUtils library on DBR 15.4 is impossible due to lack of access to JVM. This library is available for Java only. Hence I've implemented custom code to convert between unix cron and quartz cron and removed the dependency on the said library.

Currently not all features of the Quartz expression are supported, namely: L W and # keys.

Related Issue

#195

Motivation and Context

Brickflow can't be used with DBR 15.4 and future versions as long as plugins are required.

How Has This Been Tested?

  • unit tests
  • deploy existing workflow and test in DBX

Screenshots (if appropriate):

image

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

@maxim-mityutko maxim-mityutko changed the title [fix] Replace CronUtils library [bugfix] Replace CronUtils library Jan 10, 2025
@maxim-mityutko
Copy link
Contributor Author

hi @pariksheet , @asingamaneni , need your opinion.
The code is working on DBR 15.4, the workflow was executed successfully and the quartz-unix-quartz conversion is tested with a bunch of diff scenarious, however
I have not implemented the support for Quartz keys: L, W, #. They are a bit of a pain...

L (“last”) - has different meaning in each of the two fields in which it is allowed. For example, 
the value “L” in the day-of-month field means “the last day of the month” - day 31 for January, 
day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means “7” 
or “SAT”. But if used in the day-of-week field after another value, it means “the last xxx day of the 
month” - for example “6L” means “the last friday of the month”. You can also specify an offset from 
the last day of the month, such as “L-3” which would mean the third-to-last day of the calendar month. 
When using the ‘L’ option, it is important not to specify lists, or ranges of values, as you’ll get 
confusing/unexpected results.

W (“weekday”) - used to specify the weekday (Monday-Friday) nearest the given day. As an example, 
if you were to specify “15W” as the value for the day-of-month field, the meaning is: “the nearest weekday 
to the 15th of the month”. So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th 
is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday 
the 15th. However if you specify “1W” as the value for day-of-month, and the 1st is a Saturday, the 
trigger will fire on Monday the 3rd, as it will not ‘jump’ over the boundary of a month’s days. The ‘W’ 
character can only be specified when the day-of-month is a single day, not a range or list of days.

The 'L' and 'W' characters can also be combined in the day-of-month field to yield 'LW', which translates 
to *"last weekday of the month"*.
# - used to specify “the nth” XXX day of the month. For example, the value of “6#3” in the day-of-week 
field means “the third Friday of the month” (day 6 = Friday and “#3” = the 3rd one in the month). Other 
examples: “2#1” = the first Monday of the month and “4#5” = the fifth Wednesday of the month. Note that 
if you specify “#5” and there is not 5 of the given day-of-week in the month, then no firing will occur that month.

Do you think we need to aim for the full compatibility with Quartz, or whatever is there is enough?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant