codeant-ai-for-open-source[bot] commented on code in PR #45554:
URL: https://github.com/apache/superset/pull/45554#discussion_r4381033644


##########
superset/utils/network.py:
##########
@@ -260,3 +265,161 @@ def is_host_up(host: str) -> bool:
         return False
 
     return output == 0
+
+
+class ConnectionDeadline(Protocol):
+    """A caller-owned deadline; socket code does not choose request policy."""
+
+    def remaining(self) -> float: ...
+    def watch(self, sock: socket.socket) -> None: ...
+
+
+PROVIDER_DEADLINE: ContextVar[ConnectionDeadline | None] = ContextVar(
+    "provider_connection_deadline", default=None
+)
+_RESOLVER: ThreadPoolExecutor | None = None
+_RESOLVER_LOCK: Lock = Lock()
+
+
+class NonPublicAddressError(OSError):
+    """Resolution included an address refused by the shared destination 
rules."""
+
+
+def _resolve_addresses(
+    host: str, port: int, timeout: float, *, public_only: bool
+) -> list[str]:
+    """Bound waiting and pin the complete answer set before any connection."""
+    global _RESOLVER  # pylint: disable=global-statement
+    if timeout <= 0:
+        raise TimeoutError
+    with _RESOLVER_LOCK:
+        if _RESOLVER is None:
+            _RESOLVER = ThreadPoolExecutor(8, "provider-dns")
+        lookup: Future[Any] = _RESOLVER.submit(
+            socket.getaddrinfo, host, port, socket.AF_UNSPEC, 
socket.SOCK_STREAM
+        )
+    try:
+        answers: Any = lookup.result(timeout=timeout)
+    finally:
+        lookup.cancel()  # Queued work is disposable; running system DNS 
cannot stop.

Review Comment:
   The shared pool is intentional; **per-request threads would be worse** 
because a timed-out `getaddrinfo` cannot be stopped, so each request could 
leave another orphaned thread behind. The fixed pool bounds that resource 
growth, but the concern is real: if all eight lookups hang, DNS-backed requests 
can remain unavailable until the process restarts, and numeric IPs currently go 
through the same pool.
   
   I’d keep the shared cap rather than isolate lookups per request. If recovery 
from permanently stuck resolvers is required, it needs a 
cancellable/restartable resolver boundary (for example, killable worker 
processes); a per-request thread does not provide that. A numeric-IP fast path 
could avoid needless queueing for literal addresses, but would not restore 
hostname resolution after pool exhaustion. This is an intentional limitation of 
the current design, not something `lookup.cancel()` resolves.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to