Skip to content

feat: sync foundation for asyncio support (phase 1 of #1251)#1252

Open
AhmadMasry wants to merge 3 commits into
aws:mainfrom
AhmadMasry:feat/sync-phase1
Open

feat: sync foundation for asyncio support (phase 1 of #1251)#1252
AhmadMasry wants to merge 3 commits into
aws:mainfrom
AhmadMasry:feat/sync-phase1

Conversation

@AhmadMasry

Copy link
Copy Markdown

Phase 1 of the #1251 async-support contribution, split per maintainer request into sync-first then async. Sync-side changes + Python 3.14 only; the aws_advanced_python_wrapper.aio subpackage, async SQLAlchemy dialects, and async tests land in phase 2.

  • Sync-side behavioral changes flagged in Async (asyncio) support for the wrapper — a community contribution we'd love your guidance on #1251: cross-thread socket-shutdown on execute-timeout (env-4 SIGSEGV interrupt-and-wait) in the driver dialects
    • decorators.timeout; transient-connect exception classification; failover connection retry logic (RetryUtil), incl. the *_OR_WRITER writer fallback.
  • Sync SQLAlchemy dialects: postgresql+aws_wrapper_psycopg and mysql+aws_wrapper_mysqlconnector (sqlalchemy_dialects/), replacing the old sqlalchemy/mysql_orm_dialect.py; DBAPI-shim restructure (_dbapi.install).
  • Python 3.14: version classifier, requires-python, CI matrix, integration harness PYTHON_3_14 + test-python-3.14-{pg,mysql} tasks; sync dependency bumps (SQLAlchemy/psycopg/mysql-connector/boto3/requests).
  • Tests: unit + sync SA integration tests, plus a new sync RetryUtil writer-fallback regression test.

/verify green: mypy (237 files), flake8, isort, 1114 unit tests on Python 3.14.

Description

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Phase 1 of the aws#1251 async-support contribution, split per maintainer request
into sync-first then async. This branch carries the sync-side changes and
Python 3.14 support only; the aws_advanced_python_wrapper.aio subpackage, the
async SQLAlchemy dialects, and the async test suites land in phase 2.

- Sync-side behavioral changes flagged in aws#1251: cross-thread socket-shutdown
  on execute-timeout (the env-4 SIGSEGV interrupt-and-wait) in the driver
  dialects + decorators.timeout; transient-connect exception classification;
  and the failover connection retry logic (RetryUtil), incl. the *_OR_WRITER
  reader-then-writer fallback.
- Sync SQLAlchemy dialects: postgresql+aws_wrapper_psycopg and
  mysql+aws_wrapper_mysqlconnector (sqlalchemy_dialects/), replacing the old
  sqlalchemy/mysql_orm_dialect.py; DBAPI-shim restructure (_dbapi.install).
- Python 3.14: version classifier, CI matrix, integration harness PYTHON_3_14
  + test-python-3.14-{pg,mysql} tasks; sync dependency bumps.
- Tests: unit + sync SQLAlchemy integration tests, plus a sync RetryUtil
  writer-fallback regression test.

pyproject uses the [tool.poetry] metadata format (Poetry 1.8.2-compatible, as
on main). The sync surface carries no async/aiomysql/greenlet references.
greenlet 3.1.1 ships no cp314 wheel, so the Python 3.14 unit-CI job
(3.14 added to main.yml in 6817b96) built it from source and failed
against CPython 3.14's internal frame API (_PyInterpreterFrame,
c_recursion_remaining, Py_C_RECURSION_LIMIT). greenlet 3.5.2 provides
cp314 wheels. Pulled transitively via SQLAlchemy on x86_64; lock-only
change, lock-version unchanged (2.1).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant