Skip to content
Snippets Groups Projects
Unverified Commit b626a43f authored by Kyle McCormick's avatar Kyle McCormick Committed by GitHub
Browse files

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.
parent 29d715d8
No related branches found
Tags release-2021-04-26-14.10
No related merge requests found
......@@ -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():
"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment