codeant-ai-for-open-source[bot] commented on code in PR #45553:
URL: https://github.com/apache/superset/pull/45553#discussion_r4383811582
##########
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:
Yes. Bound **all outstanding resolver submissions**—both running lookups and
queued work—and wait for a slot only until the request deadline. If capacity is
exhausted, fail the request instead of adding another item to the executor’s
unbounded queue.
The accounting matters: don’t release a slot merely because the caller timed
out or `Future.cancel()` succeeded. A cancelled queued future can remain in the
queue, and cancellation may mark it done immediately. Either leave timed-out
futures submitted and release their slots only when the worker actually
completes them, or use a bounded queue that can reliably account for
dequeue/removal.
This prevents unbounded queue growth and makes overload fail fast. It won’t
restore DNS availability while all resolver threads are stuck in uncancellable
system lookups; recovering from that would require stronger isolation, such as
resolver processes.
--
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]