humanmade / humanmade/Cavalcade-Runner
Improve logic for setting next run time in `Job::reschedule()`.
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 56
- Forks
- 27
- PR merge metrics
- No merged PRs in 30d
Description
Job::reschedule() uses the value nextrun + interval when calculating the new time to run the job.
https://github.com/humanmade/Cavalcade-Runner/blob/master/inc/class-job.php#L84
This causes the jobs to run constantly if the task is originally scheduled before the current timestamp until nextrun + interval is after the current time stamp.
To reproduce schedule an event with wp_schedule_event( 0, 'hourly', 'pwcc_every_hour' ) as a shorthand way of setting the task to start immediately and then once every hour. The outcome is:
- the action
pwcc_every_hourfires 426,388 consecutively - the action
pwcc_every_hourcontinues firing once each hour
A better approach would be to record the start time when the lock is obtained and add the interval to that when rescheduling.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in inc/class-job.php at line 84 and inspect how Job::reschedule() calculates the next run after obtaining the lock. Reproduce the issue with wp_schedule_event( 0, 'hourly', 'pwcc_every_hour' ); done means the action no longer fires continuously and resumes at hourly intervals based on the current run.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 45/100