diff --git a/swh/scheduler/backend.py b/swh/scheduler/backend.py --- a/swh/scheduler/backend.py +++ b/swh/scheduler/backend.py @@ -99,7 +99,8 @@ """ keys = [key for key in self.task_type_keys if key in task_type] query = format_query( - """insert into task_type ({keys}) values ({placeholders})""", + """insert into task_type ({keys}) values ({placeholders}) + on conflict do nothing""", keys) cur.execute(query, [task_type[key] for key in keys]) diff --git a/swh/scheduler/tests/test_scheduler.py b/swh/scheduler/tests/test_scheduler.py --- a/swh/scheduler/tests/test_scheduler.py +++ b/swh/scheduler/tests/test_scheduler.py @@ -13,7 +13,6 @@ from arrow import utcnow -import psycopg2 import pytest from .common import tasks_from_template, TEMPLATES, TASK_TYPES @@ -38,15 +37,17 @@ tt = TASK_TYPES['git'] swh_scheduler.create_task_type(tt) assert tt == swh_scheduler.get_task_type(tt['type']) - with pytest.raises(psycopg2.IntegrityError, - match=r'\(type\)=\(%s\)' % tt['type']): - swh_scheduler.create_task_type(tt) - tt2 = TASK_TYPES['hg'] swh_scheduler.create_task_type(tt2) assert tt == swh_scheduler.get_task_type(tt['type']) assert tt2 == swh_scheduler.get_task_type(tt2['type']) + def test_create_task_type_idempotence(self, swh_scheduler): + tt = TASK_TYPES['git'] + swh_scheduler.create_task_type(tt) + swh_scheduler.create_task_type(tt) + assert tt == swh_scheduler.get_task_type(tt['type']) + def test_get_task_types(self, swh_scheduler): tt, tt2 = TASK_TYPES['git'], TASK_TYPES['hg'] swh_scheduler.create_task_type(tt)