Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[aio] host_monitoring_v2 without a topology plugin fails the first statement on cluster-endpoint connections

Aperta
#1,288 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@AhmadMasry ci sta già lavorando.

Dal 6/10/2026.

  • #1290 di @AhmadMasry — aperta

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
49/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
postgresql, python, sqlalchemy
Ambito
backend, databases

Direzione di ricerca

Start with aio/wrapper.py and _build_host_list_provider, then compare the Aurora dialect provider selection in database_dialect.py with the async behavior. Trace how AsyncHostMonitoringPlugin._get_monitoring_host_info identifies and caches a host, using the described mocked reproduction as a starting point. Done when the first statement succeeds through a cluster endpoint and monitoring targets the connected instance, with regression coverage for the failure and cache behavior.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Describe the bug

With the async API, host_monitoring_v2 used without a topology plugin (no failover, failover_v2, aurora_connection_tracker, ...) fails the first statement on every new connection made through an Aurora cluster endpoint, with AwsWrapperError: [HostMonitoringV2Plugin] Unable to identify the connected database instance. Later statements on that connection succeed, but the monitor watches the cluster endpoint's DNS name instead of the instance the connection is on.

Cause:

  • aio/wrapper.py _build_host_list_provider returns AsyncStaticHostListProvider when plugins contains none of _TOPOLOGY_REQUIRING_PLUGINS, whatever the database dialect. host_monitoring_v2 isn't in that set.
  • For a cluster endpoint, AsyncHostMonitoringPlugin._get_monitoring_host_info calls plugin_service.identify_connection. With the static provider the topology has no host_id, so it returns None and the plugin raises before running the statement.
  • _get_monitoring_host_info assigns self._monitoring_host_info = current_host_info before identifying, so on the next statement it returns the cached cluster endpoint and monitors that.

The sync wrapper doesn't hit this: Aurora dialects always use RdsHostListProvider (database_dialect.py, AuroraPgDialect.get_host_list_provider_supplier), regardless of plugins, so identify_connection resolves the instance.

Expected Behavior

As in sync, host_monitoring_v2 alone on a cluster endpoint identifies the instance the connection landed on and monitors it, and the first statement runs normally.

What plugins are used? What other connection properties were set?

wrapper_dialect=aurora-pg&wrapper_plugins=host_monitoring_v2, connecting through the cluster (writer) endpoint. With failover added, or through an instance endpoint, it works.

Current Behavior

Checked without a database by building the provider the way connect does and calling _get_monitoring_host_info with get_instance_id patched to return an instance id:

AsyncStaticHostListProvider  mydb.cluster-xyz...  -> 1st call: AwsWrapperError: Unable to identify the connected database instance
                                                     2nd call: monitors mydb.cluster-xyz.us-east-1.rds.amazonaws.com
AsyncStaticHostListProvider  inst-1.xyz...        -> monitors inst-1.xyz.us-east-1.rds.amazonaws.com
Reproduction Steps
import asyncio
from sqlalchemy import text
from sqlalchemy.ext.asyncio import create_async_engine
from aws_advanced_python_wrapper.aio import release_resources_async


async def main():
    engine = create_async_engine(
        "postgresql+aws_wrapper_psycopg://USER:PASSWORD@<name>.cluster-<id>.<region>.rds.amazonaws.com:5432/DB"
        "?wrapper_dialect=aurora-pg&wrapper_plugins=host_monitoring_v2")
    try:
        async with engine.connect() as conn:
            await conn.execute(text("SELECT 1"))  # raises AwsWrapperError
    finally:
        await engine.dispose()
        await release_resources_async()

asyncio.run(main())
Possible Solution

Match sync: pick the topology-aware provider from the Aurora/Multi-AZ/Global dialect even when no topology plugin is configured, or add host_monitoring_v2 (and host_monitoring) to _TOPOLOGY_REQUIRING_PLUGINS. Either way, resolve the instance (the topology monitor is shared per cluster after #1285, so this costs one monitoring connection per cluster). Separately, _get_monitoring_host_info shouldn't cache the cluster endpoint when identification fails.

Additional Information/Context

Found while answering a user question about using host_monitoring_v2 without failover. Related: #1284.

The AWS Advanced Python Wrapper version used

main at 8feea85 (3.1.0)

python version used

Python 3.14

Operating System and version

macOS (checked locally, not against a live cluster)

Lingua principale
Python
Stelle
99
Fork
22
Merge medio
1g 7h
PR unite (30g)
4

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di aws/aws-advanced-python-wrapper

Tutte le issue di aws/aws-advanced-python-wrapper

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.