Add durable external-effect runtime identity
This commit is contained in:
@@ -9,6 +9,7 @@ import time
|
||||
from celery import Celery
|
||||
from celery.signals import (
|
||||
heartbeat_sent,
|
||||
task_prerun,
|
||||
worker_process_init,
|
||||
worker_ready,
|
||||
worker_shutdown,
|
||||
@@ -68,6 +69,7 @@ from govoplan_core.core.registry import PlatformRegistry
|
||||
from govoplan_core.core.runtime import configure_runtime
|
||||
from govoplan_core.core.runtime_coordination import (
|
||||
RuntimeIdentity,
|
||||
bind_process_runtime_identity,
|
||||
heartbeat_runtime_node,
|
||||
register_runtime_node,
|
||||
runtime_identity,
|
||||
@@ -208,6 +210,7 @@ def _worker_runtime_identity(sender: object | None = None) -> RuntimeIdentity:
|
||||
role="worker",
|
||||
node_id=hostname,
|
||||
)
|
||||
bind_process_runtime_identity(_worker_identity)
|
||||
return _worker_identity
|
||||
|
||||
|
||||
@@ -222,10 +225,19 @@ def _worker_metadata() -> dict[str, object]:
|
||||
|
||||
@worker_process_init.connect
|
||||
def _reset_worker_process_database(**_kwargs) -> None:
|
||||
global _worker_identity
|
||||
|
||||
# SQLAlchemy pools must not be shared across prefork child processes.
|
||||
_worker_identity = None
|
||||
bind_process_runtime_identity(None)
|
||||
configure_database(settings.database_url, dispose_previous=True)
|
||||
|
||||
|
||||
@task_prerun.connect
|
||||
def _bind_worker_effect_identity(task=None, **_kwargs) -> None:
|
||||
_worker_runtime_identity(task)
|
||||
|
||||
|
||||
@worker_ready.connect
|
||||
def _register_worker_runtime(sender=None, **_kwargs) -> None:
|
||||
global _worker_consumer
|
||||
|
||||
Reference in New Issue
Block a user