Skip to content

SQLite "disk I/O error" when running under SLURM (works on login node) #293

Description

@isidoramorel

Hi,

I'm encountering a reproducible issue when running SingleM under SLURM on an HPC cluster.

Summary

  • SingleM runs successfully on a login node
  • The same command fails under SLURM (including interactive sessions)
  • The error occurs during the query-based taxonomy assignment step
  • The failure is SQLite-related (OperationalError)

Environment and command

  • SingleM version: 0.20.3
  • Installed via: conda
  • Python version: tested with 3.10 and 3.12
  • Running on: SLURM cluster (Linux)

I've been just trying with the test dataset:
singlem pipe -1 GCA_000309865.1_genomic.fna --metapackage S5.4.0.GTDB_r226.metapackage_20250331.smpkg.zb -p /dev/stdout
and

export SINGLEM_METAPACKAGE_PATH='/scartch/imorel/S5.4.0.GTDB_r226.metapackage_20250331.smpkg.zb'
singlem pipe -1 GCA_000309865.1_genomic.fna -p /dev/stdout

Error

2026/03/31 11:20:51 AM INFO: SingleM v0.20.3
2026/03/31 11:20:51 AM INFO: Acquiring SingleM metapackage from Zenodo backpack directory specified ..
2026/03/31 11:20:51 AM INFO: Retrieval successful. Location of backpack is: S5.4.0.GTDB_r226.metapackage_20250331.smpkg.zb
2026/03/31 11:20:51 AM INFO: Loaded 59 SingleM packages
2026/03/31 11:20:51 AM INFO: Using as input 1 different sequence files e.g. GCA_000309865.1_genomic.fna
2026/03/31 11:20:51 AM INFO: Filtering sequence files through DIAMOND blastx
2026/03/31 11:20:53 AM INFO: Finished DIAMOND prefilter phase
2026/03/31 11:20:53 AM INFO: Assigning sequences to SingleM packages with DIAMOND ..
2026/03/31 11:21:20 AM INFO: Running taxonomic assignment ..
2026/03/31 11:21:20 AM INFO: Assigning taxonomy by singlem query ..
2026/03/31 11:21:20 AM INFO: Querying against species database with 1 sequences, using method smafa-naive and max divergence 2
2026/03/31 11:21:20 AM INFO: Searching with SMAFA NAIVE by nucleotide sequence ..
2026/03/31 11:21:20 AM INFO: Querying index for S3.1.ribosomal_protein_L2_rplB
2026/03/31 11:21:20 AM INFO: Loading taxonomy cache
2026/03/31 11:21:25 AM INFO: Querying against species database with 1 sequences, using method smafa-naive and max divergence 2
2026/03/31 11:21:25 AM INFO: Searching with SMAFA NAIVE by nucleotide sequence ..
2026/03/31 11:21:25 AM INFO: Querying index for S3.2.ribosomal_protein_L3_rplC
Traceback (most recent call last):
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: disk I/O error

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

Traceback (most recent call last):
  File "/home/imorel/miniconda3/envs/singlem/bin/singlem", line 9, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/main.py", line 776, in main
    singlem.pipe.SearchPipe().run(
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/pipe.py", line 73, in run
    otu_table_object = self.run_to_otu_table(**kwargs)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/pipe.py", line 473, in run_to_otu_table
    otu_table_object = self.assign_taxonomy_and_process(
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/pipe.py", line 506, in assign_taxonomy_and_process
    assignment_result = self._assign_taxonomy(
                        ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/pipe.py", line 1238, in _assign_taxonomy
    query_based_assignment_result = PipeTaxonomyAssignerByQuery().assign_taxonomy(
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/pipe_taxonomy_assigner_by_query.py", line 122, in assign_taxonomy
    query_single_set(queries, 0)
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/pipe_taxonomy_assigner_by_query.py", line 102, in query_single_set
    for hit in querier.query_with_queries(queries, sdb, max_species_divergence, method, SequenceDatabase.NUCLEOTIDE_TYPE, 1, None, False, None):
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/querier.py", line 355, in query_by_sequence_similarity_with_smafa_naive
    m = sdb.sqlalchemy_connection.execute(query).first()
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 1419, in execute
    return meth(
           ^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/home/imorel/miniconda3/envs/singlem/lib/python3.12/site-packages/singlem/../sqlalchemy/engine/default.py", line 952, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) disk I/O error
[SQL: SELECT markers.id 
FROM markers 
WHERE markers.marker = ?]
[parameters: ('S3.2.ribosomal_protein_L3_rplC',)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

What I tested

  • Running on login node → works
  • Running under SLURM (batch and interactive sessions, in /scratch and in /home directories) → fails
  • Copying the metapackage to scratch → same error
  • Fresh conda environment → same error
  • Using --working-directory and --working-directory-dev-shm → same error

Question

Is there a known issue with SQLite usage in SingleM under SLURM or HPC environments?
Or any recommended configuration/workaround for this type of setup?
Happy to provide more details or test suggestions if needed.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions