Commit c8f936b
authored
fix(sessions): resolve async deadlock in multiplexed session manager (#1520)
This PR resolves a critical deadlock issue when acquiring or maintaining
a multiplexed session asynchronously.
The bug occurs because DatabaseSessionsManager previously used a
synchronous threading.Lock around self._get_multiplexed_session() and
_maintain_multiplexed_session(). When a thread attempts to await the
multiplexed session creation (return await ...) while holding a
synchronous thread lock, the entire asyncio event loop becomes blocked
for any other coroutine trying to access the lock.1 parent f822fd7 commit c8f936bCopy full SHA for c8f936b
12 files changed
+113-48Lines changed: 113 additions & 48 deletions
File tree
Expand file treeCollapse file tree
Open diff view settings
Filter options
- packages/google-cloud-spanner
- google/cloud/spanner_v1
- _async
- tests/unit
- _async
Expand file treeCollapse file tree
Open diff view settings
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/_async/database_sessions_manager.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/_async/database_sessions_manager.py+13-6Lines changed: 13 additions & 6 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
71 | 71 | |
72 | 72 | |
73 | 73 | |
74 | | - |
75 | | - |
76 | | - |
| 74 | + |
| 75 | + |
| 76 | + |
77 | 77 | |
78 | 78 | |
79 | 79 | |
| ||
119 | 119 | |
120 | 120 | |
121 | 121 | |
122 | | - |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | + |
| 126 | + |
| 127 | + |
| 128 | + |
123 | 129 | |
124 | 130 | |
125 | 131 | |
| ||
193 | 199 | |
194 | 200 | |
195 | 201 | |
196 | | - |
| 202 | + |
197 | 203 | |
198 | 204 | |
199 | 205 | |
| ||
220 | 226 | |
221 | 227 | |
222 | 228 | |
223 | | - |
| 229 | + |
| 230 | + |
224 | 231 | |
225 | 232 | |
226 | 233 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/batch.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/batch.py+1-1Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
243 | 243 | |
244 | 244 | |
245 | 245 | |
246 | | - |
| 246 | + |
247 | 247 | |
248 | 248 | |
249 | 249 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/database.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/database.py+5-8Lines changed: 5 additions & 8 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
82 | 82 | |
83 | 83 | |
84 | 84 | |
85 | | - |
86 | 85 | |
87 | 86 | |
88 | 87 | |
| ||
211 | 210 | |
212 | 211 | |
213 | 212 | |
214 | | - |
215 | | - |
216 | | - |
217 | | - |
218 | | - |
| 213 | + |
| 214 | + |
| 215 | + |
219 | 216 | |
220 | 217 | |
221 | 218 | |
| ||
533 | 530 | |
534 | 531 | |
535 | 532 | |
536 | | - |
| 533 | + |
537 | 534 | |
538 | 535 | |
539 | 536 | |
| ||
810 | 807 | |
811 | 808 | |
812 | 809 | |
813 | | - |
| 810 | + |
814 | 811 | |
815 | 812 | |
816 | 813 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/database_sessions_manager.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/database_sessions_manager.py+12-5Lines changed: 12 additions & 5 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
69 | 69 | |
70 | 70 | |
71 | 71 | |
72 | | - |
73 | | - |
74 | | - |
75 | | - |
| 72 | + |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | + |
76 | 77 | |
77 | 78 | |
78 | 79 | |
| ||
115 | 116 | |
116 | 117 | |
117 | 118 | |
| 119 | + |
| 120 | + |
| 121 | + |
| 122 | + |
| 123 | + |
118 | 124 | |
119 | 125 | |
120 | 126 | |
| ||
205 | 211 | |
206 | 212 | |
207 | 213 | |
208 | | - |
| 214 | + |
| 215 | + |
209 | 216 | |
210 | 217 | |
211 | 218 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/instance.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/instance.py+3-1Lines changed: 3 additions & 1 deletion
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
479 | 479 | |
480 | 480 | |
481 | 481 | |
482 | | - |
| 482 | + |
| 483 | + |
| 484 | + |
483 | 485 | |
484 | 486 | |
485 | 487 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/pool.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/pool.py+5-7Lines changed: 5 additions & 7 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
304 | 304 | |
305 | 305 | |
306 | 306 | |
307 | | - |
| 307 | + |
308 | 308 | |
309 | 309 | |
310 | 310 | |
| ||
612 | 612 | |
613 | 613 | |
614 | 614 | |
615 | | - |
| 615 | + |
616 | 616 | |
617 | 617 | |
618 | 618 | |
| ||
654 | 654 | |
655 | 655 | |
656 | 656 | |
657 | | - |
| 657 | + |
658 | 658 | |
659 | 659 | |
660 | 660 | |
| ||
698 | 698 | |
699 | 699 | |
700 | 700 | |
701 | | - |
702 | | - |
703 | | - |
| 701 | + |
704 | 702 | |
705 | 703 | |
706 | 704 | |
| ||
713 | 711 | |
714 | 712 | |
715 | 713 | |
716 | | - |
| 714 | + |
717 | 715 | |
718 | 716 | |
719 | 717 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/session.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/session.py+4-4Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
188 | 188 | |
189 | 189 | |
190 | 190 | |
191 | | - |
| 191 | + |
192 | 192 | |
193 | 193 | |
194 | 194 | |
| ||
232 | 232 | |
233 | 233 | |
234 | 234 | |
235 | | - |
| 235 | + |
236 | 236 | |
237 | 237 | |
238 | 238 | |
| ||
283 | 283 | |
284 | 284 | |
285 | 285 | |
286 | | - |
| 286 | + |
287 | 287 | |
288 | 288 | |
289 | 289 | |
| ||
300 | 300 | |
301 | 301 | |
302 | 302 | |
303 | | - |
| 303 | + |
304 | 304 | |
305 | 305 | |
306 | 306 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/snapshot.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/snapshot.py+3-3Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
322 | 322 | |
323 | 323 | |
324 | 324 | |
325 | | - |
| 325 | + |
326 | 326 | |
327 | 327 | |
328 | 328 | |
| ||
513 | 513 | |
514 | 514 | |
515 | 515 | |
516 | | - |
| 516 | + |
517 | 517 | |
518 | 518 | |
519 | 519 | |
| ||
614 | 614 | |
615 | 615 | |
616 | 616 | |
617 | | - |
| 617 | + |
618 | 618 | |
619 | 619 | |
620 | 620 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/streamed.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/streamed.py+4-4Lines changed: 4 additions & 4 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
147 | 147 | |
148 | 148 | |
149 | 149 | |
150 | | - |
| 150 | + |
151 | 151 | |
152 | 152 | |
153 | 153 | |
| ||
230 | 230 | |
231 | 231 | |
232 | 232 | |
233 | | - |
| 233 | + |
234 | 234 | |
235 | 235 | |
236 | 236 | |
| ||
291 | 291 | |
292 | 292 | |
293 | 293 | |
294 | | - |
| 294 | + |
295 | 295 | |
296 | 296 | |
297 | 297 | |
| ||
316 | 316 | |
317 | 317 | |
318 | 318 | |
319 | | - |
| 319 | + |
320 | 320 | |
321 | 321 | |
322 | 322 | |
|
Collapse file
packages/google-cloud-spanner/google/cloud/spanner_v1/transaction.py
Copy file name to clipboardExpand all lines: packages/google-cloud-spanner/google/cloud/spanner_v1/transaction.py+9-9Lines changed: 9 additions & 9 deletions
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
162 | 162 | |
163 | 163 | |
164 | 164 | |
165 | | - |
| 165 | + |
166 | 166 | |
167 | 167 | |
168 | 168 | |
| ||
269 | 269 | |
270 | 270 | |
271 | 271 | |
272 | | - |
| 272 | + |
273 | 273 | |
274 | 274 | |
275 | 275 | |
| ||
300 | 300 | |
301 | 301 | |
302 | 302 | |
303 | | - |
| 303 | + |
304 | 304 | |
305 | 305 | |
306 | 306 | |
| ||
338 | 338 | |
339 | 339 | |
340 | 340 | |
341 | | - |
| 341 | + |
342 | 342 | |
343 | 343 | |
344 | 344 | |
| ||
417 | 417 | |
418 | 418 | |
419 | 419 | |
420 | | - |
| 420 | + |
421 | 421 | |
422 | 422 | |
423 | 423 | |
| ||
454 | 454 | |
455 | 455 | |
456 | 456 | |
457 | | - |
| 457 | + |
458 | 458 | |
459 | 459 | |
460 | 460 | |
| ||
544 | 544 | |
545 | 545 | |
546 | 546 | |
547 | | - |
| 547 | + |
548 | 548 | |
549 | 549 | |
550 | 550 | |
| ||
556 | 556 | |
557 | 557 | |
558 | 558 | |
559 | | - |
| 559 | + |
560 | 560 | |
561 | 561 | |
562 | 562 | |
| ||
590 | 590 | |
591 | 591 | |
592 | 592 | |
593 | | - |
| 593 | + |
594 | 594 | |
595 | 595 | |
596 | 596 | |
|
0 commit comments