From 8551dda8ba1fbe8157c9503f219db6b153d85537 Mon Sep 17 00:00:00 2001 From: Matt Mastracci Date: Wed, 24 Jul 2024 11:01:38 -0600 Subject: [PATCH] Explicitly return active connection count --- edb/server/connpool/pool.py | 6 +++++- edb/server/connpool/pool2.py | 8 ++++++-- edb/server/tenant.py | 4 +--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/edb/server/connpool/pool.py b/edb/server/connpool/pool.py index 0f129948f5f2..c02ab74aa5e0 100644 --- a/edb/server/connpool/pool.py +++ b/edb/server/connpool/pool.py @@ -419,7 +419,11 @@ def failed_connects(self) -> int: def failed_disconnects(self) -> int: return self._failed_disconnects - def get_pending_conns(self) -> int: + @property + def active_conns(self) -> int: + return self.current_capacity - self._get_pending_conns() + + def _get_pending_conns(self) -> int: return sum( block.count_pending_conns() for block in self._blocks.values() ) diff --git a/edb/server/connpool/pool2.py b/edb/server/connpool/pool2.py index 372d8f7f5a43..857a2c65e7f4 100644 --- a/edb/server/connpool/pool2.py +++ b/edb/server/connpool/pool2.py @@ -154,6 +154,9 @@ async def _boot(self, loop: asyncio.AbstractEventLoop) -> None: elif msg[0] == 4: loop.create_task(self._perform_prune(msg[1])) + # Allow readers to skip the self-pipe for performing reads which may reduce + # latency a small degree. We'll still need to eventually pick up a self-pipe + # read but we increment a counter to skip at that point. def _try_read(self) -> None: while msg := self._pool._try_read(): self._skip_reads += 1 @@ -234,8 +237,9 @@ async def prune_all_connections(self) -> None: coros.append(self._disconnect(conn)) await asyncio.gather(*coros, return_exceptions=True) - def get_pending_conns(self) -> int: - return 0 + @property + def active_conns(self) -> int: + return len(self._conns_held) def iterate_connections(self) -> typing.Iterator[C]: for conn in self._conns.values(): diff --git a/edb/server/tenant.py b/edb/server/tenant.py index 334ef820de55..73dc0d8581db 100644 --- a/edb/server/tenant.py +++ b/edb/server/tenant.py @@ -256,9 +256,7 @@ def on_switch_over(self): ) def get_active_pgcon_num(self) -> int: - return ( - self._pg_pool.current_capacity - self._pg_pool.get_pending_conns() - ) + return self._pg_pool.active_conns @property def client_id(self) -> int: