This repository was archived by the owner on Aug 19, 2025. It is now read-only.
Commit 25fa295
fix: incorrect concurrent usage of connection and transaction (#546)
* fix: incorrect concurrent usage of connection and transaction
* refactor: rename contextvar class attributes, add some explaination comments
* fix: contextvar.get takes no keyword arguments
* test: add concurrent task tests
* feat: use ContextVar[dict] to track connections and transactions per task
* test: check multiple databases in the same task use independant connections
* chore: changes for linting and typechecking
* chore: use typing.Tuple for lower python version compatibility
* docs: update comment on _connection_contextmap
* Update `Connection` and `Transaction` to be robust to concurrent use
* chore: remove optional annotation on asyncio.Task
* test: add new tests for upcoming contextvar inheritance/isolation and weakref cleanup
* feat: reimplement concurrency system with contextvar and weakmap
* chore: apply corrections from linters
* fix: quote WeakKeyDictionary typing for python<=3.7
* docs: add examples for async transaction context and nested transactions
* fix: remove connection inheritance, add more tests, update docs
Connections are once again stored as state on the Database instance,
keyed by the current asyncio.Task. Each task acquires it's own
connection, and a WeakKeyDictionary allows the connection to be
discarded if the owning task is garbage collected. TransactionBackends
are still stored as contextvars, and a connection must be explicitly
provided to descendant tasks if active transaction state is to be
inherited.
---------
Co-authored-by: Zanie <[email protected]>1 parent c095428 commit 25fa295
File tree
3 files changed
+521
-35
lines changed- databases
- docs
- tests
3 files changed
+521
-35
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
14 | | - | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
38 | 44 | | |
39 | 45 | | |
40 | 46 | | |
| |||
45 | 51 | | |
46 | 52 | | |
47 | 53 | | |
| 54 | + | |
| 55 | + | |
48 | 56 | | |
49 | 57 | | |
50 | 58 | | |
| |||
55 | 63 | | |
56 | 64 | | |
57 | 65 | | |
| 66 | + | |
58 | 67 | | |
59 | 68 | | |
60 | 69 | | |
| |||
63 | 72 | | |
64 | 73 | | |
65 | 74 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | 75 | | |
70 | 76 | | |
71 | 77 | | |
72 | 78 | | |
73 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
74 | 104 | | |
75 | 105 | | |
76 | 106 | | |
| |||
89 | 119 | | |
90 | 120 | | |
91 | 121 | | |
92 | | - | |
| 122 | + | |
93 | 123 | | |
94 | 124 | | |
95 | 125 | | |
| |||
113 | 143 | | |
114 | 144 | | |
115 | 145 | | |
116 | | - | |
| 146 | + | |
117 | 147 | | |
118 | 148 | | |
119 | 149 | | |
| |||
187 | 217 | | |
188 | 218 | | |
189 | 219 | | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
196 | 224 | | |
197 | 225 | | |
198 | 226 | | |
| |||
215 | 243 | | |
216 | 244 | | |
217 | 245 | | |
218 | | - | |
| 246 | + | |
| 247 | + | |
219 | 248 | | |
220 | 249 | | |
221 | 250 | | |
| |||
249 | 278 | | |
250 | 279 | | |
251 | 280 | | |
| 281 | + | |
252 | 282 | | |
253 | 283 | | |
254 | 284 | | |
| |||
345 | 375 | | |
346 | 376 | | |
347 | 377 | | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
348 | 409 | | |
349 | 410 | | |
350 | 411 | | |
| |||
385 | 446 | | |
386 | 447 | | |
387 | 448 | | |
388 | | - | |
389 | 449 | | |
390 | 450 | | |
391 | 451 | | |
| |||
401 | 461 | | |
402 | 462 | | |
403 | 463 | | |
| 464 | + | |
404 | 465 | | |
405 | 466 | | |
| 467 | + | |
406 | 468 | | |
407 | 469 | | |
408 | 470 | | |
409 | 471 | | |
410 | 472 | | |
| 473 | + | |
411 | 474 | | |
412 | 475 | | |
| 476 | + | |
413 | 477 | | |
414 | 478 | | |
415 | 479 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
26 | 28 | | |
27 | 29 | | |
28 | 30 | | |
| |||
67 | 69 | | |
68 | 70 | | |
69 | 71 | | |
| 72 | + | |
70 | 73 | | |
71 | 74 | | |
72 | 75 | | |
| |||
95 | 98 | | |
96 | 99 | | |
97 | 100 | | |
98 | | - | |
99 | | - | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
100 | 146 | | |
101 | 147 | | |
102 | 148 | | |
| |||
0 commit comments