Skip to content

Cannot rerun courses - authz role assignment expects rerun to already exist #38826

Description

@bradenmacdonald

When trying to re-run any course on a master devstack, I'm getting this traceback. It seems that the authz code is trying to find the CourseOverview to create the role entry for the new course before the re-run has actually been created.

INFO 27 [openedx.core.djangoapps.content.course_overviews.models] Attempting to load CourseOverview for course course-v1:UniversityX+PHYS835+2028 from modulestore.
INFO 27 [openedx.core.djangoapps.content.course_overviews.models] Could not create CourseOverview for non-existent course: course-v1:UniversityX+PHYS835+2028

Traceback (most recent call last):
...
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 322, in course_handler
    return _create_or_rerun_course(request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 1198, in _create_or_rerun_course
    destination_course_key = rerun_course(request.user, source_course_key, org, course, run, fields)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 1328, in rerun_course
    add_instructor(destination_course_key, user, user)
  File "/openedx/edx-platform/cms/djangoapps/contentstore/utils.py", line 115, in add_instructor
    CourseInstructorRole(course_key).add_users(new_instructor)
  File "/openedx/edx-platform/common/djangoapps/student/roles.py", line 524, in add_users
    self._authz_add_users(users)
  File "/openedx/edx-platform/common/djangoapps/student/roles.py", line 493, in _authz_add_users
    authz_add_role(
  File "/openedx/edx-platform/common/djangoapps/student/roles.py", line 69, in authz_add_role
    authz_api.assign_role_to_user_in_scope(
  File "/openedx/venv/lib/python3.12/site-packages/openedx_authz/api/users.py", line 84, in assign_role_to_user_in_scope
    return assign_role_to_subject_in_scope(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.12/site-packages/openedx_authz/api/roles.py", line 232, in assign_role_to_subject_in_scope
    extended_rule = ExtendedCasbinRule.create_based_on_policy(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.12/site-packages/openedx_authz/models/core.py", line 229, in create_based_on_policy
    "scope": Scope.objects.get_or_create_for_external_key(scope),
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.12/site-packages/openedx_authz/models/core.py", line 77, in get_or_create_for_external_key
    return scope_class.get_or_create_for_external_key(scope_data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.12/site-packages/openedx_authz/models/scopes.py", line 140, in get_or_create_for_external_key
    course_overview = CourseOverview.get_from_id(course_key)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/lib/cache_utils.py", line 73, in decorator
    result = wrapped(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/content/course_overviews/models.py", line 431, in get_from_id
    return course_overview or cls.load_from_module_store(course_id)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/content/course_overviews/models.py", line 373, in load_from_module_store
    raise cls.DoesNotExist()

If I disable the authz.enable_course_authoring waffle flag, then it works fine.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions