Skip to content

fix(core): use a separate worker to execute the call-on-start endpoints - #308

Merged
ketiltrout merged 1 commit into
chime-upgradefrom
fix_endpoint_init
Sep 23, 2026
Merged

ketiltrout merged 1 commit into
chime-upgradefrom
fix_endpoint_init

Conversation

@ketiltrout

Copy link
Copy Markdown
Member

I hadn't appreciated that the Sanic manager wouldn't actually start processes until the "main_process_ready" hook had returned. As a result, calling "_call_endpoints_on_start" at the end of the hook meant that all the call-on-start endpoints would timeout due to the qworker not running while this function was being executed.

The solution is to execute "_call_endpoints_on_start" in a separate short-lived Sanic worker (called "init-endpoints"). Then this function will be executed asynchronously to the qworker and is able to wait for the qworker to start-up.

This behviour essentially re-creates the pre-upgrade behaviour, where cocod would:

  1. start the qworker process
  2. execute _call_endpoints_on_start in the main thread
  3. hand the main thread over to Sanic

I hadn't appreciated that the Sanic manager wouldn't actually start
processes until the "main_process_ready" hook had returned.  As a result,
calling "_call_endpoints_on_start" at the end of the hook meant that
all the call-on-start endpoints would timeout due to the qworker not
running while this function was being executed.

The solution is to execute "_call_endpoints_on_start" in a separate
short-lived Sanic worker (called "init-endpoints").  Then this function
will be executed asynchronously to the qworker and is able to wait for
the qworker to start-up.

This behviour essentially re-creates the pre-upgrade behaviour, where
cocod would:

1. start the qworker process
2. execute _call_endpoints_on_start in the main thread
3. hand the main thread over to Sanic
@ketiltrout
ketiltrout merged commit a65dc05 into chime-upgrade Sep 23, 2026
5 checks passed
@ketiltrout
ketiltrout deleted the fix_endpoint_init branch September 23, 2026 22:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants