Skip to content

Release 0.53.9#2949

Merged
odlbot merged 11 commits intoreleasefrom
release-candidate
Feb 11, 2026
Merged

Release 0.53.9#2949
odlbot merged 11 commits intoreleasefrom
release-candidate

Conversation

@odlbot
Copy link
Contributor

@odlbot odlbot commented Feb 11, 2026

Chris Chudzicki

Ahtesham Quraish

Matt Bertrand

Tobias Macey

Carey P Gumaer

Jon Kafton

Nathan Levesque

ChristopherChudzicki and others added 11 commits February 10, 2026 10:52
* update smoot-design for new alerts

* more smoot bumps

* whoopsie-daisy

* whooooopsie

* remove an unnecessary element

* fix a test

* pin smoot to a real version
* Switch to v3 for program enrollments

* Feedback

* Feedback

* Fix tests
* Do not use desctructing for build time static replacement

* Destructuring is ok in server components, but consistency here should serve as a reminder
* reorganize UnstyledRawHtml, allow some extra tags

* require https
* add context menu items to link to product pages

* remove titleAction argument as it's not necessary anymore

* fix logic surrounding marketing urls and add tests

* program title link should go to program dashboard

* check include_in_learn_catalog before adding show course details to context menu

* remove unnecessary array wrapper

* remove unnecessary router usage

* card title should perform enrollment when applicable

* fix tests after rebase

* fix issue with getting legacy product page URL from v3 program enrollment

* use readable id to construct legacy program product page url
* fix: change byline author behaviour

---------


Co-authored-by: Ahtesham Quraish <ahtesham.quraish@192.168.1.6>
* add route for editing article drafts

* restricted route, simplify

* rename draftlisting page

* invariant, use url funcs
@github-actions
Copy link

OpenAPI Changes

Show/hide 11 changes: 0 error, 0 warning, 11 info
11 changes: 0 error, 0 warning, 11 info
info	[response-optional-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/articles/
		added the optional property 'results/items/author_name' to the response with the '200' status

info	[new-optional-request-property] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/articles/
		added the new optional request property 'author_name' (media type: application/json)

info	[new-optional-request-property] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/articles/
		added the new optional request property 'author_name' (media type: application/x-www-form-urlencoded)

info	[new-optional-request-property] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/articles/
		added the new optional request property 'author_name' (media type: multipart/form-data)

info	[response-optional-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/articles/
		added the optional property 'author_name' to the response with the '201' status

info	[response-optional-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/articles/detail/{identifier}/
		added the optional property 'author_name' to the response with the '200' status

info	[response-optional-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/articles/{id}/
		added the optional property 'author_name' to the response with the '200' status

info	[new-optional-request-property] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/articles/{id}/
		added the new optional request property 'author_name' (media type: application/json)

info	[new-optional-request-property] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/articles/{id}/
		added the new optional request property 'author_name' (media type: application/x-www-form-urlencoded)

info	[new-optional-request-property] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/articles/{id}/
		added the new optional request property 'author_name' (media type: multipart/form-data)

info	[response-optional-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/articles/{id}/
		added the optional property 'author_name' to the response with the '200' status


Unexpected changes? Ensure your branch is up-to-date with main (consider rebasing).

Comment on lines +368 to +371
redis_cache = caches["redis"]
if not redis_cache.add(
cache_key,
True, # noqa: FBT003
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: A cache key is set before enqueuing a task. If the task fails, the key blocks retries for 5 minutes, potentially causing missing content files.
Severity: MEDIUM

Suggested Fix

To ensure task failures don't block retries, consider moving the cache key logic. One approach is to set the cache key at the beginning of the Celery task itself, rather than before dispatching it. Alternatively, add a robust retry mechanism to the import_content_files task using Celery's autoretry_for decorator to handle transient failures gracefully.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.

Location: learning_resources/etl/loaders.py#L368-L371

Potential issue: The `enqueue_content_tasks` function sets a cache key using
`redis_cache.add()` before the `import_content_files` Celery task is enqueued. If this
task fails for any reason (e.g., worker crash), the cache key persists for its
300-second timeout. During this window, any subsequent calls to `enqueue_content_tasks`
for the same resource will find the key and return early, preventing a new task from
being queued. Since the task lacks an automatic retry policy, this can lead to content
files remaining missing for up to 5 minutes.

Did we get this right? 👍 / 👎 to inform future reviews.

@odlbot odlbot merged commit d523e1b into release Feb 11, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants