FirebirdSQL / python3-lib

Optinal extension package for Firebird Python 3 driver
MIT License
2 stars 2 forks source link

Sig abort on interface detach #4

Closed Fred-si closed 10 months ago

Fred-si commented 10 months ago

This issue concern firebird-driver repository, not firebird-lib, I have make a mistake. My apologies for the inconvenience.

Hello. I work on project that use SQLAlchemy+firebird. We have recently migrate from fdb to firebird-driver python package and we experience some python crashes in our test suite.

These crashes happen after introduce little modification on code/test that seem to have no relation with test that crash. Sometime, the modified code is not executed before crash. Crashes can happen at different places in tests suite, during a database operation or not, but always at the place will code not change. They can happen in Gitlab runner or locally in venv.

Fatal Python error: Aborted

Current thread 0x00007fd5d3a7d000 (most recent call first):
  Garbage-collecting
  File "/project_root/venv/lib/python3.11/site-packages/firebird/driver/interfaces.py", line 1179 in detach
  File "/project_root/venv/lib/python3.11/site-packages/firebird/driver/core.py", line 1645 in __del__
  File "/project_root/venv/lib/python3.11/site-packages/firebird/driver/core.py", line 1145 in __init__
  File "/project_root/venv/lib/python3.11/site-packages/firebird/driver/core.py", line 1545 in __init__
  File "/project_root/venv/lib/python3.11/site-packages/firebird/driver/core.py", line 1935 in info
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy_firebird/firebird.py", line 147 in _get_server_version_info
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 514 in initialize
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy_firebird/base.py", line 428 in initialize
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/engine/create.py", line 732 in first_connect
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py", line 1910 in go
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/event/attr.py", line 487 in __call__
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/event/attr.py", line 473 in _exec_w_sync_on_first_run
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 916 in __connect
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 678 in __init__
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 393 in _create_connection
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/impl.py", line 167 in _do_get
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 716 in checkout
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 1269 in _checkout
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/pool/base.py", line 452 in connect
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 3292 in raw_connection
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 145 in __init__
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 3268 in connect
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 1143 in _connection_for_bind
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/orm/state_changes.py", line 139 in _go
  File "<string>", line 2 in _connection_for_bind
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2045 in _connection_for_bind
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2178 in _execute_internal
  File "/project_root/venv/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2306 in execute
  File "/project_root/tests/utils/abstract_test_base.py", line 63 in _clean_database
  File "/project_root/tests/utils/abstract_test_base.py", line 40 in setup_class
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/python.py", line 777 in _call_with_optional_argument
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/python.py", line 856 in xunit_setup_class_fixture
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 895 in call_fixture_func
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 1123 in pytest_fixture_setup
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 1069 in execute
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 693 in _compute_fixture_value
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 607 in _get_active_fixturedef
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 585 in getfixturevalue
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/fixtures.py", line 566 in _fillfixtures
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/python.py", line 1795 in setup
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 494 in setup
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 157 in pytest_runtest_setup
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 262 in <lambda>
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 341 in from_call
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 261 in call_runtest_hook
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 222 in call_and_report
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 127 in runtestprotocol
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/runner.py", line 114 in pytest_runtest_protocol
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/main.py", line 350 in pytest_runtestloop
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/main.py", line 325 in _main
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/main.py", line 271 in wrap_session
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/main.py", line 318 in pytest_cmdline_main
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/project_root/venv/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 169 in main
  File "/project_root/venv/lib/python3.11/site-packages/_pytest/config/__init__.py", line 192 in console_main
  File "/project_root/venv/bin/pytest", line 8 in <module>

