SIENTIAPDE-1712

Add unique constraint on (model_id, timestamp, variable) in schema and implement idempotent export test to ensure no duplicates are created. Update CoreScouter and related tests to handle conflict resolution by ignoring duplicates.
This commit is contained in:
vitor-aignosi
2026-03-24 11:34:57 -03:00
parent 9fd32e79fb
commit 12683e1eff
5 changed files with 923 additions and 4 deletions

View File

@@ -32,6 +32,7 @@ E2E_DATABASE = 'scouter_e2e_test'
E2E_NOTIFICATION_COLLECTION = 'notification_queue'
DB_SCHEMA_PATH = Path(__file__).resolve().parent / 'db_schema.sql'
def _activity_list(activities: Activities) -> list:
"""Return bound activity callables for the E2E worker."""
return [
@@ -264,7 +265,8 @@ def test_activities(
Return:
Live Activities instance (no unittest.mock.patch)
"""
pg_parts = postgres_connection_parts(postgres_container.get_connection_url())
pg_parts = postgres_connection_parts(
postgres_container.get_connection_url())
redis_host = redis_container.get_container_host_ip()
redis_port = int(redis_container.get_exposed_port(6379))
@@ -309,11 +311,14 @@ async def temporal_worker(temporal_env, test_activities):
task_queue=SCOUTER_TASK_QUEUE,
workflows=[Scouter, PIWebAPIScouter, CoreScouter],
activities=_activity_list(test_activities),
activity_executor=ThreadPoolExecutor(max_workers=50, thread_name_prefix='e2e-activity'),
activity_executor=ThreadPoolExecutor(
max_workers=50, thread_name_prefix='e2e-activity'),
max_concurrent_workflow_tasks=50,
max_concurrent_activities=50,
max_concurrent_local_activities=50,
workflow_task_poller_behavior=PollerBehaviorAutoscaling(minimum=1, initial=2, maximum=10),
activity_task_poller_behavior=PollerBehaviorAutoscaling(minimum=1, initial=2, maximum=10),
workflow_task_poller_behavior=PollerBehaviorAutoscaling(
minimum=1, initial=2, maximum=10),
activity_task_poller_behavior=PollerBehaviorAutoscaling(
minimum=1, initial=2, maximum=10),
) as worker:
yield worker