Skip to content

create_experiment_workspace fails with an exception when the workspace / group name does already exist

We recently got this exception notified by email:

Exception in Task create_experiment_workspace

IntegrityError
duplicate key value violates unique constraint "db_group_unique_name_scope"
DETAIL:  Key (name, scope_id)=(developers-tobi_log4cxx_test, 1) already exists.

[…]

The above exception (duplicate key value violates unique constraint "db_group_unique_name_scope"
DETAIL:  Key (name, scope_id)=(developers-tobi_log4cxx_test, 1) already exists.
) was the direct cause of the following exception:
  File "/usr/lib/python3/dist-packages/debusine/tasks/_task.py", line 542, in execute_logging_exceptions
    return self.execute()
           ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/debusine/server/tasks/base.py", line 74, in execute
    return super().execute()
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/debusine/tasks/_task.py", line 555, in execute
    result = self._execute()
             ^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/debusine/server/tasks/create_experiment_workspace.py", line 72,
in _execute
    owner_group = Group.objects.create_ephemeral(

  File "/usr/lib/python3/dist-packages/debusine/db/models/auth.py", line 437, in create_ephemeral
    group = self.create(scope=scope, name=name, ephemeral=True)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 658, in create
    obj.save(force_insert=True, using=self.db)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/debusine/db/models/auth.py", line 528, in save
    super().save(*args, **kwargs)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 814, in save
    self.save_base(
    ^
  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 877, in save_base
    updated = self._save_table(

  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 1020, in _save_table
    results = self._do_insert(

  File "/usr/lib/python3/dist-packages/django/db/models/base.py", line 1061, in _do_insert
    return manager._insert(

  File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 1805, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql
    cursor.execute(sql, params)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(

  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute
    with self.db.wrap_database_errors:
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/cc @tobi

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information