fix: Rename some tasks to match new import paths (#26236)
Several tasks are explicitly named as (or like) their old, deprecated import path. The issue here is that django-user-tasks listens for task invocations, and attempts to import the task based on its name. If the task name is completely wrong, user-tasks will catch the ImportError and move on. If the task is a valid *deprecated* import, though, then user-tasks will choke on the raised `DeprecatedEdxPlatformImportError`. Thus, we must rename three tasks to their new full path: 1. entitlements.expire_old_enrollments 2. third_party_auth.fetch_saml_metadata 3. student.send_activation_email The first two are run daily, and so are safe to be renamed in place. The third task must be renamed using an expand-contract pattern; otherwise, we would drop hundreds of tasks during the App vs. Worker out-of-sync version window that happens at deployments. This commit is the expand phase.
This commit is contained in:
@@ -19,11 +19,7 @@ LOGGER = get_task_logger(__name__)
|
||||
MAX_RETRIES = 11
|
||||
|
||||
|
||||
@shared_task(
|
||||
bind=True,
|
||||
ignore_result=True,
|
||||
name='entitlements.expire_old_entitlements',
|
||||
)
|
||||
@shared_task(bind=True, ignore_result=True)
|
||||
@set_code_owner_attribute
|
||||
def expire_old_entitlements(self, start, end, logid='...'):
|
||||
"""
|
||||
|
||||
@@ -20,9 +20,13 @@ from openedx.core.lib.celery.task_utils import emulate_http_request
|
||||
log = logging.getLogger('edx.celery.task')
|
||||
|
||||
|
||||
@shared_task(bind=True, name='student.send_activation_email')
|
||||
# This is a task function that is in the process of being renamed.
|
||||
# In order to avoid dropping tasks during deployment, we have to register it twice,
|
||||
# once under each name. This allows us to cut from one name to the other safely.
|
||||
# Once we have fully switched to the new name, we can go back to registering
|
||||
# this task function with a simple decorator.
|
||||
@set_code_owner_attribute
|
||||
def send_activation_email(self, msg_string, from_address=None):
|
||||
def _send_activation_email(self, msg_string, from_address=None):
|
||||
"""
|
||||
Sending an activation email to the user.
|
||||
"""
|
||||
@@ -67,3 +71,15 @@ def send_activation_email(self, msg_string, from_address=None):
|
||||
dest_addr,
|
||||
)
|
||||
raise Exception
|
||||
|
||||
|
||||
_OLD_TASK_NAME = 'student.send_activation_email'
|
||||
_NEW_TASK_NAME = 'common.djangoapps.student.tasks.send_activation_email'
|
||||
|
||||
|
||||
# Register task under both its old and new names,
|
||||
# but expose only the old-named task for invocation.
|
||||
# -> Next step: Once we deploy and teach Celery workers the new name,
|
||||
# set `send_activation_email` to the new-named task.
|
||||
send_activation_email = shared_task(bind=True, name=_OLD_TASK_NAME)(_send_activation_email)
|
||||
shared_task(bind=True, name=_NEW_TASK_NAME)(_send_activation_email)
|
||||
|
||||
@@ -31,7 +31,7 @@ class MetadataParseError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
@shared_task(name='third_party_auth.fetch_saml_metadata')
|
||||
@shared_task
|
||||
@set_code_owner_attribute
|
||||
def fetch_saml_metadata():
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user