Extension modules: _cffi_backend, charset_normalizer.md, simplejson._speedups, multidict._multidict, yarl._quoting_c, aiohttp._helpers, aiohttp._http_writer, aiohttp._http_parser, aiohttp._websocket, frozenlist._frozenlist, yaml._yaml, markupsafe._speedups, pydantic.typing, pydantic.errors, pydantic.version, pydantic.utils, pydantic.class_validators, pydantic.config, pydantic.color, pydantic.datetime_parse, pydantic.validators, pydantic.networks, pydantic.types, pydantic.json, pydantic.error_wrappers, pydantic.fields, pydantic.parse, pydantic.schema, pydantic.main, pydantic.dataclasses, pydantic.annotated_types, pydantic.decorator, pydantic.env_settings, pydantic.tools, pydantic, dependency_injector.providers, dependency_injector._cwiring, dependency_injector.containers, sqlalchemy.cyextension.collections, sqlalchemy.cyextension.immutabledict, sqlalchemy.cyextension.processors, sqlalchemy.cyextension.resultproxy, sqlalchemy.cyextension.util, greenlet._greenlet, numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, pandas._libs.tslibs.np_datetime, pandas._libs.tslibs.dtypes, pandas._libs.tslibs.base, pandas._libs.tslibs.nattype, pandas._libs.tslibs.timezones, pandas._libs.tslibs.ccalendar, pandas._libs.tslibs.fields, pandas._libs.tslibs.timedeltas, pandas._libs.tslibs.tzconversion, pandas._libs.tslibs.timestamps, pandas._libs.properties, pandas._libs.tslibs.offsets, pandas._libs.tslibs.strptime, pandas._libs.tslibs.parsing, pandas._libs.tslibs.conversion, pandas._libs.tslibs.period, pandas._libs.tslibs.vectorized, pandas._libs.ops_dispatch, pandas._libs.missing, pandas._libs.hashtable, pandas._libs.algos, pandas._libs.interval, pandas._libs.lib, pandas._libs.ops, pandas._libs.arrays, pandas._libs.tslib, pandas._libs.sparse, pandas._libs.indexing, pandas._libs.index, pandas._libs.internals, pandas._libs.join, pandas._libs.writers, pandas._libs.window.aggregations, pandas._libs.window.indexers, pandas._libs.reshape, pandas._libs.groupby, pandas._libs.json, pandas._libs.parsers, pandas._libs.testing, google._upb._message (total: 97)
zsh: IOT instruction (core dumped)  pytest

Fatal Python error: Aborted
Current thread 0x00007f509adb9b80 (most recent call first):
  Garbage-collecting
  File "/usr/local/lib/python3.11/site-packages/firebird/driver/interfaces.py", line 1179 in detach
  File "/usr/local/lib/python3.11/site-packages/firebird/driver/core.py", line 1645 in __del__
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2167 in lr0_goto
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2334 in reads_relation
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2454 in <lambda>
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2074 in traverse
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2065 in digraph
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2455 in compute_read_sets
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2518 in add_lalr_lookaheads
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2551 in lr_parse_table
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 2135 in __init__
  File "/usr/local/lib/python3.11/site-packages/ply/yacc.py", line 3438 in yacc
  File "/usr/local/lib/python3.11/site-packages/jsonpath_rw/parser.py", line 47 in parse_token_stream
  File "/usr/local/lib/python3.11/site-packages/jsonpath_rw/parser.py", line 32 in parse
  File "/usr/local/lib/python3.11/site-packages/jsonpath_rw/parser.py", line 14 in parse
  File "/builds/a6cmo/agde6_support/shared/services/bodacc/helpers.py", line 12 in nested_get
  File "/builds/a6cmo/agde6_support/shared/services/bodacc/pcl_service.py", line 160 in _create_evt_jur
  File "/builds/a6cmo/agde6_support/shared/services/bodacc/pcl_service.py", line 89 in _import_data
  File "/builds/a6cmo/agde6_support/shared/services/bodacc/bodacc_service.py", line 210 in import_files
  File "/builds/a6cmo/agde6_support/tests/services/bodacc/test_pcl_service.py", line 343 in test_import_creation_evt_existe_deja
  File "/usr/local/lib/python3.11/unittest/mock.py", line 1375 in patched
  File "/usr/local/lib/python3.11/site-packages/_pytest/python.py", line 194 in pytest_pyfunc_call
  File "/usr/local/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/usr/local/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/usr/local/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/usr/local/lib/python3.11/site-packages/_pytest/python.py", line 1792 in runtest
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 169 in pytest_runtest_call
  File "/usr/local/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/usr/local/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/usr/local/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 262 in <lambda>
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 341 in from_call
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 261 in call_runtest_hook
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 222 in call_and_report
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 133 in runtestprotocol
  File "/usr/local/lib/python3.11/site-packages/_pytest/runner.py", line 114 in pytest_runtest_protocol
  File "/usr/local/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/usr/local/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/usr/local/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/usr/local/lib/python3.11/site-packages/_pytest/main.py", line 350 in pytest_runtestloop
  File "/usr/local/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/usr/local/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/usr/local/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/usr/local/lib/python3.11/site-packages/_pytest/main.py", line 325 in _main
  File "/usr/local/lib/python3.11/site-packages/_pytest/main.py", line 271 in wrap_session
  File "/usr/local/lib/python3.11/site-packages/_pytest/main.py", line 318 in pytest_cmdline_main
  File "/usr/local/lib/python3.11/site-packages/pluggy/_callers.py", line 77 in _multicall
  File "/usr/local/lib/python3.11/site-packages/pluggy/_manager.py", line 115 in _hookexec
  File "/usr/local/lib/python3.11/site-packages/pluggy/_hooks.py", line 493 in __call__
  File "/usr/local/lib/python3.11/site-packages/_pytest/config/__init__.py", line 169 in main
  File "/usr/local/lib/python3.11/site-packages/_pytest/config/__init__.py", line 192 in console_main
  File "/usr/local/bin/pytest", line 8 in <module>
