]>
git.ipfire.org Git - thirdparty/psycopg.git/log
Daniele Varrazzo [Mon, 1 Jul 2024 21:50:56 +0000 (23:50 +0200)]
chore: make typing-extension conditional to Pyton < 3.13
Daniele Varrazzo [Tue, 9 Apr 2024 22:33:27 +0000 (00:33 +0200)]
chore: ignore spelling in html files
These files are generated by cython to display the C code generated...
and are a mess.
Daniele Varrazzo [Sun, 31 Mar 2024 20:57:42 +0000 (20:57 +0000)]
fix: more careful stripping of error prefixes
Only strip the known prefixes, both in English and in the currently
known localizations.
Added script to generate regexp to match every backend localization. The
script was executed on PostgreSQL commit
f4ad0021af (on master branch,
before v17).
Close #752.
Daniele Varrazzo [Mon, 27 May 2024 14:20:38 +0000 (16:20 +0200)]
chore: fix typo in comment
Daniele Varrazzo [Wed, 24 Jul 2024 09:10:10 +0000 (11:10 +0200)]
chore: bump mypy
Daniele Varrazzo [Sat, 11 May 2024 15:32:38 +0000 (17:32 +0200)]
chore: bump psycopg_pool package version to 3.2.3.dev1
Daniele Varrazzo [Fri, 10 May 2024 00:05:25 +0000 (02:05 +0200)]
chore: bump psycopg_pool package version to 3.2.2
Daniele Varrazzo [Fri, 10 May 2024 00:05:10 +0000 (02:05 +0200)]
Merge branch 'pool-empty-query-check' into maint-pool-3.2
Daniele Varrazzo [Wed, 8 May 2024 16:49:41 +0000 (18:49 +0200)]
docs(pool): mention running an empty query on check in news file
Eyal Halpern Shalev [Sat, 4 May 2024 12:57:56 +0000 (15:57 +0300)]
refactor(pool): replace --ping with empty string
Eyal Halpern Shalev [Mon, 15 Apr 2024 23:09:45 +0000 (02:09 +0300)]
perf(pool): replace SELECT 1 with an empty query
Daniele Varrazzo [Mon, 6 May 2024 09:21:33 +0000 (11:21 +0200)]
fix(pool): avoid possible deadlock (until timeout) on pool closing
With the previous change to avoid finding open connections in the pool
(#784), stopping the worker was moved into the critical section. This
can create a deadlock in case a worker is in the process of obtaining a
new connection, because putting it to the pool requires the lock. The
deadlock only last for the default 5s timeout passed to _stop_workers().
Solve the problem by guarding _add_to_pool() to avoid it to try to add
the connection if the pool is closed.
However, refactor the pool closing sequence too and close the workers
and other resources that now out of the state outside the critical
section to keep the operation running under lock to a minimum.
Daniele Varrazzo [Wed, 10 Apr 2024 21:58:24 +0000 (23:58 +0200)]
fix(pool): make sure there are no connection in the pool after close()
The case has been reported in #784. While not easy to reproduce, it
seems that it might be caused by the pool being closed while a worker is
still trying to create a connection, which will be put in the _pool
state after supposedly no other operation should have been performed.
Stop the workers and then empty the pool only after they have stopped to
run.
Also refactor the cleanup of the pool and waiting queue, moving them
to close(). There is no reason why a method called "stop workers" should
empty them, and there is no other code path that use such feature.
Close #784.
Daniele Varrazzo [Wed, 10 Apr 2024 22:03:33 +0000 (00:03 +0200)]
test(pool): more lenient timeout in reconnect test timings
Daniele Varrazzo [Wed, 10 Apr 2024 21:48:16 +0000 (23:48 +0200)]
Merge branch 'async-to-sync-jobs' into maint-pool-3.2
Denis Laxalde [Mon, 4 Mar 2024 07:37:58 +0000 (08:37 +0100)]
feat(tools): check last modification times in async_to_sync.py
We now only process _async.py files with a modification time higher than
their sync counterpart. A -B,--convert-all option is added to force
conversion of all (specified) input files and skip last-modification
time check.
Denis Laxalde [Mon, 4 Mar 2024 07:27:14 +0000 (08:27 +0100)]
feat(tools): add a -L,--log-level option to async_to_sync.py
We'll use DEBUG messages in the next commit.
Denis Laxalde [Fri, 1 Mar 2024 13:21:35 +0000 (14:21 +0100)]
feat(tools): run async_to_sync.py concurrently
Multi-processing is used by default (using all available processors),
but can be disabled or limited with the -j/--jobs option.
Daniele Varrazzo [Thu, 4 Apr 2024 21:37:57 +0000 (21:37 +0000)]
style: use literals instead of the concatenation operator for long strings
The reason we were using operators was to stop async_to_sync to generate
a line too long and incur in the flake8 ires.
MR #764 suggests to disable line length check altogether, but we can use
per-file ignore, as there will not be many cases to manage.
Daniele Varrazzo [Sun, 18 Feb 2024 00:04:34 +0000 (01:04 +0100)]
docs(pool): reorder sections in a way that makes more sense
Daniele Varrazzo [Sun, 18 Feb 2024 00:03:20 +0000 (01:03 +0100)]
docs(pool): add box warning against opening async pools on init
Daniele Varrazzo [Fri, 16 Feb 2024 13:02:17 +0000 (14:02 +0100)]
fix(pool): make opening an async connection pool in the constructor a runtime warning
Deprecation warnings are ignored by default and easy to miss.
Close #737.
Daniele Varrazzo [Tue, 13 Feb 2024 10:45:27 +0000 (11:45 +0100)]
ci: skip refcount tests on scheduled jobs
Daniele Varrazzo [Wed, 7 Feb 2024 01:16:06 +0000 (01:16 +0000)]
fix: avoid to create reference loops in datetime adapters
Setting the reference to a bound method in the state creates a reference
loop.
The issue is minimal because the gc will be able to break these loops
anyway and because it mostly happens with exotic or unsupported
date/interval styles.
Daniele Varrazzo [Mon, 5 Feb 2024 16:34:36 +0000 (16:34 +0000)]
docs: fix typo in release notes
Daniele Varrazzo [Sun, 4 Feb 2024 17:42:54 +0000 (17:42 +0000)]
chore: bump psycopg package version to 3.1.18
Daniele Varrazzo [Fri, 4 Nov 2022 22:17:13 +0000 (23:17 +0100)]
fix(c): drop spurious loop break in pipeline_communicate
This makes the Python and the C implementation more similar. The
difference was unexpected but apparently harmless. See #431
Daniele Varrazzo [Sun, 4 Feb 2024 14:36:54 +0000 (14:36 +0000)]
chore: update code to master
Daniele Varrazzo [Sun, 7 Jan 2024 14:47:44 +0000 (15:47 +0100)]
chore: bump psycopg_pool package version to 3.2.2.dev1
Daniele Varrazzo [Sun, 7 Jan 2024 11:49:41 +0000 (12:49 +0100)]
ci: revert upload action to v3
v4 requires to have every uploaded artifact in a separate directory.
- https://github.com/actions/upload-artifact/issues/478
- https://github.com/actions/upload-artifact/blob/main/docs/MIGRATION.md
Daniele Varrazzo [Sun, 7 Jan 2024 01:42:03 +0000 (02:42 +0100)]
chore: bump psycopg_pool package version to 3.2.1
Daniele Varrazzo [Sat, 6 Jan 2024 19:37:37 +0000 (20:37 +0100)]
chore(c): add missing enum entries
Daniele Varrazzo [Sat, 6 Jan 2024 19:36:56 +0000 (20:36 +0100)]
docs: add note about checking enums and docs on PostgreSQL update
Daniele Varrazzo [Sat, 6 Jan 2024 19:48:18 +0000 (20:48 +0100)]
Merge branch 'fix-699' into maint-pool-3.2
Daniele Varrazzo [Sat, 6 Jan 2024 17:06:54 +0000 (18:06 +0100)]
refactor: generate conninfo attempts from async counterpart
Daniele Varrazzo [Sat, 6 Jan 2024 16:24:48 +0000 (17:24 +0100)]
fix: perform multiple attemps if a host name resolve to multiple hosts
We now perform DNS resolution in Python both in the sync and async code.
Because the two code paths are now very similar, make sure they pass the
same tests.
Close #699.
Daniele Varrazzo [Sat, 6 Jan 2024 16:10:58 +0000 (17:10 +0100)]
refactor(test): make resolution monkeypatching common fixtures
Daniele Varrazzo [Sat, 6 Jan 2024 14:50:14 +0000 (15:50 +0100)]
refactor: separate ConnectionInfo object from conninfo module
It was there just because the name is similar, but its purpose is
entirely different.
Nick Pope [Tue, 28 Nov 2023 12:46:59 +0000 (12:46 +0000)]
chore: align to master
The pool branch is diverging unnecessarily from master because so far I
have only cherry picked the changes useful for the pool and compatible
with 3.2.x, but this is creating unnecessary differences and making
cherry-picking harder and harder.
From now on we should use the policy of cherry-picking everything unless
non compatible (not a new feature or a breaking change), similarly to
what we do on the maint-3.1 branch.
Daniele Varrazzo [Tue, 2 Jan 2024 03:29:48 +0000 (04:29 +0100)]
chore: upload github actions dependencies
Daniele Varrazzo [Sat, 6 Jan 2024 12:09:04 +0000 (13:09 +0100)]
Merge branch 'fix-709' into maint-pool-3.2
Daniele Varrazzo [Fri, 29 Dec 2023 23:49:28 +0000 (00:49 +0100)]
refactor(pool): rename ConnectionAttempt as AttemptWithBackoff
This class implements the backoff + jitter policy and is now used to
repeat checks too.
Daniele Varrazzo [Fri, 29 Dec 2023 23:41:07 +0000 (00:41 +0100)]
fix(pool): use an exponential backoff to separate failing checks
This is a consistent behaviour with with the exponential backoff used in
reconnection attempts, and actually we could reuse the same object
implementing the backoff + jitter.
See also #709
Daniele Varrazzo [Fri, 29 Dec 2023 13:15:07 +0000 (14:15 +0100)]
fix(pool): respect timeout on getconn() when the check function fails
Close #709.
Daniele Varrazzo [Sat, 6 Jan 2024 12:02:19 +0000 (13:02 +0100)]
Merge branch 'fix-308-pool-3.2' into maint-pool-3.2
Daniele Varrazzo [Wed, 3 Jan 2024 01:32:28 +0000 (02:32 +0100)]
refactor(pool): avoid constructor overloading by using generic default
Daniele Varrazzo [Wed, 3 Jan 2024 01:14:46 +0000 (02:14 +0100)]
refactor: drop overloading of the Connection.connect() function
The default for the Row TypeVar makes it redundant.
Daniele Varrazzo [Wed, 3 Jan 2024 00:59:30 +0000 (01:59 +0100)]
refactor: use Self to represent the return from `BaseConnection._connect_gen()`
Daniele Varrazzo [Wed, 3 Jan 2024 00:44:22 +0000 (01:44 +0100)]
fix: define the Row TypeVar as defaulting to TupleRow
This allows to return `Self` uniformly from the `Connection.connect()` class
method, which in turns allows to subclass the connection without the
need of redefining the complex signature.
Close #308
Daniele Varrazzo [Sat, 30 Dec 2023 00:30:39 +0000 (01:30 +0100)]
refactor: use typing.Self
The object seems available for all the supported Python version and
should avoid problems with PyRight (see #708).
It is not a solution for #308 because we cannot use `Self[Row]`.
Daniele Varrazzo [Wed, 3 Jan 2024 00:33:35 +0000 (01:33 +0100)]
refactor: use TypeVar from typing_extension
This includes the default parameter, which should fix the problem of the
awkward definition of Row defaulting to TupleRow.
Daniele Varrazzo [Sat, 30 Dec 2023 00:30:39 +0000 (01:30 +0100)]
refactor: use typing.Self
The object seems available for all the supported Python version and
should avoid problems with PyRight (see #708).
It is not a solution for #308 because we cannot use `Self[Row]`.
Daniele Varrazzo [Fri, 29 Dec 2023 13:11:38 +0000 (14:11 +0100)]
chore: bump psycopg_pool package version to 3.2.1.dev1
Daniele Varrazzo [Sat, 11 Nov 2023 15:30:55 +0000 (15:30 +0000)]
chore: fix mypy >= 1.7 warning in tests
Daniele Varrazzo [Sat, 11 Nov 2023 16:50:42 +0000 (16:50 +0000)]
ci: test psycopg pool package with released a psycopg version
Daniele Varrazzo [Sat, 11 Nov 2023 16:47:35 +0000 (16:47 +0000)]
test: allow to run pytest -m pool with psycopg 3.1 imported
This allows to test psycopg pool 3.2 tests with psycopg 3.1 installed.
Daniele Varrazzo [Sat, 11 Nov 2023 14:59:49 +0000 (14:59 +0000)]
chore: bump psycopg_pool package version to 3.2.0
Daniele Varrazzo [Sat, 11 Nov 2023 14:59:09 +0000 (14:59 +0000)]
fix(bump_version): fix bumping minor version with dev releases
Daniele Varrazzo [Thu, 2 Nov 2023 09:25:18 +0000 (10:25 +0100)]
chore(macos): build images with more recent Python versions
Daniele Varrazzo [Tue, 24 Oct 2023 18:14:59 +0000 (19:14 +0100)]
Merge pull request #670 from psycopg/fix-667
Handle gracefully EINTR on signals instead of raising InterruptedError
Daniele Varrazzo [Tue, 24 Oct 2023 09:19:36 +0000 (11:19 +0200)]
fix: retry automatically syscall in wait_c if it fails with EINTR
Fix #667
Daniele Varrazzo [Tue, 24 Oct 2023 08:50:40 +0000 (10:50 +0200)]
test: add test to generate an EINTR in wait_c
Martin Weinelt [Mon, 23 Oct 2023 22:54:18 +0000 (00:54 +0200)]
Mark test_identify_closure as timing-sensitive
```
____________________________ test_identify_closure _____________________________
conn_cls = <class 'psycopg.Connection'>, dsn = 'host=127.0.0.1 user=psycopg'
@pytest.mark.crdb_skip("pg_terminate_backend")
@pytest.mark.slow
def test_identify_closure(conn_cls, dsn):
def closer():
time.sleep(0.2)
conn2.execute("select pg_terminate_backend(%s)", [conn.pgconn.backend_pid])
conn = conn_cls.connect(dsn)
conn2 = conn_cls.connect(dsn)
try:
t = threading.Thread(target=closer)
t.start()
t0 = time.time()
try:
with pytest.raises(psycopg.OperationalError):
conn.execute("select pg_sleep(1.0)")
t1 = time.time()
> assert 0.2 < t1 - t0 < 0.4
E assert 0.2 < (
1697715164 .
8614173 -
1697715164 .
6617775 )
tests/test_concurrency.py:231: AssertionError
```
Denis Laxalde [Wed, 18 Oct 2023 08:35:50 +0000 (10:35 +0200)]
chore: use AnyIO 4.0+ in tests dependencies
We set the 'loop_factory' asyncio option for parametrizing the
anyio_backend() fixture as anyio 4.0 has replaced the 'policy' option by
'loop_factory'.
In tests/pool/test_pool_async_noasyncio.py, we previously used
the anyio_backend_options fixture to retrieve the loop policy; now we
build it directly. This could be improved by using the loop_factory, but
only from Python 3.11 with an asyncio.Runner().
Daniele Varrazzo [Sat, 14 Oct 2023 07:59:57 +0000 (09:59 +0200)]
refactor(pool): more logical ordering for kwargs
- conn construction params (class, kwargs, the class affects the pool
type annotations so first is better);
- sizing (documented as an important parameter for the pool);
- open?
- callbacks (in the order they are used);
- name;
- other details more unlikely to be touched.
The order is the same in docs and code.
Daniele Varrazzo [Sat, 14 Oct 2023 07:45:52 +0000 (09:45 +0200)]
Merge branch 'pool-getconn-safe'
Daniele Varrazzo [Sat, 7 Oct 2023 02:16:43 +0000 (04:16 +0200)]
docs(pool): document check callback, drop previous recipes and rants
Daniele Varrazzo [Fri, 6 Oct 2023 16:31:52 +0000 (18:31 +0200)]
test(pool): add tests to verify check on getconn's behaviour
Daniele Varrazzo [Fri, 6 Oct 2023 16:30:18 +0000 (18:30 +0200)]
fix(pool): clean up logging in getconn check
If a check callback is set, assume that failed checks on getconn are
just part of normal operative life: don't consider them warnings.
Daniele Varrazzo [Fri, 6 Oct 2023 13:15:04 +0000 (15:15 +0200)]
feat(pool): add `check` connection parameter
Allow to specify a callback to call on getconn and discard the
connection if not in working state.
Daniele Varrazzo [Fri, 6 Oct 2023 13:13:39 +0000 (15:13 +0200)]
feat(pool): add `check_connection()` method
The method is public, will be documented as available to use as check
parameter, but also used internally by the `check()` method.
Daniele Varrazzo [Fri, 6 Oct 2023 11:00:41 +0000 (13:00 +0200)]
refactor(pool): introduce a loop in getconn to allow connection check
Daniele Varrazzo [Sat, 14 Oct 2023 07:40:00 +0000 (09:40 +0200)]
Merge branch 'pool-warn-implicit-open'
Daniele Varrazzo [Fri, 13 Oct 2023 23:51:11 +0000 (01:51 +0200)]
docs(pool): warn about future behaviour changes of open on init
Daniele Varrazzo [Sun, 8 Oct 2023 18:43:47 +0000 (20:43 +0200)]
feat(pool): raise a warning if async pools are open in the constructor
Daniele Varrazzo [Sat, 7 Oct 2023 22:01:57 +0000 (00:01 +0200)]
feat(pool) raise a warning if the pool is expected to be opened implicitly
Daniele Varrazzo [Wed, 11 Oct 2023 23:06:47 +0000 (01:06 +0200)]
refactor: define conn_encoding on pgconn_encoding
Also more consistent use of the two functions throughout the codebase.
Daniele Varrazzo [Fri, 13 Oct 2023 23:52:05 +0000 (01:52 +0200)]
chore: move codespell configuration to toml file
Configuration tweaked to avoid files commonly found in dev environments.
Daniele Varrazzo [Sun, 8 Oct 2023 17:31:07 +0000 (19:31 +0200)]
style(pool): more explicit error message for pool open with no loop
Daniele Varrazzo [Fri, 13 Oct 2023 22:52:36 +0000 (00:52 +0200)]
Merge branch 'async-to-sync'
Daniele Varrazzo [Fri, 13 Oct 2023 22:49:51 +0000 (23:49 +0100)]
Merge pull request #660 from dlax/async-to-sync
improvements to tools/async_to_sync.py
Denis Laxalde [Fri, 13 Oct 2023 07:40:09 +0000 (09:40 +0200)]
refactor: allow to use podman container engine in async_to_sync.py
Daniele Varrazzo [Fri, 13 Oct 2023 14:04:12 +0000 (16:04 +0200)]
feat(tools): warn about the Python version used in async-to-sync
Notify the user that they may get spurious results.
Denis Laxalde [Fri, 13 Oct 2023 07:36:28 +0000 (09:36 +0200)]
fix(tools): remove mention of dropped shell script in async_to_sync.py
Denis Laxalde [Fri, 13 Oct 2023 06:51:54 +0000 (08:51 +0200)]
refactor: use text mode for subprocess in async_to_sync.py
Denis Laxalde [Fri, 13 Oct 2023 06:54:01 +0000 (08:54 +0200)]
refactor: replace 'git ls-files' + 'grep' by a single 'git grep'
Daniele Varrazzo [Fri, 13 Oct 2023 01:35:26 +0000 (03:35 +0200)]
chore: use Python 3.11 to conver async to sync
Daniele Varrazzo [Fri, 13 Oct 2023 01:22:04 +0000 (03:22 +0200)]
chore: add option to run async_to_sync in a docker image
This allows to specify which Python version to use for the conversion
(even when it's not installed on the machine).
Daniele Varrazzo [Fri, 13 Oct 2023 00:19:03 +0000 (02:19 +0200)]
refactor: drop 'convert_async_to_sync.sh' script
Do all in 'async_to_sync.py:' added --all and --check options.
Daniele Varrazzo [Wed, 11 Oct 2023 11:30:46 +0000 (13:30 +0200)]
test: drop unneeded raise on pytest.skip()
Daniele Varrazzo [Sun, 8 Oct 2023 13:55:31 +0000 (15:55 +0200)]
refactor(test): uniform the way sync/async-only tests are skipped
Add @skip_sync, @skip_async markers to mark the functions to skip.
Daniele Varrazzo [Sun, 8 Oct 2023 10:33:47 +0000 (12:33 +0200)]
test: add check to verify the completeness of convert_async_to_sync
Verify that all the files commented as having been automatically
converted are actually included in the script converting them.
Daniele Varrazzo [Sun, 8 Oct 2023 09:55:58 +0000 (11:55 +0200)]
style: more care in the docstring mentioning sync/async versions of the code
Daniele Varrazzo [Sun, 8 Oct 2023 09:45:28 +0000 (11:45 +0200)]
refactor(pool): define scheduler task as dataclass
Daniele Varrazzo [Sun, 8 Oct 2023 09:02:23 +0000 (11:02 +0200)]
refactor(async_to_sync): create new object without listing all the attributes
Daniele Varrazzo [Sun, 8 Oct 2023 08:32:29 +0000 (10:32 +0200)]
style(pool): use `pass` instead of `return` for empty methods
Daniele Varrazzo [Sun, 8 Oct 2023 08:30:26 +0000 (09:30 +0100)]
docs: fix typos/grammar
Co-authored-by: Daniel Fortunov <asqui@users.noreply.github.com>
Daniele Varrazzo [Fri, 6 Oct 2023 10:58:49 +0000 (12:58 +0200)]
refactor(copy): generate sync code from async
Daniele Varrazzo [Thu, 5 Oct 2023 23:58:54 +0000 (01:58 +0200)]
refactor(test): add acompat module
Daniele Varrazzo [Fri, 6 Oct 2023 13:02:50 +0000 (15:02 +0200)]
feat(tools): allow to specify the files to convert async to sync