Cron-Control icon indicating copy to clipboard operation
Cron-Control copied to clipboard

Event hash mismatches cause perpetually failed events

Open WPprodigy opened this issue 3 years ago • 3 comments

Scenario: Somebody does a Search/Replace on the DB, and replaces say wp_ with wp_3. Other problems with that aside, events in the cron control table now have an action of wp_4_update_themes but a hash of 1415f2766f26fbe75db22be4aae62aeb(which was made from wp_update_themes).

Since get-due-batch re-hashed before sending (md5( $event['action'] )), the runner will then pass the new hash. But said event won't be found and the job will fail. However, the event is still due and at the top of the "due now" list. So the runner will keep trying over and over again to run the doomed event each batch.

WPprodigy avatar Nov 19 '21 22:11 WPprodigy

Solutions:

  1. Sanity check in list-due-batch, perhaps if there is a relatively old event at the top it should scan the batch and resolve entries that have mismatches.

  2. list-due-batch should eventually be querying the table directly, and it can just send along the action_hashed from the table directly. This way the runner always gets valid args that match something in the table.

WPprodigy avatar Nov 19 '21 22:11 WPprodigy

Leaning towards just giving the runner an event ID to run: cron-control orchestrate runner-only run 123

it doesn't need all the other info. And w/ an ID, we can always be sure we'll end up with the right event.

WPprodigy avatar Dec 17 '21 19:12 WPprodigy

This problem also creeps up if the cron control table is set to an incorrect encoding like Latin1.

So when a cron event was added with args containing a UTF8 string, the serialized data can be corrupted and the runner is again unable to run the event because the instance doesn't match up.

WPprodigy avatar Jan 16 '23 21:01 WPprodigy