Inquiry about how cyclic tasks are handled in Open edX

Hey everyone,

I’ve recently been informed about a bug with the platform I’m working on. Namely, planned emails from the Communications MFE weren’t being sent out.

So I scoured through edx-platform’s code and realized that the Scheduled Tasks are just saved in the DB as objects and the function - process_scheduled_instructor_tasks found in lms/djangoapps/instructor_task/api.py submits them accordingly.

This function however, from what I see can ONLY be called from a django management command?!

Am I missing something or is Open edX shipped with this but requires the platform operator to wire some kind of beat service to that? I later found this related page (and another post on here regarding why celery beat was not chosen):

I am just surprised that this feature is shipped with a platform as a silent failure without explicit warnings.

I already set up celery beat for some other custom parts of the platform and am planning to wire it together with this function but I am looking for a word on whether I missed some config tutorial or this is just not stated.

@dave - do you know anything here, or could tag someone else in?

Maybe @omar would know about this area?

I haven’t seen this new feature.

This feature has traces back to this pull request which has been done by the 2U/edX team in 2022:

Not sure who’s still there in 2U from the original contributors, but it’s worth a ping.

@jhynes if you’re still active here, please take a look.