dipdup-io / dipdup

Modular framework for creating selective indexers and featureful backends for dapps
https://dipdup.io
MIT License
92 stars 52 forks source link

SQLite: `tortoise.exceptions.OperationalError` when reindexing action is `wipe` #324

Closed droserasprout closed 2 years ago

droserasprout commented 2 years ago

Steps to reproduce:

What did you expect to happen:

Wipe, restart, indexing continues

What actually happened:

Uncaught exception

Environment

WARNING  dipdup.callback      Skipping SQL hook `on_rollback`: not supported on SQLite
WARNING  dipdup.context       Reindexing requested: reason `rollback`, action `wipe`
INFO     dipdup               Initializing database schema
Traceback (most recent call last):
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/tortoise/backends/sqlite/client.py", line 30, in translate_exceptions_
    return await func(self, query, *args)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/tortoise/backends/sqlite/client.py", line 150, in execute_script
    await connection.executescript(query)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/aiosqlite/core.py", line 216, in executescript
    cursor = await self._execute(self._conn.executescript, sql_script)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/aiosqlite/core.py", line 129, in _execute
    return await future
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/aiosqlite/core.py", line 102, in run
    result = function()
sqlite3.OperationalError: disk I/O error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/droserasprout/git/dipdup/.venv/bin/dipdup", line 5, in <module>
    cli()
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/asyncclick/core.py", line 1150, in __call__
    return anyio.run(self._main, main, args, kwargs, **({"backend":_anyio_backend} if _anyio_backend is not None else {}))
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/anyio/_core/_eventloop.py", line 56, in run
    return asynclib.run(func, *args, **backend_options)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 233, in run
    return native_run(wrapper(), debug=debug)
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 228, in wrapper
    return await func(*args)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/asyncclick/core.py", line 1153, in _main
    return await main(*args, **kwargs)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/asyncclick/core.py", line 1074, in main
    rv = await self.invoke(ctx)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/asyncclick/core.py", line 1684, in invoke
    return await _process_result(await sub_ctx.command.invoke(sub_ctx))
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/asyncclick/core.py", line 1420, in invoke
    return await ctx.invoke(self.callback, **ctx.params)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/asyncclick/core.py", line 774, in invoke
    rv = await rv
  File "/home/droserasprout/git/dipdup/src/dipdup/cli.py", line 87, in wrapper
    await fn(*args, **kwargs)
  File "/home/droserasprout/git/dipdup/src/dipdup/cli.py", line 205, in run
    await dipdup.run()
  File "/home/droserasprout/git/dipdup/src/dipdup/dipdup.py", line 352, in run
    await self._initialize_schema()
  File "/home/droserasprout/git/dipdup/src/dipdup/dipdup.py", line 406, in _initialize_schema
    await generate_schema(conn, schema_name)
  File "/home/droserasprout/git/dipdup/src/dipdup/utils/database.py", line 148, in generate_schema
    await Tortoise.generate_schemas()
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/tortoise/__init__.py", line 662, in generate_schemas
    await generate_schema_for_client(connection, safe)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/tortoise/utils.py", line 31, in generate_schema_for_client
    await generator.generate_from_string(schema)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/tortoise/backends/base/schema_generator.py", line 448, in generate_from_string
    await self.client.execute_script(creation_string)
  File "/home/droserasprout/git/dipdup/.venv/lib/python3.10/site-packages/tortoise/backends/sqlite/client.py", line 32, in translate_exceptions_
    raise OperationalError(exc)
tortoise.exceptions.OperationalError: disk I/O error
droserasprout commented 2 years ago

Can't reproduce on master.