View Single Post
Old 11-02-2018, 12:40 PM   #1
rfilmyer
Junior Member
rfilmyer began at the beginning.
 
Posts: 7
Karma: 10
Join Date: Oct 2018
Device: Android/Moon+ Reader
Calibre-Server can't write to DB with Google Cloud Storage / GCSFuse

As an experiment I tried hooking up Calibre-server to a Google Cloud Storage bucket using GCSFuse. Probably not the best idea to hook up Calibre to a high-latency storage bucket, but I wanted to see if it would work.
It seems fairly fine, except I can't add books. It returns a 500 error and I get this traceback message on the server pointing to issues writing to the sqlite db holding the library.
How do I trace and diagnose this issue to see whether it's a Calibre issue, an Sqlite library issue, a GCSFuse issue, or something else?

this is with calibre 3.21 and gcsfuse 0.23.0

Code:
Unhandled exception in state: State: _job_done Client: 127.0.0.1:52764 Request: POST /cdb/add-book/1/y/[book filename]/calibre HTTP/1.0
Traceback (most recent call last):
  File "/usr/lib/calibre/calibre/srv/loop.py", line 569, in tick
    conn.handle_event(event)
  File "/usr/lib/calibre/calibre/srv/loop.py", line 307, in _job_done
    self.job_done(*event)
  File "/usr/lib/calibre/calibre/srv/pool.py", line 35, in run
    result = func()
  File "/usr/lib/calibre/calibre/srv/http_response.py", line 441, in run_request_handler
    result = self.request_handler(data)
  File "/usr/lib/calibre/calibre/srv/routes.py", line 313, in dispatch
    ans = endpoint_(self.ctx, data, *args)
  File "/usr/lib/calibre/calibre/srv/cdb.py", line 92, in cdb_add_book
    ids, duplicates = db.add_books([(mi, {fmt: rd.request_body_file})], add_duplicates=add_duplicates)
  File "/usr/lib/calibre/calibre/db/cache.py", line 1596, in add_books
    book_id = self.create_book_entry(mi, add_duplicates=add_duplicates, apply_import_tags=apply_import_tags, preserve_uuid=preserve_uuid)
  File "/usr/lib/calibre/calibre/db/cache.py", line 63, in call_func_with_lock
    return func(*args, **kwargs)
  File "/usr/lib/calibre/calibre/db/cache.py", line 1566, in create_book_entry
    self._set_metadata(book_id, mi, ignore_errors=True)
  File "/usr/lib/calibre/calibre/db/cache.py", line 1276, in set_metadata
    set_field('title', mi.title)
  File "/usr/lib/calibre/calibre/db/cache.py", line 1271, in set_field
    dirtied.update(self._set_field(name, {book_id:val}, do_path_update=False, allow_case_change=allow_case_change))
  File "/usr/lib/calibre/calibre/db/cache.py", line 1101, in set_field
    self._mark_as_dirty(dirtied)
  File "/usr/lib/calibre/calibre/db/cache.py", line 1045, in mark_as_dirty
    ((x,) for x in new_dirtied))
  File "/usr/lib/calibre/calibre/db/backend.py", line 863, in executemany
    self.reopen(force=True)
  File "/usr/lib/calibre/calibre/db/backend.py", line 1082, in reopen
    self.conn
  File "/usr/lib/calibre/calibre/db/backend.py", line 836, in conn
    self._conn = Connection(self.dbpath)
  File "/usr/lib/calibre/calibre/db/backend.py", line 270, in __init__
    self.execute('pragma cache_size=-5000')
  File "/usr/lib/calibre/calibre/db/backend.py", line 314, in execute
    return cursor.execute(sql, bindings)
  File "src/cursor.c", line 1019, in APSWCursor_execute.sqlite3_prepare
  File "src/statementcache.c", line 386, in sqlite3_prepare
IOError: IOError: disk I/O error
rfilmyer is offline   Reply With Quote