maloja icon indicating copy to clipboard operation
maloja copied to clipboard

Database locked when trying to merge an artist

Open swagelynn opened this issue 7 months ago • 2 comments

Hey, i'm running maloja on docker and my host system is running arch x64. Whenever I try and merge two artist entries (in this case, Tyler, The Creator and Tyler The Creator), The following error occurs:

[sqldb] Deleting (7892, 822, 3572)
[sqldb] Deleting (3572, 'Answer', 'answer', None, 2731)
[sqldb] Database Cleanup complete!
Traceback (most recent call last):
  File "/venv/lib/python3.12/site-packages/maloja/database/dbcache.py", line 49, in outer_func
    return cache[key]
           ~~~~~^^^^^
KeyError: ('[1359]', '{}', <function connection_provider.<locals>.wrapper at 0x73403e10f560>, None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1964, in _exec_single_context
    self.dialect.do_execute(
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 747, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/venv/lib/python3.12/site-packages/maloja/apis/native_v1.py", line 126, in protector
    return func(*args,**kwargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/apis/native_v1.py", line 903, in merge_artists
    result = database.merge_artists(target_id,source_ids)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/__init__.py", line 67, in newfunc
    return func(*args,**kwargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/__init__.py", line 251, in merge_artists
    sqldb.merge_artists(target_id,source_ids)
  File "/venv/lib/python3.12/site-packages/maloja/database/sqldb.py", line 159, in wrapper
    return func(*args,**kwargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/sqldb.py", line 855, in merge_artists
    merge_duplicate_albums(artist_id=target_id, dbconn=dbconn)
  File "/venv/lib/python3.12/site-packages/maloja/database/sqldb.py", line 154, in wrapper
    return func(*args,**kwargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/sqldb.py", line 1867, in merge_duplicate_albums
    album_identifiers.setdefault(normalize_name(get_album(album_id)['albumtitle']),[]).append(album_id)
                                                ^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/dbcache.py", line 51, in outer_func
    result = inner_func(*args,**kwargs,dbconn=conn)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/sqldb.py", line 159, in wrapper
    return func(*args,**kwargs)
           ^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/maloja/database/sqldb.py", line 1671, in get_album
    result = dbconn.execute(op).all()
             ^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1414, in execute
    return meth(
           ^^^^^
  File "/venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 489, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1638, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1842, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1983, in _exec_single_context
    self._handle_dbapi_exception(
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2325, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1964, in _exec_single_context
    self.dialect.do_execute(
  File "/venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 747, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) database is locked
[SQL: SELECT albums.id, albums.albtitle, albums.albtitle_normalized 
FROM albums 
WHERE albums.id = ?]
[parameters: (1359,)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

I tried deleting the DB file and restarting to check if it was something on my end, but after re-importing my scrobbles (from Spotify and Last.fm), the same error occurs when trying to merge those artist entries again.

swagelynn avatar May 10 '25 08:05 swagelynn

It's worth noting that this doesn't occur on any other merges, JUST artists

swagelynn avatar May 10 '25 09:05 swagelynn

I'm also seeing this issue on version 3.2.4.

gnosticJade avatar Jul 03 '25 08:07 gnosticJade