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]