Extension modules: _cffi_backend, charset_normalizer.md, simplejson._speedups, multidict._multidict, yarl._quoting_c, aiohttp._helpers, aiohttp._http_writer, aiohttp._http_parser, aiohttp._websocket, frozenlist._frozenlist, yaml._yaml, markupsafe._speedups, pydantic.typing, pydantic.errors, pydantic.version, pydantic.utils, pydantic.class_validators, pydantic.config, pydantic.color, pydantic.datetime_parse, pydantic.validators, pydantic.networks, pydantic.types, pydantic.json, pydantic.error_wrappers, pydantic.fields, pydantic.parse, pydantic.schema, pydantic.main, pydantic.dataclasses, pydantic.annotated_types, pydantic.decorator, pydantic.env_settings, pydantic.tools, pydantic, dependency_injector.providers, dependency_injector._cwiring, dependency_injector.containers, sqlalchemy.cyextension.collections, sqlalchemy.cyextension.immutabledict, sqlalchemy.cyextension.processors, sqlalchemy.cyextension.resultproxy, sqlalchemy.cyextension.util, greenlet._greenlet, numpy.core._multiarray_umath, numpy.core._multiarray_tests, numpy.linalg._umath_linalg, numpy.fft._pocketfft_internal, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._mt19937, numpy.random.mtrand, numpy.random._philox, numpy.random._pcg64, numpy.random._sfc64, numpy.random._generator, pandas._libs.tslibs.np_datetime, pandas._libs.tslibs.dtypes, pandas._libs.tslibs.base, pandas._libs.tslibs.nattype, pandas._libs.tslibs.timezones, pandas._libs.tslibs.ccalendar, pandas._libs.tslibs.fields, pandas._libs.tslibs.timedeltas, pandas._libs.tslibs.tzconversion, pandas._libs.tslibs.timestamps, pandas._libs.properties, pandas._libs.tslibs.offsets, pandas._libs.tslibs.strptime, pandas._libs.tslibs.parsing, pandas._libs.tslibs.conversion, pandas._libs.tslibs.period, pandas._libs.tslibs.vectorized, pandas._libs.ops_dispatch, pandas._libs.missing, pandas._libs.hashtable, pandas._libs.algos, pandas._libs.interval, pandas._libs.lib, pandas._libs.ops, pandas._libs.arrays, pandas._libs.tslib, pandas._libs.sparse, pandas._libs.indexing, pandas._libs.index, pandas._libs.internals, pandas._libs.join, pandas._libs.writers, pandas._libs.window.aggregations, pandas._libs.window.indexers, pandas._libs.reshape, pandas._libs.groupby, pandas._libs.json, pandas._libs.parsers, pandas._libs.testing, google._upb._message (total: 97)
/usr/bin/bash: line 151:    18 Aborted                 (core dumped) pytest -p no:warnings --cov --cov-report term --cov-report html

The common points on all crashes is that happen on detach method of iAttachment_v3 on interface.py.

    def detach(self) -> None:
        "Replaces `isc_detach_database()`. On success releases interface."
        self.vtable.deprecatedDetach(self, self.status)
        self._check()
        self._refcnt -= 1

Adding if condition before vtable.deprecatedDetach seems to solve the problem, but I have no experience on database driver development, I don't know if it’s good idea.

    def detach(self) -> None:
        "Replaces `isc_detach_database()`. On success releases interface."
        if self._refcnt:
            self.vtable.deprecatedDetach(self, self.status)
            self._check()
            self._refcnt -= 1

Someone might be able to help us solve this problem properly?

Fred-si commented 10 months ago

This issue concern firebird-driver repository, not firebird-lib, I have make a mistake. My apologies for the inconvenience.