quantum-elixir / quantum-core

:watch: Cron-like job scheduler for Elixir
https://hexdocs.pm/quantum/
Apache License 2.0
2.3k stars 147 forks source link

Synchronous job management API #499

Open LostKobrakai opened 2 years ago

LostKobrakai commented 2 years ago

I'm testing that my application adds jobs to quantum correctly based on some business restrictions and I'm using on_exit to remove jobs again after tests. This however is causing issues with the ecto sandbox, because even after calling Scheduler.delete_job the job has not been removed and jobs access the db even after being supposed to be removed. Currently I need to add a timeout here to delay my on_exit callback. While working on said feature I had similar issues with run_job, which also is async.

It would be great if the async nature of those job APIs would be highlighted in the docs and I'd really like to see options to have those operations be done synchronous as well.

maennchen commented 2 years ago

@LostKobrakai Yes, all jobs are managed async.

For the docs, a PR is very welcome.

I'm thinking about how we could block management calls like add / delete etc. Since this whole thing is based on GenStage and information flows towards the end of the chain, blocking until everything is fully removed is quite hard. Especially since the executor could be behind in time and working on a backlog of executions.

I'm generally open to discussing possible solutions to this, but I don't see an easy solution to this and will for sure not have time to implement it.