fix(generator): исключено смешение миров при запуске
- Зачем: - старый state и ручной live-генератор могли тихо писать события в новый мир данных. - Что: - добавлена общая проверка чистого стенда для Airflow и host-путей. - защищены backfill, import, continue и clean-start сценарии live-generator. - описан миграционный отказ старого state. - Проверка: - make generator-test; docker compose config --quiet; py_compile; bash -n.
This commit is contained in:
@@ -11,6 +11,19 @@ logger = logging.getLogger("generator")
|
||||
|
||||
|
||||
STATE_VERSION = "3.0"
|
||||
KNOWN_OLD_STATE_VERSIONS = {"2.0"}
|
||||
|
||||
|
||||
class UnsupportedStateVersionError(ValueError):
|
||||
"""State записан в старом формате и требует явного решения оператора."""
|
||||
|
||||
def __init__(self, found_version: str, expected_version: str = STATE_VERSION):
|
||||
self.found_version = found_version
|
||||
self.expected_version = expected_version
|
||||
super().__init__(
|
||||
f"unsupported state version {found_version}; "
|
||||
f"current version is {expected_version}"
|
||||
)
|
||||
|
||||
|
||||
def _nested_list_to_tuple(obj):
|
||||
@@ -234,6 +247,8 @@ class GeneratorState:
|
||||
raise ValueError("state must be an object")
|
||||
version = data.get("version", "1.0")
|
||||
if version != STATE_VERSION:
|
||||
if str(version) in KNOWN_OLD_STATE_VERSIONS:
|
||||
raise UnsupportedStateVersionError(str(version))
|
||||
logger.warning(
|
||||
"Unsupported generator state version %s, will start fresh",
|
||||
version,
|
||||
@@ -283,6 +298,8 @@ class GeneratorState:
|
||||
active_visits=data.get("active_visits", []),
|
||||
pending_visit_births=data.get("pending_visit_births", 0.0),
|
||||
)
|
||||
except UnsupportedStateVersionError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.warning(f"Invalid state format, will start fresh: {e}")
|
||||
raise ValueError(f"Invalid state: {e}")
|
||||
|
||||
Reference in New Issue
Block a user