Skip to content

Commit 17e5ad5

Browse files
committed
Address code review comments
1 parent d664daf commit 17e5ad5

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

asyncpg/connection.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,9 @@ async def connect(dsn=None, *,
724724
Pass ``0`` to disable the cache.
725725
726726
:param int max_cached_statement_lifetime:
727-
number of seconds a prepared statement can stay in the cache.
727+
the maximum time in seconds a prepared statement will stay
728+
in the cache. Pass ``0`` to allow statements be cached
729+
indefinitely.
728730
729731
:param float command_timeout: the default timeout for operations on
730732
this connection (the default is no timeout).
@@ -823,9 +825,9 @@ def __init__(self, *, loop, max_size, on_remove, max_lifetime):
823825

824826
# We use an OrderedDict for LRU implementation. Operations:
825827
#
826-
# * We use a simple `__setitem__` to push a new entry:
828+
# * We use a simple `__setitem__` to push a new entry:
827829
# `entries[key] = new_entry`
828-
# That will push `new_entry` to the *end* of the entries dict.
830+
# That will push `new_entry` to the *end* of the entries dict.
829831
#
830832
# * When we have a cache hit, we call
831833
# `entries.move_to_end(key, last=True)`
@@ -847,14 +849,18 @@ def get_max_size(self):
847849
return self._max_size
848850

849851
def set_max_size(self, new_size):
852+
assert new_size >= 0
850853
self._max_size = new_size
851854
self._maybe_cleanup()
852855

853856
def get_max_lifetime(self):
854857
return self._max_lifetime
855858

856859
def set_max_lifetime(self, new_lifetime):
860+
assert new_lifetime >= 0
857861
self._max_lifetime = new_lifetime
862+
for entry in self._entries.values():
863+
self._set_entry_timeout(entry)
858864

859865
def get(self, query, *, promote=True):
860866
if not self._max_size:
@@ -890,13 +896,19 @@ def iter_statements(self):
890896
return (e._statement for e in self._entries.values())
891897

892898
def clear(self):
899+
for entry in self._entries.values():
900+
self._clear_entry_callback(entry)
893901
self._entries.clear()
894902

895-
def _new_entry(self, query, statement):
896-
entry = _StatementCacheEntry(self, query, statement)
903+
def _set_entry_timeout(self, entry):
904+
self._clear_entry_callback(entry)
897905
if self._max_lifetime:
898906
entry._cleanup_cb = self._loop.call_later(
899907
self._max_lifetime, self._on_entry_expired, entry)
908+
909+
def _new_entry(self, query, statement):
910+
entry = _StatementCacheEntry(self, query, statement)
911+
self._set_entry_timeout(entry)
900912
return entry
901913

902914
def _on_entry_expired(self, entry):

tests/test_prepare.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ async def check_simple():
462462
# operation.
463463
await check_simple()
464464

465-
async def test_prepare_24_max_use_count(self):
465+
async def test_prepare_24_max_lifetime(self):
466466
cache = self.con._stmt_cache
467467
cache.set_max_lifetime(1)
468468

0 commit comments

Comments
 (0)