Skip to content

PyPy + coverage.combine, load, report = disk I/O error #928

@arcivanov

Description

@arcivanov

Looks like PyPy causes sqlite to have delayed file closing resulting in the following failure:

  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/control.py", line 872, in report
    return reporter.report(morfs, outfile=file)
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/summary.py", line 45, in report
    for fr, analysis in get_analysis_to_report(self.coverage, morfs):
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/report.py", line 70, in get_analysis_to_report
    analysis = coverage._analyze(fr)
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/control.py", line 774, in _analyze
    return Analysis(data, it, self._file_mapper)
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 34, in __init__
    mba = self.missing_branch_arcs()
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 129, in missing_branch_arcs
    missing = self.arcs_missing()
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 88, in arcs_missing
    executed = self.arcs_executed()
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 80, in arcs_executed
    executed = self.data.arcs(self.filename) or []
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 886, in arcs
    with self._connect() as con:
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 1024, in __enter__
    self._connect()
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 1012, in _connect
    self.execute("pragma journal_mode=off").close()
  File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 1063, in execute
    raise CoverageException("Couldn't use data file {!r}: {}".format(self.filename, msg))
CoverageException: Couldn't use data file '/home/arcivanov/Documents/src/arcivanov/pybuilder/target/run_unit_tests.coverage': disk I/O error

It looks like the issue is related to https://bitbucket.org/pypy/pypy/issues/2872/default-isolation-mode-is-different-on

Same code works on CPython 2.7, 3.5 - 3.8 on both Windows and Linux, both 32 and 64 bit with no issues.

The workaround for this is to completely disable gc while the coverage is running:

import gc
gc.disable()

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions