From 9a6cdbf8e2a8551c6e1de46f7ade2d4c9f31c143 Mon Sep 17 00:00:00 2001 From: David Ormsbee Date: Wed, 22 Jan 2025 10:38:10 -0500 Subject: [PATCH] perf: upgrade XBlock to 5.1.1 for caching unknown tags This should improve performance for courseware operations when there is content that doesn't map to any existing XBlocks in the system. This usually happens to old courses when custom XBlock types are deprecated and removed, or when a course is imported from another instance with a different set of installed XBlocks. --- requirements/edx/base.txt | 2 +- requirements/edx/development.txt | 2 +- requirements/edx/doc.txt | 2 +- requirements/edx/testing.txt | 2 +- xmodule/tests/test_export.py | 19 ++++++++++++++++--- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index dd7aac186e..4861b7be1f 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -1256,7 +1256,7 @@ wheel==0.45.1 # via django-pipeline wrapt==1.17.2 # via -r requirements/edx/kernel.in -xblock[django]==5.1.0 +xblock[django]==5.1.1 # via # -r requirements/edx/kernel.in # acid-xblock diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 070b898e74..ae377bd5cc 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -2253,7 +2253,7 @@ wrapt==1.17.2 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # astroid -xblock[django]==5.1.0 +xblock[django]==5.1.1 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index 8529d74127..354e85c98f 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -1583,7 +1583,7 @@ wrapt==1.17.2 # via # -r requirements/edx/base.txt # astroid -xblock[django]==5.1.0 +xblock[django]==5.1.1 # via # -r requirements/edx/base.txt # acid-xblock diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 2e9ff968b7..799f8b16ed 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1673,7 +1673,7 @@ wrapt==1.17.2 # via # -r requirements/edx/base.txt # astroid -xblock[django]==5.1.0 +xblock[django]==5.1.1 # via # -r requirements/edx/base.txt # acid-xblock diff --git a/xmodule/tests/test_export.py b/xmodule/tests/test_export.py index 5a52d145a5..e4a5cbcdae 100644 --- a/xmodule/tests/test_export.py +++ b/xmodule/tests/test_export.py @@ -143,9 +143,22 @@ class RoundTripTestCase(unittest.TestCase): print("Checking block equality") for location in initial_import.modules[course_id].keys(): - print(("Checking", location)) - assert blocks_are_equivalent(initial_import.modules[course_id][location], - second_import.modules[course_id][location]) + initial_block = initial_import.modules[course_id][location] + reimported_block = second_import.modules[course_id][location] + if location.block_type == "error": + # Error blocks store their stacktrace as a field on the block + # itself. We cache failed XBlock tag -> class lookups, so a + # PluginError raised from the uncached state vs cached state + # will generate different stacktraces, making the two blocks + # "different" as far as blocks_are_equivalent() is concerned. It + # doesn't *really* matter if the stacktraces are different + # though, so we'll do a much less thorough comparison for error + # blocks: + assert type(initial_block) == type(reimported_block) # pylint:disable=unidiomatic-typecheck + assert initial_block.display_name == reimported_block.display_name + else: + print(("Checking", location)) + assert blocks_are_equivalent(initial_block, reimported_block) class TestEdxJsonEncoder(unittest.TestCase):