Commit a6205ef
askvorcov
fix mongo: deadline propagation stale snapshot on connection creation
When a new MongoDB connection needs to be created (no idle connections in pool),
Create() runs a ping to MongoDB without any deadline enforcement — it is bounded
only by SOCKETTIMEOUTMS from the URI config (typically several seconds).
Meanwhile, MakeRequestContext() captures the remaining deadline as a snapshot
*before* calling GetClient(), so if Create() takes several seconds the snapshot
becomes stale. The stale value is then used as maxTimeMS for the actual query,
causing requests to run far beyond the original deadline.
Example: deadline=999ms, Create() takes ~6.9s ping, then query runs another
999ms → total 7.883s with "operation exceeded time limit" from MongoDB.
Fix in collection_impl.cpp: After GetClient() returns, re-evaluate the
remaining deadline with a fresh GetDeadlineTimeLeft() call. If the deadline has
already expired, throw CancelledException immediately. Pass the fresh value as
inherited_deadline so maxTimeMS is computed correctly.
commit_hash:6a4eeb4aa39628bf4bae31a00048927e735e0a3c1 parent 86a10ab commit a6205ef
3 files changed
Lines changed: 68 additions & 10 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
134 | 134 | | |
135 | 135 | | |
136 | 136 | | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
137 | 151 | | |
138 | 152 | | |
139 | 153 | | |
| |||
616 | 630 | | |
617 | 631 | | |
618 | 632 | | |
619 | | - | |
620 | | - | |
621 | | - | |
622 | | - | |
623 | | - | |
624 | | - | |
625 | | - | |
626 | | - | |
627 | | - | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
628 | 637 | | |
629 | 638 | | |
630 | 639 | | |
631 | 640 | | |
632 | 641 | | |
633 | 642 | | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
634 | 649 | | |
635 | 650 | | |
636 | 651 | | |
637 | 652 | | |
638 | 653 | | |
639 | 654 | | |
640 | | - | |
| 655 | + | |
641 | 656 | | |
642 | 657 | | |
643 | 658 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
495 | 495 | | |
496 | 496 | | |
497 | 497 | | |
| 498 | + | |
498 | 499 | | |
499 | 500 | | |
500 | 501 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
| 6 | + | |
| 7 | + | |
5 | 8 | | |
6 | 9 | | |
7 | 10 | | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
| 14 | + | |
11 | 15 | | |
12 | 16 | | |
13 | 17 | | |
| |||
84 | 88 | | |
85 | 89 | | |
86 | 90 | | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 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 | + | |
87 | 129 | | |
0 commit comments