Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở
#1,288 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@AhmadMasry đang làm issue này rồi.

Từ ngày 6/10/2026.

  • #1290 của @AhmadMasry — đang mở

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
49/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
postgresql, python, sqlalchemy
Lĩnh vực
backend, databases

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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)

Ngôn ngữ chính
Python
Star
99
Fork
22
Merge trung bình
1 ngày 7 giờ
Pull request đã merge (30 ngày)
4

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của aws/aws-advanced-python-wrapper

Tất cả issue của aws/aws-advanced-python-wrapper

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.