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:
2026-07-05 20:21:13 +03:00
parent 525bd8cabf
commit 080d5ae313
17 changed files with 464 additions and 45 deletions
+26
View File
@@ -22,6 +22,7 @@ from generator import (
KafkaBatchHistory,
TickStreamGenerator,
)
from clickstream_generator.state import UnsupportedStateVersionError
class TestBatchRecordWithDictConversion:
@@ -1162,6 +1163,31 @@ class TestGeneratorServiceState:
state_manager.load.assert_not_called()
assert service._tick == 0
def test_known_old_state_version_fails_instead_of_starting_new_world(
self, base_config, caplog
):
"""GEN_STATE_RESET=false не скрывает старый state за чистым стартом."""
state_manager = MagicMock()
state_manager.load.side_effect = UnsupportedStateVersionError("2.0", "3.0")
with patch("clickstream_generator.service.start_http_server"), \
patch("clickstream_generator.service.ensure_topics"), \
patch("clickstream_generator.service.KafkaPublisher"), \
patch("clickstream_generator.service.KafkaBatchHistory"), \
patch(
"clickstream_generator.service.KafkaStateManager",
return_value=state_manager,
), \
patch.object(GeneratorService, "_main_loop", return_value=None), \
caplog.at_level(logging.ERROR, logger="generator"):
service = GeneratorService(base_config)
with pytest.raises(ValueError, match="state version 2.0.*GEN_STATE_RESET=true"):
service.start()
assert service._tick == 0
assert "Readable generator state uses an old format" in caplog.text
def test_invalid_restored_state_starts_fresh(self, base_config, caplog):
"""Сервис не падает, если state ссылается на неизвестный профиль."""
state_manager = MagicMock()