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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user