]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix: add debug logging when a connection attempt is discarded
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 13 Dec 2023 03:34:40 +0000 (04:34 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 13 Dec 2023 04:00:05 +0000 (05:00 +0100)
psycopg/psycopg/connection.py
psycopg/psycopg/connection_async.py
psycopg/psycopg/conninfo.py

index e90e30adb0d461f5f6fb30d81db9ee887afded66..e04a994039a0cfb92c2c3ea081073da18e28e37b 100644 (file)
@@ -732,12 +732,22 @@ class Connection(BaseConnection[Row]):
         params = cls._get_connection_params(conninfo, **kwargs)
         timeout = int(params["connect_timeout"])
         rv = None
-        for attempt in conninfo_attempts(params):
+        attempts = conninfo_attempts(params)
+        for attempt in attempts:
             try:
                 conninfo = make_conninfo(**attempt)
                 rv = cls._wait_conn(cls._connect_gen(conninfo), timeout=timeout)
                 break
             except e._NO_TRACEBACK as ex:
+                if len(attempts) > 1:
+                    logger.debug(
+                        "connection attempt failed on host: %r, port: %r,"
+                        " hostaddr: %r: %s",
+                        attempt.get("host"),
+                        attempt.get("port"),
+                        attempt.get("hostaddr"),
+                        str(ex),
+                    )
                 last_ex = ex
 
         if not rv:
index 5e628d614f37f98bce67c56b315543ade700f8fa..bea077fe86801f7ca9d9a2355f46d442dd71d63e 100644 (file)
@@ -120,12 +120,22 @@ class AsyncConnection(BaseConnection[Row]):
         params = await cls._get_connection_params(conninfo, **kwargs)
         timeout = int(params["connect_timeout"])
         rv = None
-        for attempt in await conninfo_attempts_async(params):
+        attempts = await conninfo_attempts_async(params)
+        for attempt in attempts:
             try:
                 conninfo = make_conninfo(**attempt)
                 rv = await cls._wait_conn(cls._connect_gen(conninfo), timeout=timeout)
                 break
             except e._NO_TRACEBACK as ex:
+                if len(attempts) > 1:
+                    logger.debug(
+                        "connection attempt failed on host: %r, port: %r,"
+                        " hostaddr: %r: %s",
+                        attempt.get("host"),
+                        attempt.get("port"),
+                        attempt.get("hostaddr"),
+                        str(ex),
+                    )
                 last_ex = ex
 
         if not rv:
index 9351cc951051b67c2bdd59b0f4d0c99174d0e417..c38d7af7a0b56c2f932573ae16d29600ee69fdcc 100644 (file)
@@ -10,6 +10,7 @@ import os
 import re
 import socket
 import asyncio
+import logging
 from typing import Any
 from random import shuffle
 from pathlib import Path
@@ -26,6 +27,8 @@ from ._encodings import pgconn_encoding
 
 ConnDict: TypeAlias = "dict[str, Any]"
 
+logger = logging.getLogger("psycopg")
+
 
 def make_conninfo(conninfo: str = "", **kwargs: Any) -> str:
     """
@@ -321,6 +324,7 @@ async def conninfo_attempts_async(params: ConnDict) -> list[ConnDict]:
         try:
             attempts.extend(await _resolve_hostnames(attempt))
         except OSError as ex:
+            logger.debug("failed to resolve host %r: %s", attempt.get("host"), str(ex))
             last_exc = ex
 
     if not attempts: